return function()local U=game:GetService("\082\117\110\083\101\114\118\105\099\101")local k=(game:GetService("\080\108\097\121\101\114\115")).LocalPlayer.PlayerGui local z=require(game.ReplicatedStorage.Roact)local d=10 local m=50 local function a(U)local k=U.x local m=U.y local a=U.time local r=(a+k/d)+m/d return z.createElement("\070\114\097\109\101",{Size=UDim2.new(0,d,0,d),Position=UDim2.new(0,d*k,0,d*m),BackgroundColor3=Color3.new(.5+.5*math.sin(r),.5,.5)})end local r=z.Component:extend("\065\112\112")function r.init(U)U.state={time=tick()}end function r.render(U)local k=U.state.time local r={}local q=0 for U=0,m-1,1 do for d=0,m-1,1 do q=q+1 r[q]=z.createElement(a,{x=U,y=d,time=k})end end return z.createElement("\070\114\097\109\101",{Size=UDim2.new(0,m*d,0,m*d);Position=UDim2.new(.5,0,.5,0);AnchorPoint=Vector2.new(.5,.5)},r)end function r.didMount(k)k.connection=U.Stepped:Connect(function()k:setState({time=tick()})end)end function r.willUnmount(U)U.connection:Disconnect()end local q=z.createElement("\083\099\114\101\101\110\071\117\105",nil,{Main=z.createElement(r)})local o=z.mount(q,k)local function X()z.unmount(o)end return X end
return function()
	local RunService = game:GetService("RunService")
	local PlayerGui = game:GetService("Players").LocalPlayer.PlayerGui

	local Roact = require(game.ReplicatedStorage.Roact)

	local NODE_SIZE = 10
	local GRID_SIZE = 50

	--[[
		A frame that changes its background color according to time and position props
	]]
	local function Node(props)
		local x = props.x
		local y = props.y
		local time = props.time

		local n = time + x / NODE_SIZE + y / NODE_SIZE

		return Roact.createElement("Frame", {
			Size = UDim2.new(0, NODE_SIZE, 0, NODE_SIZE),
			Position = UDim2.new(0, NODE_SIZE * x, 0, NODE_SIZE * y),
			BackgroundColor3 = Color3.new(0.5 + 0.5 * math.sin(n), 0.5, 0.5),
		})
	end

	--[[
		Displays a large number of nodes and updates each of them every RunService step
	]]
	local App = Roact.Component:extend("App")

	function App:init()
		self.state = {
			time = tick(),
		}
	end

	function App:render()
		local time = self.state.time
		local nodes = {}

		local n = 0
		for x = 0, GRID_SIZE - 1 do
			for y = 0, GRID_SIZE - 1 do
				n = n + 1
				nodes[n] = Roact.createElement(Node, {
					x = x,
					y = y,
					time = time,
				})
			end
		end

		return Roact.createElement("Frame", {
			Size = UDim2.new(0, GRID_SIZE * NODE_SIZE, 0, GRID_SIZE * NODE_SIZE),
			Position = UDim2.new(0.5, 0, 0.5, 0),
			AnchorPoint = Vector2.new(0.5, 0.5),
		}, nodes)
	end

	function App:didMount()
		self.connection = RunService.Stepped:Connect(function()
			self:setState({
				time = tick(),
			})
		end)
	end

	function App:willUnmount()
		self.connection:Disconnect()
	end

	local app = Roact.createElement("ScreenGui", nil, {
		Main = Roact.createElement(App),
	})

	local handle = Roact.mount(app, PlayerGui)

	local function stop()
		Roact.unmount(handle)
	end

	return stop
end
