Browse Source

Added locking to SpriteBatch, and conf.lua.

rude 16 years ago
parent
commit
5c068db487

+ 2 - 2
src/love.cpp

@@ -124,8 +124,8 @@ int main(int argc, char ** argv)
 	// which gets everything started.
 
 	// TODO: This is obviously test code.
-	//luaL_dofile(L, "../../src/scripts/boot.lua");
-#	include "scripts/boot.lua.h"
+	luaL_dofile(L, "../../src/scripts/boot.lua");
+//#	include "scripts/boot.lua.h"
 
 	lua_close(L);
 

+ 34 - 9
src/modules/graphics/opengl/SpriteBatch.cpp

@@ -33,7 +33,7 @@ namespace graphics
 namespace opengl
 {
 	SpriteBatch::SpriteBatch(Image * image, int size, int usage)
-		: image(image), size(size), next(0), usage(usage)
+		: image(image), size(size), next(0), usage(usage), lockp(0)
 	{
 		image->retain();
 
@@ -92,17 +92,24 @@ namespace opengl
 
 			// Transform.
 			Matrix t;
-			t.translate(x, y);
-			t.scale(sx, sy);
-			t.rotate(a);
+			t.setTransformation(x, y, a, sx, sy, ox, oy);
 			t.transform(v, v, 4);
 
-			glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);
-			glBufferSubData(GL_ARRAY_BUFFER, (next*4)*sizeof(vertex), sizeof(vertex)*4, v);
-			glBindBuffer(GL_ARRAY_BUFFER, 0);
+			if(lockp != 0)
+			{
+				// Copy into mapped memory if buffer is locked.
+				memcpy(lockp + (next*4), v,  sizeof(vertex)*4);
+			}
+			else
+			{
+				// ... use glBufferSubData otherwise.
+				glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);
+				glBufferSubData(GL_ARRAY_BUFFER, (next*4)*sizeof(vertex), sizeof(vertex)*4, v);
+				glBindBuffer(GL_ARRAY_BUFFER, 0);
+			}
 
 			// Increment counter.
-			next++;			
+			next++;
 		}
 	}
 
@@ -112,10 +119,28 @@ namespace opengl
 		next = 0;
 	}
 
+	void * SpriteBatch::lock()
+	{
+		glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);
+		lockp = (vertex *)glMapBuffer(GL_ARRAY_BUFFER, GL_READ_WRITE);
+		return lockp;
+	}
+
+	void SpriteBatch::unlock()
+	{
+		glUnmapBuffer(GL_ARRAY_BUFFER);
+		lockp = 0;
+		glBindBuffer(GL_ARRAY_BUFFER, 0);
+	}
+
 	void SpriteBatch::draw(float x, float y, float angle, float sx, float sy, float ox, float oy) const
 	{
+		static Matrix t;
+
 		glPushMatrix();
-		glTranslatef(x, y, 0);
+
+		t.setTransformation(x, y, angle, sx, sy, ox, oy);
+		glMultMatrixf((const GLfloat*)t.getElements());
 
 		image->bind();
 

+ 6 - 0
src/modules/graphics/opengl/SpriteBatch.h

@@ -68,6 +68,9 @@ namespace opengl
 		int usage;
 		int gl_usage;
 
+		// If the buffer is locked, this pointer is nonzero.
+		vertex * lockp;
+
 	public:
 
 		enum UsageHint
@@ -85,6 +88,9 @@ namespace opengl
 		//void addf(float x, float y, float a, float sx, float sy, float ox, float oy, Frame * frame);
 		void clear();
 
+		void * lock();
+		void unlock();
+
 		// Implements Drawable.
 		void draw(float x, float y, float angle, float sx, float sy, float ox, float oy) const;
 

+ 16 - 0
src/modules/graphics/opengl/wrap_SpriteBatch.cpp

@@ -52,9 +52,25 @@ namespace opengl
 		return 0;
 	}
 
+	int _wrap_SpriteBatch_lock(lua_State * L)
+	{
+		SpriteBatch * t = luax_checkspritebatch(L, 1);
+		lua_pushlightuserdata(L, t->lock());
+		return 1;
+	}
+
+	int _wrap_SpriteBatch_unlock(lua_State * L)
+	{
+		SpriteBatch * t = luax_checkspritebatch(L, 1);
+		t->unlock();
+		return 0;
+	}
+
 	static const luaL_Reg wrap_SpriteBatch_functions[] = {
 		{ "add", _wrap_SpriteBatch_add },
 		{ "clear", _wrap_SpriteBatch_clear },
+		{ "lock", _wrap_SpriteBatch_lock },
+		{ "unlock", _wrap_SpriteBatch_unlock },
 		{ 0, 0 }
 	};
 

+ 2 - 0
src/modules/graphics/opengl/wrap_SpriteBatch.h

@@ -33,6 +33,8 @@ namespace opengl
 	SpriteBatch * luax_checkspritebatch(lua_State * L, int idx);
 	int _wrap_SpriteBatch_add(lua_State * L);
 	int _wrap_SpriteBatch_clear(lua_State * L);
+	int _wrap_SpriteBatch_lock(lua_State * L);
+	int _wrap_SpriteBatch_unlock(lua_State * L);
 	int wrap_SpriteBatch_open(lua_State * L);
 
 } // opengl

+ 75 - 37
src/scripts/boot.lua

@@ -5,13 +5,6 @@ if not love then love = {} end
 -- Used for setup:
 love.path = {}
 
-function love.insmod(name, provides)
-	if love.__mod[provides] and love.__mod[provides][name] then
-		love.__mod[provides][name].open()
-		print("Opened " .. provides .. " module " .. name .. ".")
-	end
-end
-
 -- Replace any \ with /.
 function love.path.normalslashes(p)
 	return string.gsub(p, "\\", "/")
@@ -94,45 +87,88 @@ love.handlers = {
 	end,
 }
 
-function love.init()
+-- This can't be overriden. 
+function love.boot()
+
+	print("boot")
+
+	-- This is absolutely needed. 
+	love.filesystem = require("love.filesystem")
 
+	-- Prints the arguments passes to the app.
 	if love.__args then
 		for i,v in pairs(love.__args) do
 			print(i,v)
 		end
-	end
-
-	love.filesystem = require("love.filesystem")
-	love.event = require("love.event")
-	love.keyboard = require("love.keyboard")
-	love.mouse = require("love.mouse")
-	love.timer = require("love.timer")
-	love.joystick = require("love.joystick")
-	love.image = require("love.image")
-	love.graphics = require("love.graphics")
-	love.audio = require("love.audio")
-	love.physics = require("love.physics")
-	love.sound = require("love.sound")
-	love.native = require("love.native")
-
+	end	
+	
+	-- Sets the source for the game.
 	if love.__args[1] and love.__args[1] ~= "" then
-		love.filesystem.setIdentity("love2")
 		love.filesystem.setSource(love.path.getfull(love.__args[1]))
-		require("main.lua")
 	end
-
-	love.run()
+	
 end
 
-function love.run()
-
-	-- CONFIG BEGINS
+function love.init()
 
-	if love.graphics.checkMode(800, 600, false) then
-		love.graphics.setMode(800, 600, false, false)
+	-- Create default configuration settings.
+	local c = {
+		title = "Untitled",
+		author = "Unnamed",
+		version = 0,
+		screen = {
+			width = 800,
+			height = 600,
+			fullscreen = false,
+			vsync = true,
+			fsaa = 0,
+		}, 
+		modules = {
+			event = true,
+			keyboard = true,
+			mouse = true,
+			timer = true,
+			joystick = true,
+			image = true,
+			graphics = true,
+			audio = true,
+			physics = true,
+			sound = true,
+			native = true,
+		},
+	}
+
+	-- If config file exists, load it and allow it to update config table.
+	if love.filesystem.exists("conf.lua") then
+		require("conf.lua")
+		love.conf(c)
 	end
+	
+	if c.modules.event then love.event = require("love.event") end
+	if c.modules.keyboard then love.keyboard = require("love.keyboard") end
+	if c.modules.mouse then love.mouse = require("love.mouse") end
+	if c.modules.timer then love.timer = require("love.timer") end
+	if c.modules.joystick then love.joystick = require("love.joystick") end
+	if c.modules.image then love.image = require("love.image") end
+	if c.modules.graphics then love.graphics = require("love.graphics") end
+	if c.modules.audio then love.audio = require("love.audio") end
+	if c.modules.physics then love.physics = require("love.physics") end
+	if c.modules.sound then love.sound = require("love.sound") end
+	if c.modules.native then love.native = require("love.native") end
+	
+	-- Setup screen here.
+	if c.screen and c.modules.graphics then 
+		if love.graphics.checkMode(c.screen.width, c.screen.height, c.screen.fullscreen) then
+			love.graphics.setMode(c.screen.width, c.screen.height, c.screen.fullscreen, c.screen.vsync, c.screen.fsaa)
+		end
+		love.graphics.setCaption(c.title)
+	end
+	
+	if love.filesystem.exists("main.lua") then require("main.lua") end
+	
+end
 
-	-- CONFIG ENDS
+function love.run()
 
 	if love.load then love.load() end
 
@@ -180,10 +216,12 @@ end
 -- The root of all calls.
 -----------------------------------------------------------
 
-local result = xpcall(love.init,
-	function (msg)
-		print(msg, debug.traceback())
-	end)
+function error_printer(msg)
+	print("boot", msg, debug.traceback())
+end
 
+result = xpcall(love.boot, error_printer)
+result = xpcall(love.init, error_printer)
+result = xpcall(love.run, error_printer)
 
 print("Done.")

+ 258 - 197
src/scripts/boot.lua.h

@@ -10,216 +10,277 @@ static const unsigned char B1[]={
 116, 32,108,111,118,101, 32,116,104,101,110, 32,108,111,118,101, 32, 61, 32,123,
 125, 32,101,110,100, 13, 10, 13, 10, 45, 45, 32, 85,115,101,100, 32,102,111,114,
  32,115,101,116,117,112, 58, 13, 10,108,111,118,101, 46,112, 97,116,104, 32, 61,
- 32,123,125, 13, 10, 13, 10,102,117,110, 99,116,105,111,110, 32,108,111,118,101,
- 46,105,110,115,109,111,100, 40,110, 97,109,101, 44, 32,112,114,111,118,105,100,
-101,115, 41, 13, 10,  9,105,102, 32,108,111,118,101, 46, 95, 95,109,111,100, 91,
-112,114,111,118,105,100,101,115, 93, 32, 97,110,100, 32,108,111,118,101, 46, 95,
- 95,109,111,100, 91,112,114,111,118,105,100,101,115, 93, 91,110, 97,109,101, 93,
- 32,116,104,101,110, 13, 10,  9,  9,108,111,118,101, 46, 95, 95,109,111,100, 91,
-112,114,111,118,105,100,101,115, 93, 91,110, 97,109,101, 93, 46,111,112,101,110,
- 40, 41, 13, 10,  9,  9,112,114,105,110,116, 40, 34, 79,112,101,110,101,100, 32,
- 34, 32, 46, 46, 32,112,114,111,118,105,100,101,115, 32, 46, 46, 32, 34, 32,109,
-111,100,117,108,101, 32, 34, 32, 46, 46, 32,110, 97,109,101, 32, 46, 46, 32, 34,
- 46, 34, 41, 13, 10,  9,101,110,100, 13, 10,101,110,100, 13, 10, 13, 10, 45, 45,
- 32, 82,101,112,108, 97, 99,101, 32, 97,110,121, 32, 92, 32,119,105,116,104, 32,
- 47, 46, 13, 10,102,117,110, 99,116,105,111,110, 32,108,111,118,101, 46,112, 97,
+ 32,123,125, 13, 10, 13, 10, 45, 45, 32, 82,101,112,108, 97, 99,101, 32, 97,110,
+121, 32, 92, 32,119,105,116,104, 32, 47, 46, 13, 10,102,117,110, 99,116,105,111,
+110, 32,108,111,118,101, 46,112, 97,116,104, 46,110,111,114,109, 97,108,115,108,
+ 97,115,104,101,115, 40,112, 41, 13, 10,  9,114,101,116,117,114,110, 32,115,116,
+114,105,110,103, 46,103,115,117, 98, 40,112, 44, 32, 34, 92, 92, 34, 44, 32, 34,
+ 47, 34, 41, 13, 10,101,110,100, 13, 10, 13, 10, 45, 45, 32, 77, 97,107,101,115,
+ 32,115,117,114,101, 32,116,104,101,114,101, 32,105,115, 32, 97, 32,115,108, 97,
+115,104, 32, 97,116, 32,116,104,101, 32,101,110,100, 13, 10, 45, 45, 32,111,102,
+ 32, 97, 32,112, 97,116,104, 46, 13, 10,102,117,110, 99,116,105,111,110, 32,108,
+111,118,101, 46,112, 97,116,104, 46,101,110,100,115,108, 97,115,104, 40,112, 41,
+ 13, 10,  9,105,102, 32,115,116,114,105,110,103, 46,115,117, 98, 40,112, 44, 32,
+115,116,114,105,110,103, 46,108,101,110, 40,112, 41, 45, 49, 41, 32,126, 61, 32,
+ 34, 47, 34, 32,116,104,101,110, 13, 10,  9,  9,114,101,116,117,114,110, 32,112,
+ 32, 46, 46, 32, 34, 47, 34, 13, 10,  9,101,108,115,101, 13, 10,  9,  9,114,101,
+116,117,114,110, 32,112, 13, 10,  9,101,110,100, 13, 10,101,110,100, 13, 10, 13,
+ 10, 45, 45, 32, 67,104,101, 99,107,115, 32,119,104,101,116,104,101,114, 32, 97,
+ 32,112, 97,116,104, 32,105,115, 32, 97, 98,115,111,108,117,116,101, 32,111,114,
+ 32,110,111,116, 46, 13, 10,102,117,110, 99,116,105,111,110, 32,108,111,118,101,
+ 46,112, 97,116,104, 46, 97, 98,115, 40,112, 41, 13, 10, 13, 10,  9,108,111, 99,
+ 97,108, 32,116,109,112, 32, 61, 32,108,111,118,101, 46,112, 97,116,104, 46,110,
+111,114,109, 97,108,115,108, 97,115,104,101,115, 40,112, 41, 13, 10, 13, 10,  9,
+ 45, 45, 32, 80, 97,116,104, 32,105,115, 32, 97, 98,115,111,108,117,116,101, 32,
+105,102, 32,105,116, 32,115,116, 97,114,116,115, 32,119,105,116,104, 32, 97, 32,
+ 34, 47, 34, 46, 13, 10,  9,105,102, 32,115,116,114,105,110,103, 46,102,105,110,
+100, 40,116,109,112, 44, 32, 34, 47, 34, 41, 32, 61, 61, 32, 49, 32,116,104,101,
+110, 13, 10,  9,  9,114,101,116,117,114,110, 32,116,114,117,101, 13, 10,  9,101,
+110,100, 13, 10, 13, 10,  9, 45, 45, 32, 80, 97,116,104, 32,105,115, 32, 97, 98,
+115,111,108,117,116,101, 32,105,102, 32,105,116, 32,115,116, 97,114,116,115, 32,
+119,105,116,104, 32, 97, 32, 13, 10,  9, 45, 45, 32,108,101,116,116,101,114, 32,
+102,111,108,108,111,119,101,100, 32, 98,121, 32, 97, 32, 99,111,108,111,110, 46,
+ 13, 10,  9,105,102, 32,115,116,114,105,110,103, 46,102,105,110,100, 40,116,109,
+112, 44, 32, 34, 37, 97, 58, 34, 41, 32, 61, 61, 32, 49, 32,116,104,101,110, 13,
+ 10,  9,  9,114,101,116,117,114,110, 32,116,114,117,101, 13, 10,  9,101,110,100,
+ 13, 10,  9, 13, 10,  9, 45, 45, 32, 82,101,108, 97,116,105,118,101, 46, 13, 10,
+  9,114,101,116,117,114,110, 32,102, 97,108,115,101, 13, 10, 13, 10,101,110,100,
+ 13, 10, 13, 10, 45, 45, 32, 67,111,110,118,101,114,116,115, 32, 97,110,121, 32,
+112, 97,116,104, 32,105,110,116,111, 32, 97, 32,102,117,108,108, 32,112, 97,116,
+104, 46, 13, 10,102,117,110, 99,116,105,111,110, 32,108,111,118,101, 46,112, 97,
+116,104, 46,103,101,116,102,117,108,108, 40,112, 41, 13, 10, 13, 10,  9,105,102,
+ 32,108,111,118,101, 46,112, 97,116,104, 46, 97, 98,115, 40,112, 41, 32,116,104,
+101,110, 13, 10,  9,  9,114,101,116,117,114,110, 32,108,111,118,101, 46,112, 97,
 116,104, 46,110,111,114,109, 97,108,115,108, 97,115,104,101,115, 40,112, 41, 13,
- 10,  9,114,101,116,117,114,110, 32,115,116,114,105,110,103, 46,103,115,117, 98,
- 40,112, 44, 32, 34, 92, 92, 34, 44, 32, 34, 47, 34, 41, 13, 10,101,110,100, 13,
- 10, 13, 10, 45, 45, 32, 77, 97,107,101,115, 32,115,117,114,101, 32,116,104,101,
-114,101, 32,105,115, 32, 97, 32,115,108, 97,115,104, 32, 97,116, 32,116,104,101,
- 32,101,110,100, 13, 10, 45, 45, 32,111,102, 32, 97, 32,112, 97,116,104, 46, 13,
- 10,102,117,110, 99,116,105,111,110, 32,108,111,118,101, 46,112, 97,116,104, 46,
-101,110,100,115,108, 97,115,104, 40,112, 41, 13, 10,  9,105,102, 32,115,116,114,
-105,110,103, 46,115,117, 98, 40,112, 44, 32,115,116,114,105,110,103, 46,108,101,
-110, 40,112, 41, 45, 49, 41, 32,126, 61, 32, 34, 47, 34, 32,116,104,101,110, 13,
- 10,  9,  9,114,101,116,117,114,110, 32,112, 32, 46, 46, 32, 34, 47, 34, 13, 10,
-  9,101,108,115,101, 13, 10,  9,  9,114,101,116,117,114,110, 32,112, 13, 10,  9,
-101,110,100, 13, 10,101,110,100, 13, 10, 13, 10, 45, 45, 32, 67,104,101, 99,107,
-115, 32,119,104,101,116,104,101,114, 32, 97, 32,112, 97,116,104, 32,105,115, 32,
- 97, 98,115,111,108,117,116,101, 32,111,114, 32,110,111,116, 46, 13, 10,102,117,
-110, 99,116,105,111,110, 32,108,111,118,101, 46,112, 97,116,104, 46, 97, 98,115,
- 40,112, 41, 13, 10, 13, 10,  9,108,111, 99, 97,108, 32,116,109,112, 32, 61, 32,
-108,111,118,101, 46,112, 97,116,104, 46,110,111,114,109, 97,108,115,108, 97,115,
-104,101,115, 40,112, 41, 13, 10, 13, 10,  9, 45, 45, 32, 80, 97,116,104, 32,105,
-115, 32, 97, 98,115,111,108,117,116,101, 32,105,102, 32,105,116, 32,115,116, 97,
-114,116,115, 32,119,105,116,104, 32, 97, 32, 34, 47, 34, 46, 13, 10,  9,105,102,
- 32,115,116,114,105,110,103, 46,102,105,110,100, 40,116,109,112, 44, 32, 34, 47,
- 34, 41, 32, 61, 61, 32, 49, 32,116,104,101,110, 13, 10,  9,  9,114,101,116,117,
-114,110, 32,116,114,117,101, 13, 10,  9,101,110,100, 13, 10, 13, 10,  9, 45, 45,
- 32, 80, 97,116,104, 32,105,115, 32, 97, 98,115,111,108,117,116,101, 32,105,102,
- 32,105,116, 32,115,116, 97,114,116,115, 32,119,105,116,104, 32, 97, 32, 13, 10,
-  9, 45, 45, 32,108,101,116,116,101,114, 32,102,111,108,108,111,119,101,100, 32,
- 98,121, 32, 97, 32, 99,111,108,111,110, 46, 13, 10,  9,105,102, 32,115,116,114,
-105,110,103, 46,102,105,110,100, 40,116,109,112, 44, 32, 34, 37, 97, 58, 34, 41,
- 32, 61, 61, 32, 49, 32,116,104,101,110, 13, 10,  9,  9,114,101,116,117,114,110,
- 32,116,114,117,101, 13, 10,  9,101,110,100, 13, 10,  9, 13, 10,  9, 45, 45, 32,
- 82,101,108, 97,116,105,118,101, 46, 13, 10,  9,114,101,116,117,114,110, 32,102,
- 97,108,115,101, 13, 10, 13, 10,101,110,100, 13, 10, 13, 10, 45, 45, 32, 67,111,
-110,118,101,114,116,115, 32, 97,110,121, 32,112, 97,116,104, 32,105,110,116,111,
- 32, 97, 32,102,117,108,108, 32,112, 97,116,104, 46, 13, 10,102,117,110, 99,116,
-105,111,110, 32,108,111,118,101, 46,112, 97,116,104, 46,103,101,116,102,117,108,
-108, 40,112, 41, 13, 10, 13, 10,  9,105,102, 32,108,111,118,101, 46,112, 97,116,
-104, 46, 97, 98,115, 40,112, 41, 32,116,104,101,110, 13, 10,  9,  9,114,101,116,
-117,114,110, 32,108,111,118,101, 46,112, 97,116,104, 46,110,111,114,109, 97,108,
-115,108, 97,115,104,101,115, 40,112, 41, 13, 10,  9,101,110,100, 13, 10, 13, 10,
-  9,108,111, 99, 97,108, 32, 99,119,100, 32, 61, 32,108,111,118,101, 46,102,105,
-108,101,115,121,115,116,101,109, 46,103,101,116, 87,111,114,107,105,110,103, 68,
-105,114,101, 99,116,111,114,121, 40, 41, 13, 10,  9, 99,119,100, 32, 61, 32,108,
-111,118,101, 46,112, 97,116,104, 46,110,111,114,109, 97,108,115,108, 97,115,104,
-101,115, 40, 99,119,100, 41, 13, 10,  9, 99,119,100, 32, 61, 32,108,111,118,101,
- 46,112, 97,116,104, 46,101,110,100,115,108, 97,115,104, 40, 99,119,100, 41, 13,
- 10,  9, 13, 10,  9, 45, 45, 32, 67,111,110,115,116,114,117, 99,116, 32, 97, 32,
-102,117,108,108, 32,112, 97,116,104, 46, 13, 10,  9,114,101,116,117,114,110, 32,
- 99,119,100, 32, 46, 46, 32,108,111,118,101, 46,112, 97,116,104, 46,110,111,114,
-109, 97,108,115,108, 97,115,104,101,115, 40,112, 41, 13, 10, 13, 10,101,110,100,
- 13, 10, 13, 10, 45, 45, 32, 82,101,116,117,114,110,115, 32,116,104,101, 32,108,
-101, 97,102, 32,111,102, 32, 97, 32,102,117,108,108, 32,112, 97,116,104, 46, 13,
- 10,102,117,110, 99,116,105,111,110, 32,108,111,118,101, 46,112, 97,116,104, 46,
-108,101, 97,102, 40,112, 41, 13, 10, 13, 10,101,110,100, 13, 10, 13, 10, 45, 45,
- 32, 83,116, 97,110,100, 97,114,100, 32, 99, 97,108,108, 98, 97, 99,107, 32,104,
- 97,110,100,108,101,114,115, 46, 13, 10,108,111,118,101, 46,104, 97,110,100,108,
-101,114,115, 32, 61, 32,123, 13, 10,  9, 91,108,111,118,101, 46,101,118,101,110,
-116, 95,107,101,121,112,114,101,115,115,101,100, 93, 32, 61, 32,102,117,110, 99,
-116,105,111,110, 32, 40, 98, 44, 32,117, 41, 13, 10,  9,  9,105,102, 32,108,111,
-118,101, 46,107,101,121,112,114,101,115,115,101,100, 32,116,104,101,110, 32,108,
-111,118,101, 46,107,101,121,112,114,101,115,115,101,100, 40, 98, 44, 32,117, 41,
- 32,101,110,100, 13, 10,  9,101,110,100, 44, 13, 10,  9, 91,108,111,118,101, 46,
-101,118,101,110,116, 95,107,101,121,114,101,108,101, 97,115,101,100, 93, 32, 61,
- 32,102,117,110, 99,116,105,111,110, 32, 40, 98, 41, 13, 10,  9,  9,105,102, 32,
-108,111,118,101, 46,107,101,121,114,101,108,101, 97,115,101,100, 32,116,104,101,
-110, 32,108,111,118,101, 46,107,101,121,114,101,108,101, 97,115,101,100, 40, 98,
- 41, 32,101,110,100, 13, 10,  9,101,110,100, 44, 13, 10,  9, 91,108,111,118,101,
- 46,101,118,101,110,116, 95,109,111,117,115,101,112,114,101,115,115,101,100, 93,
- 32, 61, 32,102,117,110, 99,116,105,111,110, 32, 40,120, 44,121, 44, 98, 41, 13,
- 10,  9,  9,105,102, 32,108,111,118,101, 46,109,111,117,115,101,112,114,101,115,
-115,101,100, 32,116,104,101,110, 32,108,111,118,101, 46,109,111,117,115,101,112,
-114,101,115,115,101,100, 40,120, 44,121, 44, 98, 41, 32,101,110,100, 13, 10,  9,
-101,110,100, 44, 13, 10,  9, 91,108,111,118,101, 46,101,118,101,110,116, 95,109,
-111,117,115,101,114,101,108,101, 97,115,101,100, 93, 32, 61, 32,102,117,110, 99,
-116,105,111,110, 32, 40,120, 44,121, 44, 98, 41, 13, 10,  9,  9,105,102, 32,108,
-111,118,101, 46,109,111,117,115,101,114,101,108,101, 97,115,101,100, 32,116,104,
-101,110, 32,108,111,118,101, 46,109,111,117,115,101,114,101,108,101, 97,115,101,
-100, 40,120, 44,121, 44, 98, 41, 32,101,110,100, 13, 10,  9,101,110,100, 44, 13,
- 10,  9, 91,108,111,118,101, 46,101,118,101,110,116, 95,106,111,121,115,116,105,
- 99,107,112,114,101,115,115,101,100, 93, 32, 61, 32,102,117,110, 99,116,105,111,
-110, 32, 40,106, 44, 98, 41, 13, 10,  9,  9,105,102, 32,108,111,118,101, 46,106,
-111,121,115,116,105, 99,107,112,114,101,115,115,101,100, 32,116,104,101,110, 32,
-108,111,118,101, 46,106,111,121,115,116,105, 99,107,112,114,101,115,115,101,100,
- 40,106, 44, 98, 41, 32,101,110,100, 13, 10,  9,101,110,100, 44, 13, 10,  9, 91,
-108,111,118,101, 46,101,118,101,110,116, 95,106,111,121,115,116,105, 99,107,114,
-101,108,101, 97,115,101,100, 93, 32, 61, 32,102,117,110, 99,116,105,111,110, 32,
- 40,106, 44, 98, 41, 13, 10,  9,  9,105,102, 32,108,111,118,101, 46,106,111,121,
-115,116,105, 99,107,114,101,108,101, 97,115,101,100, 32,116,104,101,110, 32,108,
-111,118,101, 46,106,111,121,115,116,105, 99,107,114,101,108,101, 97,115,101,100,
- 40,106, 44, 98, 41, 32,101,110,100, 13, 10,  9,101,110,100, 44, 13, 10,  9, 91,
-108,111,118,101, 46,101,118,101,110,116, 95,113,117,105,116, 93, 32, 61, 32,102,
-117,110, 99,116,105,111,110, 32, 40, 41, 13, 10,  9,  9,114,101,116,117,114,110,
- 13, 10,  9,101,110,100, 44, 13, 10,125, 13, 10, 13, 10,102,117,110, 99,116,105,
-111,110, 32,108,111,118,101, 46,105,110,105,116, 40, 41, 13, 10, 13, 10,  9,105,
-102, 32,108,111,118,101, 46, 95, 95, 97,114,103,115, 32,116,104,101,110, 13, 10,
-  9,  9,102,111,114, 32,105, 44,118, 32,105,110, 32,112, 97,105,114,115, 40,108,
-111,118,101, 46, 95, 95, 97,114,103,115, 41, 32,100,111, 13, 10,  9,  9,  9,112,
-114,105,110,116, 40,105, 44,118, 41, 13, 10,  9,  9,101,110,100, 13, 10,  9,101,
-110,100, 13, 10, 13, 10,  9,108,111,118,101, 46,102,105,108,101,115,121,115,116,
-101,109, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,108,111,118,101, 46,102,
-105,108,101,115,121,115,116,101,109, 34, 41, 13, 10,  9,108,111,118,101, 46,101,
-118,101,110,116, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,108,111,118,101,
- 46,101,118,101,110,116, 34, 41, 13, 10,  9,108,111,118,101, 46,107,101,121, 98,
-111, 97,114,100, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,108,111,118,101,
- 46,107,101,121, 98,111, 97,114,100, 34, 41, 13, 10,  9,108,111,118,101, 46,109,
-111,117,115,101, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,108,111,118,101,
- 46,109,111,117,115,101, 34, 41, 13, 10,  9,108,111,118,101, 46,116,105,109,101,
-114, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,108,111,118,101, 46,116,105,
-109,101,114, 34, 41, 13, 10,  9,108,111,118,101, 46,106,111,121,115,116,105, 99,
-107, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,108,111,118,101, 46,106,111,
-121,115,116,105, 99,107, 34, 41, 13, 10,  9,108,111,118,101, 46,105,109, 97,103,
-101, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,108,111,118,101, 46,105,109,
- 97,103,101, 34, 41, 13, 10,  9,108,111,118,101, 46,103,114, 97,112,104,105, 99,
-115, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,108,111,118,101, 46,103,114,
- 97,112,104,105, 99,115, 34, 41, 13, 10,  9,108,111,118,101, 46, 97,117,100,105,
-111, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,108,111,118,101, 46, 97,117,
-100,105,111, 34, 41, 13, 10,  9,108,111,118,101, 46,112,104,121,115,105, 99,115,
- 32, 61, 32,114,101,113,117,105,114,101, 40, 34,108,111,118,101, 46,112,104,121,
-115,105, 99,115, 34, 41, 13, 10,  9,108,111,118,101, 46,115,111,117,110,100, 32,
- 61, 32,114,101,113,117,105,114,101, 40, 34,108,111,118,101, 46,115,111,117,110,
-100, 34, 41, 13, 10,  9,108,111,118,101, 46,110, 97,116,105,118,101, 32, 61, 32,
-114,101,113,117,105,114,101, 40, 34,108,111,118,101, 46,110, 97,116,105,118,101,
- 34, 41, 13, 10, 13, 10,  9,105,102, 32,108,111,118,101, 46, 95, 95, 97,114,103,
-115, 91, 49, 93, 32, 97,110,100, 32,108,111,118,101, 46, 95, 95, 97,114,103,115,
- 91, 49, 93, 32,126, 61, 32, 34, 34, 32,116,104,101,110, 13, 10,  9,  9,108,111,
-118,101, 46,102,105,108,101,115,121,115,116,101,109, 46,115,101,116, 73,100,101,
-110,116,105,116,121, 40, 34,108,111,118,101, 50, 34, 41, 13, 10,  9,  9,108,111,
-118,101, 46,102,105,108,101,115,121,115,116,101,109, 46,115,101,116, 83,111,117,
-114, 99,101, 40,108,111,118,101, 46,112, 97,116,104, 46,103,101,116,102,117,108,
-108, 40,108,111,118,101, 46, 95, 95, 97,114,103,115, 91, 49, 93, 41, 41, 13, 10,
-  9,  9,114,101,113,117,105,114,101, 40, 34,109, 97,105,110, 46,108,117, 97, 34,
- 41, 13, 10,  9,101,110,100, 13, 10, 13, 10,  9,108,111,118,101, 46,114,117,110,
- 40, 41, 13, 10,101,110,100, 13, 10, 13, 10,102,117,110, 99,116,105,111,110, 32,
-108,111,118,101, 46,114,117,110, 40, 41, 13, 10, 13, 10,  9, 45, 45, 32, 67, 79,
- 78, 70, 73, 71, 32, 66, 69, 71, 73, 78, 83, 13, 10, 13, 10,  9,105,102, 32,108,
-111,118,101, 46,103,114, 97,112,104,105, 99,115, 46, 99,104,101, 99,107, 77,111,
-100,101, 40, 56, 48, 48, 44, 32, 54, 48, 48, 44, 32,102, 97,108,115,101, 41, 32,
-116,104,101,110, 13, 10,  9,  9,108,111,118,101, 46,103,114, 97,112,104,105, 99,
-115, 46,115,101,116, 77,111,100,101, 40, 56, 48, 48, 44, 32, 54, 48, 48, 44, 32,
-102, 97,108,115,101, 44, 32,102, 97,108,115,101, 41, 13, 10,  9,101,110,100, 13,
- 10, 13, 10,  9, 45, 45, 32, 67, 79, 78, 70, 73, 71, 32, 69, 78, 68, 83, 13, 10,
- 13, 10,  9,105,102, 32,108,111,118,101, 46,108,111, 97,100, 32,116,104,101,110,
- 32,108,111,118,101, 46,108,111, 97,100, 40, 41, 32,101,110,100, 13, 10, 13, 10,
-  9, 45, 45, 32, 77, 97,105,110, 32,108,111,111,112, 32,116,105,109,101, 46, 13,
- 10,  9,119,104,105,108,101, 32,116,114,117,101, 32,100,111, 13, 10,  9,  9,108,
-111,118,101, 46,116,105,109,101,114, 46,115,116,101,112, 40, 41, 13, 10,  9,  9,
-105,102, 32,108,111,118,101, 46,117,112,100, 97,116,101, 32,116,104,101,110, 32,
-108,111,118,101, 46,117,112,100, 97,116,101, 40,108,111,118,101, 46,116,105,109,
-101,114, 46,103,101,116, 68,101,108,116, 97, 40, 41, 41, 32,101,110,100, 13, 10,
-  9,  9,108,111,118,101, 46,103,114, 97,112,104,105, 99,115, 46, 99,108,101, 97,
-114, 40, 41, 13, 10,  9,  9,105,102, 32,108,111,118,101, 46,100,114, 97,119, 32,
-116,104,101,110, 32,108,111,118,101, 46,100,114, 97,119, 40, 41, 32,101,110,100,
- 13, 10, 13, 10,  9,  9, 45, 45, 32, 80,114,111, 99,101,115,115, 32,101,118,101,
-110,116,115, 46, 13, 10,  9,  9,102,111,114, 32,101, 44, 97, 44, 98, 44, 99, 32,
-105,110, 32,108,111,118,101, 46,101,118,101,110,116, 46,112,111,108,108, 40, 41,
- 32,100,111, 13, 10,  9,  9,  9,105,102, 32,101, 32, 61, 61, 32,108,111,118,101,
- 46,101,118,101,110,116, 95,113,117,105,116, 32,116,104,101,110, 32,114,101,116,
-117,114,110, 32,101,110,100, 13, 10,  9,  9,  9,108,111,118,101, 46,104, 97,110,
-100,108,101,114,115, 91,101, 93, 40, 97, 44, 98, 44, 99, 41, 13, 10,  9,  9,101,
-110,100, 13, 10, 13, 10,  9,  9, 45, 45,108,111,118,101, 46,116,105,109,101,114,
- 46,115,108,101,101,112, 40, 49, 48, 41, 13, 10,  9,  9,108,111,118,101, 46,103,
-114, 97,112,104,105, 99,115, 46,112,114,101,115,101,110,116, 40, 41, 13, 10, 13,
- 10,  9,101,110,100, 13, 10, 13, 10,101,110,100, 13, 10, 13, 10, 45, 45, 45, 45,
+ 10,  9,101,110,100, 13, 10, 13, 10,  9,108,111, 99, 97,108, 32, 99,119,100, 32,
+ 61, 32,108,111,118,101, 46,102,105,108,101,115,121,115,116,101,109, 46,103,101,
+116, 87,111,114,107,105,110,103, 68,105,114,101, 99,116,111,114,121, 40, 41, 13,
+ 10,  9, 99,119,100, 32, 61, 32,108,111,118,101, 46,112, 97,116,104, 46,110,111,
+114,109, 97,108,115,108, 97,115,104,101,115, 40, 99,119,100, 41, 13, 10,  9, 99,
+119,100, 32, 61, 32,108,111,118,101, 46,112, 97,116,104, 46,101,110,100,115,108,
+ 97,115,104, 40, 99,119,100, 41, 13, 10,  9, 13, 10,  9, 45, 45, 32, 67,111,110,
+115,116,114,117, 99,116, 32, 97, 32,102,117,108,108, 32,112, 97,116,104, 46, 13,
+ 10,  9,114,101,116,117,114,110, 32, 99,119,100, 32, 46, 46, 32,108,111,118,101,
+ 46,112, 97,116,104, 46,110,111,114,109, 97,108,115,108, 97,115,104,101,115, 40,
+112, 41, 13, 10, 13, 10,101,110,100, 13, 10, 13, 10, 45, 45, 32, 82,101,116,117,
+114,110,115, 32,116,104,101, 32,108,101, 97,102, 32,111,102, 32, 97, 32,102,117,
+108,108, 32,112, 97,116,104, 46, 13, 10,102,117,110, 99,116,105,111,110, 32,108,
+111,118,101, 46,112, 97,116,104, 46,108,101, 97,102, 40,112, 41, 13, 10, 13, 10,
+101,110,100, 13, 10, 13, 10, 45, 45, 32, 83,116, 97,110,100, 97,114,100, 32, 99,
+ 97,108,108, 98, 97, 99,107, 32,104, 97,110,100,108,101,114,115, 46, 13, 10,108,
+111,118,101, 46,104, 97,110,100,108,101,114,115, 32, 61, 32,123, 13, 10,  9, 91,
+108,111,118,101, 46,101,118,101,110,116, 95,107,101,121,112,114,101,115,115,101,
+100, 93, 32, 61, 32,102,117,110, 99,116,105,111,110, 32, 40, 98, 44, 32,117, 41,
+ 13, 10,  9,  9,105,102, 32,108,111,118,101, 46,107,101,121,112,114,101,115,115,
+101,100, 32,116,104,101,110, 32,108,111,118,101, 46,107,101,121,112,114,101,115,
+115,101,100, 40, 98, 44, 32,117, 41, 32,101,110,100, 13, 10,  9,101,110,100, 44,
+ 13, 10,  9, 91,108,111,118,101, 46,101,118,101,110,116, 95,107,101,121,114,101,
+108,101, 97,115,101,100, 93, 32, 61, 32,102,117,110, 99,116,105,111,110, 32, 40,
+ 98, 41, 13, 10,  9,  9,105,102, 32,108,111,118,101, 46,107,101,121,114,101,108,
+101, 97,115,101,100, 32,116,104,101,110, 32,108,111,118,101, 46,107,101,121,114,
+101,108,101, 97,115,101,100, 40, 98, 41, 32,101,110,100, 13, 10,  9,101,110,100,
+ 44, 13, 10,  9, 91,108,111,118,101, 46,101,118,101,110,116, 95,109,111,117,115,
+101,112,114,101,115,115,101,100, 93, 32, 61, 32,102,117,110, 99,116,105,111,110,
+ 32, 40,120, 44,121, 44, 98, 41, 13, 10,  9,  9,105,102, 32,108,111,118,101, 46,
+109,111,117,115,101,112,114,101,115,115,101,100, 32,116,104,101,110, 32,108,111,
+118,101, 46,109,111,117,115,101,112,114,101,115,115,101,100, 40,120, 44,121, 44,
+ 98, 41, 32,101,110,100, 13, 10,  9,101,110,100, 44, 13, 10,  9, 91,108,111,118,
+101, 46,101,118,101,110,116, 95,109,111,117,115,101,114,101,108,101, 97,115,101,
+100, 93, 32, 61, 32,102,117,110, 99,116,105,111,110, 32, 40,120, 44,121, 44, 98,
+ 41, 13, 10,  9,  9,105,102, 32,108,111,118,101, 46,109,111,117,115,101,114,101,
+108,101, 97,115,101,100, 32,116,104,101,110, 32,108,111,118,101, 46,109,111,117,
+115,101,114,101,108,101, 97,115,101,100, 40,120, 44,121, 44, 98, 41, 32,101,110,
+100, 13, 10,  9,101,110,100, 44, 13, 10,  9, 91,108,111,118,101, 46,101,118,101,
+110,116, 95,106,111,121,115,116,105, 99,107,112,114,101,115,115,101,100, 93, 32,
+ 61, 32,102,117,110, 99,116,105,111,110, 32, 40,106, 44, 98, 41, 13, 10,  9,  9,
+105,102, 32,108,111,118,101, 46,106,111,121,115,116,105, 99,107,112,114,101,115,
+115,101,100, 32,116,104,101,110, 32,108,111,118,101, 46,106,111,121,115,116,105,
+ 99,107,112,114,101,115,115,101,100, 40,106, 44, 98, 41, 32,101,110,100, 13, 10,
+  9,101,110,100, 44, 13, 10,  9, 91,108,111,118,101, 46,101,118,101,110,116, 95,
+106,111,121,115,116,105, 99,107,114,101,108,101, 97,115,101,100, 93, 32, 61, 32,
+102,117,110, 99,116,105,111,110, 32, 40,106, 44, 98, 41, 13, 10,  9,  9,105,102,
+ 32,108,111,118,101, 46,106,111,121,115,116,105, 99,107,114,101,108,101, 97,115,
+101,100, 32,116,104,101,110, 32,108,111,118,101, 46,106,111,121,115,116,105, 99,
+107,114,101,108,101, 97,115,101,100, 40,106, 44, 98, 41, 32,101,110,100, 13, 10,
+  9,101,110,100, 44, 13, 10,  9, 91,108,111,118,101, 46,101,118,101,110,116, 95,
+113,117,105,116, 93, 32, 61, 32,102,117,110, 99,116,105,111,110, 32, 40, 41, 13,
+ 10,  9,  9,114,101,116,117,114,110, 13, 10,  9,101,110,100, 44, 13, 10,125, 13,
+ 10, 13, 10, 45, 45, 32, 84,104,105,115, 32, 99, 97,110, 39,116, 32, 98,101, 32,
+111,118,101,114,114,105,100,101,110, 46, 32, 13, 10,102,117,110, 99,116,105,111,
+110, 32,108,111,118,101, 46, 98,111,111,116, 40, 41, 13, 10, 13, 10,  9,112,114,
+105,110,116, 40, 34, 98,111,111,116, 34, 41, 13, 10, 13, 10,  9, 45, 45, 32, 84,
+104,105,115, 32,105,115, 32, 97, 98,115,111,108,117,116,101,108,121, 32,110,101,
+101,100,101,100, 46, 32, 13, 10,  9,108,111,118,101, 46,102,105,108,101,115,121,
+115,116,101,109, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,108,111,118,101,
+ 46,102,105,108,101,115,121,115,116,101,109, 34, 41, 13, 10, 13, 10,  9, 45, 45,
+ 32, 80,114,105,110,116,115, 32,116,104,101, 32, 97,114,103,117,109,101,110,116,
+115, 32,112, 97,115,115,101,115, 32,116,111, 32,116,104,101, 32, 97,112,112, 46,
+ 13, 10,  9,105,102, 32,108,111,118,101, 46, 95, 95, 97,114,103,115, 32,116,104,
+101,110, 13, 10,  9,  9,102,111,114, 32,105, 44,118, 32,105,110, 32,112, 97,105,
+114,115, 40,108,111,118,101, 46, 95, 95, 97,114,103,115, 41, 32,100,111, 13, 10,
+  9,  9,  9,112,114,105,110,116, 40,105, 44,118, 41, 13, 10,  9,  9,101,110,100,
+ 13, 10,  9,101,110,100,  9, 13, 10,  9, 13, 10,  9, 45, 45, 32, 83,101,116,115,
+ 32,116,104,101, 32,115,111,117,114, 99,101, 32,102,111,114, 32,116,104,101, 32,
+103, 97,109,101, 46, 13, 10,  9,105,102, 32,108,111,118,101, 46, 95, 95, 97,114,
+103,115, 91, 49, 93, 32, 97,110,100, 32,108,111,118,101, 46, 95, 95, 97,114,103,
+115, 91, 49, 93, 32,126, 61, 32, 34, 34, 32,116,104,101,110, 13, 10,  9,  9,108,
+111,118,101, 46,102,105,108,101,115,121,115,116,101,109, 46,115,101,116, 83,111,
+117,114, 99,101, 40,108,111,118,101, 46,112, 97,116,104, 46,103,101,116,102,117,
+108,108, 40,108,111,118,101, 46, 95, 95, 97,114,103,115, 91, 49, 93, 41, 41, 13,
+ 10,  9,101,110,100, 13, 10,  9, 13, 10,101,110,100, 13, 10, 13, 10,102,117,110,
+ 99,116,105,111,110, 32,108,111,118,101, 46,105,110,105,116, 40, 41, 13, 10, 13,
+ 10,  9, 45, 45, 32, 67,114,101, 97,116,101, 32,100,101,102, 97,117,108,116, 32,
+ 99,111,110,102,105,103,117,114, 97,116,105,111,110, 32,115,101,116,116,105,110,
+103,115, 46, 13, 10,  9,108,111, 99, 97,108, 32, 99, 32, 61, 32,123, 13, 10,  9,
+  9,116,105,116,108,101, 32, 61, 32, 34, 85,110,116,105,116,108,101,100, 34, 44,
+ 13, 10,  9,  9, 97,117,116,104,111,114, 32, 61, 32, 34, 85,110,110, 97,109,101,
+100, 34, 44, 13, 10,  9,  9,118,101,114,115,105,111,110, 32, 61, 32, 48, 44, 13,
+ 10,  9,  9,115, 99,114,101,101,110, 32, 61, 32,123, 13, 10,  9,  9,  9,119,105,
+100,116,104, 32, 61, 32, 56, 48, 48, 44, 13, 10,  9,  9,  9,104,101,105,103,104,
+116, 32, 61, 32, 54, 48, 48, 44, 13, 10,  9,  9,  9,102,117,108,108,115, 99,114,
+101,101,110, 32, 61, 32,102, 97,108,115,101, 44, 13, 10,  9,  9,  9,118,115,121,
+110, 99, 32, 61, 32,116,114,117,101, 44, 13, 10,  9,  9,  9,102,115, 97, 97, 32,
+ 61, 32, 48, 44, 13, 10,  9,  9,125, 44, 32, 13, 10,  9,  9,109,111,100,117,108,
+101,115, 32, 61, 32,123, 13, 10,  9,  9,  9,101,118,101,110,116, 32, 61, 32,116,
+114,117,101, 44, 13, 10,  9,  9,  9,107,101,121, 98,111, 97,114,100, 32, 61, 32,
+116,114,117,101, 44, 13, 10,  9,  9,  9,109,111,117,115,101, 32, 61, 32,116,114,
+117,101, 44, 13, 10,  9,  9,  9,116,105,109,101,114, 32, 61, 32,116,114,117,101,
+ 44, 13, 10,  9,  9,  9,106,111,121,115,116,105, 99,107, 32, 61, 32,116,114,117,
+101, 44, 13, 10,  9,  9,  9,105,109, 97,103,101, 32, 61, 32,116,114,117,101, 44,
+ 13, 10,  9,  9,  9,103,114, 97,112,104,105, 99,115, 32, 61, 32,116,114,117,101,
+ 44, 13, 10,  9,  9,  9, 97,117,100,105,111, 32, 61, 32,116,114,117,101, 44, 13,
+ 10,  9,  9,  9,112,104,121,115,105, 99,115, 32, 61, 32,116,114,117,101, 44, 13,
+ 10,  9,  9,  9,115,111,117,110,100, 32, 61, 32,116,114,117,101, 44, 13, 10,  9,
+  9,  9,110, 97,116,105,118,101, 32, 61, 32,116,114,117,101, 44, 13, 10,  9,  9,
+125, 44, 13, 10,  9,125, 13, 10, 13, 10,  9, 45, 45, 32, 73,102, 32, 99,111,110,
+102,105,103, 32,102,105,108,101, 32,101,120,105,115,116,115, 44, 32,108,111, 97,
+100, 32,105,116, 32, 97,110,100, 32, 97,108,108,111,119, 32,105,116, 32,116,111,
+ 32,117,112,100, 97,116,101, 32, 99,111,110,102,105,103, 32,116, 97, 98,108,101,
+ 46, 13, 10,  9,105,102, 32,108,111,118,101, 46,102,105,108,101,115,121,115,116,
+101,109, 46,101,120,105,115,116,115, 40, 34, 99,111,110,102, 46,108,117, 97, 34,
+ 41, 32,116,104,101,110, 13, 10,  9,  9,114,101,113,117,105,114,101, 40, 34, 99,
+111,110,102, 46,108,117, 97, 34, 41, 13, 10,  9,  9,108,111,118,101, 46, 99,111,
+110,102, 40, 99, 41, 13, 10,  9,101,110,100, 13, 10,  9, 13, 10,  9,105,102, 32,
+ 99, 46,109,111,100,117,108,101,115, 46,101,118,101,110,116, 32,116,104,101,110,
+ 32,108,111,118,101, 46,101,118,101,110,116, 32, 61, 32,114,101,113,117,105,114,
+101, 40, 34,108,111,118,101, 46,101,118,101,110,116, 34, 41, 32,101,110,100, 13,
+ 10,  9,105,102, 32, 99, 46,109,111,100,117,108,101,115, 46,107,101,121, 98,111,
+ 97,114,100, 32,116,104,101,110, 32,108,111,118,101, 46,107,101,121, 98,111, 97,
+114,100, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,108,111,118,101, 46,107,
+101,121, 98,111, 97,114,100, 34, 41, 32,101,110,100, 13, 10,  9,105,102, 32, 99,
+ 46,109,111,100,117,108,101,115, 46,109,111,117,115,101, 32,116,104,101,110, 32,
+108,111,118,101, 46,109,111,117,115,101, 32, 61, 32,114,101,113,117,105,114,101,
+ 40, 34,108,111,118,101, 46,109,111,117,115,101, 34, 41, 32,101,110,100, 13, 10,
+  9,105,102, 32, 99, 46,109,111,100,117,108,101,115, 46,116,105,109,101,114, 32,
+116,104,101,110, 32,108,111,118,101, 46,116,105,109,101,114, 32, 61, 32,114,101,
+113,117,105,114,101, 40, 34,108,111,118,101, 46,116,105,109,101,114, 34, 41, 32,
+101,110,100, 13, 10,  9,105,102, 32, 99, 46,109,111,100,117,108,101,115, 46,106,
+111,121,115,116,105, 99,107, 32,116,104,101,110, 32,108,111,118,101, 46,106,111,
+121,115,116,105, 99,107, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,108,111,
+118,101, 46,106,111,121,115,116,105, 99,107, 34, 41, 32,101,110,100, 13, 10,  9,
+105,102, 32, 99, 46,109,111,100,117,108,101,115, 46,105,109, 97,103,101, 32,116,
+104,101,110, 32,108,111,118,101, 46,105,109, 97,103,101, 32, 61, 32,114,101,113,
+117,105,114,101, 40, 34,108,111,118,101, 46,105,109, 97,103,101, 34, 41, 32,101,
+110,100, 13, 10,  9,105,102, 32, 99, 46,109,111,100,117,108,101,115, 46,103,114,
+ 97,112,104,105, 99,115, 32,116,104,101,110, 32,108,111,118,101, 46,103,114, 97,
+112,104,105, 99,115, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,108,111,118,
+101, 46,103,114, 97,112,104,105, 99,115, 34, 41, 32,101,110,100, 13, 10,  9,105,
+102, 32, 99, 46,109,111,100,117,108,101,115, 46, 97,117,100,105,111, 32,116,104,
+101,110, 32,108,111,118,101, 46, 97,117,100,105,111, 32, 61, 32,114,101,113,117,
+105,114,101, 40, 34,108,111,118,101, 46, 97,117,100,105,111, 34, 41, 32,101,110,
+100, 13, 10,  9,105,102, 32, 99, 46,109,111,100,117,108,101,115, 46,112,104,121,
+115,105, 99,115, 32,116,104,101,110, 32,108,111,118,101, 46,112,104,121,115,105,
+ 99,115, 32, 61, 32,114,101,113,117,105,114,101, 40, 34,108,111,118,101, 46,112,
+104,121,115,105, 99,115, 34, 41, 32,101,110,100, 13, 10,  9,105,102, 32, 99, 46,
+109,111,100,117,108,101,115, 46,115,111,117,110,100, 32,116,104,101,110, 32,108,
+111,118,101, 46,115,111,117,110,100, 32, 61, 32,114,101,113,117,105,114,101, 40,
+ 34,108,111,118,101, 46,115,111,117,110,100, 34, 41, 32,101,110,100, 13, 10,  9,
+105,102, 32, 99, 46,109,111,100,117,108,101,115, 46,110, 97,116,105,118,101, 32,
+116,104,101,110, 32,108,111,118,101, 46,110, 97,116,105,118,101, 32, 61, 32,114,
+101,113,117,105,114,101, 40, 34,108,111,118,101, 46,110, 97,116,105,118,101, 34,
+ 41, 32,101,110,100, 13, 10,  9, 13, 10,  9, 45, 45, 32, 83,101,116,117,112, 32,
+115, 99,114,101,101,110, 32,104,101,114,101, 46, 13, 10,  9,105,102, 32, 99, 46,
+115, 99,114,101,101,110, 32, 97,110,100, 32, 99, 46,109,111,100,117,108,101,115,
+ 46,103,114, 97,112,104,105, 99,115, 32,116,104,101,110, 32, 13, 10,  9,  9,105,
+102, 32,108,111,118,101, 46,103,114, 97,112,104,105, 99,115, 46, 99,104,101, 99,
+107, 77,111,100,101, 40, 99, 46,115, 99,114,101,101,110, 46,119,105,100,116,104,
+ 44, 32, 99, 46,115, 99,114,101,101,110, 46,104,101,105,103,104,116, 44, 32, 99,
+ 46,115, 99,114,101,101,110, 46,102,117,108,108,115, 99,114,101,101,110, 41, 32,
+116,104,101,110, 13, 10,  9,  9,  9,108,111,118,101, 46,103,114, 97,112,104,105,
+ 99,115, 46,115,101,116, 77,111,100,101, 40, 99, 46,115, 99,114,101,101,110, 46,
+119,105,100,116,104, 44, 32, 99, 46,115, 99,114,101,101,110, 46,104,101,105,103,
+104,116, 44, 32, 99, 46,115, 99,114,101,101,110, 46,102,117,108,108,115, 99,114,
+101,101,110, 44, 32, 99, 46,115, 99,114,101,101,110, 46,118,115,121,110, 99, 44,
+ 32, 99, 46,115, 99,114,101,101,110, 46,102,115, 97, 97, 41, 13, 10,  9,  9,101,
+110,100, 13, 10,  9,  9,108,111,118,101, 46,103,114, 97,112,104,105, 99,115, 46,
+115,101,116, 67, 97,112,116,105,111,110, 40, 99, 46,116,105,116,108,101, 41, 13,
+ 10,  9,101,110,100, 13, 10,  9, 13, 10,  9,105,102, 32,108,111,118,101, 46,102,
+105,108,101,115,121,115,116,101,109, 46,101,120,105,115,116,115, 40, 34,109, 97,
+105,110, 46,108,117, 97, 34, 41, 32,116,104,101,110, 32,114,101,113,117,105,114,
+101, 40, 34,109, 97,105,110, 46,108,117, 97, 34, 41, 32,101,110,100, 13, 10,  9,
+ 13, 10,101,110,100, 13, 10, 13, 10,102,117,110, 99,116,105,111,110, 32,108,111,
+118,101, 46,114,117,110, 40, 41, 13, 10, 13, 10,  9,105,102, 32,108,111,118,101,
+ 46,108,111, 97,100, 32,116,104,101,110, 32,108,111,118,101, 46,108,111, 97,100,
+ 40, 41, 32,101,110,100, 13, 10, 13, 10,  9, 45, 45, 32, 77, 97,105,110, 32,108,
+111,111,112, 32,116,105,109,101, 46, 13, 10,  9,119,104,105,108,101, 32,116,114,
+117,101, 32,100,111, 13, 10,  9,  9,108,111,118,101, 46,116,105,109,101,114, 46,
+115,116,101,112, 40, 41, 13, 10,  9,  9,105,102, 32,108,111,118,101, 46,117,112,
+100, 97,116,101, 32,116,104,101,110, 32,108,111,118,101, 46,117,112,100, 97,116,
+101, 40,108,111,118,101, 46,116,105,109,101,114, 46,103,101,116, 68,101,108,116,
+ 97, 40, 41, 41, 32,101,110,100, 13, 10,  9,  9,108,111,118,101, 46,103,114, 97,
+112,104,105, 99,115, 46, 99,108,101, 97,114, 40, 41, 13, 10,  9,  9,105,102, 32,
+108,111,118,101, 46,100,114, 97,119, 32,116,104,101,110, 32,108,111,118,101, 46,
+100,114, 97,119, 40, 41, 32,101,110,100, 13, 10, 13, 10,  9,  9, 45, 45, 32, 80,
+114,111, 99,101,115,115, 32,101,118,101,110,116,115, 46, 13, 10,  9,  9,102,111,
+114, 32,101, 44, 97, 44, 98, 44, 99, 32,105,110, 32,108,111,118,101, 46,101,118,
+101,110,116, 46,112,111,108,108, 40, 41, 32,100,111, 13, 10,  9,  9,  9,105,102,
+ 32,101, 32, 61, 61, 32,108,111,118,101, 46,101,118,101,110,116, 95,113,117,105,
+116, 32,116,104,101,110, 32,114,101,116,117,114,110, 32,101,110,100, 13, 10,  9,
+  9,  9,108,111,118,101, 46,104, 97,110,100,108,101,114,115, 91,101, 93, 40, 97,
+ 44, 98, 44, 99, 41, 13, 10,  9,  9,101,110,100, 13, 10, 13, 10,  9,  9, 45, 45,
+108,111,118,101, 46,116,105,109,101,114, 46,115,108,101,101,112, 40, 49, 48, 41,
+ 13, 10,  9,  9,108,111,118,101, 46,103,114, 97,112,104,105, 99,115, 46,112,114,
+101,115,101,110,116, 40, 41, 13, 10, 13, 10,  9,101,110,100, 13, 10, 13, 10,101,
+110,100, 13, 10, 13, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 13, 10, 45, 45, 32,
- 68,101,102, 97,117,108,116, 32,115, 99,114,101,101,110, 46, 13, 10, 45, 45, 45,
+ 45, 45, 45, 45, 45, 13, 10, 45, 45, 32, 68,101,102, 97,117,108,116, 32,115, 99,
+114,101,101,110, 46, 13, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 13, 10, 13, 10,
-102,117,110, 99,116,105,111,110, 32,108,111,118,101, 46,100,101,102, 97,117,108,
-116,115, 99,114,101,101,110, 40, 41, 13, 10, 13, 10,  9, 45, 45, 32, 77, 97,105,
-110, 32,108,111,111,112, 32,103,111,101,115, 32,104,101,114,101, 46, 13, 10, 13,
- 10,101,110,100, 13, 10, 13, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 13, 10, 13, 10,102,117,110, 99,116,105,111,110, 32,108,
+111,118,101, 46,100,101,102, 97,117,108,116,115, 99,114,101,101,110, 40, 41, 13,
+ 10, 13, 10,  9, 45, 45, 32, 77, 97,105,110, 32,108,111,111,112, 32,103,111,101,
+115, 32,104,101,114,101, 46, 13, 10, 13, 10,101,110,100, 13, 10, 13, 10, 45, 45,
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 13, 10, 45, 45, 32, 69,114,114,111,114, 32,115, 99,
-114,101,101,110, 46, 13, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 13, 10, 45,
+ 45, 32, 69,114,114,111,114, 32,115, 99,114,101,101,110, 46, 13, 10, 45, 45, 45,
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 13, 10, 13, 10,102,117,110, 99,116,105,111,110, 32,108,
-111,118,101, 46,101,114,114,111,114,115, 99,114,101,101,110, 40, 41, 13, 10,  9,
- 13, 10,  9, 45, 45, 32, 77, 97,105,110, 32,108,111,111,112, 32,103,111,101,115,
- 32,104,101,114,101, 46, 13, 10, 13, 10,101,110,100, 13, 10, 13, 10, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 13, 10, 13, 10,
+102,117,110, 99,116,105,111,110, 32,108,111,118,101, 46,101,114,114,111,114,115,
+ 99,114,101,101,110, 40, 41, 13, 10,  9, 13, 10,  9, 45, 45, 32, 77, 97,105,110,
+ 32,108,111,111,112, 32,103,111,101,115, 32,104,101,114,101, 46, 13, 10, 13, 10,
+101,110,100, 13, 10, 13, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 13, 10, 45, 45,
- 32, 84,104,101, 32,114,111,111,116, 32,111,102, 32, 97,108,108, 32, 99, 97,108,
-108,115, 46, 13, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 13, 10, 45, 45, 32, 84,104,101, 32,114,111,111,116, 32,
+111,102, 32, 97,108,108, 32, 99, 97,108,108,115, 46, 13, 10, 45, 45, 45, 45, 45,
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 13, 10, 13, 10,108,111, 99, 97,108, 32,114,101,115,117,108,116,
- 32, 61, 32,120,112, 99, 97,108,108, 40,108,111,118,101, 46,105,110,105,116, 44,
- 13, 10,  9,102,117,110, 99,116,105,111,110, 32, 40,109,115,103, 41, 13, 10,  9,
-  9,112,114,105,110,116, 40,109,115,103, 44, 32,100,101, 98,117,103, 46,116,114,
- 97, 99,101, 98, 97, 99,107, 40, 41, 41, 13, 10,  9,101,110,100, 41, 13, 10, 13,
- 10, 13, 10,112,114,105,110,116, 40, 34, 68,111,110,101, 46, 34, 41,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 13, 10, 13, 10,102,117,
+110, 99,116,105,111,110, 32,101,114,114,111,114, 95,112,114,105,110,116,101,114,
+ 40,109,115,103, 41, 13, 10,  9,112,114,105,110,116, 40, 34, 98,111,111,116, 34,
+ 44, 32,109,115,103, 44, 32,100,101, 98,117,103, 46,116,114, 97, 99,101, 98, 97,
+ 99,107, 40, 41, 41, 13, 10,101,110,100, 13, 10, 13, 10,114,101,115,117,108,116,
+ 32, 61, 32,120,112, 99, 97,108,108, 40,108,111,118,101, 46, 98,111,111,116, 44,
+ 32,101,114,114,111,114, 95,112,114,105,110,116,101,114, 41, 13, 10,114,101,115,
+117,108,116, 32, 61, 32,120,112, 99, 97,108,108, 40,108,111,118,101, 46,105,110,
+105,116, 44, 32,101,114,114,111,114, 95,112,114,105,110,116,101,114, 41, 13, 10,
+114,101,115,117,108,116, 32, 61, 32,120,112, 99, 97,108,108, 40,108,111,118,101,
+ 46,114,117,110, 44, 32,101,114,114,111,114, 95,112,114,105,110,116,101,114, 41,
+ 13, 10, 13, 10,112,114,105,110,116, 40, 34, 68,111,110,101, 46, 34, 41,
 };
 
  if (luaL_loadbuffer(L,(const char*)B1,sizeof(B1),"boot.lua")==0) lua_call(L, 0, 0);