diff options
| -rw-r--r-- | .gitignore | 3 | ||||
| -rw-r--r-- | Makefile | 4 | ||||
| -rw-r--r-- | build/example.py | 24 | ||||
| -rw-r--r-- | build/tpt_console.py | 77 | ||||
| -rw-r--r-- | console_README | 46 | ||||
| -rw-r--r-- | getheader.py | 38 | ||||
| -rw-r--r-- | includes/defines.h | 2 | ||||
| -rw-r--r-- | includes/interface.h | 2 | ||||
| -rw-r--r-- | includes/powder.h | 12 | ||||
| -rw-r--r-- | includes/pyconsole.h | 1 | ||||
| -rw-r--r-- | pyconsole.h | 67 | ||||
| -rw-r--r-- | src/interface.c | 51 | ||||
| -rw-r--r-- | src/main.c | 1122 | ||||
| -rw-r--r-- | src/powder.c | 10 | ||||
| -rw-r--r-- | src/python/tpt_console.py | 77 |
15 files changed, 1064 insertions, 472 deletions
@@ -5,3 +5,6 @@ gmon.out *.*.orig build/powder* build/stamps/* +*~ +*.pyc +utils/*
\ No newline at end of file @@ -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; } @@ -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) |
