local function W(W)return W.ClassName end local function o(o,O)local l={}l.__index=l l.__tostring=W l.ClassName=o function l.new(...)local W=setmetatable({},l)if W.__init then W:__init(...)end return W end if O then l.Super=O setmetatable(l,O)for W,o in pairs(INHERITED)do if o then l[W]=O[W]end end end return l end


local function __tostring(self)
	return self.ClassName
end

local function createClass(className, superClass)
	local class = {}
	class.__index = class
	class.__tostring = __tostring
	class.ClassName = className

	function class.new(...)
		local self = setmetatable({}, class)

		if self.__init then
			self:__init(...)
		end

		return self
	end

	if superClass then
		class.Super = superClass
		setmetatable(class, superClass)

		for methodName, shouldInherit in pairs(INHERITED) do
			if shouldInherit then
				class[methodName] = superClass[methodName]
			end
		end
	end

	return class
end
