slot0 = setmetatable({}, {
	__mode = "kv"
})
slot1 = getmetatable(GameObject)
slot2 = slot1.__index

function slot1.__index(slot0, slot1)
	if slot1 == "transform" then
		if uv0[slot0] then
			return slot2
		end

		slot2 = uv1(slot0, slot1)
		uv0[slot0] = slot2

		return slot2
	elseif slot1 == "gameObject" then
		return slot0
	else
		return uv1(slot0, slot1)
	end
end

slot3 = setmetatable({}, {
	__mode = "kv"
})
slot4 = getmetatable(Transform)
slot5 = slot4.__index

function slot4.__index(slot0, slot1)
	if slot1 == "gameObject" then
		if uv0[slot0] then
			return slot2
		end

		slot2 = uv1(slot0, slot1)
		uv0[slot0] = slot2

		return slot2
	elseif slot1 == "transform" then
		return slot0
	else
		return uv1(slot0, slot1)
	end
end

function gcAll(slot0)
	PoolMgr.GetInstance():ExcessPainting()
	ResourceMgr.Inst:unloadUnusedAssetBundles()

	if not slot0 then
		Resources.UnloadUnusedAssets()
	end

	GCThread.GetInstance():GC(slot0)
end

slot6 = print

function print(...)
	if Application.isEditor then
		uv0(debug.traceback(table.concat(_.map({
			...
		}, function (slot0)
			return tostring(slot0)
		end), " "), 2))
	else
		uv0(...)
	end
end

function traceback(slot0)
	return debug.traceback(slot0, 2)
end

function RemoveTableItem(slot0, slot1, slot2)
	slot3 = 0

	for slot7 = 1, #slot0 do
		if slot0[slot7 - slot3] == slot1 then
			table.remove(slot0, slot7 - slot3)

			if slot2 then
				slot3 = slot3 + 1
			else
				break
			end
		end
	end
end

function IsNil(slot0)
	return slot0 == nil or slot0:Equals(nil)
end

function isnan(slot0)
	return slot0 ~= slot0
end

function GetDir(slot0)
	return string.match(slot0, ".*/")
end

function GetFileName(slot0)
	return string.match(slot0, ".*/(.*)")
end

function table.clear(slot0)
	if slot0 then
		for slot4, slot5 in pairs(slot0) do
			slot0[slot4] = nil
		end
	end
end

function table.contains(slot0, slot1)
	if slot0 == nil then
		return false
	end

	for slot5, slot6 in pairs(slot0) do
		if slot6 == slot1 then
			return true
		end
	end

	return false
end

function table.equal(slot0, slot1)
	if type(slot0) ~= type(slot1) then
		return false
	end

	if type(slot0) ~= "table" then
		return slot0 == slot1
	end

	if slot0 == slot1 then
		return true
	end

	for slot5, slot6 in pairs(slot0) do
		if not table.equal(slot6, slot1[slot5]) then
			return false
		end
	end

	for slot5, slot6 in pairs(slot1) do
		if slot0[slot5] == nil then
			return false
		end
	end

	return true
end

function table.containsdata(slot0, slot1)
	if slot0 == nil then
		return false
	end

	for slot5, slot6 in pairs(slot0) do
		if table.equal(slot6, slot1) then
			return true
		end
	end

	return false
end

function table.eachAsync(slot0, slot1, slot2)
	if type(slot0) ~= "table" then
		return
	end

	slot3, slot4 = nil
	slot3, slot0, slot4 = ipairs(slot0)
	slot5 = nil

	function ()
		uv0 = uv1(uv2, uv0)

		if uv2[uv0] == nil then
			if uv3 then
				uv3()
			end
		else
			uv4(uv0, slot0, uv5)
		end
	end()
end

function table.eachParallel(slot0, slot1, slot2)
	if type(slot0) ~= "table" then
		return
	end

	slot3, slot4 = nil
	slot3, slot0, slot4 = ipairs(slot0)
	slot5 = 0
	slot6 = 0
	slot7 = false

	function slot8()
		if uv0 then
			return
		end

		uv1 = uv1 + 1

		if uv1 < uv2 then
			return
		end

		uv0 = true

		if uv3 then
			uv3()
		end
	end

	slot9 = nil

	while true do
		if slot0[slot3(slot0, slot4)] == nil then
			break
		end

		slot6 = slot6 + 1

		slot1(slot4, slot9, slot8)
	end
end

function table.getCount(slot0)
	for slot5, slot6 in pairs(slot0) do
		slot1 = 0 + 1
	end

	return slot1
end

function table.merge(slot0, slot1, slot2)
	function slot4(slot0)
		for slot4, slot5 in ipairs(slot0) do
			if uv0 then
				if not table.contains(uv1, slot5) then
					table.insert(uv1, slot5)
				end
			else
				table.insert(uv1, slot5)
			end
		end
	end

	slot4(slot0)
	slot4(slot1)

	return {}
end

function table.merge2dest(slot0, slot1)
	for slot5, slot6 in pairs(slot1) do
		slot0[slot5] = slot6
	end

	return slot0
end

function table.removebyvalue(slot0, slot1, slot2)
	slot3 = 0
	slot4 = 1

	while slot4 <= #slot0 do
		if slot0[slot4] == slot1 then
			table.remove(slot0, slot4)

			slot3 = slot3 + 1
			slot4 = slot4 - 1
			slot5 = slot5 - 1

			if not slot2 then
				break
			end
		end

		slot4 = slot4 + 1
	end

	return slot3
end

function table.removebykey(slot0, slot1)
	slot0[slot1] = nil

	return slot0[slot1]
end

function table.clean(slot0)
	for slot4 = #slot0, 1, -1 do
		table.remove(slot0, slot4)
	end
end

function DumpTable(slot0)
	for slot4, slot5 in pairs(slot0) do
		if slot5 ~= nil then
			Debugger.Log("Key: {0}, Value: {1}", tostring(slot4), tostring(slot5))
		else
			Debugger.Log("Key: {0}, Value nil", tostring(slot4))
		end
	end
end

function PrintTable(slot0)
	slot1 = {}

	function (slot0, slot1, slot2)
		for slot6, slot7 in pairs(slot0) do
			if type(slot7) == "table" then
				table.insert(slot1, slot2 .. tostring(slot6) .. ":\n")
				uv0(slot7, slot1, slot2 .. " ")
			else
				table.insert(slot1, slot2 .. tostring(slot6) .. ": " .. tostring(slot7) .. "\n")
			end
		end
	end(slot0, slot1, "")

	return table.concat(slot1, "")
end

function PrintLua(slot0, slot1)
	slot2 = nil

	for slot6 in string.gmatch(slot0, "%w+") do
		slot1 = (slot1 or _G)[slot6]
	end

	if slot1 == nil then
		Debugger.Log("Lua Module {0} not exists", slot0)

		return
	end

	Debugger.Log("-----------------Dump Table {0}-----------------", slot0)

	if type(slot2) == "table" then
		for slot6, slot7 in pairs(slot2) do
			Debugger.Log("Key: {0}, Value: {1}", slot6, tostring(slot7))
		end
	end

	slot3 = getmetatable(slot2)

	Debugger.Log("-----------------Dump meta {0}-----------------", slot0)

	while slot3 ~= nil and slot3 ~= slot2 do
		for slot7, slot8 in pairs(slot3) do
			if slot7 ~= nil then
				Debugger.Log("Key: {0}, Value: {1}", tostring(slot7), tostring(slot8))
			end
		end

		slot3 = getmetatable(slot3)
	end

	Debugger.Log("-----------------Dump meta Over-----------------")
	Debugger.Log("-----------------Dump Table Over-----------------")
end

function IsString(slot0)
	return type(slot0) == "string"
end

function IsNumber(slot0)
	return type(slot0) == "number"
end

function tobool(slot0)
	return slot0 and true or false
end

function warning(...)
	if Application.isEditor then
		Debugger.LogWarning(debug.traceback(table.concat(_.map({
			...
		}, function (slot0)
			return tostring(slot0)
		end), " "), 2))
	else
		uv0(...)
	end
end

function errorMsg(...)
	if Application.isEditor then
		Debugger.LogError(debug.traceback(table.concat(_.map({
			...
		}, function (slot0)
			return tostring(slot0)
		end), " "), 2))
	else
		uv0(...)
	end
end

function BuildVector3(slot0)
	return Vector3(slot0[1], slot0[2], slot0[3])
end

function ShowFuncInfo(slot0)
	slot1 = debug.getinfo(slot0)

	return string.format("file:%s#%d", slot1.source, slot1.linedefined)
end

function String2Table(slot0)
	slot1 = {}

	for slot5 in slot0:gmatch(".") do
		table.insert(slot1, slot5)
	end

	return slot1
end

slot7 = require("bit")

function unicode_to_utf8(slot0)
	if type(slot0) ~= "string" then
		return slot0
	end

	slot1 = ""
	slot2 = 1

	while true do
		slot4 = nil

		if string.byte(slot0, slot2) ~= nil and string.sub(slot0, slot2, slot2 + 1) == "\\u" then
			slot4 = tonumber("0x" .. string.sub(slot0, slot2 + 2, slot2 + 5))
			slot2 = slot2 + 6
		elseif slot3 ~= nil then
			slot4 = slot3
			slot2 = slot2 + 1
		else
			break
		end

		if slot4 <= 127 then
			slot1 = slot1 .. string.char(uv0.band(slot4, 127))
		elseif slot4 >= 128 and slot4 <= 2047 then
			slot1 = slot1 .. string.char(uv0.bor(192, uv0.band(uv0.rshift(slot4, 6), 31))) .. string.char(uv0.bor(128, uv0.band(slot4, 63)))
		elseif slot4 >= 2048 and slot4 <= 65535 then
			slot1 = slot1 .. string.char(uv0.bor(224, uv0.band(uv0.rshift(slot4, 12), 15))) .. string.char(uv0.bor(128, uv0.band(uv0.rshift(slot4, 6), 63))) .. string.char(uv0.bor(128, uv0.band(slot4, 63)))
		end
	end

	return slot1 .. ""
end

function utf8_to_unicode(slot0)
	if type(slot0) ~= "string" then
		return slot0
	end

	slot1 = ""
	slot3 = string.byte(slot0, 1)
	slot4 = 0

	while slot3 ~= nil do
		slot5, slot6 = nil

		if slot3 >= 0 and slot3 <= 127 then
			slot5 = slot3
			slot6 = 0
		elseif uv0.band(slot3, 224) == 192 then
			slot7 = 0
			slot8 = 0
			slot7 = uv0.band(slot3, uv0.rshift(255, 3))
			slot5 = uv0.bor(uv0.band(string.byte(slot0, slot2 + 1), uv0.rshift(255, 2)), uv0.lshift(uv0.band(slot7, uv0.rshift(255, 6)), 6))
			slot6 = uv0.rshift(slot7, 2)
		elseif uv0.band(slot3, 240) == 224 then
			slot7 = 0
			slot8 = 0
			slot9 = 0
			slot2 = slot2 + 1
			slot8 = uv0.band(string.byte(slot0, slot2), uv0.rshift(255, 2))
			slot5 = uv0.bor(uv0.lshift(uv0.band(slot8, uv0.rshift(255, 6)), 6), uv0.band(string.byte(slot0, slot2 + 1), uv0.rshift(255, 2)))
			slot6 = uv0.bor(uv0.lshift(uv0.band(slot3, uv0.rshift(255, 3)), 4), uv0.rshift(slot8, 2))
		end

		slot1 = slot1 .. string.format("\\u%02x%02x", slot6, slot5)
		slot4 = slot6 == 0 and slot4 + 1 or slot4 + 2
		slot3 = string.byte(slot0, slot2 + 1)
	end

	return slot1, slot4
end

function utf8_size(slot0)
	if not slot0 then
		return 0
	elseif slot0 > 240 then
		return 4
	elseif slot0 > 225 then
		return 3
	elseif slot0 > 192 then
		return 2
	else
		return 1
	end
end

function utf8_len(slot0)
	slot1 = 1
	slot2 = 0

	while slot1 <= #slot0 do
		slot1 = slot1 + utf8_size(string.byte(slot0, slot1))
		slot2 = slot2 + 1
	end

	return slot2
end

function existCall(slot0, ...)
	if slot0 and type(slot0) == "function" then
		return slot0(...)
	end
end
