return function(A)local function x(A,X)if not X then X=0 elseif X>10 then return"\046\046\046 \116\114\101\101 \116\111\111 \100\101\101\112 \046\046\046"end local o=string.rep("  ",X)local F if not A then F="\110\105\108"elseif type(A)=="\116\097\098\108\101"then local H={}table.insert(H,"\123")for A,F in pairs(A)do local Y=string.format("\037\115\037\115 \058 \037\115",o,tostring(A),x(F,X+1))table.insert(H,Y)end table.insert(H,string.format("\037\115\125",o))F=table.concat(H,"\n")else F=string.format("\060\037\115\062 - \037\115",type(A),tostring(A))end return string.format("\037\115",F)end local X=table.concat({" \042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042 ",x(A)," \042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042 "},"\n")return X end

return function(theObj)
	local function printAll(t, spaceIndex)
		if not spaceIndex then
			spaceIndex = 0
		elseif spaceIndex > 10 then
			return "... tree too deep ..."
		end
		local spacer = string.rep("  ", spaceIndex)

		local outStr
		if not t then
			outStr = "nil"
		elseif type(t) == "table" then
			local parts = {}
			table.insert(parts, "{")
			for k, v in pairs(t) do
				local substr = string.format("%s%s : %s", spacer, tostring(k), printAll(v, spaceIndex + 1))
				table.insert(parts, substr)
			end
			table.insert(parts, string.format("%s}", spacer))
			outStr = table.concat(parts, "\n")
		else
			outStr = string.format("<%s> - %s", type(t), tostring(t))
		end

		return string.format("%s", outStr)
	end

	local outString = table.concat({
		" ********************************* ",
		printAll(theObj),
		" ********************************* "
	}, "\n")
	return outString
end
