summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--Makefile4
-rw-r--r--build/example.py24
-rw-r--r--build/tpt_console.py77
-rw-r--r--console_README46
-rw-r--r--getheader.py38
-rw-r--r--includes/defines.h2
-rw-r--r--includes/interface.h2
-rw-r--r--includes/powder.h12
-rw-r--r--includes/pyconsole.h1
-rw-r--r--pyconsole.h67
-rw-r--r--src/interface.c51
-rw-r--r--src/main.c1122
-rw-r--r--src/powder.c10
-rw-r--r--src/python/tpt_console.py77
15 files changed, 1064 insertions, 472 deletions
diff --git a/.gitignore b/.gitignore
index 65b90da..b65e123 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,6 @@ gmon.out
*.*.orig
build/powder*
build/stamps/*
+*~
+*.pyc
+utils/* \ No newline at end of file
diff --git a/Makefile b/Makefile
index de180d7..407f7ad 100644
--- a/Makefile
+++ b/Makefile
@@ -1,8 +1,8 @@
SOURCES := src/*.c src/elements/*.c
-CFLAGS := -w -std=c99 -D_POSIX_C_SOURCE=200112L -Iincludes/
+CFLAGS := -w -std=c99 -D_POSIX_C_SOURCE=200112L -Iincludes/
OFLAGS := -O3 -ffast-math -ftree-vectorize -funsafe-math-optimizations
-LFLAGS := -lSDL -lm -lbz2
+LFLAGS := -lSDL -lm -lbz2 -lpython2.7 -lm -L/usr/lib/python2.7/config -I/usr/include/python2.7
LFLAGS_X := -lm -lbz2 -lSDLmain
MFLAGS_SSE3 := -march=native -DX86 -DX86_SSE3 -msse3
MFLAGS_SSE2 := -march=native -DX86 -DX86_SSE2 -msse2
diff --git a/build/example.py b/build/example.py
new file mode 100644
index 0000000..ade32b7
--- /dev/null
+++ b/build/example.py
@@ -0,0 +1,24 @@
+import tpt
+import random
+import time
+import utils
+# example script
+
+def noise(typ,amount=50):
+ for xx in range(4,612):
+ for yy in range(4,384):
+ if(random.randrange(0,100)<amount):
+ tpt.create(xx,yy,typ)
+
+def increment(amount=1):
+ for xx in range(4,612):
+ for yy in range(4,384):
+ i = tpt.get_pmap(xx,yy)>>8
+ t = tpt.get_prop(i,"type")+amount
+ if t>=148:
+ t=t-148
+ if t==128:
+ t=129
+ if t==55:
+ t=56
+ tpt.set_type(i=i,settoint=t)
diff --git a/build/tpt_console.py b/build/tpt_console.py
new file mode 100644
index 0000000..864fed8
--- /dev/null
+++ b/build/tpt_console.py
@@ -0,0 +1,77 @@
+import tpt
+from tpt import *
+from utils import *
+import sys
+import code
+import ctypes
+import traceback
+#print "console module loaded."
+#redirect stdout like this:
+class logger:
+ def write(self,txt):
+ txt=txt.strip().split("\n")[-1]
+ repr(txt)
+ tpt.log(txt)
+sys.stdout=logger()
+sys.stderr=logger()
+
+element={"none":0,"dust":1,"watr":2,"oil":3,"fire":4,"stne":5,"lava":6,"gunp":7,
+ "nitr":8,"clne":9,"gas":10,"plex":11,"goo":12,"icei":13,"metl":14,"sprk":15,
+ "snow":16,"wood":17,"neut":18,"plut":19,"plnt":20,"acid":21,"void":22,
+ "wtrv":23,"cnct":24,"dstw":25,"salt":26,"sltw":27,"dmnd":28,"bmtl":29,
+ "brmt":30,"phot":31,"uran":32,"wax":33,"mwax":34,"pscn":35,"nscn":36,
+ "lntg":37,"insl":38,"bhol":39,"whol":40,"rbdm":41,"lrbd":42,"ntct":43,
+ "sand":44,"glas":45,"ptct":46,"bgla":47,"thdr":48,"plsm":49,"etrd":50,
+ "nice":51,"nble":52,"btry":53,"lcry":54,"stkm":55,"swch":56,"smke":57,
+ "desl":58,"coal":59,"lo2":60,"o2":61,"inwr":62,"yest":63,"dyst":64,
+ "thrm":65,"glow":66,"brck":67,"hflm":68,"firw":69,"fuse":70,"fsep":71,
+ "amtr":72,"bcol":73,"pcln":74,"hswc":75,"iron":76,"mort":77,"gol":78,
+ "hlif":79,"asim":80,"2x2":81,"dani":82,"amoe":83,"move":84,"pgol":85,
+ "dmoe":86,"34":87,"llif":88,"stan":89,"spng":90,"rime":91,"fog":92,
+ "bcln":93,"love":94,"deut":95,"warp":96,"pump":97,"fwrk":98,"pipe":99,
+ "frzz":100,"frzw":101,"grav":102,"bizr":103,"bizrg":104,"bizrs":105,
+ "inst":106,"isoz":107,"iszs":108,"prti":109,"prto":110,"pste":111,
+ "psts":112,"anar":113,"vine":114,"invis":115,"equalvel":116,"spawn2":117,
+ "spawn":118,"shld1":119,"shld2":120,"shld3":121,"shld4":122,"lolz":123,
+ "wifi":124,"filt":125,"aray":126,"bray":127,"stkm2":128,"bomb":129,
+ "c5":130,"sing":131,"qrtz":132,"pqrt":133,"seed":134,"maze":135,
+ "coag":136,"wall":137,"gnar":138,"repl":139,"myst":140,"boyl":141,
+ "lote":142,"frg2":143,"star":144,"frog":145,"bran":146,"wind":147,
+ "num":148}
+
+
+def fork_unblock():
+ pass#i need to implement this some day.
+def error(ex):
+ err=traceback.format_exc()
+ sys.stdout.write(err)
+
+def clean():
+ #add any functions that must be reachable here.
+ """copy=["__builtins__","__name__","__doc__","__package__",'tpt','clean',
+ 'element','fork','_fork','fork_status','fork_unblock','sys']
+ handle.glob={}
+ for item in copy:
+ handle.glob[item]=globals()[item]"""
+ handle.glob=globals()
+ handle.buf=""
+
+def handle(txt):
+ try:
+ a=handle.glob
+ except:
+ clean()
+ try:
+ _handle(txt)
+ except Exception as ex:
+ error(ex)
+
+def _handle(txt):
+ #print "handling '%s'"%txt
+ try:
+ sys.stdout.write(repr(eval(txt,handle.glob)))
+ except:
+ try:
+ exec txt in handle.glob
+ except Exception as ex:
+ error(ex)
diff --git a/console_README b/console_README
new file mode 100644
index 0000000..bd85e82
--- /dev/null
+++ b/console_README
@@ -0,0 +1,46 @@
+### CONSOLE ###
+the console in this version is a python console and will execute any command you enter.
+the api for interacting with the powder toy is contained in the tpt module and is already imported at startup.
+currently implemented api functions:
+ create(x,y,type) create a particle of type <type> at <x>,<y>
+ reset_velocity() resets all velocity
+ reset_pressure() resets all pressure
+ reset_sparks() resets all sparks
+
+### USING SET COMMANDS ###
+the console uses keywords to identify variables of what to set, you can specify x and y coords with x=100 y=100, ect.
+i is the particle number
+name will change all of name's type to the setto variable. It needs to be a string "dust" ect, "all" for all.
+the setto is what the particle(s) will be set to, it is a string for the type/ctype commands, and an int for the rest.
+you need to set the to* variable and one location/name/coords for it to work.
+ set_type(x=,y=,i=,name="",setto="")
+ set_life()
+ set_temp()
+ set_tmp()
+ set_x()
+ set_y()
+ set_vx()
+ set_vy()
+ set_ctype()
+
+ pause() pause the game(note that closing the console
+ pauses the game)
+ unpause() unpause the game(note that closing the console
+ pauses the game)
+ toggle_pause() toggle pause(note that closing the console
+ pauses the game)
+ close_console() closes the console and pauses the game
+ open_console() opens the console
+ toggle_console() toggles the console
+
+NOTE: these functions don't do bounds checking, which means that they CAN AND
+ WILL CRASH the powder toy. be carefull.
+
+### TIPS&TRICKS ###
+all functions that need a particle type expect a number. but instead of doing
+tpt.set_life(32,life) you can do tpt.set_life(element['uran'],life)
+
+### COMPILING ###
+before you compile you should have python 2.x installed.
+you must run the "getheader.py" script to get the correct linking options, add
+these options to the makefile
diff --git a/getheader.py b/getheader.py
new file mode 100644
index 0000000..58af0ef
--- /dev/null
+++ b/getheader.py
@@ -0,0 +1,38 @@
+import sys
+import os.path
+import compileall
+path=os.path.join(sys.exec_prefix,"include","python%s"%sys.version[:3])
+#print "headers at ",repr(path)
+#-lpython2.3 -lm -L/usr/lib/python2.3/config
+args="-lpython%s -lm -L%s"%(sys.version[:3],os.path.join(sys.exec_prefix,"lib","python%s"%sys.version[:3],"config"))
+print " linux args are"
+print args,"-I%s"%path
+
+path=os.path.join(sys.exec_prefix,"include")
+args="-lpython%s -lm -L%s"%(sys.version[:3],os.path.join(sys.exec_prefix,"lib","config"))#,"python%s"%sys.version[:3]
+print "\n windows args are"
+print args,"-I%s"%path
+
+#unsigned char tpt_console_pyc[] = { 0x1B, 0x57};
+lst=[]
+compileall.compile_dir("./src/python", force=1)
+
+print "\n\n\ngenerating pyconsole.h"
+
+fname="./src/python/tpt_console.pyc"
+try:
+ fid=open(fname,"r")
+except IOError:
+ fname="./src/python/tpt_console.pyo"
+finally:
+ fid.close()
+
+with open(fname,"r") as fid:
+ for char in fid.read():
+ lst.append("0x"+hex(ord(char)))
+tmp=",".join(lst)
+out=''.join(["unsigned char tpt_console_pyc[] = {",tmp,"};"])
+with open("./includes/pyconsole.h","w") as fid:
+ fid.write(out)
+print "done"
+ \ No newline at end of file
diff --git a/includes/defines.h b/includes/defines.h
index f3abed3..8ac19db 100644
--- a/includes/defines.h
+++ b/includes/defines.h
@@ -16,6 +16,8 @@
#define THUMB_CACHE_SIZE 256
+//#define pyconsole
+
#define IMGCONNS 3
#define TIMEOUT 100
#define HTTP_TIMEOUT 10
diff --git a/includes/interface.h b/includes/interface.h
index ea1f9a5..d63770a 100644
--- a/includes/interface.h
+++ b/includes/interface.h
@@ -225,7 +225,7 @@ void open_link(char *uri);
int report_ui(pixel *vid_buf, char *save_id);
-char *console_ui(pixel *vid_buf, char error[255]);
+char *console_ui(pixel *vid_buf, char error[255],char console_more);
int console_parse_coords(char *txt, int *x, int *y, char *err);
int console_parse_type(char *txt, int *element, char *err);
int console_parse_partref(char *txt, int *which, char *err);
diff --git a/includes/powder.h b/includes/powder.h
index 581c8da..f12e8ec 100644
--- a/includes/powder.h
+++ b/includes/powder.h
@@ -49,15 +49,15 @@
-#define PT_NONE 0
-#define PT_DUST 1
-#define PT_WATR 2
+#define PT_NONE 0
+#define PT_DUST 1
+#define PT_WATR 2
#define PT_OIL 3
#define PT_FIRE 4
#define PT_STNE 5
#define PT_LAVA 6
-#define PT_GUNP 7
-#define PT_NITR 8
+#define PT_GUNP 7
+#define PT_NITR 8
#define PT_CLNE 9
#define PT_GAS 10
#define PT_PLEX 11
@@ -165,7 +165,7 @@
#define PT_ANAR 113
#define PT_VINE 114
#define PT_INVIS 115
-#define PT_EQUALVEL 116//all particles equal their velocities
+#define PT_EQUALVEL 116 //all particles equal their velocities
#define PT_SPAWN2 117
#define PT_SPAWN 118
#define PT_SHLD1 119
diff --git a/includes/pyconsole.h b/includes/pyconsole.h
new file mode 100644
index 0000000..4da3f3b
--- /dev/null
+++ b/includes/pyconsole.h
@@ -0,0 +1 @@
+unsigned char tpt_console_pyc[] = {0x0x3,0x0xf3,0x0xd,0x0xa,0x0x26,0x0xe1,0x0x6f,0x0x4d,0x0x63,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x3,0x0x0,0x0x0,0x0x0,0x0x40,0x0x0,0x0x0,0x0x0,0x0x73,0x0xc5,0x0x4,0x0x0,0x0x0,0x0x64,0x0x0,0x0x0,0x0x64,0x0x1,0x0x0,0x0x6c,0x0x0,0x0x0,0x0x5a,0x0x0,0x0x0,0x0x64,0x0x0,0x0x0,0x0x64,0x0x2,0x0x0,0x0x6c,0x0x0,0x0x0,0x0x54,0x0x64,0x0x0,0x0x0,0x0x64,0x0x2,0x0x0,0x0x6c,0x0x1,0x0x0,0x0x54,0x0x64,0x0x0,0x0x0,0x0x64,0x0x1,0x0x0,0x0x6c,0x0x2,0x0x0,0x0x5a,0x0x2,0x0x0,0x0x64,0x0x0,0x0x0,0x0x64,0x0x1,0x0x0,0x0x6c,0x0x3,0x0x0,0x0x5a,0x0x3,0x0x0,0x0x64,0x0x0,0x0x0,0x0x64,0x0x1,0x0x0,0x0x6c,0x0x4,0x0x0,0x0x5a,0x0x4,0x0x0,0x0x64,0x0x0,0x0x0,0x0x64,0x0x1,0x0x0,0x0x6c,0x0x5,0x0x0,0x0x5a,0x0x5,0x0x0,0x0x64,0x0x3,0x0x0,0x0x64,0x0x34,0x0x1,0x0x64,0x0x4,0x0x0,0x0x84,0x0x0,0x0x0,0x0x83,0x0x0,0x0x0,0x0x59,0x0x5a,0x0x6,0x0x0,0x0x65,0x0x6,0x0x0,0x0x83,0x0x0,0x0x0,0x0x65,0x0x2,0x0x0,0x0x5f,0x0x7,0x0x0,0x0x65,0x0x6,0x0x0,0x0x83,0x0x0,0x0x0,0x0x65,0x0x2,0x0x0,0x0x5f,0x0x8,0x0x0,0x0x69,0x0x95,0x0x0,0x0x64,0x0x5,0x0x0,0x0x64,0x0x6,0x0x0,0x0x36,0x0x64,0x0x7,0x0x0,0x0x64,0x0x8,0x0x0,0x0x36,0x0x64,0x0x9,0x0x0,0x0x64,0x0xa,0x0x0,0x0x36,0x0x64,0x0xb,0x0x0,0x0x64,0x0xc,0x0x0,0x0x36,0x0x64,0x0xd,0x0x0,0x0x64,0x0xe,0x0x0,0x0x36,0x0x64,0x0xf,0x0x0,0x0x64,0x0x10,0x0x0,0x0x36,0x0x64,0x0x11,0x0x0,0x0x64,0x0x12,0x0x0,0x0x36,0x0x64,0x0x13,0x0x0,0x0x64,0x0x14,0x0x0,0x0x36,0x0x64,0x0x15,0x0x0,0x0x64,0x0x16,0x0x0,0x0x36,0x0x64,0x0x17,0x0x0,0x0x64,0x0x18,0x0x0,0x0x36,0x0x64,0x0x19,0x0x0,0x0x64,0x0x1a,0x0x0,0x0x36,0x0x64,0x0x1b,0x0x0,0x0x64,0x0x1c,0x0x0,0x0x36,0x0x64,0x0x1d,0x0x0,0x0x64,0x0x1e,0x0x0,0x0x36,0x0x64,0x0x1f,0x0x0,0x0x64,0x0x20,0x0x0,0x0x36,0x0x64,0x0x21,0x0x0,0x0x64,0x0x22,0x0x0,0x0x36,0x0x64,0x0x23,0x0x0,0x0x64,0x0x24,0x0x0,0x0x36,0x0x64,0x0x25,0x0x0,0x0x64,0x0x26,0x0x0,0x0x36,0x0x64,0x0x27,0x0x0,0x0x64,0x0x28,0x0x0,0x0x36,0x0x64,0x0x29,0x0x0,0x0x64,0x0x2a,0x0x0,0x0x36,0x0x64,0x0x2b,0x0x0,0x0x64,0x0x2c,0x0x0,0x0x36,0x0x64,0x0x2d,0x0x0,0x0x64,0x0x2e,0x0x0,0x0x36,0x0x64,0x0x2f,0x0x0,0x0x64,0x0x30,0x0x0,0x0x36,0x0x64,0x0x31,0x0x0,0x0x64,0x0x32,0x0x0,0x0x36,0x0x64,0x0x33,0x0x0,0x0x64,0x0x34,0x0x0,0x0x36,0x0x64,0x0x35,0x0x0,0x0x64,0x0x36,0x0x0,0x0x36,0x0x64,0x0x37,0x0x0,0x0x64,0x0x38,0x0x0,0x0x36,0x0x64,0x0x39,0x0x0,0x0x64,0x0x3a,0x0x0,0x0x36,0x0x64,0x0x3b,0x0x0,0x0x64,0x0x3c,0x0x0,0x0x36,0x0x64,0x0x3d,0x0x0,0x0x64,0x0x3e,0x0x0,0x0x36,0x0x64,0x0x3f,0x0x0,0x0x64,0x0x40,0x0x0,0x0x36,0x0x64,0x0x41,0x0x0,0x0x64,0x0x42,0x0x0,0x0x36,0x0x64,0x0x43,0x0x0,0x0x64,0x0x44,0x0x0,0x0x36,0x0x64,0x0x45,0x0x0,0x0x64,0x0x46,0x0x0,0x0x36,0x0x64,0x0x47,0x0x0,0x0x64,0x0x48,0x0x0,0x0x36,0x0x64,0x0x49,0x0x0,0x0x64,0x0x4a,0x0x0,0x0x36,0x0x64,0x0x4b,0x0x0,0x0x64,0x0x4c,0x0x0,0x0x36,0x0x64,0x0x4d,0x0x0,0x0x64,0x0x4e,0x0x0,0x0x36,0x0x64,0x0x4f,0x0x0,0x0x64,0x0x50,0x0x0,0x0x36,0x0x64,0x0x51,0x0x0,0x0x64,0x0x52,0x0x0,0x0x36,0x0x64,0x0x53,0x0x0,0x0x64,0x0x54,0x0x0,0x0x36,0x0x64,0x0x55,0x0x0,0x0x64,0x0x56,0x0x0,0x0x36,0x0x64,0x0x57,0x0x0,0x0x64,0x0x58,0x0x0,0x0x36,0x0x64,0x0x59,0x0x0,0x0x64,0x0x5a,0x0x0,0x0x36,0x0x64,0x0x5b,0x0x0,0x0x64,0x0x5c,0x0x0,0x0x36,0x0x64,0x0x5d,0x0x0,0x0x64,0x0x5e,0x0x0,0x0x36,0x0x64,0x0x5f,0x0x0,0x0x64,0x0x60,0x0x0,0x0x36,0x0x64,0x0x61,0x0x0,0x0x64,0x0x62,0x0x0,0x0x36,0x0x64,0x0x63,0x0x0,0x0x64,0x0x64,0x0x0,0x0x36,0x0x64,0x0x65,0x0x0,0x0x64,0x0x66,0x0x0,0x0x36,0x0x64,0x0x67,0x0x0,0x0x64,0x0x68,0x0x0,0x0x36,0x0x64,0x0x69,0x0x0,0x0x64,0x0x6a,0x0x0,0x0x36,0x0x64,0x0x6b,0x0x0,0x0x64,0x0x6c,0x0x0,0x0x36,0x0x64,0x0x6d,0x0x0,0x0x64,0x0x6e,0x0x0,0x0x36,0x0x64,0x0x6f,0x0x0,0x0x64,0x0x70,0x0x0,0x0x36,0x0x64,0x0x71,0x0x0,0x0x64,0x0x72,0x0x0,0x0x36,0x0x64,0x0x73,0x0x0,0x0x64,0x0x74,0x0x0,0x0x36,0x0x64,0x0x75,0x0x0,0x0x64,0x0x76,0x0x0,0x0x36,0x0x64,0x0x77,0x0x0,0x0x64,0x0x78,0x0x0,0x0x36,0x0x64,0x0x79,0x0x0,0x0x64,0x0x7a,0x0x0,0x0x36,0x0x64,0x0x7b,0x0x0,0x0x64,0x0x7c,0x0x0,0x0x36,0x0x64,0x0x7d,0x0x0,0x0x64,0x0x7e,0x0x0,0x0x36,0x0x64,0x0x7f,0x0x0,0x0x64,0x0x80,0x0x0,0x0x36,0x0x64,0x0x81,0x0x0,0x0x64,0x0x82,0x0x0,0x0x36,0x0x64,0x0x83,0x0x0,0x0x64,0x0x84,0x0x0,0x0x36,0x0x64,0x0x85,0x0x0,0x0x64,0x0x86,0x0x0,0x0x36,0x0x64,0x0x87,0x0x0,0x0x64,0x0x88,0x0x0,0x0x36,0x0x64,0x0x89,0x0x0,0x0x64,0x0x8a,0x0x0,0x0x36,0x0x64,0x0x8b,0x0x0,0x0x64,0x0x8c,0x0x0,0x0x36,0x0x64,0x0x8d,0x0x0,0x0x64,0x0x8e,0x0x0,0x0x36,0x0x64,0x0x8f,0x0x0,0x0x64,0x0x90,0x0x0,0x0x36,0x0x64,0x0x91,0x0x0,0x0x64,0x0x92,0x0x0,0x0x36,0x0x64,0x0x93,0x0x0,0x0x64,0x0x94,0x0x0,0x0x36,0x0x64,0x0x95,0x0x0,0x0x64,0x0x96,0x0x0,0x0x36,0x0x64,0x0x97,0x0x0,0x0x64,0x0x98,0x0x0,0x0x36,0x0x64,0x0x99,0x0x0,0x0x64,0x0x9a,0x0x0,0x0x36,0x0x64,0x0x9b,0x0x0,0x0x64,0x0x9c,0x0x0,0x0x36,0x0x64,0x0x9d,0x0x0,0x0x64,0x0x9e,0x0x0,0x0x36,0x0x64,0x0x9f,0x0x0,0x0x64,0x0xa0,0x0x0,0x0x36,0x0x64,0x0xa1,0x0x0,0x0x64,0x0xa2,0x0x0,0x0x36,0x0x64,0x0xa3,0x0x0,0x0x64,0x0xa4,0x0x0,0x0x36,0x0x64,0x0xa5,0x0x0,0x0x64,0x0xa6,0x0x0,0x0x36,0x0x64,0x0xa7,0x0x0,0x0x64,0x0xa8,0x0x0,0x0x36,0x0x64,0x0xa9,0x0x0,0x0x64,0x0xaa,0x0x0,0x0x36,0x0x64,0x0xab,0x0x0,0x0x64,0x0xac,0x0x0,0x0x36,0x0x64,0x0xad,0x0x0,0x0x64,0x0xae,0x0x0,0x0x36,0x0x64,0x0xaf,0x0x0,0x0x64,0x0xb0,0x0x0,0x0x36,0x0x64,0x0xb1,0x0x0,0x0x64,0x0xb2,0x0x0,0x0x36,0x0x64,0x0xb3,0x0x0,0x0x64,0x0xb4,0x0x0,0x0x36,0x0x64,0x0xb5,0x0x0,0x0x64,0x0xb6,0x0x0,0x0x36,0x0x64,0x0xb7,0x0x0,0x0x64,0x0xb8,0x0x0,0x0x36,0x0x64,0x0xb9,0x0x0,0x0x64,0x0xba,0x0x0,0x0x36,0x0x64,0x0xbb,0x0x0,0x0x64,0x0xbc,0x0x0,0x0x36,0x0x64,0x0xbd,0x0x0,0x0x64,0x0xbe,0x0x0,0x0x36,0x0x64,0x0xbf,0x0x0,0x0x64,0x0xc0,0x0x0,0x0x36,0x0x64,0x0xc1,0x0x0,0x0x64,0x0xc2,0x0x0,0x0x36,0x0x64,0x0xc3,0x0x0,0x0x64,0x0xc4,0x0x0,0x0x36,0x0x64,0x0xc5,0x0x0,0x0x64,0x0xc6,0x0x0,0x0x36,0x0x64,0x0xc7,0x0x0,0x0x64,0x0xc8,0x0x0,0x0x36,0x0x64,0x0xc9,0x0x0,0x0x64,0x0xca,0x0x0,0x0x36,0x0x64,0x0xcb,0x0x0,0x0x64,0x0xcc,0x0x0,0x0x36,0x0x64,0x0xcd,0x0x0,0x0x64,0x0xce,0x0x0,0x0x36,0x0x64,0x0xcf,0x0x0,0x0x64,0x0xd0,0x0x0,0x0x36,0x0x64,0x0xd1,0x0x0,0x0x64,0x0xd2,0x0x0,0x0x36,0x0x64,0x0xd3,0x0x0,0x0x64,0x0xd4,0x0x0,0x0x36,0x0x64,0x0xd5,0x0x0,0x0x64,0x0xd6,0x0x0,0x0x36,0x0x64,0x0xd7,0x0x0,0x0x64,0x0xd8,0x0x0,0x0x36,0x0x64,0x0xd9,0x0x0,0x0x64,0x0xda,0x0x0,0x0x36,0x0x64,0x0xdb,0x0x0,0x0x64,0x0xdc,0x0x0,0x0x36,0x0x64,0x0xdd,0x0x0,0x0x64,0x0xde,0x0x0,0x0x36,0x0x64,0x0xdf,0x0x0,0x0x64,0x0xe0,0x0x0,0x0x36,0x0x64,0x0xe1,0x0x0,0x0x64,0x0xe2,0x0x0,0x0x36,0x0x64,0x0xe3,0x0x0,0x0x64,0x0xe4,0x0x0,0x0x36,0x0x64,0x0xe5,0x0x0,0x0x64,0x0xe6,0x0x0,0x0x36,0x0x64,0x0xe7,0x0x0,0x0x64,0x0xe8,0x0x0,0x0x36,0x0x64,0x0xe9,0x0x0,0x0x64,0x0xea,0x0x0,0x0x36,0x0x64,0x0xeb,0x0x0,0x0x64,0x0xec,0x0x0,0x0x36,0x0x64,0x0xed,0x0x0,0x0x64,0x0xee,0x0x0,0x0x36,0x0x64,0x0xef,0x0x0,0x0x64,0x0xf0,0x0x0,0x0x36,0x0x64,0x0xf1,0x0x0,0x0x64,0x0xf2,0x0x0,0x0x36,0x0x64,0x0xf3,0x0x0,0x0x64,0x0xf4,0x0x0,0x0x36,0x0x64,0x0xf5,0x0x0,0x0x64,0x0xf6,0x0x0,0x0x36,0x0x64,0x0xf7,0x0x0,0x0x64,0x0xf8,0x0x0,0x0x36,0x0x64,0x0xf9,0x0x0,0x0x64,0x0xfa,0x0x0,0x0x36,0x0x64,0x0xfb,0x0x0,0x0x64,0x0xfc,0x0x0,0x0x36,0x0x64,0x0xfd,0x0x0,0x0x64,0x0xfe,0x0x0,0x0x36,0x0x64,0x0xff,0x0x0,0x0x64,0x0x0,0x0x1,0x0x36,0x0x64,0x0x1,0x0x1,0x0x64,0x0x2,0x0x1,0x0x36,0x0x64,0x0x3,0x0x1,0x0x64,0x0x4,0x0x1,0x0x36,0x0x64,0x0x5,0x0x1,0x0x64,0x0x6,0x0x1,0x0x36,0x0x64,0x0x7,0x0x1,0x0x64,0x0x8,0x0x1,0x0x36,0x0x64,0x0x9,0x0x1,0x0x64,0x0xa,0x0x1,0x0x36,0x0x64,0x0xb,0x0x1,0x0x64,0x0xc,0x0x1,0x0x36,0x0x64,0x0xd,0x0x1,0x0x64,0x0xe,0x0x1,0x0x36,0x0x64,0x0xf,0x0x1,0x0x64,0x0x10,0x0x1,0x0x36,0x0x64,0x0x11,0x0x1,0x0x64,0x0x12,0x0x1,0x0x36,0x0x64,0x0x13,0x0x1,0x0x64,0x0x14,0x0x1,0x0x36,0x0x64,0x0x15,0x0x1,0x0x64,0x0x16,0x0x1,0x0x36,0x0x64,0x0x17,0x0x1,0x0x64,0x0x18,0x0x1,0x0x36,0x0x64,0x0x19,0x0x1,0x0x64,0x0x1a,0x0x1,0x0x36,0x0x64,0x0x1b,0x0x1,0x0x64,0x0x1c,0x0x1,0x0x36,0x0x64,0x0x1d,0x0x1,0x0x64,0x0x1e,0x0x1,0x0x36,0x0x64,0x0x1f,0x0x1,0x0x64,0x0x20,0x0x1,0x0x36,0x0x64,0x0x21,0x0x1,0x0x64,0x0x22,0x0x1,0x0x36,0x0x64,0x0x23,0x0x1,0x0x64,0x0x24,0x0x1,0x0x36,0x0x64,0x0x25,0x0x1,0x0x64,0x0x26,0x0x1,0x0x36,0x0x64,0x0x27,0x0x1,0x0x64,0x0x28,0x0x1,0x0x36,0x0x64,0x0x29,0x0x1,0x0x64,0x0x2a,0x0x1,0x0x36,0x0x64,0x0x2b,0x0x1,0x0x64,0x0x2c,0x0x1,0x0x36,0x0x64,0x0x2d,0x0x1,0x0x64,0x0x2e,0x0x1,0x0x36,0x0x5a,0x0x9,0x0x0,0x0x64,0x0x2f,0x0x1,0x0x84,0x0x0,0x0x0,0x0x5a,0x0xa,0x0x0,0x0x64,0x0x30,0x0x1,0x0x84,0x0x0,0x0x0,0x0x5a,0x0xb,0x0x0,0x0x64,0x0x31,0x0x1,0x0x84,0x0x0,0x0x0,0x0x5a,0x0xc,0x0x0,0x0x64,0x0x32,0x0x1,0x0x84,0x0x0,0x0x0,0x0x5a,0x0xd,0x0x0,0x0x64,0x0x33,0x0x1,0x0x84,0x0x0,0x0x0,0x0x5a,0x0xe,0x0x0,0x0x64,0x0x1,0x0x0,0x0x53,0x0x28,0x0x35,0x0x1,0x0x0,0x0x0,0x0x69,0x0xff,0x0xff,0x0xff,0x0xff,0x0x4e,0x0x28,0x0x1,0x0x0,0x0x0,0x0x0,0x0x74,0x0x1,0x0x0,0x0x0,0x0x0,0x0x2a,0x0x74,0x0x6,0x0x0,0x0x0,0x0x0,0x0x6c,0x0x6f,0x0x67,0x0x67,0x0x65,0x0x72,0x0x63,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x1,0x0x0,0x0x0,0x0x0,0x0x42,0x0x0,0x0x0,0x0x0,0x0x73,0x0x11,0x0x0,0x0x0,0x0x0,0x0x65,0x0x0,0x0x0,0x0x5a,0x0x1,0x0x0,0x0x64,0x0x0,0x0x0,0x0x84,0x0x0,0x0x0,0x0x5a,0x0x2,0x0x0,0x0x52,0x0x53,0x0x28,0x0x1,0x0x0,0x0x0,0x0x0,0x0x63,0x0x2,0x0x0,0x0x0,0x0x0,0x0x2,0x0x0,0x0x0,0x0x0,0x0x2,0x0x0,0x0x0,0x0x0,0x0x43,0x0x0,0x0x0,0x0x0,0x0x73,0x0x34,0x0x0,0x0x0,0x0x0,0x0x7c,0x0x1,0x0x0,0x0x6a,0x0x0,0x0x0,0x0x83,0x0x0,0x0x0,0x0x6a,0x0x1,0x0x0,0x0x64,0x0x1,0x0x0,0x0x83,0x0x1,0x0x0,0x0x64,0x0x2,0x0x0,0x0x19,0x0x7d,0x0x1,0x0x0,0x0x74,0x0x2,0x0x0,0x0x7c,0x0x1,0x0x0,0x0x83,0x0x1,0x0x0,0x0x1,0x0x74,0x0x3,0x0x0,0x0x6a,0x0x4,0x0x0,0x0x7c,0x0x1,0x0x0,0x0x83,0x0x1,0x0x0,0x0x1,0x0x64,0x0x0,0x0x0,0x0x53,0x0x28,0x0x3,0x0x0,0x0x0,0x0x0,0x0x4e,0x0x73,0x0x1,0x0x0,0x0x0,0x0x0,0x0xa,0x0x69,0x0xff,0x0xff,0x0xff,0x0xff,0x0x28,0x0x5,0x0x0,0x0x0,0x0x0,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x73,0x0x74,0x0x72,0x0x69,0x0x70,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x73,0x0x70,0x0x6c,0x0x69,0x0x74,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x72,0x0x65,0x0x70,0x0x72,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x74,0x0x70,0x0x74,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x6c,0x0x6f,0x0x67,0x0x28,0x0x2,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x65,0x0x6c,0x0x66,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x74,0x0x78,0x0x74,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x73,0x0x1b,0x0x0,0x0x0,0x0x0,0x0x2e,0x0x2f,0x0x73,0x0x72,0x0x63,0x0x2f,0x0x70,0x0x79,0x0x74,0x0x68,0x0x6f,0x0x6e,0x0x2f,0x0x74,0x0x70,0x0x74,0x0x5f,0x0x63,0x0x6f,0x0x6e,0x0x73,0x0x6f,0x0x6c,0x0x65,0x0x2e,0x0x70,0x0x79,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x77,0x0x72,0x0x69,0x0x74,0x0x65,0x0xb,0x0x0,0x0x0,0x0x0,0x0x73,0x0x6,0x0x0,0x0x0,0x0x0,0x0x0,0x0x1,0x0x19,0x0x1,0x0xa,0x0x1,0x0x28,0x0x3,0x0x0,0x0x0,0x0x0,0x0x74,0x0x8,0x0x0,0x0x0,0x0x0,0x0x5f,0x0x5f,0x0x6e,0x0x61,0x0x6d,0x0x65,0x0x5f,0x0x5f,0x0x74,0x0xa,0x0x0,0x0x0,0x0x0,0x0x5f,0x0x5f,0x0x6d,0x0x6f,0x0x64,0x0x75,0x0x6c,0x0x65,0x0x5f,0x0x5f,0x0x52,0x0x9,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x73,0x0x1b,0x0x0,0x0x0,0x0x0,0x0x2e,0x0x2f,0x0x73,0x0x72,0x0x63,0x0x2f,0x0x70,0x0x79,0x0x74,0x0x68,0x0x6f,0x0x6e,0x0x2f,0x0x74,0x0x70,0x0x74,0x0x5f,0x0x63,0x0x6f,0x0x6e,0x0x73,0x0x6f,0x0x6c,0x0x65,0x0x2e,0x0x70,0x0x79,0x0x52,0x0x1,0x0x0,0x0x0,0x0x0,0x0xa,0x0x0,0x0x0,0x0x0,0x0x73,0x0x2,0x0x0,0x0x0,0x0x0,0x0x6,0x0x1,0x0x69,0x0x0,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6e,0x0x6f,0x0x6e,0x0x65,0x0x69,0x0x1,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x64,0x0x75,0x0x73,0x0x74,0x0x69,0x0x2,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x77,0x0x61,0x0x74,0x0x72,0x0x69,0x0x3,0x0x0,0x0x0,0x0x0,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x6f,0x0x69,0x0x6c,0x0x69,0x0x4,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x66,0x0x69,0x0x72,0x0x65,0x0x69,0x0x5,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x74,0x0x6e,0x0x65,0x0x69,0x0x6,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6c,0x0x61,0x0x76,0x0x61,0x0x69,0x0x7,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x67,0x0x75,0x0x6e,0x0x70,0x0x69,0x0x8,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6e,0x0x69,0x0x74,0x0x72,0x0x69,0x0x9,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x63,0x0x6c,0x0x6e,0x0x65,0x0x69,0x0xa,0x0x0,0x0x0,0x0x0,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x67,0x0x61,0x0x73,0x0x69,0x0xb,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x6c,0x0x65,0x0x78,0x0x69,0x0xc,0x0x0,0x0x0,0x0x0,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x67,0x0x6f,0x0x6f,0x0x69,0x0xd,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x69,0x0x63,0x0x65,0x0x69,0x0x69,0x0xe,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6d,0x0x65,0x0x74,0x0x6c,0x0x69,0x0xf,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x70,0x0x72,0x0x6b,0x0x69,0x0x10,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x6e,0x0x6f,0x0x77,0x0x69,0x0x11,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x77,0x0x6f,0x0x6f,0x0x64,0x0x69,0x0x12,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6e,0x0x65,0x0x75,0x0x74,0x0x69,0x0x13,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x6c,0x0x75,0x0x74,0x0x69,0x0x14,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x6c,0x0x6e,0x0x74,0x0x69,0x0x15,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x61,0x0x63,0x0x69,0x0x64,0x0x69,0x0x16,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x76,0x0x6f,0x0x69,0x0x64,0x0x69,0x0x17,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x77,0x0x74,0x0x72,0x0x76,0x0x69,0x0x18,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x63,0x0x6e,0x0x63,0x0x74,0x0x69,0x0x19,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x64,0x0x73,0x0x74,0x0x77,0x0x69,0x0x1a,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x61,0x0x6c,0x0x74,0x0x69,0x0x1b,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x6c,0x0x74,0x0x77,0x0x69,0x0x1c,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x64,0x0x6d,0x0x6e,0x0x64,0x0x69,0x0x1d,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x62,0x0x6d,0x0x74,0x0x6c,0x0x69,0x0x1e,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x62,0x0x72,0x0x6d,0x0x74,0x0x69,0x0x1f,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x68,0x0x6f,0x0x74,0x0x69,0x0x20,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x75,0x0x72,0x0x61,0x0x6e,0x0x69,0x0x21,0x0x0,0x0x0,0x0x0,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x77,0x0x61,0x0x78,0x0x69,0x0x22,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6d,0x0x77,0x0x61,0x0x78,0x0x69,0x0x23,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x73,0x0x63,0x0x6e,0x0x69,0x0x24,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6e,0x0x73,0x0x63,0x0x6e,0x0x69,0x0x25,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6c,0x0x6e,0x0x74,0x0x67,0x0x69,0x0x26,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x69,0x0x6e,0x0x73,0x0x6c,0x0x69,0x0x27,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x62,0x0x68,0x0x6f,0x0x6c,0x0x69,0x0x28,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x77,0x0x68,0x0x6f,0x0x6c,0x0x69,0x0x29,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x72,0x0x62,0x0x64,0x0x6d,0x0x69,0x0x2a,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6c,0x0x72,0x0x62,0x0x64,0x0x69,0x0x2b,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6e,0x0x74,0x0x63,0x0x74,0x0x69,0x0x2c,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x61,0x0x6e,0x0x64,0x0x69,0x0x2d,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x67,0x0x6c,0x0x61,0x0x73,0x0x69,0x0x2e,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x74,0x0x63,0x0x74,0x0x69,0x0x2f,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x62,0x0x67,0x0x6c,0x0x61,0x0x69,0x0x30,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x74,0x0x68,0x0x64,0x0x72,0x0x69,0x0x31,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x6c,0x0x73,0x0x6d,0x0x69,0x0x32,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x65,0x0x74,0x0x72,0x0x64,0x0x69,0x0x33,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6e,0x0x69,0x0x63,0x0x65,0x0x69,0x0x34,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6e,0x0x62,0x0x6c,0x0x65,0x0x69,0x0x35,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x62,0x0x74,0x0x72,0x0x79,0x0x69,0x0x36,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6c,0x0x63,0x0x72,0x0x79,0x0x69,0x0x37,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x74,0x0x6b,0x0x6d,0x0x69,0x0x38,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x77,0x0x63,0x0x68,0x0x69,0x0x39,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x6d,0x0x6b,0x0x65,0x0x69,0x0x3a,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x64,0x0x65,0x0x73,0x0x6c,0x0x69,0x0x3b,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x63,0x0x6f,0x0x61,0x0x6c,0x0x69,0x0x3c,0x0x0,0x0x0,0x0x0,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x6c,0x0x6f,0x0x32,0x0x69,0x0x3d,0x0x0,0x0x0,0x0x0,0x0x74,0x0x2,0x0x0,0x0x0,0x0x0,0x0x6f,0x0x32,0x0x69,0x0x3e,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x69,0x0x6e,0x0x77,0x0x72,0x0x69,0x0x3f,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x79,0x0x65,0x0x73,0x0x74,0x0x69,0x0x40,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x64,0x0x79,0x0x73,0x0x74,0x0x69,0x0x41,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x74,0x0x68,0x0x72,0x0x6d,0x0x69,0x0x42,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x67,0x0x6c,0x0x6f,0x0x77,0x0x69,0x0x43,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x62,0x0x72,0x0x63,0x0x6b,0x0x69,0x0x44,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x68,0x0x66,0x0x6c,0x0x6d,0x0x69,0x0x45,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x66,0x0x69,0x0x72,0x0x77,0x0x69,0x0x46,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x66,0x0x75,0x0x73,0x0x65,0x0x69,0x0x47,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x66,0x0x73,0x0x65,0x0x70,0x0x69,0x0x48,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x61,0x0x6d,0x0x74,0x0x72,0x0x69,0x0x49,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x62,0x0x63,0x0x6f,0x0x6c,0x0x69,0x0x4a,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x63,0x0x6c,0x0x6e,0x0x69,0x0x4b,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x68,0x0x73,0x0x77,0x0x63,0x0x69,0x0x4c,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x69,0x0x72,0x0x6f,0x0x6e,0x0x69,0x0x4d,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6d,0x0x6f,0x0x72,0x0x74,0x0x69,0x0x4e,0x0x0,0x0x0,0x0x0,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x67,0x0x6f,0x0x6c,0x0x69,0x0x4f,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x68,0x0x6c,0x0x69,0x0x66,0x0x69,0x0x50,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x61,0x0x73,0x0x69,0x0x6d,0x0x69,0x0x51,0x0x0,0x0x0,0x0x0,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x32,0x0x78,0x0x32,0x0x69,0x0x52,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x64,0x0x61,0x0x6e,0x0x69,0x0x69,0x0x53,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x61,0x0x6d,0x0x6f,0x0x65,0x0x69,0x0x54,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6d,0x0x6f,0x0x76,0x0x65,0x0x69,0x0x55,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x67,0x0x6f,0x0x6c,0x0x69,0x0x56,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x64,0x0x6d,0x0x6f,0x0x65,0x0x69,0x0x57,0x0x0,0x0x0,0x0x0,0x0x74,0x0x2,0x0x0,0x0x0,0x0x0,0x0x33,0x0x34,0x0x69,0x0x58,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6c,0x0x6c,0x0x69,0x0x66,0x0x69,0x0x59,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x74,0x0x61,0x0x6e,0x0x69,0x0x5a,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x70,0x0x6e,0x0x67,0x0x69,0x0x5b,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x72,0x0x69,0x0x6d,0x0x65,0x0x69,0x0x5c,0x0x0,0x0x0,0x0x0,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x66,0x0x6f,0x0x67,0x0x69,0x0x5d,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x62,0x0x63,0x0x6c,0x0x6e,0x0x69,0x0x5e,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6c,0x0x6f,0x0x76,0x0x65,0x0x69,0x0x5f,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x64,0x0x65,0x0x75,0x0x74,0x0x69,0x0x60,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x77,0x0x61,0x0x72,0x0x70,0x0x69,0x0x61,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x75,0x0x6d,0x0x70,0x0x69,0x0x62,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x66,0x0x77,0x0x72,0x0x6b,0x0x69,0x0x63,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x69,0x0x70,0x0x65,0x0x69,0x0x64,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x66,0x0x72,0x0x7a,0x0x7a,0x0x69,0x0x65,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x66,0x0x72,0x0x7a,0x0x77,0x0x69,0x0x66,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x67,0x0x72,0x0x61,0x0x76,0x0x69,0x0x67,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x62,0x0x69,0x0x7a,0x0x72,0x0x69,0x0x68,0x0x0,0x0x0,0x0x0,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x62,0x0x69,0x0x7a,0x0x72,0x0x67,0x0x69,0x0x69,0x0x0,0x0x0,0x0x0,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x62,0x0x69,0x0x7a,0x0x72,0x0x73,0x0x69,0x0x6a,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x69,0x0x6e,0x0x73,0x0x74,0x0x69,0x0x6b,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x69,0x0x73,0x0x6f,0x0x7a,0x0x69,0x0x6c,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x69,0x0x73,0x0x7a,0x0x73,0x0x69,0x0x6d,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x72,0x0x74,0x0x69,0x0x69,0x0x6e,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x72,0x0x74,0x0x6f,0x0x69,0x0x6f,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x73,0x0x74,0x0x65,0x0x69,0x0x70,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x73,0x0x74,0x0x73,0x0x69,0x0x71,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x61,0x0x6e,0x0x61,0x0x72,0x0x69,0x0x72,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x76,0x0x69,0x0x6e,0x0x65,0x0x69,0x0x73,0x0x0,0x0x0,0x0x0,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x69,0x0x6e,0x0x76,0x0x69,0x0x73,0x0x69,0x0x74,0x0x0,0x0x0,0x0x0,0x0x74,0x0x8,0x0x0,0x0x0,0x0x0,0x0x65,0x0x71,0x0x75,0x0x61,0x0x6c,0x0x76,0x0x65,0x0x6c,0x0x69,0x0x75,0x0x0,0x0x0,0x0x0,0x0x74,0x0x6,0x0x0,0x0x0,0x0x0,0x0x73,0x0x70,0x0x61,0x0x77,0x0x6e,0x0x32,0x0x69,0x0x76,0x0x0,0x0x0,0x0x0,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x73,0x0x70,0x0x61,0x0x77,0x0x6e,0x0x69,0x0x77,0x0x0,0x0x0,0x0x0,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x73,0x0x68,0x0x6c,0x0x64,0x0x31,0x0x69,0x0x78,0x0x0,0x0x0,0x0x0,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x73,0x0x68,0x0x6c,0x0x64,0x0x32,0x0x69,0x0x79,0x0x0,0x0x0,0x0x0,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x73,0x0x68,0x0x6c,0x0x64,0x0x33,0x0x69,0x0x7a,0x0x0,0x0x0,0x0x0,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x73,0x0x68,0x0x6c,0x0x64,0x0x34,0x0x69,0x0x7b,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6c,0x0x6f,0x0x6c,0x0x7a,0x0x69,0x0x7c,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x77,0x0x69,0x0x66,0x0x69,0x0x69,0x0x7d,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x66,0x0x69,0x0x6c,0x0x74,0x0x69,0x0x7e,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x61,0x0x72,0x0x61,0x0x79,0x0x69,0x0x7f,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x62,0x0x72,0x0x61,0x0x79,0x0x69,0x0x80,0x0x0,0x0x0,0x0x0,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x73,0x0x74,0x0x6b,0x0x6d,0x0x32,0x0x69,0x0x81,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x62,0x0x6f,0x0x6d,0x0x62,0x0x69,0x0x82,0x0x0,0x0x0,0x0x0,0x0x74,0x0x2,0x0x0,0x0x0,0x0x0,0x0x63,0x0x35,0x0x69,0x0x83,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x69,0x0x6e,0x0x67,0x0x69,0x0x84,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x71,0x0x72,0x0x74,0x0x7a,0x0x69,0x0x85,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x71,0x0x72,0x0x74,0x0x69,0x0x86,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x65,0x0x65,0x0x64,0x0x69,0x0x87,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6d,0x0x61,0x0x7a,0x0x65,0x0x69,0x0x88,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x63,0x0x6f,0x0x61,0x0x67,0x0x69,0x0x89,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x77,0x0x61,0x0x6c,0x0x6c,0x0x69,0x0x8a,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x67,0x0x6e,0x0x61,0x0x72,0x0x69,0x0x8b,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x72,0x0x65,0x0x70,0x0x6c,0x0x69,0x0x8c,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6d,0x0x79,0x0x73,0x0x74,0x0x69,0x0x8d,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x62,0x0x6f,0x0x79,0x0x6c,0x0x69,0x0x8e,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6c,0x0x6f,0x0x74,0x0x65,0x0x69,0x0x8f,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x66,0x0x72,0x0x67,0x0x32,0x0x69,0x0x90,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x74,0x0x61,0x0x72,0x0x69,0x0x91,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x66,0x0x72,0x0x6f,0x0x67,0x0x69,0x0x92,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x62,0x0x72,0x0x61,0x0x6e,0x0x69,0x0x93,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x77,0x0x69,0x0x6e,0x0x64,0x0x69,0x0x94,0x0x0,0x0x0,0x0x0,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x6e,0x0x75,0x0x6d,0x0x63,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x1,0x0x0,0x0x0,0x0x0,0x0x43,0x0x0,0x0x0,0x0x0,0x0x73,0x0x4,0x0x0,0x0x0,0x0x0,0x0x64,0x0x0,0x0x0,0x0x53,0x0x28,0x0x1,0x0x0,0x0x0,0x0x0,0x0x4e,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x73,0x0x1b,0x0x0,0x0x0,0x0x0,0x0x2e,0x0x2f,0x0x73,0x0x72,0x0x63,0x0x2f,0x0x70,0x0x79,0x0x74,0x0x68,0x0x6f,0x0x6e,0x0x2f,0x0x74,0x0x70,0x0x74,0x0x5f,0x0x63,0x0x6f,0x0x6e,0x0x73,0x0x6f,0x0x6c,0x0x65,0x0x2e,0x0x70,0x0x79,0x0x74,0x0xc,0x0x0,0x0x0,0x0x0,0x0x66,0x0x6f,0x0x72,0x0x6b,0x0x5f,0x0x75,0x0x6e,0x0x62,0x0x6c,0x0x6f,0x0x63,0x0x6b,0x0x2b,0x0x0,0x0x0,0x0x0,0x0x73,0x0x2,0x0x0,0x0x0,0x0x0,0x0x0,0x0x1,0x0x63,0x0x1,0x0x0,0x0x0,0x0x0,0x0x2,0x0x0,0x0x0,0x0x0,0x0x2,0x0x0,0x0x0,0x0x0,0x0x43,0x0x0,0x0x0,0x0x0,0x0x73,0x0x20,0x0x0,0x0x0,0x0x0,0x0x74,0x0x0,0x0x0,0x0x6a,0x0x1,0x0x0,0x0x83,0x0x0,0x0x0,0x0x7d,0x0x1,0x0x0,0x0x74,0x0x2,0x0x0,0x0x6a,0x0x3,0x0x0,0x0x6a,0x0x4,0x0x0,0x0x7c,0x0x1,0x0x0,0x0x83,0x0x1,0x0x0,0x0x1,0x0x64,0x0x0,0x0x0,0x0x53,0x0x28,0x0x1,0x0x0,0x0x0,0x0x0,0x0x4e,0x0x28,0x0x5,0x0x0,0x0x0,0x0x0,0x0x74,0x0x9,0x0x0,0x0x0,0x0x0,0x0x74,0x0x72,0x0x61,0x0x63,0x0x65,0x0x62,0x0x61,0x0x63,0x0x6b,0x0x74,0x0xa,0x0x0,0x0x0,0x0x0,0x0x66,0x0x6f,0x0x72,0x0x6d,0x0x61,0x0x74,0x0x5f,0x0x65,0x0x78,0x0x63,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x73,0x0x79,0x0x73,0x0x74,0x0x6,0x0x0,0x0x0,0x0x0,0x0x73,0x0x74,0x0x64,0x0x6f,0x0x75,0x0x74,0x0x52,0x0x9,0x0x0,0x0x0,0x0x0,0x0x28,0x0x2,0x0x0,0x0x0,0x0x0,0x0x74,0x0x2,0x0x0,0x0x0,0x0x0,0x0x65,0x0x78,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x65,0x0x72,0x0x72,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x73,0x0x1b,0x0x0,0x0x0,0x0x0,0x0x2e,0x0x2f,0x0x73,0x0x72,0x0x63,0x0x2f,0x0x70,0x0x79,0x0x74,0x0x68,0x0x6f,0x0x6e,0x0x2f,0x0x74,0x0x70,0x0x74,0x0x5f,0x0x63,0x0x6f,0x0x6e,0x0x73,0x0x6f,0x0x6c,0x0x65,0x0x2e,0x0x70,0x0x79,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x65,0x0x72,0x0x72,0x0x6f,0x0x72,0x0x2d,0x0x0,0x0x0,0x0x0,0x0x73,0x0x4,0x0x0,0x0x0,0x0x0,0x0x0,0x0x1,0x0xc,0x0x1,0x0x63,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x2,0x0x0,0x0x0,0x0x0,0x0x43,0x0x0,0x0x0,0x0x0,0x0x73,0x0x19,0x0x0,0x0x0,0x0x0,0x0x74,0x0x0,0x0x0,0x0x83,0x0x0,0x0x0,0x0x74,0x0x1,0x0x0,0x0x5f,0x0x2,0x0x0,0x0x64,0x0x1,0x0x0,0x0x74,0x0x1,0x0x0,0x0x5f,0x0x3,0x0x0,0x0x64,0x0x2,0x0x0,0x0x53,0x0x28,0x0x3,0x0x0,0x0x0,0x0x0,0x0x73,0x0xde,0x0x0,0x0x0,0x0x0,0x0x63,0x0x6f,0x0x70,0x0x79,0x0x3d,0x0x5b,0x0x22,0x0x5f,0x0x5f,0x0x62,0x0x75,0x0x69,0x0x6c,0x0x74,0x0x69,0x0x6e,0x0x73,0x0x5f,0x0x5f,0x0x22,0x0x2c,0x0x22,0x0x5f,0x0x5f,0x0x6e,0x0x61,0x0x6d,0x0x65,0x0x5f,0x0x5f,0x0x22,0x0x2c,0x0x22,0x0x5f,0x0x5f,0x0x64,0x0x6f,0x0x63,0x0x5f,0x0x5f,0x0x22,0x0x2c,0x0x22,0x0x5f,0x0x5f,0x0x70,0x0x61,0x0x63,0x0x6b,0x0x61,0x0x67,0x0x65,0x0x5f,0x0x5f,0x0x22,0x0x2c,0x0x27,0x0x74,0x0x70,0x0x74,0x0x27,0x0x2c,0x0x27,0x0x63,0x0x6c,0x0x65,0x0x61,0x0x6e,0x0x27,0x0x2c,0x0xa,0x0x20,0x0x20,0x0x20,0x0x20,0x0x20,0x0x20,0x0x20,0x0x20,0x0x27,0x0x65,0x0x6c,0x0x65,0x0x6d,0x0x65,0x0x6e,0x0x74,0x0x27,0x0x2c,0x0x27,0x0x66,0x0x6f,0x0x72,0x0x6b,0x0x27,0x0x2c,0x0x27,0x0x5f,0x0x66,0x0x6f,0x0x72,0x0x6b,0x0x27,0x0x2c,0x0x27,0x0x66,0x0x6f,0x0x72,0x0x6b,0x0x5f,0x0x73,0x0x74,0x0x61,0x0x74,0x0x75,0x0x73,0x0x27,0x0x2c,0x0x27,0x0x66,0x0x6f,0x0x72,0x0x6b,0x0x5f,0x0x75,0x0x6e,0x0x62,0x0x6c,0x0x6f,0x0x63,0x0x6b,0x0x27,0x0x2c,0x0x27,0x0x73,0x0x79,0x0x73,0x0x27,0x0x5d,0x0xa,0x0x20,0x0x20,0x0x20,0x0x20,0x0x68,0x0x61,0x0x6e,0x0x64,0x0x6c,0x0x65,0x0x2e,0x0x67,0x0x6c,0x0x6f,0x0x62,0x0x3d,0x0x7b,0x0x7d,0x0xa,0x0x20,0x0x20,0x0x20,0x0x20,0x0x66,0x0x6f,0x0x72,0x0x20,0x0x69,0x0x74,0x0x65,0x0x6d,0x0x20,0x0x69,0x0x6e,0x0x20,0x0x63,0x0x6f,0x0x70,0x0x79,0x0x3a,0x0xa,0x0x20,0x0x20,0x0x20,0x0x20,0x0x20,0x0x20,0x0x20,0x0x20,0x0x68,0x0x61,0x0x6e,0x0x64,0x0x6c,0x0x65,0x0x2e,0x0x67,0x0x6c,0x0x6f,0x0x62,0x0x5b,0x0x69,0x0x74,0x0x65,0x0x6d,0x0x5d,0x0x3d,0x0x67,0x0x6c,0x0x6f,0x0x62,0x0x61,0x0x6c,0x0x73,0x0x28,0x0x29,0x0x5b,0x0x69,0x0x74,0x0x65,0x0x6d,0x0x5d,0x0x74,0x0x0,0x0x0,0x0x0,0x0x0,0x0x4e,0x0x28,0x0x4,0x0x0,0x0x0,0x0x0,0x0x74,0x0x7,0x0x0,0x0x0,0x0x0,0x0x67,0x0x6c,0x0x6f,0x0x62,0x0x61,0x0x6c,0x0x73,0x0x74,0x0x6,0x0x0,0x0x0,0x0x0,0x0x68,0x0x61,0x0x6e,0x0x64,0x0x6c,0x0x65,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x67,0x0x6c,0x0x6f,0x0x62,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x62,0x0x75,0x0x66,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x73,0x0x1b,0x0x0,0x0x0,0x0x0,0x0x2e,0x0x2f,0x0x73,0x0x72,0x0x63,0x0x2f,0x0x70,0x0x79,0x0x74,0x0x68,0x0x6f,0x0x6e,0x0x2f,0x0x74,0x0x70,0x0x74,0x0x5f,0x0x63,0x0x6f,0x0x6e,0x0x73,0x0x6f,0x0x6c,0x0x65,0x0x2e,0x0x70,0x0x79,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x63,0x0x6c,0x0x65,0x0x61,0x0x6e,0x0x31,0x0x0,0x0x0,0x0x0,0x0x73,0x0x4,0x0x0,0x0x0,0x0x0,0x0x0,0x0x7,0x0xc,0x0x1,0x0x63,0x0x1,0x0x0,0x0x0,0x0x0,0x0x3,0x0x0,0x0x0,0x0x0,0x0x5,0x0x0,0x0x0,0x0x0,0x0x43,0x0x0,0x0x0,0x0x0,0x0x73,0x0x50,0x0x0,0x0x0,0x0x0,0x0x79,0x0xd,0x0x0,0x0x74,0x0x0,0x0x0,0x0x6a,0x0x1,0x0x0,0x0x7d,0x0x1,0x0x0,0x0x57,0x0x6e,0x0xe,0x0x0,0x0x1,0x0x1,0x0x1,0x0x74,0x0x2,0x0x0,0x0x83,0x0x0,0x0x0,0x0x1,0x0x6e,0x0x1,0x0x0,0x0x58,0x0x79,0x0xe,0x0x0,0x0x74,0x0x3,0x0x0,0x0x7c,0x0x0,0x0x0,0x0x83,0x0x1,0x0x0,0x0x1,0x0x57,0x0x6e,0x0x1d,0x0x0,0x0x4,0x0x74,0x0x4,0x0x0,0x0x6b,0x0xa,0x0x0,0x0x72,0x0x4b,0x0x0,0x0x1,0x0x7d,0x0x2,0x0x0,0x0x1,0x0x74,0x0x5,0x0x0,0x0x7c,0x0x2,0x0x0,0x0x83,0x0x1,0x0x0,0x0x1,0x0x6e,0x0x1,0x0x0,0x0x58,0x0x64,0x0x0,0x0x0,0x0x53,0x0x28,0x0x1,0x0x0,0x0x0,0x0x0,0x0x4e,0x0x28,0x0x6,0x0x0,0x0x0,0x0x0,0x0x52,0x0xab,0x0x0,0x0x0,0x0x0,0x0x52,0x0xac,0x0x0,0x0x0,0x0x0,0x0x52,0x0xae,0x0x0,0x0x0,0x0x0,0x0x74,0x0x7,0x0x0,0x0x0,0x0x0,0x0x5f,0x0x68,0x0x61,0x0x6e,0x0x64,0x0x6c,0x0x65,0x0x74,0x0x9,0x0x0,0x0x0,0x0x0,0x0x45,0x0x78,0x0x63,0x0x65,0x0x70,0x0x74,0x0x69,0x0x6f,0x0x6e,0x0x52,0x0xa8,0x0x0,0x0x0,0x0x0,0x0x28,0x0x3,0x0x0,0x0x0,0x0x0,0x0x52,0x0x8,0x0x0,0x0x0,0x0x0,0x0x74,0x0x1,0x0x0,0x0x0,0x0x0,0x0x61,0x0x52,0x0xa6,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x73,0x0x1b,0x0x0,0x0x0,0x0x0,0x0x2e,0x0x2f,0x0x73,0x0x72,0x0x63,0x0x2f,0x0x70,0x0x79,0x0x74,0x0x68,0x0x6f,0x0x6e,0x0x2f,0x0x74,0x0x70,0x0x74,0x0x5f,0x0x63,0x0x6f,0x0x6e,0x0x73,0x0x6f,0x0x6c,0x0x65,0x0x2e,0x0x70,0x0x79,0x0x52,0x0xab,0x0x0,0x0x0,0x0x0,0x0x3b,0x0x0,0x0x0,0x0x0,0x0x73,0x0x10,0x0x0,0x0x0,0x0x0,0x0x0,0x0x1,0x0x3,0x0x1,0x0xd,0x0x1,0x0x3,0x0x1,0x0xb,0x0x1,0x0x3,0x0x1,0x0xe,0x0x1,0x0xf,0x0x1,0x0x63,0x0x1,0x0x0,0x0x0,0x0x0,0x0x2,0x0x0,0x0x0,0x0x0,0x0x5,0x0x0,0x0x0,0x0x0,0x0x42,0x0x0,0x0x0,0x0x0,0x0x73,0x0x63,0x0x0,0x0x0,0x0x0,0x0x79,0x0x26,0x0x0,0x0x65,0x0x0,0x0x0,0x0x6a,0x0x1,0x0x0,0x0x6a,0x0x2,0x0x0,0x0x65,0x0x3,0x0x0,0x0x65,0x0x4,0x0x0,0x0x7c,0x0x0,0x0x0,0x0x65,0x0x5,0x0x0,0x0x6a,0x0x6,0x0x0,0x0x83,0x0x2,0x0x0,0x0x83,0x0x1,0x0x0,0x0x83,0x0x1,0x0x0,0x0x1,0x0x57,0x0x6e,0x0x36,0x0x0,0x0x1,0x0x1,0x0x1,0x0x79,0x0xf,0x0x0,0x0x7c,0x0x0,0x0x0,0x0x65,0x0x5,0x0x0,0x0x6a,0x0x6,0x0x0,0x0x4,0x0x55,0x0x57,0x0x71,0x0x5f,0x0x0,0x0x4,0x0x65,0x0x7,0x0x0,0x0x6b,0x0xa,0x0x0,0x0x72,0x0x5a,0x0x0,0x0x1,0x0x7d,0x0x1,0x0x0,0x0x1,0x0x65,0x0x8,0x0x0,0x0x7c,0x0x1,0x0x0,0x0x83,0x0x1,0x0x0,0x0x1,0x0x71,0x0x5f,0x0x0,0x0x58,0x0x6e,0x0x1,0x0x0,0x0x58,0x0x64,0x0x0,0x0x0,0x0x53,0x0x28,0x0x1,0x0x0,0x0x0,0x0x0,0x0x4e,0x0x28,0x0x9,0x0x0,0x0x0,0x0x0,0x0x52,0x0xa4,0x0x0,0x0x0,0x0x0,0x0x52,0x0xa5,0x0x0,0x0x0,0x0x0,0x0x52,0x0x9,0x0x0,0x0x0,0x0x0,0x0x52,0x0x4,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x65,0x0x76,0x0x61,0x0x6c,0x0x52,0x0xab,0x0x0,0x0x0,0x0x0,0x0x52,0x0xac,0x0x0,0x0x0,0x0x0,0x0x52,0x0xb0,0x0x0,0x0x0,0x0x0,0x0x52,0x0xa8,0x0x0,0x0x0,0x0x0,0x0x28,0x0x2,0x0x0,0x0x0,0x0x0,0x0x52,0x0x8,0x0x0,0x0x0,0x0x0,0x0x52,0x0xa6,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x73,0x0x1b,0x0x0,0x0x0,0x0x0,0x0x2e,0x0x2f,0x0x73,0x0x72,0x0x63,0x0x2f,0x0x70,0x0x79,0x0x74,0x0x68,0x0x6f,0x0x6e,0x0x2f,0x0x74,0x0x70,0x0x74,0x0x5f,0x0x63,0x0x6f,0x0x6e,0x0x73,0x0x6f,0x0x6c,0x0x65,0x0x2e,0x0x70,0x0x79,0x0x52,0x0xaf,0x0x0,0x0x0,0x0x0,0x0x45,0x0x0,0x0x0,0x0x0,0x0x73,0x0xe,0x0x0,0x0x0,0x0x0,0x0x0,0x0x2,0x0x3,0x0x1,0x0x26,0x0x1,0x0x3,0x0x1,0x0x3,0x0x1,0x0xf,0x0x1,0x0xf,0x0x1,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0xf,0x0x0,0x0x0,0x0x0,0x0x52,0x0x5,0x0x0,0x0x0,0x0x0,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x75,0x0x74,0x0x69,0x0x6c,0x0x73,0x0x52,0x0xa4,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x63,0x0x6f,0x0x64,0x0x65,0x0x74,0x0x6,0x0x0,0x0x0,0x0x0,0x0x63,0x0x74,0x0x79,0x0x70,0x0x65,0x0x73,0x0x52,0x0xa2,0x0x0,0x0x0,0x0x0,0x0x52,0x0x1,0x0x0,0x0x0,0x0x0,0x0x52,0x0xa5,0x0x0,0x0x0,0x0x0,0x0x74,0x0x6,0x0x0,0x0x0,0x0x0,0x0x73,0x0x74,0x0x64,0x0x65,0x0x72,0x0x72,0x0x74,0x0x7,0x0x0,0x0x0,0x0x0,0x0x65,0x0x6c,0x0x65,0x0x6d,0x0x65,0x0x6e,0x0x74,0x0x52,0x0xa1,0x0x0,0x0x0,0x0x0,0x0x52,0x0xa8,0x0x0,0x0x0,0x0x0,0x0x52,0x0xae,0x0x0,0x0x0,0x0x0,0x0x52,0x0xab,0x0x0,0x0x0,0x0x0,0x0x52,0x0xaf,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x73,0x0x1b,0x0x0,0x0x0,0x0x0,0x0x2e,0x0x2f,0x0x73,0x0x72,0x0x63,0x0x2f,0x0x70,0x0x79,0x0x74,0x0x68,0x0x6f,0x0x6e,0x0x2f,0x0x74,0x0x70,0x0x74,0x0x5f,0x0x63,0x0x6f,0x0x6e,0x0x73,0x0x6f,0x0x6c,0x0x65,0x0x2e,0x0x70,0x0x79,0x0x74,0x0x8,0x0x0,0x0x0,0x0x0,0x0x3c,0x0x6d,0x0x6f,0x0x64,0x0x75,0x0x6c,0x0x65,0x0x3e,0x0x1,0x0x0,0x0x0,0x0x0,0x0x73,0x0x4a,0x0x0,0x0x0,0x0x0,0x0xc,0x0x1,0x0xa,0x0x1,0x0xa,0x0x1,0x0xc,0x0x1,0x0xc,0x0x1,0x0xc,0x0x1,0x0xc,0x0x3,0x0x13,0x0x5,0x0xc,0x0x1,0x0xc,0x0x2,0x0x3b,0x0x1,0x0x38,0x0x1,0x0x31,0x0x1,0x0x31,0x0x1,0x0x31,0x0x1,0x0x31,0x0x1,0x0x31,0x0x1,0x0x31,0x0x1,0x0x31,0x0x1,0x0x31,0x0x1,0x0x31,0x0x1,0x0x31,0x0x1,0x0x31,0x0x1,0x0x31,0x0x1,0x0x2a,0x0x1,0x0x2a,0x0x1,0x0x2a,0x0x1,0x0x2a,0x0x1,0x0x2a,0x0x1,0x0x2a,0x0x1,0x0x2a,0x0x1,0x0x2a,0x0x1,0x0xa,0x0x3,0x0x9,0x0x2,0x0x9,0x0x4,0x0x9,0x0xa,0x0x9,0x0xa}; \ No newline at end of file
diff --git a/pyconsole.h b/pyconsole.h
new file mode 100644
index 0000000..62916b7
--- /dev/null
+++ b/pyconsole.h
@@ -0,0 +1,67 @@
+unsigned char tpt_console_pyc[] = {0x0x3,0x0xf3,0x0xd,0x0xa,0x0x26,0x0xe1,0x0x6f,0x0x4d,0x0x63,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x3,0x0x0,0x0x0,0x0x0,0x0x40,0x0x0,0x0x0,0x0x0,0x0x73,0x0xc5,0x0x4,0x0x0,0x0x0,0x0x64,0x0x0,0x0x0,0x0x64,0x0x1,0x0x0,0x0x6c,0x0x0,0x0x0,0x0x5a,0x0x0,0x0x0,0x0x64,0x0x0,0x0x0,0x0x64,0x0x2,0x0x0,0x0x6c,0x0x0,0x0x0,0x0x54,0x0x64,0x0x0,0x0x0,0x0x64,0x0x2,0x0x0,0x0x6c,0x0x1,0x0x0,0x0x54,0x0x64,0x0x0,0x0x0,0x0x64,0x0x1,0x0x0,0x0x6c,0x0x2,0x0x0,0x0x5a,0x0x2,0x0x0,0x0x64,0x0x0,0x0x0,0x0x64,
+0x0x1,0x0x0,0x0x6c,0x0x3,0x0x0,0x0x5a,0x0x3,0x0x0,0x0x64,0x0x0,0x0x0,0x0x64,0x0x1,0x0x0,0x0x6c,0x0x4,0x0x0,0x0x5a,0x0x4,0x0x0,0x0x64,0x0x0,0x0x0,0x0x64,0x0x1,0x0x0,0x0x6c,0x0x5,0x0x0,0x0x5a,0x0x5,0x0x0,0x0x64,0x0x3,0x0x0,0x0x64,0x0x34,0x0x1,0x0x64,0x0x4,0x0x0,0x0x84,0x0x0,0x0x0,0x0x83,0x0x0,0x0x0,0x0x59,0x0x5a,0x0x6,0x0x0,0x0x65,0x0x6,0x0x0,0x0x83,0x0x0,0x0x0,0x0x65,0x0x2,0x0x0,0x0x5f,0x0x7,0x0x0,0x0x65,0x0x6,0x0x0,0x0x83,0x0x0,0x0x0,0x0x65,0x0x2,0x0x0,0x0x5f,0x0x8,0x0x0,0x0x69,0x0x95,0x0x0,0x0x64,
+0x0x5,0x0x0,0x0x64,0x0x6,0x0x0,0x0x36,0x0x64,0x0x7,0x0x0,0x0x64,0x0x8,0x0x0,0x0x36,0x0x64,0x0x9,0x0x0,0x0x64,0x0xa,0x0x0,0x0x36,0x0x64,0x0xb,0x0x0,0x0x64,0x0xc,0x0x0,0x0x36,0x0x64,0x0xd,0x0x0,0x0x64,0x0xe,0x0x0,0x0x36,0x0x64,0x0xf,0x0x0,0x0x64,0x0x10,0x0x0,0x0x36,0x0x64,0x0x11,0x0x0,0x0x64,0x0x12,0x0x0,0x0x36,0x0x64,0x0x13,0x0x0,0x0x64,0x0x14,0x0x0,0x0x36,0x0x64,0x0x15,0x0x0,0x0x64,0x0x16,0x0x0,0x0x36,0x0x64,0x0x17,0x0x0,0x0x64,0x0x18,0x0x0,0x0x36,0x0x64,0x0x19,0x0x0,0x0x64,0x0x1a,0x0x0,0x0x36,0x0x64,0x0x1b,0x0x0,
+0x0x64,0x0x1c,0x0x0,0x0x36,0x0x64,0x0x1d,0x0x0,0x0x64,0x0x1e,0x0x0,0x0x36,0x0x64,0x0x1f,0x0x0,0x0x64,0x0x20,0x0x0,0x0x36,0x0x64,0x0x21,0x0x0,0x0x64,0x0x22,0x0x0,0x0x36,0x0x64,0x0x23,0x0x0,0x0x64,0x0x24,0x0x0,0x0x36,0x0x64,0x0x25,0x0x0,0x0x64,0x0x26,0x0x0,0x0x36,0x0x64,0x0x27,0x0x0,0x0x64,0x0x28,0x0x0,0x0x36,0x0x64,0x0x29,0x0x0,0x0x64,0x0x2a,0x0x0,0x0x36,0x0x64,0x0x2b,0x0x0,0x0x64,0x0x2c,0x0x0,0x0x36,0x0x64,0x0x2d,0x0x0,0x0x64,0x0x2e,0x0x0,0x0x36,0x0x64,0x0x2f,0x0x0,0x0x64,0x0x30,0x0x0,0x0x36,0x0x64,0x0x31,0x0x0,0x0x64,0x0x32,
+0x0x0,0x0x36,0x0x64,0x0x33,0x0x0,0x0x64,0x0x34,0x0x0,0x0x36,0x0x64,0x0x35,0x0x0,0x0x64,0x0x36,0x0x0,0x0x36,0x0x64,0x0x37,0x0x0,0x0x64,0x0x38,0x0x0,0x0x36,0x0x64,0x0x39,0x0x0,0x0x64,0x0x3a,0x0x0,0x0x36,0x0x64,0x0x3b,0x0x0,0x0x64,0x0x3c,0x0x0,0x0x36,0x0x64,0x0x3d,0x0x0,0x0x64,0x0x3e,0x0x0,0x0x36,0x0x64,0x0x3f,0x0x0,0x0x64,0x0x40,0x0x0,0x0x36,0x0x64,0x0x41,0x0x0,0x0x64,0x0x42,0x0x0,0x0x36,0x0x64,0x0x43,0x0x0,0x0x64,0x0x44,0x0x0,0x0x36,0x0x64,0x0x45,0x0x0,0x0x64,0x0x46,0x0x0,0x0x36,0x0x64,0x0x47,0x0x0,0x0x64,0x0x48,0x0x0,0x0x36,
+0x0x64,0x0x49,0x0x0,0x0x64,0x0x4a,0x0x0,0x0x36,0x0x64,0x0x4b,0x0x0,0x0x64,0x0x4c,0x0x0,0x0x36,0x0x64,0x0x4d,0x0x0,0x0x64,0x0x4e,0x0x0,0x0x36,0x0x64,0x0x4f,0x0x0,0x0x64,0x0x50,0x0x0,0x0x36,0x0x64,0x0x51,0x0x0,0x0x64,0x0x52,0x0x0,0x0x36,0x0x64,0x0x53,0x0x0,0x0x64,0x0x54,0x0x0,0x0x36,0x0x64,0x0x55,0x0x0,0x0x64,0x0x56,0x0x0,0x0x36,0x0x64,0x0x57,0x0x0,0x0x64,0x0x58,0x0x0,0x0x36,0x0x64,0x0x59,0x0x0,0x0x64,0x0x5a,0x0x0,0x0x36,0x0x64,0x0x5b,0x0x0,0x0x64,0x0x5c,0x0x0,0x0x36,0x0x64,0x0x5d,0x0x0,0x0x64,0x0x5e,0x0x0,0x0x36,0x0x64,0x0x5f,
+0x0x0,0x0x64,0x0x60,0x0x0,0x0x36,0x0x64,0x0x61,0x0x0,0x0x64,0x0x62,0x0x0,0x0x36,0x0x64,0x0x63,0x0x0,0x0x64,0x0x64,0x0x0,0x0x36,0x0x64,0x0x65,0x0x0,0x0x64,0x0x66,0x0x0,0x0x36,0x0x64,0x0x67,0x0x0,0x0x64,0x0x68,0x0x0,0x0x36,0x0x64,0x0x69,0x0x0,0x0x64,0x0x6a,0x0x0,0x0x36,0x0x64,0x0x6b,0x0x0,0x0x64,0x0x6c,0x0x0,0x0x36,0x0x64,0x0x6d,0x0x0,0x0x64,0x0x6e,0x0x0,0x0x36,0x0x64,0x0x6f,0x0x0,0x0x64,0x0x70,0x0x0,0x0x36,0x0x64,0x0x71,0x0x0,0x0x64,0x0x72,0x0x0,0x0x36,0x0x64,0x0x73,0x0x0,0x0x64,0x0x74,0x0x0,0x0x36,0x0x64,0x0x75,0x0x0,0x0x64,
+0x0x76,0x0x0,0x0x36,0x0x64,0x0x77,0x0x0,0x0x64,0x0x78,0x0x0,0x0x36,0x0x64,0x0x79,0x0x0,0x0x64,0x0x7a,0x0x0,0x0x36,0x0x64,0x0x7b,0x0x0,0x0x64,0x0x7c,0x0x0,0x0x36,0x0x64,0x0x7d,0x0x0,0x0x64,0x0x7e,0x0x0,0x0x36,0x0x64,0x0x7f,0x0x0,0x0x64,0x0x80,0x0x0,0x0x36,0x0x64,0x0x81,0x0x0,0x0x64,0x0x82,0x0x0,0x0x36,0x0x64,0x0x83,0x0x0,0x0x64,0x0x84,0x0x0,0x0x36,0x0x64,0x0x85,0x0x0,0x0x64,0x0x86,0x0x0,0x0x36,0x0x64,0x0x87,0x0x0,0x0x64,0x0x88,0x0x0,0x0x36,0x0x64,0x0x89,0x0x0,0x0x64,0x0x8a,0x0x0,0x0x36,0x0x64,0x0x8b,0x0x0,0x0x64,0x0x8c,0x0x0,
+0x0x36,0x0x64,0x0x8d,0x0x0,0x0x64,0x0x8e,0x0x0,0x0x36,0x0x64,0x0x8f,0x0x0,0x0x64,0x0x90,0x0x0,0x0x36,0x0x64,0x0x91,0x0x0,0x0x64,0x0x92,0x0x0,0x0x36,0x0x64,0x0x93,0x0x0,0x0x64,0x0x94,0x0x0,0x0x36,0x0x64,0x0x95,0x0x0,0x0x64,0x0x96,0x0x0,0x0x36,0x0x64,0x0x97,0x0x0,0x0x64,0x0x98,0x0x0,0x0x36,0x0x64,0x0x99,0x0x0,0x0x64,0x0x9a,0x0x0,0x0x36,0x0x64,0x0x9b,0x0x0,0x0x64,0x0x9c,0x0x0,0x0x36,0x0x64,0x0x9d,0x0x0,0x0x64,0x0x9e,0x0x0,0x0x36,0x0x64,0x0x9f,0x0x0,0x0x64,0x0xa0,0x0x0,0x0x36,0x0x64,0x0xa1,0x0x0,0x0x64,0x0xa2,0x0x0,0x0x36,0x0x64,
+0x0xa3,0x0x0,0x0x64,0x0xa4,0x0x0,0x0x36,0x0x64,0x0xa5,0x0x0,0x0x64,0x0xa6,0x0x0,0x0x36,0x0x64,0x0xa7,0x0x0,0x0x64,0x0xa8,0x0x0,0x0x36,0x0x64,0x0xa9,0x0x0,0x0x64,0x0xaa,0x0x0,0x0x36,0x0x64,0x0xab,0x0x0,0x0x64,0x0xac,0x0x0,0x0x36,0x0x64,0x0xad,0x0x0,0x0x64,0x0xae,0x0x0,0x0x36,0x0x64,0x0xaf,0x0x0,0x0x64,0x0xb0,0x0x0,0x0x36,0x0x64,0x0xb1,0x0x0,0x0x64,0x0xb2,0x0x0,0x0x36,0x0x64,0x0xb3,0x0x0,0x0x64,0x0xb4,0x0x0,0x0x36,0x0x64,0x0xb5,0x0x0,0x0x64,0x0xb6,0x0x0,0x0x36,0x0x64,0x0xb7,0x0x0,0x0x64,0x0xb8,0x0x0,0x0x36,0x0x64,0x0xb9,0x0x0,
+0x0x64,0x0xba,0x0x0,0x0x36,0x0x64,0x0xbb,0x0x0,0x0x64,0x0xbc,0x0x0,0x0x36,0x0x64,0x0xbd,0x0x0,0x0x64,0x0xbe,0x0x0,0x0x36,0x0x64,0x0xbf,0x0x0,0x0x64,0x0xc0,0x0x0,0x0x36,0x0x64,0x0xc1,0x0x0,0x0x64,0x0xc2,0x0x0,0x0x36,0x0x64,0x0xc3,0x0x0,0x0x64,0x0xc4,0x0x0,0x0x36,0x0x64,0x0xc5,0x0x0,0x0x64,0x0xc6,0x0x0,0x0x36,0x0x64,0x0xc7,0x0x0,0x0x64,0x0xc8,0x0x0,0x0x36,0x0x64,0x0xc9,0x0x0,0x0x64,0x0xca,0x0x0,0x0x36,0x0x64,0x0xcb,0x0x0,0x0x64,0x0xcc,0x0x0,0x0x36,0x0x64,0x0xcd,0x0x0,0x0x64,0x0xce,0x0x0,0x0x36,0x0x64,0x0xcf,0x0x0,0x0x64,0x0xd0,
+0x0x0,0x0x36,0x0x64,0x0xd1,0x0x0,0x0x64,0x0xd2,0x0x0,0x0x36,0x0x64,0x0xd3,0x0x0,0x0x64,0x0xd4,0x0x0,0x0x36,0x0x64,0x0xd5,0x0x0,0x0x64,0x0xd6,0x0x0,0x0x36,0x0x64,0x0xd7,0x0x0,0x0x64,0x0xd8,0x0x0,0x0x36,0x0x64,0x0xd9,0x0x0,0x0x64,0x0xda,0x0x0,0x0x36,0x0x64,0x0xdb,0x0x0,0x0x64,0x0xdc,0x0x0,0x0x36,0x0x64,0x0xdd,0x0x0,0x0x64,0x0xde,0x0x0,0x0x36,0x0x64,0x0xdf,0x0x0,0x0x64,0x0xe0,0x0x0,0x0x36,0x0x64,0x0xe1,0x0x0,0x0x64,0x0xe2,0x0x0,0x0x36,0x0x64,0x0xe3,0x0x0,0x0x64,0x0xe4,0x0x0,0x0x36,0x0x64,0x0xe5,0x0x0,0x0x64,0x0xe6,0x0x0,0x0x36,
+0x0x64,0x0xe7,0x0x0,0x0x64,0x0xe8,0x0x0,0x0x36,0x0x64,0x0xe9,0x0x0,0x0x64,0x0xea,0x0x0,0x0x36,0x0x64,0x0xeb,0x0x0,0x0x64,0x0xec,0x0x0,0x0x36,0x0x64,0x0xed,0x0x0,0x0x64,0x0xee,0x0x0,0x0x36,0x0x64,0x0xef,0x0x0,0x0x64,0x0xf0,0x0x0,0x0x36,0x0x64,0x0xf1,0x0x0,0x0x64,0x0xf2,0x0x0,0x0x36,0x0x64,0x0xf3,0x0x0,0x0x64,0x0xf4,0x0x0,0x0x36,0x0x64,0x0xf5,0x0x0,0x0x64,0x0xf6,0x0x0,0x0x36,0x0x64,0x0xf7,0x0x0,0x0x64,0x0xf8,0x0x0,0x0x36,0x0x64,0x0xf9,0x0x0,0x0x64,0x0xfa,0x0x0,0x0x36,0x0x64,0x0xfb,0x0x0,0x0x64,0x0xfc,0x0x0,0x0x36,0x0x64,0x0xfd,
+0x0x0,0x0x64,0x0xfe,0x0x0,0x0x36,0x0x64,0x0xff,0x0x0,0x0x64,0x0x0,0x0x1,0x0x36,0x0x64,0x0x1,0x0x1,0x0x64,0x0x2,0x0x1,0x0x36,0x0x64,0x0x3,0x0x1,0x0x64,0x0x4,0x0x1,0x0x36,0x0x64,0x0x5,0x0x1,0x0x64,0x0x6,0x0x1,0x0x36,0x0x64,0x0x7,0x0x1,0x0x64,0x0x8,0x0x1,0x0x36,0x0x64,0x0x9,0x0x1,0x0x64,0x0xa,0x0x1,0x0x36,0x0x64,0x0xb,0x0x1,0x0x64,0x0xc,0x0x1,0x0x36,0x0x64,0x0xd,0x0x1,0x0x64,0x0xe,0x0x1,0x0x36,0x0x64,0x0xf,0x0x1,0x0x64,0x0x10,0x0x1,0x0x36,0x0x64,0x0x11,0x0x1,0x0x64,0x0x12,0x0x1,0x0x36,0x0x64,0x0x13,0x0x1,0x0x64,
+0x0x14,0x0x1,0x0x36,0x0x64,0x0x15,0x0x1,0x0x64,0x0x16,0x0x1,0x0x36,0x0x64,0x0x17,0x0x1,0x0x64,0x0x18,0x0x1,0x0x36,0x0x64,0x0x19,0x0x1,0x0x64,0x0x1a,0x0x1,0x0x36,0x0x64,0x0x1b,0x0x1,0x0x64,0x0x1c,0x0x1,0x0x36,0x0x64,0x0x1d,0x0x1,0x0x64,0x0x1e,0x0x1,0x0x36,0x0x64,0x0x1f,0x0x1,0x0x64,0x0x20,0x0x1,0x0x36,0x0x64,0x0x21,0x0x1,0x0x64,0x0x22,0x0x1,0x0x36,0x0x64,0x0x23,0x0x1,0x0x64,0x0x24,0x0x1,0x0x36,0x0x64,0x0x25,0x0x1,0x0x64,0x0x26,0x0x1,0x0x36,0x0x64,0x0x27,0x0x1,0x0x64,0x0x28,0x0x1,0x0x36,0x0x64,0x0x29,0x0x1,0x0x64,0x0x2a,0x0x1,
+0x0x36,0x0x64,0x0x2b,0x0x1,0x0x64,0x0x2c,0x0x1,0x0x36,0x0x64,0x0x2d,0x0x1,0x0x64,0x0x2e,0x0x1,0x0x36,0x0x5a,0x0x9,0x0x0,0x0x64,0x0x2f,0x0x1,0x0x84,0x0x0,0x0x0,0x0x5a,0x0xa,0x0x0,0x0x64,0x0x30,0x0x1,0x0x84,0x0x0,0x0x0,0x0x5a,0x0xb,0x0x0,0x0x64,0x0x31,0x0x1,0x0x84,0x0x0,0x0x0,0x0x5a,0x0xc,0x0x0,0x0x64,0x0x32,0x0x1,0x0x84,0x0x0,0x0x0,0x0x5a,0x0xd,0x0x0,0x0x64,0x0x33,0x0x1,0x0x84,0x0x0,0x0x0,0x0x5a,0x0xe,0x0x0,0x0x64,0x0x1,0x0x0,0x0x53,0x0x28,0x0x35,0x0x1,0x0x0,0x0x0,0x0x69,0x0xff,0x0xff,0x0xff,0x0xff,0x0x4e,0x0x28,
+0x0x1,0x0x0,0x0x0,0x0x0,0x0x74,0x0x1,0x0x0,0x0x0,0x0x0,0x0x2a,0x0x74,0x0x6,0x0x0,0x0x0,0x0x0,0x0x6c,0x0x6f,0x0x67,0x0x67,0x0x65,0x0x72,0x0x63,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x1,0x0x0,0x0x0,0x0x0,0x0x42,0x0x0,0x0x0,0x0x0,0x0x73,0x0x11,0x0x0,0x0x0,0x0x0,0x0x65,0x0x0,0x0x0,0x0x5a,0x0x1,0x0x0,0x0x64,0x0x0,0x0x0,0x0x84,0x0x0,0x0x0,0x0x5a,0x0x2,0x0x0,0x0x52,0x0x53,0x0x28,0x0x1,0x0x0,0x0x0,0x0x0,0x0x63,0x0x2,0x0x0,0x0x0,0x0x0,0x0x2,0x0x0,0x0x0,0x0x0,0x0x2,0x0x0,0x0x0,0x0x0,0x0x43,
+0x0x0,0x0x0,0x0x0,0x0x73,0x0x34,0x0x0,0x0x0,0x0x0,0x0x7c,0x0x1,0x0x0,0x0x6a,0x0x0,0x0x0,0x0x83,0x0x0,0x0x0,0x0x6a,0x0x1,0x0x0,0x0x64,0x0x1,0x0x0,0x0x83,0x0x1,0x0x0,0x0x64,0x0x2,0x0x0,0x0x19,0x0x7d,0x0x1,0x0x0,0x0x74,0x0x2,0x0x0,0x0x7c,0x0x1,0x0x0,0x0x83,0x0x1,0x0x0,0x0x1,0x0x74,0x0x3,0x0x0,0x0x6a,0x0x4,0x0x0,0x0x7c,0x0x1,0x0x0,0x0x83,0x0x1,0x0x0,0x0x1,0x0x64,0x0x0,0x0x0,0x0x53,0x0x28,0x0x3,0x0x0,0x0x0,0x0x0,0x0x4e,0x0x73,0x0x1,0x0x0,0x0x0,0x0x0,0x0xa,0x0x69,0x0xff,0x0xff,0x0xff,0x0xff,0x0x28,0x0x5,
+0x0x0,0x0x0,0x0x0,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x73,0x0x74,0x0x72,0x0x69,0x0x70,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x73,0x0x70,0x0x6c,0x0x69,0x0x74,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x72,0x0x65,0x0x70,0x0x72,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x74,0x0x70,0x0x74,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x6c,0x0x6f,0x0x67,0x0x28,0x0x2,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x65,0x0x6c,0x0x66,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x74,0x0x78,0x0x74,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,
+0x0x0,0x0x73,0x0x1b,0x0x0,0x0x0,0x0x0,0x0x2e,0x0x2f,0x0x73,0x0x72,0x0x63,0x0x2f,0x0x70,0x0x79,0x0x74,0x0x68,0x0x6f,0x0x6e,0x0x2f,0x0x74,0x0x70,0x0x74,0x0x5f,0x0x63,0x0x6f,0x0x6e,0x0x73,0x0x6f,0x0x6c,0x0x65,0x0x2e,0x0x70,0x0x79,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x77,0x0x72,0x0x69,0x0x74,0x0x65,0x0xb,0x0x0,0x0x0,0x0x0,0x0x73,0x0x6,0x0x0,0x0x0,0x0x0,0x0x0,0x0x1,0x0x19,0x0x1,0x0xa,0x0x1,0x0x28,0x0x3,0x0x0,0x0x0,0x0x0,0x0x74,0x0x8,0x0x0,0x0x0,0x0x0,0x0x5f,0x0x5f,0x0x6e,0x0x61,0x0x6d,0x0x65,0x0x5f,0x0x5f,0x0x74,0x0xa,0x0x0,
+0x0x0,0x0x0,0x0x5f,0x0x5f,0x0x6d,0x0x6f,0x0x64,0x0x75,0x0x6c,0x0x65,0x0x5f,0x0x5f,0x0x52,0x0x9,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x73,0x0x1b,0x0x0,0x0x0,0x0x0,0x0x2e,0x0x2f,0x0x73,0x0x72,0x0x63,0x0x2f,0x0x70,0x0x79,0x0x74,0x0x68,0x0x6f,0x0x6e,0x0x2f,0x0x74,0x0x70,0x0x74,0x0x5f,0x0x63,0x0x6f,0x0x6e,0x0x73,0x0x6f,0x0x6c,0x0x65,0x0x2e,0x0x70,0x0x79,0x0x52,0x0x1,0x0x0,0x0x0,0x0x0,0x0xa,0x0x0,0x0x0,0x0x0,0x0x73,0x0x2,0x0x0,0x0x0,0x0x0,0x0x6,
+0x0x1,0x0x69,0x0x0,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6e,0x0x6f,0x0x6e,0x0x65,0x0x69,0x0x1,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x64,0x0x75,0x0x73,0x0x74,0x0x69,0x0x2,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x77,0x0x61,0x0x74,0x0x72,0x0x69,0x0x3,0x0x0,0x0x0,0x0x0,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x6f,0x0x69,0x0x6c,0x0x69,0x0x4,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x66,0x0x69,0x0x72,0x0x65,0x0x69,0x0x5,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,
+0x0x0,0x0x73,0x0x74,0x0x6e,0x0x65,0x0x69,0x0x6,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6c,0x0x61,0x0x76,0x0x61,0x0x69,0x0x7,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x67,0x0x75,0x0x6e,0x0x70,0x0x69,0x0x8,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6e,0x0x69,0x0x74,0x0x72,0x0x69,0x0x9,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x63,0x0x6c,0x0x6e,0x0x65,0x0x69,0x0xa,0x0x0,0x0x0,0x0x0,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x67,0x0x61,0x0x73,0x0x69,0x0xb,0x0x0,0x0x0,0x0x0,
+0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x6c,0x0x65,0x0x78,0x0x69,0x0xc,0x0x0,0x0x0,0x0x0,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x67,0x0x6f,0x0x6f,0x0x69,0x0xd,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x69,0x0x63,0x0x65,0x0x69,0x0x69,0x0xe,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6d,0x0x65,0x0x74,0x0x6c,0x0x69,0x0xf,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x70,0x0x72,0x0x6b,0x0x69,0x0x10,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x6e,0x0x6f,0x0x77,0x0x69,
+0x0x11,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x77,0x0x6f,0x0x6f,0x0x64,0x0x69,0x0x12,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6e,0x0x65,0x0x75,0x0x74,0x0x69,0x0x13,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x6c,0x0x75,0x0x74,0x0x69,0x0x14,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x6c,0x0x6e,0x0x74,0x0x69,0x0x15,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x61,0x0x63,0x0x69,0x0x64,0x0x69,0x0x16,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,
+0x0x76,0x0x6f,0x0x69,0x0x64,0x0x69,0x0x17,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x77,0x0x74,0x0x72,0x0x76,0x0x69,0x0x18,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x63,0x0x6e,0x0x63,0x0x74,0x0x69,0x0x19,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x64,0x0x73,0x0x74,0x0x77,0x0x69,0x0x1a,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x61,0x0x6c,0x0x74,0x0x69,0x0x1b,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x6c,0x0x74,0x0x77,0x0x69,0x0x1c,0x0x0,0x0x0,0x0x0,
+0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x64,0x0x6d,0x0x6e,0x0x64,0x0x69,0x0x1d,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x62,0x0x6d,0x0x74,0x0x6c,0x0x69,0x0x1e,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x62,0x0x72,0x0x6d,0x0x74,0x0x69,0x0x1f,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x68,0x0x6f,0x0x74,0x0x69,0x0x20,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x75,0x0x72,0x0x61,0x0x6e,0x0x69,0x0x21,0x0x0,0x0x0,0x0x0,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x77,0x0x61,0x0x78,0x0x69,
+0x0x22,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6d,0x0x77,0x0x61,0x0x78,0x0x69,0x0x23,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x73,0x0x63,0x0x6e,0x0x69,0x0x24,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6e,0x0x73,0x0x63,0x0x6e,0x0x69,0x0x25,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6c,0x0x6e,0x0x74,0x0x67,0x0x69,0x0x26,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x69,0x0x6e,0x0x73,0x0x6c,0x0x69,0x0x27,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,
+0x0x62,0x0x68,0x0x6f,0x0x6c,0x0x69,0x0x28,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x77,0x0x68,0x0x6f,0x0x6c,0x0x69,0x0x29,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x72,0x0x62,0x0x64,0x0x6d,0x0x69,0x0x2a,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6c,0x0x72,0x0x62,0x0x64,0x0x69,0x0x2b,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6e,0x0x74,0x0x63,0x0x74,0x0x69,0x0x2c,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x61,0x0x6e,0x0x64,0x0x69,0x0x2d,0x0x0,0x0x0,0x0x0,
+0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x67,0x0x6c,0x0x61,0x0x73,0x0x69,0x0x2e,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x74,0x0x63,0x0x74,0x0x69,0x0x2f,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x62,0x0x67,0x0x6c,0x0x61,0x0x69,0x0x30,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x74,0x0x68,0x0x64,0x0x72,0x0x69,0x0x31,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x6c,0x0x73,0x0x6d,0x0x69,0x0x32,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x65,0x0x74,0x0x72,0x0x64,
+0x0x69,0x0x33,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6e,0x0x69,0x0x63,0x0x65,0x0x69,0x0x34,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6e,0x0x62,0x0x6c,0x0x65,0x0x69,0x0x35,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x62,0x0x74,0x0x72,0x0x79,0x0x69,0x0x36,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6c,0x0x63,0x0x72,0x0x79,0x0x69,0x0x37,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x74,0x0x6b,0x0x6d,0x0x69,0x0x38,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,
+0x0x0,0x0x73,0x0x77,0x0x63,0x0x68,0x0x69,0x0x39,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x6d,0x0x6b,0x0x65,0x0x69,0x0x3a,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x64,0x0x65,0x0x73,0x0x6c,0x0x69,0x0x3b,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x63,0x0x6f,0x0x61,0x0x6c,0x0x69,0x0x3c,0x0x0,0x0x0,0x0x0,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x6c,0x0x6f,0x0x32,0x0x69,0x0x3d,0x0x0,0x0x0,0x0x0,0x0x74,0x0x2,0x0x0,0x0x0,0x0x0,0x0x6f,0x0x32,0x0x69,0x0x3e,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,
+0x0x0,0x0x0,0x0x0,0x0x69,0x0x6e,0x0x77,0x0x72,0x0x69,0x0x3f,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x79,0x0x65,0x0x73,0x0x74,0x0x69,0x0x40,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x64,0x0x79,0x0x73,0x0x74,0x0x69,0x0x41,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x74,0x0x68,0x0x72,0x0x6d,0x0x69,0x0x42,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x67,0x0x6c,0x0x6f,0x0x77,0x0x69,0x0x43,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x62,0x0x72,0x0x63,0x0x6b,0x0x69,0x0x44,
+0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x68,0x0x66,0x0x6c,0x0x6d,0x0x69,0x0x45,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x66,0x0x69,0x0x72,0x0x77,0x0x69,0x0x46,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x66,0x0x75,0x0x73,0x0x65,0x0x69,0x0x47,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x66,0x0x73,0x0x65,0x0x70,0x0x69,0x0x48,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x61,0x0x6d,0x0x74,0x0x72,0x0x69,0x0x49,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x62,
+0x0x63,0x0x6f,0x0x6c,0x0x69,0x0x4a,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x63,0x0x6c,0x0x6e,0x0x69,0x0x4b,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x68,0x0x73,0x0x77,0x0x63,0x0x69,0x0x4c,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x69,0x0x72,0x0x6f,0x0x6e,0x0x69,0x0x4d,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6d,0x0x6f,0x0x72,0x0x74,0x0x69,0x0x4e,0x0x0,0x0x0,0x0x0,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x67,0x0x6f,0x0x6c,0x0x69,0x0x4f,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,
+0x0x0,0x0x0,0x0x0,0x0x68,0x0x6c,0x0x69,0x0x66,0x0x69,0x0x50,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x61,0x0x73,0x0x69,0x0x6d,0x0x69,0x0x51,0x0x0,0x0x0,0x0x0,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x32,0x0x78,0x0x32,0x0x69,0x0x52,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x64,0x0x61,0x0x6e,0x0x69,0x0x69,0x0x53,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x61,0x0x6d,0x0x6f,0x0x65,0x0x69,0x0x54,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6d,0x0x6f,0x0x76,0x0x65,0x0x69,0x0x55,0x0x0,
+0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x67,0x0x6f,0x0x6c,0x0x69,0x0x56,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x64,0x0x6d,0x0x6f,0x0x65,0x0x69,0x0x57,0x0x0,0x0x0,0x0x0,0x0x74,0x0x2,0x0x0,0x0x0,0x0x0,0x0x33,0x0x34,0x0x69,0x0x58,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6c,0x0x6c,0x0x69,0x0x66,0x0x69,0x0x59,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x74,0x0x61,0x0x6e,0x0x69,0x0x5a,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x70,0x0x6e,0x0x67,
+0x0x69,0x0x5b,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x72,0x0x69,0x0x6d,0x0x65,0x0x69,0x0x5c,0x0x0,0x0x0,0x0x0,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x66,0x0x6f,0x0x67,0x0x69,0x0x5d,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x62,0x0x63,0x0x6c,0x0x6e,0x0x69,0x0x5e,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6c,0x0x6f,0x0x76,0x0x65,0x0x69,0x0x5f,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x64,0x0x65,0x0x75,0x0x74,0x0x69,0x0x60,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,
+0x0x77,0x0x61,0x0x72,0x0x70,0x0x69,0x0x61,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x75,0x0x6d,0x0x70,0x0x69,0x0x62,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x66,0x0x77,0x0x72,0x0x6b,0x0x69,0x0x63,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x69,0x0x70,0x0x65,0x0x69,0x0x64,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x66,0x0x72,0x0x7a,0x0x7a,0x0x69,0x0x65,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x66,0x0x72,0x0x7a,0x0x77,0x0x69,0x0x66,0x0x0,0x0x0,0x0x0,
+0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x67,0x0x72,0x0x61,0x0x76,0x0x69,0x0x67,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x62,0x0x69,0x0x7a,0x0x72,0x0x69,0x0x68,0x0x0,0x0x0,0x0x0,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x62,0x0x69,0x0x7a,0x0x72,0x0x67,0x0x69,0x0x69,0x0x0,0x0x0,0x0x0,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x62,0x0x69,0x0x7a,0x0x72,0x0x73,0x0x69,0x0x6a,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x69,0x0x6e,0x0x73,0x0x74,0x0x69,0x0x6b,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x69,0x0x73,
+0x0x6f,0x0x7a,0x0x69,0x0x6c,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x69,0x0x73,0x0x7a,0x0x73,0x0x69,0x0x6d,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x72,0x0x74,0x0x69,0x0x69,0x0x6e,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x72,0x0x74,0x0x6f,0x0x69,0x0x6f,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x73,0x0x74,0x0x65,0x0x69,0x0x70,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x73,0x0x74,0x0x73,0x0x69,0x0x71,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,
+0x0x0,0x0x0,0x0x0,0x0x61,0x0x6e,0x0x61,0x0x72,0x0x69,0x0x72,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x76,0x0x69,0x0x6e,0x0x65,0x0x69,0x0x73,0x0x0,0x0x0,0x0x0,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x69,0x0x6e,0x0x76,0x0x69,0x0x73,0x0x69,0x0x74,0x0x0,0x0x0,0x0x0,0x0x74,0x0x8,0x0x0,0x0x0,0x0x0,0x0x65,0x0x71,0x0x75,0x0x61,0x0x6c,0x0x76,0x0x65,0x0x6c,0x0x69,0x0x75,0x0x0,0x0x0,0x0x0,0x0x74,0x0x6,0x0x0,0x0x0,0x0x0,0x0x73,0x0x70,0x0x61,0x0x77,0x0x6e,0x0x32,0x0x69,0x0x76,0x0x0,0x0x0,0x0x0,0x0x74,0x0x5,0x0x0,0x0x0,
+0x0x0,0x0x73,0x0x70,0x0x61,0x0x77,0x0x6e,0x0x69,0x0x77,0x0x0,0x0x0,0x0x0,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x73,0x0x68,0x0x6c,0x0x64,0x0x31,0x0x69,0x0x78,0x0x0,0x0x0,0x0x0,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x73,0x0x68,0x0x6c,0x0x64,0x0x32,0x0x69,0x0x79,0x0x0,0x0x0,0x0x0,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x73,0x0x68,0x0x6c,0x0x64,0x0x33,0x0x69,0x0x7a,0x0x0,0x0x0,0x0x0,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x73,0x0x68,0x0x6c,0x0x64,0x0x34,0x0x69,0x0x7b,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6c,0x0x6f,0x0x6c,
+0x0x7a,0x0x69,0x0x7c,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x77,0x0x69,0x0x66,0x0x69,0x0x69,0x0x7d,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x66,0x0x69,0x0x6c,0x0x74,0x0x69,0x0x7e,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x61,0x0x72,0x0x61,0x0x79,0x0x69,0x0x7f,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x62,0x0x72,0x0x61,0x0x79,0x0x69,0x0x80,0x0x0,0x0x0,0x0x0,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x73,0x0x74,0x0x6b,0x0x6d,0x0x32,0x0x69,0x0x81,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,
+0x0x0,0x0x0,0x0x0,0x0x62,0x0x6f,0x0x6d,0x0x62,0x0x69,0x0x82,0x0x0,0x0x0,0x0x0,0x0x74,0x0x2,0x0x0,0x0x0,0x0x0,0x0x63,0x0x35,0x0x69,0x0x83,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x69,0x0x6e,0x0x67,0x0x69,0x0x84,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x71,0x0x72,0x0x74,0x0x7a,0x0x69,0x0x85,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x70,0x0x71,0x0x72,0x0x74,0x0x69,0x0x86,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x65,0x0x65,0x0x64,0x0x69,0x0x87,0x0x0,0x0x0,
+0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6d,0x0x61,0x0x7a,0x0x65,0x0x69,0x0x88,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x63,0x0x6f,0x0x61,0x0x67,0x0x69,0x0x89,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x77,0x0x61,0x0x6c,0x0x6c,0x0x69,0x0x8a,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x67,0x0x6e,0x0x61,0x0x72,0x0x69,0x0x8b,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x72,0x0x65,0x0x70,0x0x6c,0x0x69,0x0x8c,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6d,0x0x79,0x0x73,
+0x0x74,0x0x69,0x0x8d,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x62,0x0x6f,0x0x79,0x0x6c,0x0x69,0x0x8e,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x6c,0x0x6f,0x0x74,0x0x65,0x0x69,0x0x8f,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x66,0x0x72,0x0x67,0x0x32,0x0x69,0x0x90,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x73,0x0x74,0x0x61,0x0x72,0x0x69,0x0x91,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x66,0x0x72,0x0x6f,0x0x67,0x0x69,0x0x92,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,
+0x0x0,0x0x0,0x0x62,0x0x72,0x0x61,0x0x6e,0x0x69,0x0x93,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x77,0x0x69,0x0x6e,0x0x64,0x0x69,0x0x94,0x0x0,0x0x0,0x0x0,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x6e,0x0x75,0x0x6d,0x0x63,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x1,0x0x0,0x0x0,0x0x0,0x0x43,0x0x0,0x0x0,0x0x0,0x0x73,0x0x4,0x0x0,0x0x0,0x0x0,0x0x64,0x0x0,0x0x0,0x0x53,0x0x28,0x0x1,0x0x0,0x0x0,0x0x0,0x0x4e,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,
+0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x73,0x0x1b,0x0x0,0x0x0,0x0x0,0x0x2e,0x0x2f,0x0x73,0x0x72,0x0x63,0x0x2f,0x0x70,0x0x79,0x0x74,0x0x68,0x0x6f,0x0x6e,0x0x2f,0x0x74,0x0x70,0x0x74,0x0x5f,0x0x63,0x0x6f,0x0x6e,0x0x73,0x0x6f,0x0x6c,0x0x65,0x0x2e,0x0x70,0x0x79,0x0x74,0x0xc,0x0x0,0x0x0,0x0x0,0x0x66,0x0x6f,0x0x72,0x0x6b,0x0x5f,0x0x75,0x0x6e,0x0x62,0x0x6c,0x0x6f,0x0x63,0x0x6b,0x0x2b,0x0x0,0x0x0,0x0x0,0x0x73,0x0x2,0x0x0,0x0x0,0x0x0,0x0x0,0x0x1,0x0x63,0x0x1,0x0x0,0x0x0,0x0x0,0x0x2,0x0x0,0x0x0,0x0x0,0x0x2,0x0x0,0x0x0,0x0x0,
+0x0x43,0x0x0,0x0x0,0x0x0,0x0x73,0x0x20,0x0x0,0x0x0,0x0x0,0x0x74,0x0x0,0x0x0,0x0x6a,0x0x1,0x0x0,0x0x83,0x0x0,0x0x0,0x0x7d,0x0x1,0x0x0,0x0x74,0x0x2,0x0x0,0x0x6a,0x0x3,0x0x0,0x0x6a,0x0x4,0x0x0,0x0x7c,0x0x1,0x0x0,0x0x83,0x0x1,0x0x0,0x0x1,0x0x64,0x0x0,0x0x0,0x0x53,0x0x28,0x0x1,0x0x0,0x0x0,0x0x0,0x0x4e,0x0x28,0x0x5,0x0x0,0x0x0,0x0x0,0x0x74,0x0x9,0x0x0,0x0x0,0x0x0,0x0x74,0x0x72,0x0x61,0x0x63,0x0x65,0x0x62,0x0x61,0x0x63,0x0x6b,0x0x74,0x0xa,0x0x0,0x0x0,0x0x0,0x0x66,0x0x6f,0x0x72,0x0x6d,0x0x61,0x0x74,0x0x5f,0x0x65,
+0x0x78,0x0x63,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x73,0x0x79,0x0x73,0x0x74,0x0x6,0x0x0,0x0x0,0x0x0,0x0x73,0x0x74,0x0x64,0x0x6f,0x0x75,0x0x74,0x0x52,0x0x9,0x0x0,0x0x0,0x0x0,0x0x28,0x0x2,0x0x0,0x0x0,0x0x0,0x0x74,0x0x2,0x0x0,0x0x0,0x0x0,0x0x65,0x0x78,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x65,0x0x72,0x0x72,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x73,0x0x1b,0x0x0,0x0x0,0x0x0,0x0x2e,0x0x2f,0x0x73,0x0x72,0x0x63,0x0x2f,0x0x70,0x0x79,0x0x74,0x0x68,0x0x6f,0x0x6e,0x0x2f,0x0x74,0x0x70,0x0x74,0x0x5f,0x0x63,
+0x0x6f,0x0x6e,0x0x73,0x0x6f,0x0x6c,0x0x65,0x0x2e,0x0x70,0x0x79,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x65,0x0x72,0x0x72,0x0x6f,0x0x72,0x0x2d,0x0x0,0x0x0,0x0x0,0x0x73,0x0x4,0x0x0,0x0x0,0x0x0,0x0x0,0x0x1,0x0xc,0x0x1,0x0x63,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x0,0x0x2,0x0x0,0x0x0,0x0x0,0x0x43,0x0x0,0x0x0,0x0x0,0x0x73,0x0x19,0x0x0,0x0x0,0x0x0,0x0x74,0x0x0,0x0x0,0x0x83,0x0x0,0x0x0,0x0x74,0x0x1,0x0x0,0x0x5f,0x0x2,0x0x0,0x0x64,0x0x1,0x0x0,0x0x74,0x0x1,0x0x0,0x0x5f,0x0x3,0x0x0,0x0x64,0x0x2,0x0x0,0x0x53,
+0x0x28,0x0x3,0x0x0,0x0x0,0x0x0,0x0x73,0x0xde,0x0x0,0x0x0,0x0x0,0x0x63,0x0x6f,0x0x70,0x0x79,0x0x3d,0x0x5b,0x0x22,0x0x5f,0x0x5f,0x0x62,0x0x75,0x0x69,0x0x6c,0x0x74,0x0x69,0x0x6e,0x0x73,0x0x5f,0x0x5f,0x0x22,0x0x2c,0x0x22,0x0x5f,0x0x5f,0x0x6e,0x0x61,0x0x6d,0x0x65,0x0x5f,0x0x5f,0x0x22,0x0x2c,0x0x22,0x0x5f,0x0x5f,0x0x64,0x0x6f,0x0x63,0x0x5f,0x0x5f,0x0x22,0x0x2c,0x0x22,0x0x5f,0x0x5f,0x0x70,0x0x61,0x0x63,0x0x6b,0x0x61,0x0x67,0x0x65,0x0x5f,0x0x5f,0x0x22,0x0x2c,0x0x27,0x0x74,0x0x70,0x0x74,0x0x27,0x0x2c,0x0x27,0x0x63,0x0x6c,0x0x65,0x0x61,0x0x6e,0x0x27,
+0x0x2c,0x0xa,0x0x20,0x0x20,0x0x20,0x0x20,0x0x20,0x0x20,0x0x20,0x0x20,0x0x27,0x0x65,0x0x6c,0x0x65,0x0x6d,0x0x65,0x0x6e,0x0x74,0x0x27,0x0x2c,0x0x27,0x0x66,0x0x6f,0x0x72,0x0x6b,0x0x27,0x0x2c,0x0x27,0x0x5f,0x0x66,0x0x6f,0x0x72,0x0x6b,0x0x27,0x0x2c,0x0x27,0x0x66,0x0x6f,0x0x72,0x0x6b,0x0x5f,0x0x73,0x0x74,0x0x61,0x0x74,0x0x75,0x0x73,0x0x27,0x0x2c,0x0x27,0x0x66,0x0x6f,0x0x72,0x0x6b,0x0x5f,0x0x75,0x0x6e,0x0x62,0x0x6c,0x0x6f,0x0x63,0x0x6b,0x0x27,0x0x2c,0x0x27,0x0x73,0x0x79,0x0x73,0x0x27,0x0x5d,0x0xa,0x0x20,0x0x20,0x0x20,0x0x20,0x0x68,0x0x61,0x0x6e,0x0x64,
+0x0x6c,0x0x65,0x0x2e,0x0x67,0x0x6c,0x0x6f,0x0x62,0x0x3d,0x0x7b,0x0x7d,0x0xa,0x0x20,0x0x20,0x0x20,0x0x20,0x0x66,0x0x6f,0x0x72,0x0x20,0x0x69,0x0x74,0x0x65,0x0x6d,0x0x20,0x0x69,0x0x6e,0x0x20,0x0x63,0x0x6f,0x0x70,0x0x79,0x0x3a,0x0xa,0x0x20,0x0x20,0x0x20,0x0x20,0x0x20,0x0x20,0x0x20,0x0x20,0x0x68,0x0x61,0x0x6e,0x0x64,0x0x6c,0x0x65,0x0x2e,0x0x67,0x0x6c,0x0x6f,0x0x62,0x0x5b,0x0x69,0x0x74,0x0x65,0x0x6d,0x0x5d,0x0x3d,0x0x67,0x0x6c,0x0x6f,0x0x62,0x0x61,0x0x6c,0x0x73,0x0x28,0x0x29,0x0x5b,0x0x69,0x0x74,0x0x65,0x0x6d,0x0x5d,0x0x74,0x0x0,0x0x0,0x0x0,0x0x0,
+0x0x4e,0x0x28,0x0x4,0x0x0,0x0x0,0x0x0,0x0x74,0x0x7,0x0x0,0x0x0,0x0x0,0x0x67,0x0x6c,0x0x6f,0x0x62,0x0x61,0x0x6c,0x0x73,0x0x74,0x0x6,0x0x0,0x0x0,0x0x0,0x0x68,0x0x61,0x0x6e,0x0x64,0x0x6c,0x0x65,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x67,0x0x6c,0x0x6f,0x0x62,0x0x74,0x0x3,0x0x0,0x0x0,0x0x0,0x0x62,0x0x75,0x0x66,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x73,0x0x1b,0x0x0,0x0x0,0x0x0,0x0x2e,0x0x2f,0x0x73,0x0x72,0x0x63,0x0x2f,0x0x70,0x0x79,0x0x74,0x0x68,0x0x6f,0x0x6e,0x0x2f,
+0x0x74,0x0x70,0x0x74,0x0x5f,0x0x63,0x0x6f,0x0x6e,0x0x73,0x0x6f,0x0x6c,0x0x65,0x0x2e,0x0x70,0x0x79,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x63,0x0x6c,0x0x65,0x0x61,0x0x6e,0x0x31,0x0x0,0x0x0,0x0x0,0x0x73,0x0x4,0x0x0,0x0x0,0x0x0,0x0x0,0x0x7,0x0xc,0x0x1,0x0x63,0x0x1,0x0x0,0x0x0,0x0x0,0x0x3,0x0x0,0x0x0,0x0x0,0x0x5,0x0x0,0x0x0,0x0x0,0x0x43,0x0x0,0x0x0,0x0x0,0x0x73,0x0x50,0x0x0,0x0x0,0x0x0,0x0x79,0x0xd,0x0x0,0x0x74,0x0x0,0x0x0,0x0x6a,0x0x1,0x0x0,0x0x7d,0x0x1,0x0x0,0x0x57,0x0x6e,0x0xe,0x0x0,0x0x1,0x0x1,0x0x1,0x0x74,
+0x0x2,0x0x0,0x0x83,0x0x0,0x0x0,0x0x1,0x0x6e,0x0x1,0x0x0,0x0x58,0x0x79,0x0xe,0x0x0,0x0x74,0x0x3,0x0x0,0x0x7c,0x0x0,0x0x0,0x0x83,0x0x1,0x0x0,0x0x1,0x0x57,0x0x6e,0x0x1d,0x0x0,0x0x4,0x0x74,0x0x4,0x0x0,0x0x6b,0x0xa,0x0x0,0x0x72,0x0x4b,0x0x0,0x0x1,0x0x7d,0x0x2,0x0x0,0x0x1,0x0x74,0x0x5,0x0x0,0x0x7c,0x0x2,0x0x0,0x0x83,0x0x1,0x0x0,0x0x1,0x0x6e,0x0x1,0x0x0,0x0x58,0x0x64,0x0x0,0x0x0,0x0x53,0x0x28,0x0x1,0x0x0,0x0x0,0x0x0,0x0x4e,0x0x28,0x0x6,0x0x0,0x0x0,0x0x0,0x0x52,0x0xab,0x0x0,0x0x0,0x0x0,0x0x52,0x0xac,0x0x0,
+0x0x0,0x0x0,0x0x52,0x0xae,0x0x0,0x0x0,0x0x0,0x0x74,0x0x7,0x0x0,0x0x0,0x0x0,0x0x5f,0x0x68,0x0x61,0x0x6e,0x0x64,0x0x6c,0x0x65,0x0x74,0x0x9,0x0x0,0x0x0,0x0x0,0x0x45,0x0x78,0x0x63,0x0x65,0x0x70,0x0x74,0x0x69,0x0x6f,0x0x6e,0x0x52,0x0xa8,0x0x0,0x0x0,0x0x0,0x0x28,0x0x3,0x0x0,0x0x0,0x0x0,0x0x52,0x0x8,0x0x0,0x0x0,0x0x0,0x0x74,0x0x1,0x0x0,0x0x0,0x0x0,0x0x61,0x0x52,0x0xa6,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x73,0x0x1b,0x0x0,0x0x0,0x0x0,0x0x2e,0x0x2f,0x0x73,0x0x72,0x0x63,
+0x0x2f,0x0x70,0x0x79,0x0x74,0x0x68,0x0x6f,0x0x6e,0x0x2f,0x0x74,0x0x70,0x0x74,0x0x5f,0x0x63,0x0x6f,0x0x6e,0x0x73,0x0x6f,0x0x6c,0x0x65,0x0x2e,0x0x70,0x0x79,0x0x52,0x0xab,0x0x0,0x0x0,0x0x0,0x0x3b,0x0x0,0x0x0,0x0x0,0x0x73,0x0x10,0x0x0,0x0x0,0x0x0,0x0x0,0x0x1,0x0x3,0x0x1,0x0xd,0x0x1,0x0x3,0x0x1,0x0xb,0x0x1,0x0x3,0x0x1,0x0xe,0x0x1,0x0xf,0x0x1,0x0x63,0x0x1,0x0x0,0x0x0,0x0x0,0x0x2,0x0x0,0x0x0,0x0x0,0x0x5,0x0x0,0x0x0,0x0x0,0x0x42,0x0x0,0x0x0,0x0x0,0x0x73,0x0x63,0x0x0,0x0x0,0x0x0,0x0x79,0x0x26,0x0x0,0x0x65,0x0x0,
+0x0x0,0x0x6a,0x0x1,0x0x0,0x0x6a,0x0x2,0x0x0,0x0x65,0x0x3,0x0x0,0x0x65,0x0x4,0x0x0,0x0x7c,0x0x0,0x0x0,0x0x65,0x0x5,0x0x0,0x0x6a,0x0x6,0x0x0,0x0x83,0x0x2,0x0x0,0x0x83,0x0x1,0x0x0,0x0x83,0x0x1,0x0x0,0x0x1,0x0x57,0x0x6e,0x0x36,0x0x0,0x0x1,0x0x1,0x0x1,0x0x79,0x0xf,0x0x0,0x0x7c,0x0x0,0x0x0,0x0x65,0x0x5,0x0x0,0x0x6a,0x0x6,0x0x0,0x0x4,0x0x55,0x0x57,0x0x71,0x0x5f,0x0x0,0x0x4,0x0x65,0x0x7,0x0x0,0x0x6b,0x0xa,0x0x0,0x0x72,0x0x5a,0x0x0,0x0x1,0x0x7d,0x0x1,0x0x0,0x0x1,0x0x65,0x0x8,0x0x0,0x0x7c,0x0x1,0x0x0,0x0x83,
+0x0x1,0x0x0,0x0x1,0x0x71,0x0x5f,0x0x0,0x0x58,0x0x6e,0x0x1,0x0x0,0x0x58,0x0x64,0x0x0,0x0x0,0x0x53,0x0x28,0x0x1,0x0x0,0x0x0,0x0x0,0x0x4e,0x0x28,0x0x9,0x0x0,0x0x0,0x0x0,0x0x52,0x0xa4,0x0x0,0x0x0,0x0x0,0x0x52,0x0xa5,0x0x0,0x0x0,0x0x0,0x0x52,0x0x9,0x0x0,0x0x0,0x0x0,0x0x52,0x0x4,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x65,0x0x76,0x0x61,0x0x6c,0x0x52,0x0xab,0x0x0,0x0x0,0x0x0,0x0x52,0x0xac,0x0x0,0x0x0,0x0x0,0x0x52,0x0xb0,0x0x0,0x0x0,0x0x0,0x0x52,0x0xa8,0x0x0,0x0x0,0x0x0,0x0x28,0x0x2,0x0x0,0x0x0,
+0x0x0,0x0x52,0x0x8,0x0x0,0x0x0,0x0x0,0x0x52,0x0xa6,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x73,0x0x1b,0x0x0,0x0x0,0x0x0,0x0x2e,0x0x2f,0x0x73,0x0x72,0x0x63,0x0x2f,0x0x70,0x0x79,0x0x74,0x0x68,0x0x6f,0x0x6e,0x0x2f,0x0x74,0x0x70,0x0x74,0x0x5f,0x0x63,0x0x6f,0x0x6e,0x0x73,0x0x6f,0x0x6c,0x0x65,0x0x2e,0x0x70,0x0x79,0x0x52,0x0xaf,0x0x0,0x0x0,0x0x0,0x0x45,0x0x0,0x0x0,0x0x0,0x0x73,0x0xe,0x0x0,0x0x0,0x0x0,0x0x0,0x0x2,0x0x3,0x0x1,0x0x26,0x0x1,0x0x3,0x0x1,0x0x3,0x0x1,0x0xf,0x0x1,
+0x0xf,0x0x1,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0xf,0x0x0,0x0x0,0x0x0,0x0x52,0x0x5,0x0x0,0x0x0,0x0x0,0x0x74,0x0x5,0x0x0,0x0x0,0x0x0,0x0x75,0x0x74,0x0x69,0x0x6c,0x0x73,0x0x52,0x0xa4,0x0x0,0x0x0,0x0x0,0x0x74,0x0x4,0x0x0,0x0x0,0x0x0,0x0x63,0x0x6f,0x0x64,0x0x65,0x0x74,0x0x6,0x0x0,0x0x0,0x0x0,0x0x63,0x0x74,0x0x79,0x0x70,0x0x65,0x0x73,0x0x52,0x0xa2,0x0x0,0x0x0,0x0x0,0x0x52,0x0x1,0x0x0,0x0x0,0x0x0,0x0x52,0x0xa5,0x0x0,0x0x0,0x0x0,0x0x74,0x0x6,0x0x0,0x0x0,0x0x0,0x0x73,0x0x74,0x0x64,0x0x65,0x0x72,0x0x72,0x0x74,
+0x0x7,0x0x0,0x0x0,0x0x0,0x0x65,0x0x6c,0x0x65,0x0x6d,0x0x65,0x0x6e,0x0x74,0x0x52,0x0xa1,0x0x0,0x0x0,0x0x0,0x0x52,0x0xa8,0x0x0,0x0x0,0x0x0,0x0x52,0x0xae,0x0x0,0x0x0,0x0x0,0x0x52,0x0xab,0x0x0,0x0x0,0x0x0,0x0x52,0x0xaf,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x28,0x0x0,0x0x0,0x0x0,0x0x0,0x0x73,0x0x1b,0x0x0,0x0x0,0x0x0,0x0x2e,0x0x2f,0x0x73,0x0x72,0x0x63,0x0x2f,0x0x70,0x0x79,0x0x74,0x0x68,0x0x6f,0x0x6e,0x0x2f,0x0x74,0x0x70,0x0x74,0x0x5f,0x0x63,0x0x6f,0x0x6e,0x0x73,0x0x6f,0x0x6c,
+0x0x65,0x0x2e,0x0x70,0x0x79,0x0x74,0x0x8,0x0x0,0x0x0,0x0x0,0x0x3c,0x0x6d,0x0x6f,0x0x64,0x0x75,0x0x6c,0x0x65,0x0x3e,0x0x1,0x0x0,0x0x0,0x0x0,0x0x73,0x0x4a,0x0x0,0x0x0,0x0x0,0x0xc,0x0x1,0x0xa,0x0x1,0x0xa,0x0x1,0x0xc,0x0x1,0x0xc,0x0x1,0x0xc,0x0x1,0x0xc,0x0x3,0x0x13,0x0x5,0x0xc,0x0x1,0x0xc,0x0x2,0x0x3b,0x0x1,0x0x38,0x0x1,0x0x31,0x0x1,0x0x31,0x0x1,0x0x31,0x0x1,0x0x31,0x0x1,0x0x31,0x0x1,0x0x31,0x0x1,0x0x31,0x0x1,0x0x31,0x0x1,0x0x31,0x0x1,0x0x31,0x0x1,0x0x31,0x0x1,0x0x31,0x0x1,0x0x2a,0x0x1,0x0x2a,0x0x1,0x0x2a,
+0x0x1,0x0x2a,0x0x1,0x0x2a,0x0x1,0x0x2a,0x0x1,0x0x2a,0x0x1,0x0x2a,0x0x1,0x0xa,0x0x3,0x0x9,0x0x2,0x0x9,0x0x4,0x0x9,0x0xa,0x0x9,0x0xa}; \ No newline at end of file
diff --git a/src/interface.c b/src/interface.c
index b13917d..6221848 100644
--- a/src/interface.c
+++ b/src/interface.c
@@ -3847,10 +3847,12 @@ struct command_history {
};
typedef struct command_history command_history;
command_history *last_command = NULL;
-char *console_ui(pixel *vid_buf,char error[255]) { //TODO: error messages, show previous commands
+command_history *last_command2 = NULL;
+char *console_ui(pixel *vid_buf,char error[255],char console_more) {
int mx,my,b,cc,ci = -1;
pixel *old_buf=calloc((XRES+BARSIZE)*(YRES+MENUSIZE), PIXELSIZE);
command_history *currentcommand;
+ command_history *currentcommand2;
ui_edit ed;
ed.x = 15;
ed.y = 207;
@@ -3864,7 +3866,13 @@ char *console_ui(pixel *vid_buf,char error[255]) { //TODO: error messages, show
ed.cursor = 0;
//fillrect(vid_buf, -1, -1, XRES, 220, 0, 0, 0, 190);
memcpy(old_buf,vid_buf,(XRES+BARSIZE)*YRES*PIXELSIZE);
- fillrect(old_buf, -1, -1, XRES, 220, 0, 0, 0, 190);
+ fillrect(old_buf, -1, -1, XRES+1, 220, 0, 0, 0, 190);
+ currentcommand2 = malloc(sizeof(command_history));
+ memset(currentcommand2, 0, sizeof(command_history));
+ currentcommand2->prev_command = last_command2;
+ currentcommand2->command = mystrdup(error);
+ last_command2 = currentcommand2;
+ SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
cc = 0;
while(cc < 80){
fillrect(old_buf, -1, -1+cc, XRES+BARSIZE, 2, 0, 0, 0, 160-(cc*2));
@@ -3877,10 +3885,10 @@ char *console_ui(pixel *vid_buf,char error[255]) { //TODO: error messages, show
my /= sdl_scale;
ed.focus = 1;
+ //clearrect(vid_buf, 0, 0, XRES+BARSIZE, 220);//anyway to make it transparent?
memcpy(vid_buf,old_buf,(XRES+BARSIZE)*YRES*PIXELSIZE);
draw_line(vid_buf, 0, 219, XRES+BARSIZE-1, 219, 228, 228, 228, XRES+BARSIZE);
- drawtext(vid_buf, 15, 15, "Welcome to The Powder Toy console v.3 (by cracker64)\n"
- "Current commands are quit, set, reset, load, create, file, kill, sound\n" //TODO: help command
+ drawtext(vid_buf, 15, 15, "Welcome to The Powder Toy console v.3 (by cracker64, python by Doxin)" //TODO: help command
,255, 255, 255, 255);
cc = 0;
@@ -3905,11 +3913,35 @@ char *console_ui(pixel *vid_buf,char error[255]) { //TODO: error messages, show
break;
}
}
+ cc = 0;
+ currentcommand2 = last_command2;
+ while(cc < 10)
+ {
+ if(currentcommand2==NULL)
+ break;
+ drawtext(vid_buf, 215, 175-(cc*12), currentcommand2->command, 255, 225, 225, 255);
+ if(currentcommand2->prev_command!=NULL)
+ {
+ if(cc<9) {
+ currentcommand2 = currentcommand2->prev_command;
+ } else if(currentcommand2->prev_command!=NULL) {
+ free(currentcommand2->prev_command);
+ currentcommand2->prev_command = NULL;
+ }
+ cc++;
+ }
+ else
+ {
+ break;
+ }
+ }
- if(error && ed.str[0]=='\0')
- drawtext(vid_buf, 20, 207, error, 255, 127, 127, 200);
-
- drawtext(vid_buf, 5, 207, ">", 255, 255, 255, 240);
+ //if(error && ed.str[0]=='\0')
+ //drawtext(vid_buf, 20, 207, error, 255, 127, 127, 200);
+ if(console_more==0)
+ drawtext(vid_buf, 5, 207, ">", 255, 255, 255, 240);
+ else
+ drawtext(vid_buf, 5, 207, "...", 255, 255, 255, 240);
ui_edit_draw(vid_buf, &ed);
ui_edit_process(mx, my, b, &ed);
@@ -3922,12 +3954,14 @@ char *console_ui(pixel *vid_buf,char error[255]) { //TODO: error messages, show
currentcommand->command = mystrdup(ed.str);
last_command = currentcommand;
free(old_buf);
+ SDL_EnableKeyRepeat(0, SDL_DEFAULT_REPEAT_INTERVAL);
return currentcommand->command;
}
if (sdl_key==SDLK_ESCAPE || sdl_key==SDLK_BACKQUOTE)
{
console_mode = 0;
free(old_buf);
+ SDL_EnableKeyRepeat(0, SDL_DEFAULT_REPEAT_INTERVAL);
return NULL;
}
if(sdl_key==SDLK_UP || sdl_key==SDLK_DOWN)
@@ -3964,6 +3998,7 @@ char *console_ui(pixel *vid_buf,char error[255]) { //TODO: error messages, show
}
console_mode = 0;
free(old_buf);
+ SDL_EnableKeyRepeat(0, SDL_DEFAULT_REPEAT_INTERVAL);
return NULL;
}
diff --git a/src/main.c b/src/main.c
index 1657425..e333830 100644
--- a/src/main.c
+++ b/src/main.c
@@ -23,6 +23,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
*/
+#include "Python.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -1170,6 +1171,613 @@ char my_uri[] = "http://" SERVER "/Update.api?Action=Download&Architecture="
"SSE"
#endif
;
+
+
+char console_error[255] = "";
+
+/*
+ * PYTHON FUNCTIONS
+ * instructions on making a function callable from python:
+ * first you make a function that accepts (PyObject *self, PyObject *args) as arguments
+ * then you use PyArg_ParseTuple to parse the arguments, handle everything the function should do.
+ * register the function by adding a line to static PyMethodDef EmbMethods[] = {
+ * the line should look like this:
+ * {"PyFunctionname", Functionname, METH_VARARGS,"short help string"},
+ * for more information on the PyWhatever functions look here:
+ * http://docs.python.org/extending/extending.html
+ */
+
+//functions callable from python:
+static PyObject*
+emb_create(PyObject *self, PyObject *args, PyObject *keywds)
+{
+ int x,y,t;
+ char *name = "";
+ char *kwlist[] = {"x","y","t","name", NULL};
+ if(!PyArg_ParseTupleAndKeywords(args, keywds, "II|Is:create",kwlist, &x,&y,&t,&name))
+ return NULL;
+ //
+ if(strcmp(name,"")!=0)
+ console_parse_type(name, &t, console_error);
+ return Py_BuildValue("i",create_part(-1,x,y,t));
+}
+//sys_pause = !sys_pause
+emb_pause(PyObject *self, PyObject *args)
+{
+ int x,y,t;
+ if(!PyArg_ParseTuple(args, ":unpause"))
+ return NULL;
+ //
+ sys_pause=1;
+ return Py_BuildValue("i",1);
+}
+
+emb_unpause(PyObject *self, PyObject *args)
+{
+ int x,y,t;
+ if(!PyArg_ParseTuple(args, ":pause"))
+ return NULL;
+ //
+ sys_pause=0;
+ return Py_BuildValue("i",1);
+}
+
+emb_toggle_pause(PyObject *self, PyObject *args)
+{
+ int x,y,t;
+ if(!PyArg_ParseTuple(args, ":toggle_pause"))
+ return NULL;
+ //
+ sys_pause=!sys_pause;
+ return Py_BuildValue("i",1);
+}
+
+//console_mode
+
+emb_toggle_console(PyObject *self, PyObject *args)
+{
+ int x,y,t;
+ if(!PyArg_ParseTuple(args, ":toggle_console"))
+ return NULL;
+ //
+ console_mode=!console_mode;
+ return Py_BuildValue("i",1);
+}
+
+emb_open_console(PyObject *self, PyObject *args)
+{
+ int x,y,t;
+ if(!PyArg_ParseTuple(args, ":toggle_console"))
+ return NULL;
+ //
+ console_mode=1;
+ return Py_BuildValue("i",1);
+}
+
+emb_close_console(PyObject *self, PyObject *args)
+{
+ int x,y,t;
+ if(!PyArg_ParseTuple(args, ":toggle_console"))
+ return NULL;
+ //
+ console_mode=0;
+ return Py_BuildValue("i",1);
+}
+
+
+emb_log(PyObject *self, PyObject *args)
+{
+ char *buffer;
+ if(!PyArg_ParseTuple(args, "s:log",&buffer))
+ return NULL;
+ //
+ strcpy(console_error,buffer);
+ puts(buffer);
+ return Py_BuildValue("i",1);
+}
+
+char console_more=0;
+
+emb_console_more(PyObject *self, PyObject *args)
+{
+ if(!PyArg_ParseTuple(args, ":log"))
+ return NULL;
+ //
+ console_more=1;
+ return Py_BuildValue("i",1);
+}
+
+emb_console_less(PyObject *self, PyObject *args)
+{
+ if(!PyArg_ParseTuple(args, ":log"))
+ return NULL;
+ //
+ console_more=0;
+ return Py_BuildValue("i",1);
+}
+
+//drawtext(vid_buf, 15, 175-(cc*12), currentcommand->command, 255, 255, 255, 255);
+
+
+emb_reset_pressure(PyObject *self, PyObject *args)
+{
+ if(!PyArg_ParseTuple(args, ":reset_pressure"))
+ return NULL;
+ //
+ for (int nx = 0; nx<XRES/CELL; nx++)
+ for (int ny = 0; ny<YRES/CELL; ny++)
+ {
+ pv[ny][nx] = 0;
+ }
+ return Py_BuildValue("i",1);
+}
+
+emb_reset_velocity(PyObject *self, PyObject *args)
+{
+ if(!PyArg_ParseTuple(args, ":reset_velocity"))
+ return NULL;
+ //
+ for (int nx = 0; nx<XRES/CELL; nx++)
+ for (int ny = 0; ny<YRES/CELL; ny++)
+ {
+ vx[ny][nx] = 0;
+ vy[ny][nx] = 0;
+ }
+ return Py_BuildValue("i",1);
+}
+
+emb_reset_sparks(PyObject *self, PyObject *args)
+{
+ if(!PyArg_ParseTuple(args, ":reset_sparks"))
+ return NULL;
+ //
+ for(int i=0; i<NPART; i++)
+ {
+ if(parts[i].type==PT_SPRK)
+ {
+ parts[i].type = parts[i].ctype;
+ parts[i].life = 4;
+ }
+ }
+ return Py_BuildValue("i",1);
+}
+
+emb_set_life(PyObject *self, PyObject *args, PyObject *keywds)
+{
+ int i = -1,life,j,x=-1,y=-1;
+ char *name = "";
+ char *kwlist[] = {"setto", "from", "i", "x", "y", NULL};
+ if(!PyArg_ParseTupleAndKeywords(args, keywds, "I|sIII:set_type",kwlist ,&life,&name,&i,&x,&y))
+ return NULL;
+ //
+ if(strcmp(name,"")==0 && x==-1 && y==-1 && i==-1)
+ return Py_BuildValue("s","Need more args(coords,i,or a particle name)");
+ if(strcmp(name,"all")==0)
+ {
+ for(i=0; i<NPART; i++)
+ {
+ if(parts[i].type)
+ parts[i].life = life;
+ }
+ }
+ else if(console_parse_type(name, &j, console_error))
+ {
+ for(i=0; i<NPART; i++)
+ {
+ if(parts[i].type == j)
+ parts[i].life = life;
+ }
+ }
+ else if(i!=-1)
+ {
+ if(parts[i].type != PT_NONE)
+ parts[i].life = life;
+
+ }
+ else if(x!=-1 && y!=-1 && x>=0 && x<XRES && y>=0 && y<YRES)
+ {
+ if(parts[pmap[y][x]>>8].type != PT_NONE)
+ parts[pmap[y][x]>>8].life = life;
+ }
+ return Py_BuildValue("i",1);
+}
+
+emb_set_type(PyObject *self, PyObject *args, PyObject *keywds)
+{
+ int i = -1,life,j=-1,x=-1,y=-1;
+ char *name = "";
+ char *type = "";
+ char *kwlist[] = {"setto", "settoint", "from", "i", "x", "y", NULL};
+ if(!PyArg_ParseTupleAndKeywords(args, keywds, "|sIsIII:set_type",kwlist ,&type,&life,&name,&i,&x,&y))
+ return NULL;
+ //
+ if(strcmp(name,"")==0 && x==-1 && y==-1 && i==-1 && j==-1)
+ return Py_BuildValue("s","Need more args(coords,i,or a particle name)");
+ console_parse_type(type, &life, console_error);
+ if(strcmp(name,"all")==0)
+ {
+ for(i=0; i<NPART; i++)
+ {
+ if(parts[i].type)
+ parts[i].type = life;
+ }
+ }
+ else if(console_parse_type(name, &j, console_error))
+ {
+ for(i=0; i<NPART; i++)
+ {
+ if(parts[i].type == j)
+ parts[i].type = life;
+ }
+ }
+ else if(i!=-1)
+ {
+ if(parts[i].type != PT_NONE)
+ parts[i].type = life;
+
+ }
+ else if(x!=-1 && y!=-1 && x>=0 && x<XRES && y>=0 && y<YRES)
+ {
+ if(parts[pmap[y][x]>>8].type != PT_NONE)
+ parts[pmap[y][x]>>8].type = life;
+ }
+ return Py_BuildValue("i",1);
+}
+
+emb_set_temp(PyObject *self, PyObject *args, PyObject *keywds)
+{
+ int i = -1,life,j,x=-1,y=-1;
+ char *name = "";
+ char *kwlist[] = {"setto", "from", "i", "x", "y", NULL};
+ if(!PyArg_ParseTupleAndKeywords(args, keywds, "I|sIII:set_type",kwlist ,&life,&name,&i,&x,&y))
+ return NULL;
+ //
+ if(strcmp(name,"")==0 && x==-1 && y==-1 && i==-1)
+ return Py_BuildValue("s","Need more args(coords,i,or a particle name)");
+ if(strcmp(name,"all")==0)
+ {
+ for(i=0; i<NPART; i++)
+ {
+ if(parts[i].type)
+ parts[i].temp = life;
+ }
+ }
+ else if(console_parse_type(name, &j, console_error))
+ {
+ for(i=0; i<NPART; i++)
+ {
+ if(parts[i].type == j)
+ parts[i].temp = life;
+ }
+ }
+ else if(i!=-1)
+ {
+ if(parts[i].type != PT_NONE)
+ parts[i].temp = life;
+
+ }
+ else if(x!=-1 && y!=-1 && x>=0 && x<XRES && y>=0 && y<YRES)
+ {
+ if(parts[pmap[y][x]>>8].type != PT_NONE)
+ parts[pmap[y][x]>>8].temp = life;
+ }
+ return Py_BuildValue("i",1);
+}
+
+emb_set_tmp(PyObject *self, PyObject *args, PyObject *keywds)
+{
+ int i = -1,life,j,x=-1,y=-1;
+ char *name = "";
+ char *kwlist[] = {"setto", "from", "i", "x", "y", NULL};
+ if(!PyArg_ParseTupleAndKeywords(args, keywds, "I|sIII:set_type",kwlist ,&life,&name,&i,&x,&y))
+ return NULL;
+ //
+ if(strcmp(name,"")==0 && x==-1 && y==-1 && i==-1)
+ return Py_BuildValue("s","Need more args(coords,i,or a particle name)");
+ if(strcmp(name,"all")==0)
+ {
+ for(i=0; i<NPART; i++)
+ {
+ if(parts[i].type)
+ parts[i].tmp = life;
+ }
+ }
+ else if(console_parse_type(name, &j, console_error))
+ {
+ for(i=0; i<NPART; i++)
+ {
+ if(parts[i].type == j)
+ parts[i].tmp = life;
+ }
+ }
+ else if(i!=-1)
+ {
+ if(parts[i].type != PT_NONE)
+ parts[i].tmp = life;
+
+ }
+ else if(x!=-1 && y!=-1 && x>=0 && x<XRES && y>=0 && y<YRES)
+ {
+ if(parts[pmap[y][x]>>8].type != PT_NONE)
+ parts[pmap[y][x]>>8].tmp = life;
+ }
+ return Py_BuildValue("i",1);
+}
+
+emb_set_x(PyObject *self, PyObject *args, PyObject *keywds)
+{
+ int i = -1,life,j,x=-1,y=-1;
+ char *name = "";
+ char *type = "";
+ char *kwlist[] = {"setto", "from", "i", "x", "y", NULL};
+ if(!PyArg_ParseTupleAndKeywords(args, keywds, "I|sIII:set_type",kwlist ,&life,&name,&i,&x,&y))
+ return NULL;
+ //
+ if(strcmp(name,"")==0 && x==-1 && y==-1 && i==-1)
+ return Py_BuildValue("s","Need more args(coords,i,or a particle name)");
+ if(strcmp(name,"all")==0)
+ {
+ for(i=0; i<NPART; i++)
+ {
+ if(parts[i].type)
+ parts[i].x = life;
+ }
+ }
+ else if(console_parse_type(name, &j, console_error))
+ {
+ for(i=0; i<NPART; i++)
+ {
+ if(parts[i].type == j)
+ parts[i].x = life;
+ }
+ }
+ else if(i!=-1)
+ {
+ if(parts[i].type != PT_NONE)
+ parts[i].x = life;
+
+ }
+ else if(x!=-1 && y!=-1 && x>=0 && x<XRES && y>=0 && y<YRES)
+ {
+ if(parts[pmap[y][x]>>8].type != PT_NONE)
+ parts[pmap[y][x]>>8].x = life;
+ }
+ return Py_BuildValue("i",1);
+}
+
+emb_set_y(PyObject *self, PyObject *args, PyObject *keywds)
+{
+ int i = -1,life,j,x=-1,y=-1;
+ char *name = "";
+ char *kwlist[] = {"setto", "from", "i", "x", "y", NULL};
+ if(!PyArg_ParseTupleAndKeywords(args, keywds, "I|sIII:set_type",kwlist ,&life,&name,&i,&x,&y))
+ return NULL;
+ //
+ if(strcmp(name,"")==0 && x==-1 && y==-1 && i==-1)
+ return Py_BuildValue("s","Need more args(coords,i,or a particle name)");
+ if(strcmp(name,"all")==0)
+ {
+ for(i=0; i<NPART; i++)
+ {
+ if(parts[i].type)
+ parts[i].y = life;
+ }
+ }
+ else if(console_parse_type(name, &j, console_error))
+ {
+ for(i=0; i<NPART; i++)
+ {
+ if(parts[i].type == j)
+ parts[i].y = life;
+ }
+ }
+ else if(i!=-1)
+ {
+ if(parts[i].type != PT_NONE)
+ parts[i].y = life;
+
+ }
+ else if(x!=-1 && y!=-1 && x>=0 && x<XRES && y>=0 && y<YRES)
+ {
+ if(parts[pmap[y][x]>>8].type != PT_NONE)
+ parts[pmap[y][x]>>8].y = life;
+ }
+ return Py_BuildValue("i",1);
+}
+
+emb_set_ctype(PyObject *self, PyObject *args, PyObject *keywds)
+{
+ int i = -1,life,j,x=-1,y=-1;
+ char *name = "";
+ char *type = "";
+ char *kwlist[] = {"setto", "toctypeint", "from", "i", "x", "y", NULL};
+ if(!PyArg_ParseTupleAndKeywords(args, keywds, "s|IsIII:set_type",kwlist ,&type, &life, &name,&i,&x,&y))
+ return NULL;
+ //
+ if(strcmp(name,"")==0 && x==-1 && y==-1 && i==-1)
+ return Py_BuildValue("s","Need more args(coords,i,or a particle name)");
+ if(!life)
+ console_parse_type(type, &life, console_error);
+ if(strcmp(name,"all")==0)
+ {
+ for(i=0; i<NPART; i++)
+ {
+ if(parts[i].type)
+ parts[i].ctype = life;
+ }
+ }
+ else if(console_parse_type(name, &j, console_error))
+ {
+ for(i=0; i<NPART; i++)
+ {
+ if(parts[i].type == j)
+ parts[i].ctype = life;
+ }
+ }
+ else if(i!=-1)
+ {
+ if(parts[i].type != PT_NONE)
+ parts[i].ctype = life;
+
+ }
+ else if(x!=-1 && y!=-1 && x>=0 && x<XRES && y>=0 && y<YRES)
+ {
+ if(parts[pmap[y][x]>>8].type != PT_NONE)
+ parts[pmap[y][x]>>8].ctype = life;
+ }
+ return Py_BuildValue("i",1);
+}
+
+emb_set_vx(PyObject *self, PyObject *args, PyObject *keywds)
+{
+ int i = -1,life,j,x=-1,y=-1;
+ char *name = "";
+ char *kwlist[] = {"setto", "from", "i", "x", "y", NULL};
+ if(!PyArg_ParseTupleAndKeywords(args, keywds, "I|sIII:set_type",kwlist ,&life,&name,&i,&x,&y))
+ return NULL;
+ //
+ if(strcmp(name,"")==0 && x==-1 && y==-1 && i==-1)
+ return Py_BuildValue("s","Need more args(coords,i,or a particle name)");
+ if(strcmp(name,"all")==0)
+ {
+ for(i=0; i<NPART; i++)
+ {
+ if(parts[i].type)
+ parts[i].vx = life;
+ }
+ }
+ else if(console_parse_type(name, &j, console_error))
+ {
+ for(i=0; i<NPART; i++)
+ {
+ if(parts[i].type == j)
+ parts[i].vx = life;
+ }
+ }
+ else if(i!=-1)
+ {
+ if(parts[i].type != PT_NONE)
+ parts[i].vx = life;
+
+ }
+ else if(x!=-1 && y!=-1 && x>=0 && x<XRES && y>=0 && y<YRES)
+ {
+ if(parts[pmap[y][x]>>8].type != PT_NONE)
+ parts[pmap[y][x]>>8].vx = life;
+ }
+ return Py_BuildValue("i",1);
+}
+
+emb_set_vy(PyObject *self, PyObject *args, PyObject *keywds)
+{
+ int i = -1,life,j,x=-1,y=-1;
+ char *name = "";
+ char *kwlist[] = {"setto", "from", "i", "x", "y", NULL};
+ if(!PyArg_ParseTupleAndKeywords(args, keywds, "I|sIII:set_type",kwlist ,&life,&name,&i,&x,&y))
+ return NULL;
+ //
+ if(strcmp(name,"")==0 && x==-1 && y==-1 && i==-1)
+ return Py_BuildValue("s","Need more args(coords,i,or a particle name)");
+ if(strcmp(name,"all")==0)
+ {
+ for(i=0; i<NPART; i++)
+ {
+ if(parts[i].type)
+ parts[i].vy = life;
+ }
+ }
+ else if(console_parse_type(name, &j, console_error))
+ {
+ for(i=0; i<NPART; i++)
+ {
+ if(parts[i].type == j)
+ parts[i].vy = life;
+ }
+ }
+ else if(i!=-1)
+ {
+ if(parts[i].type != PT_NONE)
+ parts[i].vy = life;
+
+ }
+ else if(x!=-1 && y!=-1 && x>=0 && x<XRES && y>=0 && y<YRES)
+ {
+ if(parts[pmap[y][x]>>8].type != PT_NONE)
+ parts[pmap[y][x]>>8].vy = life;
+ }
+ return Py_BuildValue("i",1);
+}
+emb_get_pmap(PyObject *self, PyObject *args)
+{
+ int x,y;
+ if(!PyArg_ParseTuple(args, "II:get_pmap",&x,&y))
+ return NULL;
+ //
+ if(x<0 || y<0 || x>=XRES || y>=YRES)
+ return Py_BuildValue("i",-1);
+
+ return Py_BuildValue("I",pmap[y][x]);
+}
+emb_get_prop(PyObject *self, PyObject *args)
+{
+ int i;
+ char *prop = "";
+ if(!PyArg_ParseTuple(args, "Is:get_pmap",&i,&prop))
+ return NULL;
+ //
+ if(parts[i].type)
+ {
+ if(strcmp(prop,"type")==0)
+ return Py_BuildValue("i",parts[i].type);
+ if(strcmp(prop,"life")==0)
+ return Py_BuildValue("i",parts[i].life);
+ if(strcmp(prop,"ctype")==0)
+ return Py_BuildValue("i",parts[i].ctype);
+ if(strcmp(prop,"temp")==0)
+ return Py_BuildValue("i",parts[i].temp);
+ if(strcmp(prop,"tmp")==0)
+ return Py_BuildValue("i",parts[i].tmp);
+ if(strcmp(prop,"vy")==0)
+ return Py_BuildValue("f",parts[i].vy);
+ if(strcmp(prop,"vx")==0)
+ return Py_BuildValue("f",parts[i].vx);
+ if(strcmp(prop,"x")==0)
+ return Py_BuildValue("i",parts[i].x);
+ if(strcmp(prop,"y")==0)
+ return Py_BuildValue("i",parts[i].y);
+ }
+
+ return Py_BuildValue("i",-1);
+}
+
+static PyMethodDef EmbMethods[] = { //WARNING! don't forget to register your function here!
+ {"create", emb_create, METH_VARARGS|METH_KEYWORDS, "create a particle."},
+ {"log", emb_log, METH_VARARGS, "logs an error string to the console."},
+ {"reset_pressure", emb_reset_pressure, METH_VARARGS, "resets all the pressure."},
+ {"reset_velocity", emb_reset_velocity, METH_VARARGS, "resets all the velocity."},
+ {"reset_sparks", emb_reset_sparks, METH_VARARGS, "resets all the sparks."},
+ {"set_life", emb_set_life, METH_VARARGS|METH_KEYWORDS, "sets life of a specified particle."},
+ {"set_type", emb_set_type, METH_VARARGS|METH_KEYWORDS, "sets type of a specified particle."},
+ {"set_temp", emb_set_temp, METH_VARARGS|METH_KEYWORDS, "sets temp of a specified particle."},
+ {"set_tmp", emb_set_tmp, METH_VARARGS|METH_KEYWORDS, "sets tmp of a specified particle."},
+ {"set_x", emb_set_x, METH_VARARGS|METH_KEYWORDS, "sets x of a specified particle."},
+ {"set_y", emb_set_y, METH_VARARGS|METH_KEYWORDS, "sets y of a specified particle."},
+ {"set_ctype", emb_set_y, METH_VARARGS|METH_KEYWORDS, "sets ctype of a specified particle."},
+ {"set_vx", emb_set_vx, METH_VARARGS|METH_KEYWORDS, "sets vx of a specified particle."},
+ {"set_vy", emb_set_vy, METH_VARARGS|METH_KEYWORDS, "sets vy of a specified particle."},
+ {"pause", emb_pause, METH_VARARGS, "pause the game."},
+ {"unpause", emb_unpause, METH_VARARGS, "unpause the game."},
+ {"toggle_pause", emb_toggle_pause, METH_VARARGS, "toggle game pause."},
+ {"open_console", emb_open_console, METH_VARARGS, "open the game console."},
+ {"close_console", emb_close_console, METH_VARARGS, "close the game console."},
+ {"toggle_console", emb_toggle_console, METH_VARARGS, "toggle the game console."},
+ {"console_more", emb_console_more, METH_VARARGS, "turns the more indicator on."},
+ {"console_less", emb_console_less, METH_VARARGS, "turns the more indicator off."},
+ {"get_pmap", emb_get_pmap, METH_VARARGS, "get the pmap value."},
+ {"get_prop", emb_get_prop, METH_VARARGS, "get some properties."},
+ {NULL, NULL, 0, NULL}
+};
+
int main(int argc, char *argv[])
{
int hud_enable = 1;
@@ -1188,7 +1796,7 @@ int main(int argc, char *argv[])
void *http_ver_check;
void *http_session_check = NULL;
char *ver_data=NULL, *check_data=NULL, *tmp;
- char console_error[255] = "";
+ //char console_error[255] = "";
int i, j, bq, fire_fc=0, do_check=0, do_s_check=0, old_version=0, http_ret=0,http_s_ret=0, major, minor, old_ver_len;
#ifdef INTERNAL
int vs = 0;
@@ -1203,6 +1811,7 @@ int main(int argc, char *argv[])
SDL_AudioSpec fmt;
int username_flash = 0, username_flash_t = 1;
GSPEED = 1;
+ PyObject *pname,*pmodule,*pfunc,*pvalue,*pargs;
/* Set 16-bit stereo audio at 22Khz */
fmt.freq = 22050;
@@ -1212,6 +1821,44 @@ int main(int argc, char *argv[])
fmt.callback = mixaudio;
fmt.userdata = NULL;
+ //initialise python console
+ Py_Initialize();
+ Py_InitModule("tpt", EmbMethods);
+ //change the path to find all the correct modules
+ PyRun_SimpleString("import sys\nsys.path.append('.')");
+ PyRun_SimpleString("print 'python present.'");
+ //load the console module and whatnot
+ pname=PyString_FromString("tpt_console");//create string object
+ pmodule = PyImport_Import(pname);//import module
+ if(pmodule!=NULL)
+ {
+ Py_DECREF(pname);//throw away the string object
+ pfunc=PyObject_GetAttrString(pmodule,"handle");//get the handler function
+ if(pfunc && PyCallable_Check(pfunc))//check if it's really a function
+ {
+ //it is
+ printf("python console ready to go.\n");
+ /*pargs=Py_BuildValue("(s)","test");
+ pvalue = PyObject_CallObject(pfunc, pargs);
+ Py_DECREF(pargs);
+ pargs=NULL;
+ //Py_DECREF(pvalue);
+ //puts("a");
+ pvalue=NULL;*/
+ }
+ else
+ {
+ //oops! mangled console.py?
+ printf("unable to find handle function, mangled console.py?\n");
+ return -1;
+ }
+ }
+ else
+ {
+ printf("unable to find console module, missing file?\n");
+ return -1;
+ }
+
#ifdef MT
numCores = core_count();
#endif
@@ -2427,9 +3074,7 @@ int main(int argc, char *argv[])
}
}
else
- {
create_line(lx, ly, x, y, bsx, bsy, c);
- }
lx = x;
ly = y;
}
@@ -2454,7 +3099,7 @@ int main(int argc, char *argv[])
{
if (sdl_mod & (KMOD_CAPS))
c = 0;
- if (c!=WL_STREAM+100&&c!=SPC_AIR&&c!=SPC_HEAT&&c!=SPC_COOL&&c!=SPC_VACUUM&&c!=PT_WIND&&!REPLACE_MODE)
+ if (c!=WL_STREAM+100&&c!=SPC_AIR&&c!=SPC_HEAT&&c!=SPC_COOL&&c!=SPC_VACUUM&&!REPLACE_MODE&&c!=PT_WIND)
flood_parts(x, y, c, -1, -1);
if (c==SPC_HEAT || c==SPC_COOL)
create_parts(x, y, bsx, bsy, c);
@@ -2735,10 +3380,10 @@ int main(int argc, char *argv[])
char *console;
//char error[255] = "error!";
sys_pause = 1;
- console = console_ui(vid_buf,console_error);
+ console = console_ui(vid_buf,console_error,console_more);
console = mystrdup(console);
strcpy(console_error,"");
- if(process_command(vid_buf,console,&console_error)==-1)
+ if(process_command(vid_buf,console,&console_error,pfunc)==-1)
{
free(console);
break;
@@ -2769,9 +3414,16 @@ int main(int argc, char *argv[])
}
SDL_CloseAudio();
http_done();
+ //make sure no threads are blocking us
+ //fork_unblock
+ pargs=Py_BuildValue("(s)","fork_unblock()");//this deamonises all threads.
+ pvalue = PyObject_CallObject(pfunc, pargs);
+ Py_DECREF(pargs);
+ pargs=NULL;
+ Py_Finalize();//cleanup any python stuff.
return 0;
}
-int process_command(pixel *vid_buf,char *console,char *console_error) {
+int process_command(pixel *vid_buf,char *console,char *console_error,PyObject *pfunc) {
int y,x,nx,ny,i,j,k,m;
int do_next = 1;
char xcoord[10];
@@ -2780,6 +3432,7 @@ int process_command(pixel *vid_buf,char *console,char *console_error) {
char console3[15];
char console4[15];
char console5[15];
+ PyObject *pvalue,*pargs;
//sprintf(console_error, "%s", console);
if(console && strcmp(console, "")!=0 && strncmp(console, " ", 1)!=0)
{
@@ -2788,449 +3441,20 @@ int process_command(pixel *vid_buf,char *console,char *console_error) {
{
return -1;
}
- else if(strcmp(console2, "file")==0 && console3)
- {
- if(file_script){
- FILE *f=fopen(console3, "r");
- if(f)
- {
- char fileread[5000];//TODO: make this change with file size
- char pch[5000];
- char tokens[10];
- int tokensize;
- nx = 0;
- ny = 0;
- j = 0;
- m = 0;
- if(console4)
- console_parse_coords(console4, &nx , &ny, console_error);
- memset(pch,0,sizeof(pch));
- memset(fileread,0,sizeof(fileread));
- fread(fileread,1,5000,f);
- for(i=0; i<strlen(fileread); i++)
- {
- if(fileread[i] != '\n')
- {
- pch[i-j] = fileread[i];
- if(fileread[i] != ' ')
- tokens[i-m] = fileread[i];
- }
- if(fileread[i] == ' ' || fileread[i] == '\n')
- {
- if(sregexp(tokens,"^x.[0-9],y.[0-9]")==0)//TODO: fix regex matching to work with x,y ect, right now it has to have a +0 or -0
- {
- char temp[5];
- int starty = 0;
- tokensize = strlen(tokens);
- x = 0;
- y = 0;
- sscanf(tokens,"x%d,y%d",&x,&y);
- sscanf(tokens,"%9s,%9s",xcoord,ycoord);
- x += nx;
- y += ny;
- sprintf(xcoord,"%d",x);
- sprintf(ycoord,"%d",y);
- for(k = 0; k<strlen(xcoord);k++)//rewrite pch with numbers
- {
- pch[i-j-tokensize+k] = xcoord[k];
- starty = k+1;
- }
- pch[i-j-tokensize+starty] = ',';
- starty++;
- for(k=0;k<strlen(ycoord);k++)
- {
- pch[i-j-tokensize+starty+k] = ycoord[k];
-
- }
- pch[i-j-tokensize +strlen(xcoord) +1 +strlen(ycoord)] = ' ';
- j = j -tokensize +strlen(xcoord) +1 +strlen(ycoord);
- }
- memset(tokens,0,sizeof(tokens));
- m = i+1;
- }
- if(fileread[i] == '\n')
- {
-
- if(do_next)
- {
- if(strcmp(pch,"else")==0)
- do_next = 0;
- else
- do_next = process_command(vid_buf, pch, console_error);
- }
- else if(strcmp(pch,"endif")==0 || strcmp(pch,"else")==0)
- do_next = 1;
- memset(pch,0,sizeof(pch));
- j = i+1;
- }
- }
- //sprintf(console_error, "%s exists", console3);
- fclose(f);
- }
- else
- {
- sprintf(console_error, "%s does not exist", console3);
- }
- }
- else
- {
- sprintf(console_error, "Scripts are not enabled");
- }
-
- }
- else if(strcmp(console2, "sound")==0 && console3)
- {
- if (sound_enable) play_sound(console3);
- else strcpy(console_error, "Audio device not available - cannot play sounds");
- }
- else if(strcmp(console2, "load")==0 && console3)
- {
- j = atoi(console3);
- if(j)
- {
- open_ui(vid_buf, console3, NULL);
- console_mode = 0;
- }
- }
- else if(strcmp(console2, "if")==0 && console3)
- {
- if(strcmp(console3, "type")==0)//TODO: add more than just type, and be able to check greater/less than
- {
- if (console_parse_partref(console4, &i, console_error)
- && console_parse_type(console5, &j, console_error))
- {
- if(parts[i].type==j)
- return 1;
- else
- return 0;
- }
- else
- return 0;
- }
- }
- else if (strcmp(console2, "create")==0 && console3 && console4)
- {
- if (console_parse_type(console3, &j, console_error)
- && console_parse_coords(console4, &nx, &ny, console_error))
- {
- if (!j)
- strcpy(console_error, "Cannot create particle with type NONE");
- else if (create_part(-1,nx,ny,j)<0)
- strcpy(console_error, "Could not create particle");
- }
- }
- else if ((strcmp(console2, "delete")==0 || strcmp(console2, "kill")==0) && console3)
- {
- if (console_parse_partref(console3, &i, console_error))
- kill_part(i);
- }
- else if(strcmp(console2, "reset")==0 && console3)
- {
- if(strcmp(console3, "pressure")==0)
- {
- for (nx = 0; nx<XRES/CELL; nx++)
- for (ny = 0; ny<YRES/CELL; ny++)
- {
- pv[ny][nx] = 0;
- }
- }
- else if(strcmp(console3, "velocity")==0)
- {
- for (nx = 0; nx<XRES/CELL; nx++)
- for (ny = 0; ny<YRES/CELL; ny++)
- {
- vx[ny][nx] = 0;
- vy[ny][nx] = 0;
- }
- }
- else if(strcmp(console3, "sparks")==0)
- {
- for(i=0; i<NPART; i++)
- {
- if(parts[i].type==PT_SPRK)
- {
- parts[i].type = parts[i].ctype;
- parts[i].life = 4;
- }
- }
- }
- else if(strcmp(console3, "temp")==0)
- {
- for(i=0; i<NPART; i++)
- {
- if(parts[i].type)
- {
- parts[i].temp = ptypes[parts[i].type].heat;
- }
- }
- }
- }
- else if(strcmp(console2, "set")==0 && console3 && console4 && console5)
- {
- if(strcmp(console3, "life")==0)
- {
- if(strcmp(console4, "all")==0)
- {
- j = atoi(console5);
- for(i=0; i<NPART; i++)
- {
- if(parts[i].type)
- parts[i].life = j;
- }
- }
- else if (console_parse_type(console4, &j, console_error))
- {
- k = atoi(console5);
- for(i=0; i<NPART; i++)
- {
- if(parts[i].type == j)
- parts[i].life = k;
- }
- }
- else
- {
- if (console_parse_partref(console4, &i, console_error))
- {
- j = atoi(console5);
- parts[i].life = j;
- }
- }
- }
- if(strcmp(console3, "type")==0)
- {
- if(strcmp(console4, "all")==0)
- {
- if (console_parse_type(console5, &j, console_error))
- for(i=0; i<NPART; i++)
- {
- if(parts[i].type)
- parts[i].type = j;
- }
- }
- else if (console_parse_type(console4, &j, console_error)
- && console_parse_type(console5, &k, console_error))
- {
- for(i=0; i<NPART; i++)
- {
- if(parts[i].type == j)
- parts[i].type = k;
- }
- }
- else
- {
- if (console_parse_partref(console4, &i, console_error)
- && console_parse_type(console5, &j, console_error))
- {
- parts[i].type = j;
- }
- }
- }
- if(strcmp(console3, "temp")==0)
- {
- if(strcmp(console4, "all")==0)
- {
- j = atoi(console5);
- for(i=0; i<NPART; i++)
- {
- if(parts[i].type)
- parts[i].temp = j;
- }
- }
- else if (console_parse_type(console4, &j, console_error))
- {
- k = atoi(console5);
- for(i=0; i<NPART; i++)
- {
- if(parts[i].type == j)
- parts[i].temp= k;
- }
- }
- else
- {
- if (console_parse_partref(console4, &i, console_error))
- {
- j = atoi(console5);
- parts[i].temp = j;
- }
- }
- }
- if(strcmp(console3, "tmp")==0)
- {
- if(strcmp(console4, "all")==0)
- {
- j = atoi(console5);
- for(i=0; i<NPART; i++)
- {
- if(parts[i].type)
- parts[i].tmp = j;
- }
- }
- else if (console_parse_type(console4, &j, console_error))
- {
- k = atoi(console5);
- for(i=0; i<NPART; i++)
- {
- if(parts[i].type == j)
- parts[i].tmp = k;
- }
- }
- else
- {
- if (console_parse_partref(console4, &i, console_error))
- {
- j = atoi(console5);
- parts[i].tmp = j;
- }
- }
- }
- if(strcmp(console3, "x")==0)
- {
- if(strcmp(console4, "all")==0)
- {
- j = atoi(console5);
- for(i=0; i<NPART; i++)
- {
- if(parts[i].type)
- parts[i].x = j;
- }
- }
- else if (console_parse_type(console4, &j, console_error))
- {
- k = atoi(console5);
- for(i=0; i<NPART; i++)
- {
- if(parts[i].type == j)
- parts[i].x = k;
- }
- }
- else
- {
- if (console_parse_partref(console4, &i, console_error))
- {
- j = atoi(console5);
- parts[i].x = j;
- }
- }
- }
- if(strcmp(console3, "y")==0)
- {
- if(strcmp(console4, "all")==0)
- {
- j = atoi(console5);
- for(i=0; i<NPART; i++)
- {
- if(parts[i].type)
- parts[i].y = j;
- }
- }
- else if (console_parse_type(console4, &j, console_error))
- {
- k = atoi(console5);
- for(i=0; i<NPART; i++)
- {
- if(parts[i].type == j)
- parts[i].y = k;
- }
- }
- else
- {
- if (console_parse_partref(console4, &i, console_error))
- {
- j = atoi(console5);
- parts[i].y = j;
- }
- }
- }
- if(strcmp(console3, "ctype")==0)
- {
- if(strcmp(console4, "all")==0)
- {
- if (console_parse_type(console5, &j, console_error))
- for(i=0; i<NPART; i++)
- {
- if(parts[i].type)
- parts[i].ctype = j;
- }
- }
- else if (console_parse_type(console4, &j, console_error)
- && console_parse_type(console5, &k, console_error))
- {
- for(i=0; i<NPART; i++)
- {
- if(parts[i].type == j)
- parts[i].ctype = k;
- }
- }
- else
- {
- if (console_parse_partref(console4, &i, console_error)
- && console_parse_type(console5, &j, console_error))
- {
- parts[i].ctype = j;
- }
- }
- }
- if(strcmp(console3, "vx")==0)
- {
- if(strcmp(console4, "all")==0)
- {
- j = atoi(console5);
- for(i=0; i<NPART; i++)
- {
- if(parts[i].type)
- parts[i].vx = j;
- }
- }
- else if (console_parse_type(console4, &j, console_error))
- {
- k = atoi(console5);
- for(i=0; i<NPART; i++)
- {
- if(parts[i].type == j)
- parts[i].vx = k;
- }
- }
- else
- {
- if (console_parse_partref(console4, &i, console_error))
- {
- j = atoi(console5);
- parts[i].vx = j;
- }
- }
- }
- if(strcmp(console3, "vy")==0)
- {
- if(strcmp(console4, "all")==0)
- {
- j = atoi(console5);
- for(i=0; i<NPART; i++)
- {
- if(parts[i].type)
- parts[i].vy = j;
- }
- }
- else if (console_parse_type(console4, &j, console_error))
- {
- k = atoi(console5);
- for(i=0; i<NPART; i++)
- {
- if(parts[i].type == j)
- parts[i].vy = k;
- }
- }
- else
- {
- if (console_parse_partref(console4, &i, console_error))
- {
- j = atoi(console5);
- parts[i].vy = j;
- }
- }
- }
- }
else
- sprintf(console_error, "Invalid Command", console2);
+ {
+ // sprintf(console_error, "Invalid Command", console2);
+ //handle them command
+ pargs=Py_BuildValue("(s)",console);
+ pvalue = PyObject_CallObject(pfunc, pargs);
+ Py_DECREF(pargs);
+ pargs=NULL;
+ if(pvalue==NULL)
+ strcpy(console_error,"failed to execute code.");
+ //Py_DECREF(pvalue);
+ //puts("a");
+ pvalue=NULL;
+ }
}
return 1;
}
diff --git a/src/powder.c b/src/powder.c
index e93f88d..e15565b 100644
--- a/src/powder.c
+++ b/src/powder.c
@@ -1138,7 +1138,7 @@ int nearest_part(int ci, int t)
void update_particles_i(pixel *vid, int start, int inc)
{
- int i, j, x, y, t, nx, ny, r, surround_space, s, lt, rt, nt, nnx, nny, q, golnum, goldelete, z, neighbors;
+ int i, j, x, y, t, nx, ny, r, surround_space, s, lt, rt, nt, nnx, nny, q, golnum, goldelete, z, neighbors, createdsomething;
float mv, dx, dy, ix, iy, lx, ly, nrx, nry, dp, ctemph, ctempl;
int fin_x, fin_y, clear_x, clear_y;
float fin_xf, fin_yf, clear_xf, clear_yf;
@@ -1345,14 +1345,14 @@ void update_particles_i(pixel *vid, int start, int inc)
if(neighbors==0 || !(ptypes[r&0xFF].properties&PROP_LIFE || !r&0xFF) || (r>>8)>=NPART)
continue;
for ( golnum = 1; golnum<=NGOL; golnum++)
- for ( goldelete = 0; goldelete<9; goldelete++)
{
- if (neighbors==goldelete&&gol[nx][ny]==0&&grule[golnum][goldelete]>=2&&gol2[nx][ny][golnum]>=(goldelete%2)+goldelete/2)
+ goldelete = neighbors;
+ if (gol[nx][ny]==0&&grule[golnum][goldelete]>=2&&gol2[nx][ny][golnum]>=(goldelete%2)+goldelete/2)
{
if (create_part(-1,nx,ny,goltype[golnum-1]))
createdsomething = 1;
}
- else if (neighbors-1==goldelete&&gol[nx][ny]==golnum&&(grule[golnum][goldelete]==0||grule[golnum][goldelete]==2))//subtract 1 because it counted itself
+ else if (gol[nx][ny]==golnum&&(grule[golnum][goldelete-1]==0||grule[golnum][goldelete-1]==2))//subtract 1 because it counted itself
{
if(parts[r>>8].tmp==grule[golnum][9]-1)
parts[r>>8].tmp --;
@@ -2873,9 +2873,7 @@ int create_parts(int x, int y, int rx, int ry, int c)
dw = 1;
}
if (c == PT_WIND)
- {
return 1;
- }
if (dw==1)
{
rx = rx/CELL;
diff --git a/src/python/tpt_console.py b/src/python/tpt_console.py
new file mode 100644
index 0000000..864fed8
--- /dev/null
+++ b/src/python/tpt_console.py
@@ -0,0 +1,77 @@
+import tpt
+from tpt import *
+from utils import *
+import sys
+import code
+import ctypes
+import traceback
+#print "console module loaded."
+#redirect stdout like this:
+class logger:
+ def write(self,txt):
+ txt=txt.strip().split("\n")[-1]
+ repr(txt)
+ tpt.log(txt)
+sys.stdout=logger()
+sys.stderr=logger()
+
+element={"none":0,"dust":1,"watr":2,"oil":3,"fire":4,"stne":5,"lava":6,"gunp":7,
+ "nitr":8,"clne":9,"gas":10,"plex":11,"goo":12,"icei":13,"metl":14,"sprk":15,
+ "snow":16,"wood":17,"neut":18,"plut":19,"plnt":20,"acid":21,"void":22,
+ "wtrv":23,"cnct":24,"dstw":25,"salt":26,"sltw":27,"dmnd":28,"bmtl":29,
+ "brmt":30,"phot":31,"uran":32,"wax":33,"mwax":34,"pscn":35,"nscn":36,
+ "lntg":37,"insl":38,"bhol":39,"whol":40,"rbdm":41,"lrbd":42,"ntct":43,
+ "sand":44,"glas":45,"ptct":46,"bgla":47,"thdr":48,"plsm":49,"etrd":50,
+ "nice":51,"nble":52,"btry":53,"lcry":54,"stkm":55,"swch":56,"smke":57,
+ "desl":58,"coal":59,"lo2":60,"o2":61,"inwr":62,"yest":63,"dyst":64,
+ "thrm":65,"glow":66,"brck":67,"hflm":68,"firw":69,"fuse":70,"fsep":71,
+ "amtr":72,"bcol":73,"pcln":74,"hswc":75,"iron":76,"mort":77,"gol":78,
+ "hlif":79,"asim":80,"2x2":81,"dani":82,"amoe":83,"move":84,"pgol":85,
+ "dmoe":86,"34":87,"llif":88,"stan":89,"spng":90,"rime":91,"fog":92,
+ "bcln":93,"love":94,"deut":95,"warp":96,"pump":97,"fwrk":98,"pipe":99,
+ "frzz":100,"frzw":101,"grav":102,"bizr":103,"bizrg":104,"bizrs":105,
+ "inst":106,"isoz":107,"iszs":108,"prti":109,"prto":110,"pste":111,
+ "psts":112,"anar":113,"vine":114,"invis":115,"equalvel":116,"spawn2":117,
+ "spawn":118,"shld1":119,"shld2":120,"shld3":121,"shld4":122,"lolz":123,
+ "wifi":124,"filt":125,"aray":126,"bray":127,"stkm2":128,"bomb":129,
+ "c5":130,"sing":131,"qrtz":132,"pqrt":133,"seed":134,"maze":135,
+ "coag":136,"wall":137,"gnar":138,"repl":139,"myst":140,"boyl":141,
+ "lote":142,"frg2":143,"star":144,"frog":145,"bran":146,"wind":147,
+ "num":148}
+
+
+def fork_unblock():
+ pass#i need to implement this some day.
+def error(ex):
+ err=traceback.format_exc()
+ sys.stdout.write(err)
+
+def clean():
+ #add any functions that must be reachable here.
+ """copy=["__builtins__","__name__","__doc__","__package__",'tpt','clean',
+ 'element','fork','_fork','fork_status','fork_unblock','sys']
+ handle.glob={}
+ for item in copy:
+ handle.glob[item]=globals()[item]"""
+ handle.glob=globals()
+ handle.buf=""
+
+def handle(txt):
+ try:
+ a=handle.glob
+ except:
+ clean()
+ try:
+ _handle(txt)
+ except Exception as ex:
+ error(ex)
+
+def _handle(txt):
+ #print "handling '%s'"%txt
+ try:
+ sys.stdout.write(repr(eval(txt,handle.glob)))
+ except:
+ try:
+ exec txt in handle.glob
+ except Exception as ex:
+ error(ex)