function CompareTable(h,o,W)local Q=type(h)local M=type(o)if Q~=M then return false end if Q~="\116\097\098\108\101"and M~="\116\097\098\108\101"then return h==o end local d=getmetatable(h)if not W and(d and d.__eq)then return h==o end for h,W in pairs(h)do local Q=o[h]if Q==nil or not CompareTable(W,Q)then return false end end for o,W in pairs(o)do local Q=h[o]if Q==nil or not CompareTable(Q,W)then return false end end return true end

function CompareTable(t1,t2,ignore_mt)
	local ty1 = type(t1)
	local ty2 = type(t2)
	
	if ty1 ~= ty2 then return false end
	
	--- Non-table types can be directly compared
	if ty1 ~= 'table' and ty2 ~= 'table' then return t1 == t2 end
	
	--- As well as tables which have the metamethod __eq
	local mt = getmetatable(t1)
	
	if not ignore_mt and mt and mt.__eq then return t1 == t2 end
	
	for k1,v1 in pairs(t1) do
		local v2 = t2[k1]
		if v2 == nil or not CompareTable(v1,v2) then return false end
	end
	
	for k2,v2 in pairs(t2) do
		local v1 = t1[k2]
		
		if v1 == nil or not CompareTable(v1,v2) then return false end
	end
	
	return true
end

