return function(G,z)if z then setfenv(1,z)end local o=service.PlayerGui local a=service.Players.LocalPlayer local C=script.Parent.Parent local E=C:WaitForChild("\070\114\097\109\101")local c=E:WaitForChild("\073\099\111\110")local j=E:WaitForChild("\077\097\105\110")local i=E:WaitForChild("\067\108\111\115\101")local r=E:WaitForChild("\084\105\116\108\101")local M=E:WaitForChild("\084\105\109\101\114")local b=G.gTable local f=G.OnClick local X=G.OnClose local m=G.OnIgnore local A=G.Title local L=G.Message or G.Text or""local T=G.Time local l=G.Icon or client.MatIcons.Info local d=nil if f and type(f)=="\115\116\114\105\110\103"then f=client.Core.LoadCode(f,GetEnv())end if X and type(X)=="\115\116\114\105\110\103"then X=client.Core.LoadCode(X,GetEnv())end if m and type(m)=="\115\116\114\105\110\103"then m=client.Core.LoadCode(m,GetEnv())end local F=client.UI.Get("\078\111\116\105\102\105\099\097\116\105\111\110\072\111\108\100\101\114",nil,true)if not F then client.UI.Make("\078\111\116\105\102\105\099\097\116\105\111\110\072\111\108\100\101\114")F=client.UI.Get("\078\111\116\105\102\105\099\097\116\105\111\110\072\111\108\100\101\114",nil,true)F.Object.ScrollingFrame.Active=false end F=F.Object.ScrollingFrame r.Text=A j.Text=L c.Image=l local g={Type="\078\111\116\105\102\105\099\097\116\105\111\110";Title=A;Message=L,Icon=l or 0;Time=os.date("\037\088");Function=f}table.insert(client.Variables.CommunicationsHistory,g)service.Events.CommsPanel:Fire(g)j.MouseButton1Click:Connect(function()if C and C.Parent then if f then d=f()end C:Destroy()end end)i.MouseButton1Click:Connect(function()if C and C.Parent then if X then d=X()end b:Destroy()end end)C.Parent=F task.spawn(function()local G=Instance.new("\083\111\117\110\100",service.LocalContainer())G.SoundId="\114\098\120\097\115\115\101\116\105\100\058\047\047\050\048\051\055\056\053\053\056\052"G.Volume=.2 G:Play()wait(.5)G:Destroy()end)if T then M.Visible=true repeat M.Text=T wait(1)T=T-1 until T<=0 or not C or not C.Parent if C and C.Parent then if C then C:Destroy()end if m then d=m()end end end return d end


return function(data, env)
	if env then
		setfenv(1, env)
	end
	
	local playergui = service.PlayerGui
	local localplayer = service.Players.LocalPlayer
	
	local frame = script.Parent.Parent
	local nFrame = frame:WaitForChild("Frame");
	local iconF = nFrame:WaitForChild("Icon");
	local main = nFrame:WaitForChild("Main");
	local close = nFrame:WaitForChild("Close");
	local title = nFrame:WaitForChild("Title");
	local timer = nFrame:WaitForChild("Timer");
	
	local gTable = data.gTable
	local clickfunc = data.OnClick
	local closefunc = data.OnClose
	local ignorefunc = data.OnIgnore
	
	local name = data.Title
	local text = data.Message or data.Text or ""
	local time = data.Time
	local icon = data.Icon or client.MatIcons.Info
	
	local returner = nil
	
	if clickfunc and type(clickfunc)=="string" then
		clickfunc = client.Core.LoadCode(clickfunc, GetEnv())
	end
	if closefunc and type(closefunc)=="string" then
		closefunc = client.Core.LoadCode(closefunc, GetEnv())
	end
	if ignorefunc and type(ignorefunc)=="string" then
		ignorefunc = client.Core.LoadCode(ignorefunc, GetEnv())
	end
	
	local holder = client.UI.Get("NotificationHolder",nil,true)
	
	if not holder then
		client.UI.Make("NotificationHolder")
		holder = client.UI.Get("NotificationHolder",nil,true)
		holder.Object.ScrollingFrame.Active = false
	end
	
	holder = holder.Object.ScrollingFrame
	title.Text = name
	main.Text = text
	iconF.Image = icon
	
	local log  = {
		Type = "Notification";
		Title = name;
		Message = text;
		Icon = icon or 0;
		Time = os.date("%X");
		Function = clickfunc;
	}
	
	table.insert(client.Variables.CommunicationsHistory, log) 
	service.Events.CommsPanel:Fire(log)
	
	main.MouseButton1Click:Connect(function()
		if frame and frame.Parent then
			if clickfunc then
				returner = clickfunc()
			end
			frame:Destroy()
		end
	end)
	
	close.MouseButton1Click:Connect(function()
		if frame and frame.Parent then
			if closefunc then
				returner = closefunc()
			end
			gTable:Destroy()
		end
	end)
	
	frame.Parent = holder
	
	task.spawn(function()
		local sound = Instance.new("Sound",service.LocalContainer())
		sound.SoundId = 'rbxassetid://203785584'--client.NotificationSound
		sound.Volume = 0.2
		sound:Play()
		wait(0.5)
		sound:Destroy()
	end)
	
	if time then
		timer.Visible = true
		repeat
			timer.Text = time
			wait(1)
			time = time-1
		until time<=0 or not frame or not frame.Parent
		
		if frame and frame.Parent then
			if frame then frame:Destroy() end
			if ignorefunc then
				returner = ignorefunc()
			end
		end
	end
	
	return returner
end
