loadstring(" function LPH_NO_VIRTUALIZE(f) return f end;\n")() local a =cloneref or function(a) return a end local b,c,d,e,f,g,h,i,j,k,l =a(game:GetService("TweenService")),a(game:GetService("UserInputService")),a(game:GetService("Players")),a(game:GetService("CoreGui")),setclipboard or toclipboard or set_clipboard or (Clipboard and Clipboard.set),getgenv or function() return shared end,"https://discord.com/invite/wcprsvmcp8","https://kittyhub.org/getkey",loadstring(game:HttpGet("https://sdkapi-public.luarmor.net/library.lua"))(),{[9398825993] ="ea66750a7dec4c5b90ebfe77ebcfb4f2",[7660190629] ="767f9234a05e253e83742b660a166207",[10032271327] ="4c90a1400c94eab78c9ee233a887e242",[10004760418] ="87542b85597304dc62b15ee5889a73be",[10045085816] ="78fb8392cc20720ef3eacf2b97e65647",[9797806474] ="f48d09009b8ad0e503ac7bd985f64018",[9848850974] ="3feb13e654a579edb62d5b9f4ff00591", [10412756981] ="afc65c98be659faa0c05f1ac04e760a0"},"" local m,n =k[game.GameId] or l,"kitty/kitty_Key.txt" if m =="" then print("[Kitty Hub] Game not supported!") return end local function getSavedKey() if not isfile then return nil end local o,p =pcall(function() if isfile(n) then return readfile(n) end return nil end) if o and p and #p >5 then return p end return nil end local function saveKey(o) if not writefile then return end pcall(function() writefile(n,o) end) end local function deleteSavedKey() if not delfile then return end pcall(function() if isfile and isfile(n) then delfile(n) end end) end local function tryAutoAuth() local o,p =script_key or _G.script_key or _G["%USER_KEY%"] or g().script_key or _G.LuarmorKey or _G.luarmor_key,getSavedKey() if type(o) ~="string" then o =nil end if type(p) ~="string" then p =nil end if o and (o:find("%%") or #o <10) then o =nil end local q =o or p if not q or #q <10 then return false end j.script_id =m local r,s =pcall(function() return j.check_key(q) end) if not r or not s then return false end if s.code =="KEY_VALID" then g().script_key =q saveKey(q) j.load_script() return true else deleteSavedKey() return false end end if tryAutoAuth() then return end local function randomName(o) local p,q ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789","" for r =1,o or 12 do local s =math.random(1,#p) q =q ..p:sub(s,s) end return q end local o,p ="kitty/Kitty.png",nil if writefile and isfile and getcustomasset then pcall(function() if not isfile(o) then writefile(o,game:HttpGet("https://kittyhub.org/images/Kitty.png")) end p =getcustomasset(o) end) end local q =Instance.new("ScreenGui") q.Name =randomName(16) if protect_gui then protect_gui(q) end q.Parent =e q.ZIndexBehavior =Enum.ZIndexBehavior.Sibling q.ResetOnSpawn =false local r =Instance.new("Frame") r.Name =randomName(12) r.Parent =q r.AnchorPoint =Vector2.new(0.5,0.5) r.BackgroundColor3 =Color3.fromRGB(16,16,22) r.BackgroundTransparency =0.15 r.Position =UDim2.new(0.5,0,0.5,0) r.Size =UDim2.new(0,400,0,240) Instance.new("UICorner",r).CornerRadius =UDim.new(0,12) local s =Instance.new("UIStroke") s.Color =Color3.fromRGB(170,50,90) s.Thickness =1.5 s.Transparency =0.5 s.Parent =r local t =Instance.new("Frame") t.Name =randomName(8) t.Parent =r t.BackgroundTransparency =1 t.Size =UDim2.new(1,0,1,0) t.ZIndex =0 for u =1,3 do local v =Instance.new("Frame") v.Name =randomName(6) v.Parent =t v.AnchorPoint =Vector2.new(0.5,0.5) v.BackgroundColor3 =Color3.fromRGB(0,0,0) v.BackgroundTransparency =0.88 +(u *0.03) v.Position =UDim2.new(0.5,0,0.5,u *2) v.Size =UDim2.new(1,u *4,1,u *4) v.ZIndex =0 Instance.new("UICorner",v).CornerRadius =UDim.new(0,12 +u) end local u =Instance.new("ImageLabel") u.Name =randomName(8) u.Parent =r u.BackgroundTransparency =1 u.Position =UDim2.new(0,18,0,11) u.Size =UDim2.new(0,32,0,32) u.Image =p or "" u.ScaleType =Enum.ScaleType.Fit local v =Instance.new("TextLabel") v.Name =randomName(8) v.Parent =r v.BackgroundTransparency =1 v.Position =UDim2.new(0,56,0,14) v.Size =UDim2.new(0,200,0,26) v.Font =Enum.Font.GothamBlack v.Text ="Kitty Hub" v.TextColor3 =Color3.fromRGB(255,255,255) v.TextSize =20 v.TextXAlignment =Enum.TextXAlignment.Left local w =Instance.new("TextButton") w.Name =randomName(8) w.Parent =r w.BackgroundTransparency =1 w.Position =UDim2.new(1,-32,0,10) w.Size =UDim2.new(0,20,0,20) w.Font =Enum.Font.GothamBold w.Text ="X" w.TextColor3 =Color3.fromRGB(120,120,140) w.TextSize =14 w.AutoButtonColor =false local x =Instance.new("TextLabel") x.Name =randomName(8) x.Parent =r x.BackgroundTransparency =1 x.Position =UDim2.new(0,20,0,48) x.Size =UDim2.new(1,-40,0,26) x.Font =Enum.Font.Gotham x.Text ="Having trouble getting a key or checking your key?\nJoin our Discord server for assistance!" x.TextColor3 =Color3.fromRGB(120,120,140) x.TextSize =11 x.TextWrapped =true x.TextXAlignment =Enum.TextXAlignment.Left x.TextYAlignment =Enum.TextYAlignment.Top x.LineHeight =1.2 local y =Instance.new("Frame") y.Name =randomName(8) y.Parent =r y.BackgroundColor3 =Color3.fromRGB(26,26,34) y.Position =UDim2.new(0,20,0,76) y.Size =UDim2.new(1,-40,0,38) Instance.new("UICorner",y).CornerRadius =UDim.new(0,8) local z =Instance.new("UIStroke") z.Color =Color3.fromRGB(50,50,65) z.Parent =y local A =Instance.new("TextBox") A.Name =randomName(8) A.Parent =y A.BackgroundTransparency =1 A.Position =UDim2.new(0,12,0,0) A.Size =UDim2.new(1,-24,1,0) A.Font =Enum.Font.Gotham A.PlaceholderColor3 =Color3.fromRGB(85,85,105) A.PlaceholderText ="Enter your key here..." A.Text ="" A.TextColor3 =Color3.fromRGB(255,255,255) A.TextSize =13 A.TextXAlignment =Enum.TextXAlignment.Left local B =Instance.new("TextButton") B.Name =randomName(8) B.Parent =r B.BackgroundColor3 =Color3.fromRGB(170,50,90) B.BackgroundTransparency =0.4 B.Position =UDim2.new(0,20,0,122) B.Size =UDim2.new(1,-40,0,36) B.Font =Enum.Font.GothamBold B.Text ="Check Key" B.TextColor3 =Color3.fromRGB(255,255,255) B.TextSize =13 B.AutoButtonColor =false Instance.new("UICorner",B).CornerRadius =UDim.new(0,8) local C =Instance.new("UIStroke") C.Color =Color3.fromRGB(85,85,85) C.Transparency =0.3 C.Parent =B local D =Instance.new("TextLabel") D.Name =randomName(8) D.Parent =r D.BackgroundTransparency =1 D.Position =UDim2.new(0,0,0,160) D.Size =UDim2.new(1,0,0,14) D.Font =Enum.Font.GothamMedium D.Text ="" D.TextColor3 =Color3.fromRGB(255,100,100) D.TextSize =10 local E =Instance.new("TextButton") E.Name =randomName(8) E.Parent =r E.BackgroundColor3 =Color3.fromRGB(170,50,90) E.BackgroundTransparency =0.4 E.Position =UDim2.new(0,20,0,178) E.Size =UDim2.new(0.5,-24,0,36) E.Font =Enum.Font.GothamBold E.Text ="Support" E.TextColor3 =Color3.fromRGB(255,255,255) E.TextSize =12 E.AutoButtonColor =false Instance.new("UICorner",E).CornerRadius =UDim.new(0,8) local F =Instance.new("UIStroke") F.Color =Color3.fromRGB(85,85,85) F.Transparency =0.3 F.Parent =E local G =Instance.new("TextButton") G.Name =randomName(8) G.Parent =r G.BackgroundColor3 =Color3.fromRGB(170,50,90) G.BackgroundTransparency =0.4 G.Position =UDim2.new(0.5,4,0,178) G.Size =UDim2.new(0.5,-24,0,36) G.Font =Enum.Font.GothamBold G.Text ="Get Key" G.TextColor3 =Color3.fromRGB(255,255,255) G.TextSize =12 G.AutoButtonColor =false Instance.new("UICorner",G).CornerRadius =UDim.new(0,8) local H =Instance.new("UIStroke") H.Color =Color3.fromRGB(85,85,85) H.Transparency =0.3 H.Parent =G local I,J,K,L r.InputBegan:Connect(function(M) if M.UserInputType ==Enum.UserInputType.MouseButton1 or M.UserInputType ==Enum.UserInputType.Touch then I =true K =M.Position L =r.Position M.Changed:Connect(function() if M.UserInputState ==Enum.UserInputState.End then I =false end end) end end) r.InputChanged:Connect(function(M) if M.UserInputType ==Enum.UserInputType.MouseMovement or M.UserInputType ==Enum.UserInputType.Touch then J =M end end) c.InputChanged:Connect(function(M) if M ==J and I then local N =M.Position -K r.Position =UDim2.new(L.X.Scale,L.X.Offset +N.X,L.Y.Scale,L.Y.Offset +N.Y) end end) local function tw(M,N,O) b:Create(M,TweenInfo.new(O or 0.15,Enum.EasingStyle.Quad),N):Play() end w.MouseEnter:Connect(function() tw(w,{TextColor3 =Color3.fromRGB(255,70,70)}) end) w.MouseLeave:Connect(function() tw(w,{TextColor3 =Color3.fromRGB(120,120,140)}) end) B.MouseEnter:Connect(function() tw(B,{BackgroundTransparency =0.2}) tw(C,{Transparency =0}) end) B.MouseLeave:Connect(function() tw(B,{BackgroundTransparency =0.4}) tw(C,{Transparency =0.3}) end) E.MouseEnter:Connect(function() tw(E,{BackgroundTransparency =0.2}) tw(F,{Transparency =0}) end) E.MouseLeave:Connect(function() tw(E,{BackgroundTransparency =0.4}) tw(F,{Transparency =0.3}) end) G.MouseEnter:Connect(function() tw(G,{BackgroundTransparency =0.2}) tw(H,{Transparency =0}) end) G.MouseLeave:Connect(function() tw(G,{BackgroundTransparency =0.4}) tw(H,{Transparency =0.3}) end) A.Focused:Connect(function() tw(z,{Color =Color3.fromRGB(170,50,90)}) tw(y,{BackgroundColor3 =Color3.fromRGB(32,32,42)}) end) A.FocusLost:Connect(function() tw(z,{Color =Color3.fromRGB(50,50,65)}) tw(y,{BackgroundColor3 =Color3.fromRGB(26,26,34)}) end) w.MouseButton1Click:Connect(function() tw(r,{Size =UDim2.new(0,0,0,0),BackgroundTransparency =1},0.2) task.wait(0.2) q:Destroy() end) E.MouseButton1Click:Connect(function() if f then f(h) end D.TextColor3 =Color3.fromRGB(87,242,135) D.Text ="Discord link copied!" task.delay(2,function() D.Text ="" end) end) G.MouseButton1Click:Connect(function() if f then f(i) end D.TextColor3 =Color3.fromRGB(87,242,135) D.Text ="Key link copied!" task.delay(2,function() D.Text ="" end) end) B.MouseButton1Click:Connect(function() local M =A.Text if M =="" or #M <10 then D.TextColor3 =Color3.fromRGB(255,100,100) D.Text ="Please enter a valid key!" return end D.TextColor3 =Color3.fromRGB(130,130,150) D.Text ="Validating..." j.script_id =m local N,O =pcall(function() return j.check_key(M) end) if not N then D.TextColor3 =Color3.fromRGB(255,100,100) D.Text ="Error checking key. Try again." return end if O.code =="KEY_VALID" then D.TextColor3 =Color3.fromRGB(87,242,135) tw(z,{Color =Color3.fromRGB(87,242,135)}) D.Text ="Key valid!" g().script_key =M saveKey(M) task.wait(1) D.Text ="Loading." task.wait(0.5) D.Text ="Loading.." task.wait(0.5) D.Text ="Loading..." task.wait(0.5) D.Text ="Full Loaded!" task.wait(1) tw(r,{Size =UDim2.new(0,0,0,0),BackgroundTransparency =1},0.3) task.wait(0.2) q:Destroy() j.load_script() return elseif O.code =="KEY_EXPIRED" then D.TextColor3 =Color3.fromRGB(255,100,100) D.Text ="Your key has expired! Please get a new key from the key page." elseif O.code =="KEY_BANNED" then D.TextColor3 =Color3.fromRGB(255,100,100) D.Text ="This key has been banned and cannot be used anymore." elseif O.code =="KEY_HWID_LOCKED" then D.TextColor3 =Color3.fromRGB(255,100,100) D.Text ="Key is locked to another device! Reset your HWID via the bot panel or get a new key." elseif O.code =="KEY_INCORRECT" then D.TextColor3 =Color3.fromRGB(255,100,100) D.Text ="This key does not exist! Double-check your key or get a new one." elseif O.code =="KEY_INVALID" then D.TextColor3 =Color3.fromRGB(255,100,100) D.Text ="Invalid key format! Key is empty, too short, or too long." elseif O.code =="SCRIPT_ID_INCORRECT" or O.code =="SCRIPT_ID_INVALID" then D.TextColor3 =Color3.fromRGB(255,100,100) D.Text ="Script configuration error - please contact support on Discord!" elseif O.code =="INVALID_EXECUTOR" then D.TextColor3 =Color3.fromRGB(255,100,100) D.Text ="Your executor is not supported! Try using a different executor." elseif O.code =="SECURITY_ERROR" then D.TextColor3 =Color3.fromRGB(255,100,100) D.Text ="Security validation failed! Request was blocked by Cloudflare." elseif O.code =="TIME_ERROR" then D.TextColor3 =Color3.fromRGB(255,100,100) D.Text ="Your system time is incorrect! Sync your clock and try again." elseif O.code =="UNKNOWN_ERROR" then D.TextColor3 =Color3.fromRGB(255,100,100) D.Text ="Server error! Try again later or contact support on Discord." else D.TextColor3 =Color3.fromRGB(255,100,100) D.Text ="Unknown error: " ..(O.message or O.code or "Unknown") .." - contact support!" end end) r.Size =UDim2.new(0,0,0,0) r.BackgroundTransparency =1 tw(r,{Size =UDim2.new(0,400,0,240),BackgroundTransparency =0.05},0.3)