else
This commit is contained in:
Voussoir 2015-03-15 19:55:13 -07:00
parent 9d81c4ff7b
commit fd59095b99
7 changed files with 288 additions and 26 deletions

View file

@ -38,7 +38,7 @@ class Editor:
self.geometrystring = '%dx%d+%d+%d' % (self.windowwidth, self.windowheight, self.windowx, self.windowy) self.geometrystring = '%dx%d+%d+%d' % (self.windowwidth, self.windowheight, self.windowx, self.windowy)
self.t.geometry(self.geometrystring) self.t.geometry(self.geometrystring)
self.reserved_filenames = ['random', 'list'] self.reserved_filenames = ['random', 'list', 'help']
self.has_filenames_changed = True self.has_filenames_changed = True
self.entities = [] self.entities = []
self.filename = None self.filename = None

Binary file not shown.

Binary file not shown.

View file

@ -63,11 +63,11 @@ class LogoGame:
self.geometrystring = '%dx%d+%d+%d' % (self.windowwidth, self.windowheight, self.windowx, self.windowy) self.geometrystring = '%dx%d+%d+%d' % (self.windowwidth, self.windowheight, self.windowx, self.windowy)
self.t.geometry(self.geometrystring) self.t.geometry(self.geometrystring)
self.uirefresher = self.gui_build_main
self.gui_build_main()
#self.t.bind('<Configure>', self.update_wh) #self.t.bind('<Configure>', self.update_wh)
def start(self):
self.gui_build_main()
self.t.mainloop() self.t.mainloop()
def logos_load(self): def logos_load(self):
@ -259,6 +259,8 @@ class LogoGame:
### ###
def playername_set(self, newname): def playername_set(self, newname):
if newname == '':
return
if newname != self.stats_main.playername: if newname != self.stats_main.playername:
self.cur.execute('UPDATE stats SET value=? WHERE key="playername"', [newname]) self.cur.execute('UPDATE stats SET value=? WHERE key="playername"', [newname])
self.sql.commit() self.sql.commit()
@ -270,6 +272,7 @@ class LogoGame:
for logo in self.all_logos: for logo in self.all_logos:
logo.solved = self.playerstats_hassolved(logo.id) logo.solved = self.playerstats_hassolved(logo.id)
print('Name: ' + self.stats_main.playername) print('Name: ' + self.stats_main.playername)
self.clean_empty_dbs()
def sha8(self, text): def sha8(self, text):
sha = hashlib.sha256() sha = hashlib.sha256()
@ -356,4 +359,23 @@ class LogoGame:
alltags.sort() alltags.sort()
return alltags return alltags
logogame = LogoGame() def clean_empty_dbs(self):
ls = os.listdir('playerdata')
todelete = []
for name in ls:
name = 'playerdata/'+name
s = sqlite3.connect(name)
c = s.cursor()
c.execute('SELECT * FROM stats')
if not c.fetchone():
del c
del s
try:
os.remove(name)
except PermissionError:
pass
if __name__ == '__main__':
logogame = LogoGame()
logogame.start()

View file

@ -2,25 +2,47 @@ import socket
import time import time
import traceback import traceback
class LogEvent:
def __init__(self):
self.type = None
self.killerinfo = None
self.victiminfo = None
self.weaponinfo = None
class Player:
def __init__(self, name=""):
self.name = name
self.kills = 0
self.deaths = 0
self.objectives = 0
self.events = []
self.status = None
def __str__(self):
return "%s :|: %d kills, %d deaths, %d objectives :|: Status=%s" % (self.name, self.kills, self.deaths, self.objectives, self.status)
class RCONRelay: class RCONRelay:
def __init__(self): def __init__(self):
self.whitelist = ["joined team", "say", "killed", "suicide", "changed name"] self.whitelist = ["joined team", "disconnected", "say", "killed", "suicide", "changed name", "flagevent", "flag."]
self.blacklist = ["say_team"] self.blacklist = ["say_team"]
self.weaponmap = { self.weaponmap = {
"tf_projectile_rocket": "Rocket Launcher", "tf_projectile_rocket": "Rocket Launcher",
"tf_projectile_pipe_remote": "Sticky Bomb", "tf_projectile_pipe_remote": "Sticky Bomb",
"tf_projectile_pipe": "Grenade Launcher",
"obj_sentrygun": "Sentry lvl 1", "obj_sentrygun": "Sentry lvl 1",
"obj_sentrygun2": "Sentry lvl 2", "obj_sentrygun2": "Sentry lvl 2",
"obj_sentrygun3": "Sentry lvl 3", "obj_sentrygun3": "Sentry lvl 3",
"shotgun_pyro": "Shotgun", "shotgun_pyro": "Shotgun",
"shotgun_soldier": "Shotgun", "shotgun_soldier": "Shotgun",
"shotgun_primary": "Shotgun", "shotgun_primary": "Shotgun",
"club": "Kukri" "club": "Kukri",
"pistol_scout": "Pistol",
"world": "World Hazard"
} }
self.ip = "0.0.0.0" self.ip = "0.0.0.0"
self.port = 32768 self.port = 32768
self.players = []
def start(self): def start(self):
self.rcon = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.rcon = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
@ -31,15 +53,15 @@ class RCONRelay:
while True: while True:
chatdata = self.rcon.recvfrom(1024) chatdata = self.rcon.recvfrom(1024)
#print(chatdata) #print(chatdata)
self.processchat(chatdata) chatdata = chatdata[0]
chatdata = chatdata.decode('utf-8', 'ignore')
chatdata = chatdata[3:-2]
self.parsechat(chatdata)
def processchat(self, chatdata): def parsechat(self, chat):
chat = chatdata[0] timestamp = chat.split(': ')[0]
chat = chat.decode("utf-8", "ignore")
chat = chat[3:-2]
timestamp = chat[:21]
if "killed" in chat:
quotesplit = chat.split('"') quotesplit = chat.split('"')
if "killed" in chat:
killerinfo = quotesplit[1] killerinfo = quotesplit[1]
victiminfo = quotesplit[3] victiminfo = quotesplit[3]
weaponinfo = quotesplit[5] weaponinfo = quotesplit[5]
@ -50,21 +72,24 @@ class RCONRelay:
if headshot: if headshot:
chat += " (Headshot)" chat += " (Headshot)"
elif "flagevent" in chat:
killerinfo = quotesplit[1]
flagevent = quotesplit[5]
if flagevent == 'captured':
capscurrent = quotesplit[7]
capstotal = quotesplit[9]
chat = "%s] %s %s flag. %s / %s" % (timestamp, killerinfo, flagevent, capscurrent, capstotal)
else:
chat = "%s] %s %s flag." % (timestamp, killerinfo, flagevent)
elif "committed suicide with \"world\" (attacker_position" in chat: elif "committed suicide with \"world\" (attacker_position" in chat:
quotesplit = chat.split('"')
victiminfo = quotesplit[1] victiminfo = quotesplit[1]
chat = "%s] %s committed suicide" % (timestamp, victiminfo) chat = "%s] %s committed suicide" % (timestamp, victiminfo)
if any(white.lower() in chat.lower() for white in self.whitelist): if any(white.lower() in chat.lower() for white in self.whitelist):
if not any(ban.lower() in chat.lower() for ban in self.blacklist): if not any(black.lower() in chat.lower() for black in self.blacklist):
print(chat) print(chat)
def weaponmapping(self, chat): if __name__ == '__main__':
for key in self.weaponmap: rcon = RCONRelay()
val = self.weaponmap[key] rcon.start()
chat = chat.replace(key, val)
return chat
rcon = RCONRelay()
rcon.start()

View file

@ -0,0 +1,215 @@
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: Tk Canvas Widget
%%Title: Window .43294800
%%CreationDate: Sun Mar 15 19:51:02 2015
%%BoundingBox: -523 -369 1136 1162
%%Pages: 1
%%DocumentData: Clean7Bit
%%Orientation: Portrait
%%DocumentNeededResources: font Courier
%%EndComments
%%BeginProlog
% This is a standard prolog for Postscript generated by Tk's canvas
% widget.
/CurrentEncoding [
/space/space/space/space/space/space/space/space
/space/space/space/space/space/space/space/space
/space/space/space/space/space/space/space/space
/space/space/space/space/space/space/space/space
/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash
/zero/one/two/three/four/five/six/seven
/eight/nine/colon/semicolon/less/equal/greater/question
/at/A/B/C/D/E/F/G
/H/I/J/K/L/M/N/O
/P/Q/R/S/T/U/V/W
/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore
/grave/a/b/c/d/e/f/g
/h/i/j/k/l/m/n/o
/p/q/r/s/t/u/v/w
/x/y/z/braceleft/bar/braceright/asciitilde/space
/space/space/space/space/space/space/space/space
/space/space/space/space/space/space/space/space
/space/space/space/space/space/space/space/space
/space/space/space/space/space/space/space/space
/space/exclamdown/cent/sterling/currency/yen/brokenbar/section
/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron
/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered
/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown
/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide
/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis
] def
50 dict begin
/baseline 0 def
/stipimage 0 def
/height 0 def
/justify 0 def
/lineLength 0 def
/spacing 0 def
/stipple 0 def
/strings 0 def
/xoffset 0 def
/yoffset 0 def
/tmpstip null def
/baselineSampler ( TXygqPZ) def
baselineSampler 0 196 put
/cstringshow {{ dup type /stringtype eq { show } { glyphshow } ifelse } forall } bind def
/cstringwidth {0 exch 0 exch { dup type /stringtype eq { stringwidth } { currentfont /Encoding get exch 1 exch put (\001) stringwidth } ifelse exch 3 1 roll add 3 1 roll add exch } forall } bind def
/ISOEncode {dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding CurrentEncoding def currentdict end /Temporary exch definefont } bind def
/StrokeClip {{strokepath} stopped { (This Postscript printer gets limitcheck overflows when) = (stippling dashed lines; lines will be printed solid instead.) = [] 0 setdash strokepath} if clip } bind def
/EvenPixels {dup 0 matrix currentmatrix dtransform dup mul exch dup mul add sqrt dup round dup 1 lt {pop 1} if exch div mul } bind def
/StippleFill {/tmpstip 1 index def 1 EvenPixels dup scale pathbbox 4 2 roll 5 index div dup 0 lt {1 sub} if cvi 5 index mul 4 1 roll 6 index div dup 0 lt {1 sub} if cvi 6 index mul 3 2 roll 6 index exch { 2 index 5 index 3 index { gsave 1 index exch translate 5 index 5 index true matrix tmpstip imagemask grestore } for pop } for pop pop pop pop pop } bind def
/AdjustColor {CL 2 lt { currentgray CL 0 eq { .5 lt {0} {1} ifelse } if setgray } if } bind def
/DrawText {/stipple exch def /justify exch def /yoffset exch def /xoffset exch def /spacing exch def /strings exch def /lineLength 0 def strings { cstringwidth pop dup lineLength gt {/lineLength exch def} {pop} ifelse newpath } forall 0 0 moveto baselineSampler false charpath pathbbox dup /baseline exch def exch pop exch sub /height exch def pop newpath translate rotate lineLength xoffset mul strings length 1 sub spacing mul height add yoffset mul translate justify lineLength mul baseline neg translate strings { dup cstringwidth pop justify neg mul 0 moveto stipple { gsave /char (X) def { dup type /stringtype eq { { char 0 3 -1 roll put currentpoint gsave char true charpath clip StippleText grestore char stringwidth translate moveto } forall } { currentfont /Encoding get exch 1 exch put currentpoint gsave (\001) true charpath clip StippleText grestore (\001) stringwidth translate moveto } ifelse } forall grestore } {cstringshow} ifelse 0 spacing neg translate } forall } bind def
/TkPhotoColor {gsave 32 dict begin /tinteger exch def /transparent 1 string def transparent 0 tinteger put /olddict exch def olddict /DataSource get dup type /filetype ne { olddict /DataSource 3 -1 roll 0 () /SubFileDecode filter put } { pop } ifelse /newdict olddict maxlength dict def olddict newdict copy pop /w newdict /Width get def /crpp newdict /Decode get length 2 idiv def /str w string def /pix w crpp mul string def /substrlen 2 w log 2 log div floor exp cvi def /substrs [ { substrlen string 0 1 substrlen 1 sub { 1 index exch tinteger put } for /substrlen substrlen 2 idiv def substrlen 0 eq {exit} if } loop ] def /h newdict /Height get def 1 w div 1 h div matrix scale olddict /ImageMatrix get exch matrix concatmatrix matrix invertmatrix concat newdict /Height 1 put newdict /DataSource pix put /mat [w 0 0 h 0 0] def newdict /ImageMatrix mat put 0 1 h 1 sub { mat 5 3 -1 roll neg put olddict /DataSource get str readstring pop pop /tail str def /x 0 def olddict /DataSource get pix readstring pop pop { tail transparent search dup /done exch not def {exch pop exch pop} if /w1 exch length def w1 0 ne { newdict /DataSource pix x crpp mul w1 crpp mul getinterval put newdict /Width w1 put mat 4 x neg put /x x w1 add def newdict image /tail tail w1 tail length w1 sub getinterval def } if done {exit} if tail substrs { anchorsearch {pop} if } forall /tail exch def tail length 0 eq {exit} if /x w tail length sub def } loop } for end grestore } bind def
/TkPhotoMono {gsave 32 dict begin /dummyInteger exch def /olddict exch def olddict /DataSource get dup type /filetype ne { olddict /DataSource 3 -1 roll 0 () /SubFileDecode filter put } { pop } ifelse /newdict olddict maxlength dict def olddict newdict copy pop /w newdict /Width get def /pix w 7 add 8 idiv string def /h newdict /Height get def 1 w div 1 h div matrix scale olddict /ImageMatrix get exch matrix concatmatrix matrix invertmatrix concat newdict /Height 1 put newdict /DataSource pix put /mat [w 0 0 h 0 0] def newdict /ImageMatrix mat put 0 1 h 1 sub { mat 5 3 -1 roll neg put 0.000 0.000 0.000 setrgbcolor olddict /DataSource get pix readstring pop pop newdict /DataSource pix put newdict imagemask 1.000 1.000 1.000 setrgbcolor olddict /DataSource get pix readstring pop pop newdict /DataSource pix put newdict imagemask } for end grestore } bind def
%%EndProlog
%%BeginSetup
/CL 2 def
%%IncludeResource: font Courier
%%EndSetup
%%Page: 1 1
save
306.0 396.0 translate
0.7503 0.7503 scale
-1106 -1020 translate
0 2040 moveto 2212 2040 lineto 2212 0 lineto 0 0 lineto closepath clip newpath
gsave
/Courier findfont 12 scalefont ISOEncode setfont
0.000 0.000 0.000 setrgbcolor AdjustColor
0 0 2040 [
[( )]
[( )]
[( )]
[( )]
[( )]
[( )]
[( )]
[( )]
[( )]
[( )]
[( )]
[( )]
[( @@@ )]
[( @@g#DOe0@@ )]
[( @@&$mSnnnnnnm@@ )]
[( @@@B8HennnnnnnnnnnO@@ )]
[( @@@g%D9ZnnnnnnnnnnnnnnnnXB@@ )]
[( @@@@ @@@@&$mXZnnnnnnnnnnnnnnnnnnnnnnG@@ )]
[( @@@@@@Q$D0@ @@@@B8Hennnnnnnnnnnnnnnnnnnnnnnnnnnne#@@ )]
[( @@@@@@@B$Dmmmmm0@@ @@@@@g#D9ZnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnO&@@ )]
[( @@@@@@@gB#8Gmmmmmmmmmm8@@ @@@@@@@B8mXnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnZGg@@ )]
[( @ @@@@@@@@@Q%$0mmmmmmmmmmmmmmmmm8@@ @@@@@@@g%0HXZnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnZmQ@@ )]
[( @@@@@@ @@@@@@@@@gQ%$0GmmmmmmmmmmmmmmmmmmmmmmmGQ@@@@@@Q#DHSnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnO#@@@ )]
[( @@%Z8@@@@@ @@@@@@@@@@&B#$0Gmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm$@@@gGZnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnS0g@@ )]
[( @@gO+z+m@@@@@@@ @@@@@@@@@@@@@@@@@@@@@&Q%#80GmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmG%@@@g0SnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnZmB@@@ )]
[( @@%nzzzzzeQ@@&mGQ@@@ @@BB@@%0088888$$80DGmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmG#@@@@#9nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnS0&@@@ )]
[( @@0+zzzzzzzT0@@@m+nm%@@@@ @@%m$@@&0mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm$g@@@BHZnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn9$@@@ )]
[( @@mzzzzzzzzzzzXg@@%ozzTX0Q@@@@ @@$HmDg@@&8mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm8Q@@@&DennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnZH#@@@@ )]
[( @@@Ozzzzzzzzzzzzzo#@@gXzzzzzo90%@@@@@@ @@0mmmm$@@@&0mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmDB@@@@8XnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnZ9D%@@@@@ )]
[( @@mzzzzzzzzzzzzzzz+m@@@0+zzzzzzz+ZOD$B@@@@@@@@@@@@ @@@%%$mmmm#@@@B0mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmG%@@@@BHZnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnZXm8Bg@@@@ )]
[( @@$zzzzzzzzzzzzzzzzzzZQ@@Qezzzzzzzzzz+++oe9mD$Bg@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&GmmmGB@@@QDmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm$g@@@g0XnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnneOG8%&@@@@ )]
[( @@gozzzzzzzzzzzzzzzzzzzT0@@@D+zzzzzzzzz+++++++zzz+TneX9HG0$%B&g@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@g&B%#&@@GmmmmDQ@@@QDmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm0Q@@@@BGennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnZXHD$B&@@@ )]
[( @@@9+zzzzzzzzzzzzzzzzzzzzzS&@@QXzzzzzzzzzzz++++zzzzzzzzzzzzzzzzzz+TooonnZZZeeSSSSSXXXX9999XXSeeZnnnnnnnSg@@0mmmmm8g@@@BDmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmG#g@@@@%GSnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnZZXHGD8$# )]
[( @@$++zzzzzzzzzzzzzzzzzzzzzz+0@@@#nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz+++++++++TTToonnnnnnnnnnnnnnnnXg@@#mmmmmm$g@@@BDmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm0%@@@@@Q09ZnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnZZXG )]
[( @@@n++zzzzzzzzzzzzzzzzzzzzzzzzZ%@@@DTzzzzzzzzzzzzz+zzzzzzzzzzzzzzzzzzzzzzzzzzz+++++++TTTooonnnnnnnnnnnnnnnS&@@g0mmmmmm#@@@@BDmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm8B@@@@@g#mSnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnZ9DDOO8@@ )]
[( @@@m+++zzzzzzzzzzzzzzzzzzzzzzzzzz9&@@@GTzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz+++++++TTTooonnnnnnnnnnnnnne#@@@QDmmmmmG%@@@@Q8mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm0%&@@@@@Q09ZnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnZSm08DHOOOHg@ )]
[( @@QT+++zzzzzzzzzzzzzzzzzzzzzzzzzzz+mg@@@Dozzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz+++++++TTToooonnnnnnnnnnnnnO&@@@%mmmmmmG%@@@@g#GmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmG$Q@@@@@g$mennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnZSHD80mOOOOOOOO#@@ )]
[( @@@S++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzz+mg@@@0nzzzzzzzzzzz++zzzzzzzzzzzzzzzzzzzzzzzzzzzz+++++++TTTTooooonnnnnnnnnnZ0@@@@$mmmmmmm#g@@@@Q8mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm8%g@@@@@Q09ZnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnZ9G#Q%DHOOOOOOOOOOOG@@ )]
[( @@8+++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz+H&@@@%9+zzzzzzz++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzz+++++++TTTTTooooonnnnnnnnnS%@@@g$mmmmmmm8Q@@@@g%DmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmD#Q@@@@@@#mennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnZSH8B@@%DHHHOOOOOOOOOOOOO&@@ )]
[( @@@n++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz+9%@@@g0ezzzzz+++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz+++++++TTTTTToooonnnnnnnnnOQ@@@@#GmmmmmmD%@@@@@Q$Gmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm8%g@@@@@%GSnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnZXm$&@@@B0HHHHHHHOOOOOOOOOOOO$@@ )]
[( @@0+++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzZDg@@@&Dezzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz++++++++TTTTTooooonnnnnnnnmQ@@@@BDmmmmmmm8Q@@@@@Q$GmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmG$Q@@@@@Q8OZnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnZ9D#g@@@&#DHHHHHHHHHHHOOOOOOOOOOOm@@ )]
[( @@@Z++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz+X$@@@@&0S+zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz+++++++++TTTTToooonnnnnnnnO%@@@@Q8mmmmmmmD#g@@@@@&$GmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmG8B@@@@@@#GSnnnnnnnnnnnnnnnnnnnnnnnnZSH0B@@@@g%0mOOHHHHHHHHHHHHHOOOOOOOOOOOQ@@ )]
[( @@%++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz+9$@@@@g8X+zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz+++++++++++TTTToooonnnnnnnnX$@@@@@Q$GmmmmmmD#g@@@@@&#Gmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm0%&@@@@@&#D9ZnnnnnnnnnnnnnnnZ9G#&@@@@@B8GOOOOOOHHHHHmmHHHHHHHOOOOOOOOOO8@@ )]
[( @@@O++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz+X8g@@@@$Oozzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz++++++++++++TTTTooonnnnnnnneGB@@@@@Q$GmmmmmmD#g@@@@@&#DmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmG$B@@@@@@@B0HennnnnnZ9G$B@@@@@@B$DHHOOOOOOOOHHHHmmmmmHHHHHHOOOOOOOOOm@@@ )]
[( @@gT+++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz+S0&@@@@QDXTzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz++++++++++++TTTToooonnnnnnnnSG%@@@@@&#DmmmmmmD#g@@@@@g#DmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmD$B&@@@@@@&$GD#Q@@@@@@@B$DmHHHHHOOOOOOOOHHHHmmmmmHHHHHHHOOOOOOOOOQ@@ )]
[( @@0+++zzzzzzzzzzzzz++++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzZm%@@@@@BDXozzzzzzzzzzzzzzzzzzzzzzzzzzzzzz++++++++++++TTTToooonnnnnnnnnem#@@@@@g%0mmmmmmD#&@@@@@g%0mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm0#Qg@@@@@@@@@Q#8GmmmmmmHHHHHOOOOOOOHHHHmmmmmmHHHHHHHOOOOOOOO$@@ )]
[( @@@S+++zzzzzzzzzzzz+++++++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzTX0Q@@@@@&$mSozzzzzzzzzzzzzzzzzzzzzzzzzzzzz++++++++++TTTToooonnnnnnnnnnZH$g@@@@@B8GmmmmmG#&@@@@@@Q$Dmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm0$&@@8mHHHHHHmmmmmmHHHHOOOOOOOHHHHmmmmmmmHHHHHHHOOOOOOO0@@ )]
[( @@Q+++zzzzzzzzzzzz+++++++++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzoXDB@@@@@@&#G9Z+zzzzzzzzzzzzzzzzzzzzzzzzz+z++++++++TTTToooonnnnnnnnnnnn90B@@@@@&%8mmmmmG$Q@@@@@@gB8GmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmGDD000B@@HOOHHHHHmmmmmmHHHHHOOOOOOHHHHmmmmmmmHHHHHHHHOOOOOOm@@@ )]
[( @@@G+++zzzzzzzzzzz+++++++++++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz+ZO0B@@@@@@@B8mSozzzzzzzzzzzzzzzzzzzzz+z++++++++TTTTTooonnnnnnnnnnnnnneH8Q@@@@@Q#Dmmmmm0%g@@@@@@&%8GmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmGDD000000000Q@gOOOHHHHHmmmmmmmHHHHOOOOOOHHHHmmmmmmmmHHHHHHHHHHHOOH@@@ )]
[( @@@n++zzzzzzzzzzzz++++++++++++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz+n9G$&@@@@@@g%DOZ+zzzzzzzzzzzzzzzzzz+++++++++TTTTTooonnnnnnnnnnnnnnnneH8&@@@@@Q#0mmmmG$B@@@@@@@gB$DmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmGGDD000000000000008@@QOOOHHHHHmmmmmmmHHHHHOOOOOHHHHmmmmmmmmHHHHHHHHHHHHHO&@@ )]
[( @@B+++zzzzzzzzzzz++++++++++++++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzTeOD#&@@@@@@Q$mXozzzzzzzzzzzzzz+++++++++TTTTTooonnnnnnnnnnnnnnnnnnnXD%@@@@@@Q#0mmmmD#Q@@@@@@@@&B$DmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmGGD000000000000000000000#@@%OOOHHHHHmmmmmmmmHHHHHOOOHHHHHmmmmmmmmHHHHHHHHHHHHHHQ@@ )]
[( @@@G+++zzzzzzzzzzz++++++++++++++++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz+nS9m0#Bg@@&$mSTo+zzzzzzz++++++++++TTTTTooonnnnnnnnnnnnnnnnnnnnnZ9G#g@@@@@&%8GmmmD$Bg@@@@@@@@&B$DmmmmmmmmmmmmmmmmmmmmmmmmGGDD0000000000000000000000000000B@@#OOOHHHHHHmmmmmmmHHHHHOOOHHHHHmmmmmmmmmHHHHHHHHHHHHHB@@ )]
[( @@@X++zzzzzzzzzzz++++++++++++++++++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz+TnZSO@@8XTzzz++++++++++++TTTTToonnnnnnnnnnnnnnnnnnnnnnnnnZ9D#g@@@@@&B$DmmmG0#Bg@@@@@@@@%mmmmmmmmmmmmmmmGGDD00000000000000000000000000000000000&@@$OOOHHHHHHmmmmmmmHHHHHHOOHHHHHmmmmmmmmmHHHHHHHHHHHHHB@@ )]
[( @@@Z++zzzzzzzzzzz+++++++++T++++++++++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzoZmQ@@@Bmn++++++++++++TTTTTooonnnnnnnnnnnnnnnnnnnnnnnnnnnnnSH8B@@@@@@gQB#$0mG0#Bg@@@@0DDDDDDDDD00000000000000000000000000000000000000000008@@@0OOOHHHHHHmmmmmmmmHHHHHOHHHHHHmmmmmmmmmHHHHHHHHHHHHHB@@ )]
[( @@@T+zzzzzzzzzzz+++++++++TTTT+++++++++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzze@@mHm8B@@@&09n++++++++TTTTTToonnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnZXH0%@@@@@@@@gB0mmG%@@#0000000000000000000000000000000000000000000000000000#@@@GOOOHHHHHHmmmmmmmmHHHHHHHHHHHHmmmmmmmmmmHHHHHHHHHHHHB@@ )]
[( @@@++zzzzzzzzzzz++++++++TTTTTT++++++++++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzo&@BHHHHHm8B@@@@@Q%$0GHOXSenooooonnnnnnnnnnnnnnnnnnnnnnnZeSXXOHG0#B&@@@@@@@@@@@@@B00B@@#0000000000000000000000000000000000000000000000000000%@@@HOOOHHHHHHmmmmmmmmHHHHHHHHHHHHmmmmmmmmmmHHHHHHHHHHHHB@@ )]
[( @@&++zzzzzzzzzz+++++++++TTTTTTTT++++++++++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz+%@@GHHHHHHHHHD$B&@@@@@@@@@@@@@@gQQQQQQQQQQQQQQQQ&&&&&g@@@@@@@@@@@@@@@@@&B%#80GG@@@00&@@#0000000000000000000000000000000000000000000000000000Q@@gHOOOHHHHHHmmmmmmmmmHHHHHHHHHHmmmmmmmmmmmHHHHHHHHHHHHQ@@ )]
[( @@&++zzzzzzzzzz++++++++TTTTTTTTTT+++++++++++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzm@@#HHHHHHHHHHHHHHHHGD08$#%BQ&g@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@g&QB%$8DmHOOHHHHHH$@@&00@@@$0000000000000000000000000000000000000000000000000000&@@QOOOOHHHHHHmmmmmmmmmHHHHHHHHHHmmmmmmmmmmmHHHHHHHHHHHHQ@@ )]
[( @@B+zzzzzzzzzzz++++++++TTTTTTTTTTT++++++++++++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzT@@@mHHHHHHHHHHHHHHHOOOOOOOOOOOOOOHmmmmmGGGGGGGGGGGGGGGGmmHHOOOOOOOOOOOOHHHHHHHHg@@%08@@@80000000000000000000000000000000000000000000000000008@@@#OHHHHHHHHHHmmmmmmmmHHHHHHHHHHmmmmmmmmmmmmHHHHHHHHHHH&@@ )]
[( @@B+zzzzzzzzzz++++++++TTTTTTTTTTTTT+++++++++++++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzG@@#HHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHHHHHHHHD@@@$0#@@@0000000000000000000000000000000000000000000000000000$@@@8HHHHHHHHHHmmmmmmmmmmHHHHHHHHHmmmmmmmmmmmmHHHHHHHHHHHg@@ )]
[( @@Q+zzzzzzzzzz+++++++TTTTTTTTTTTTTT+++++++++++++++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz+g@@mHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHHHHHHHHH%@@@00B@@&0000000000000000000000000000000000000000000000000000%@@@GHHHHHHHHHHmmmmmmmmmmHHHHHHHHHmmmmmmmmmmmmHHHHHHHHHHm@@@ )]
[( @@&+zzzzzzzzzz++++++TTTTTTTTTTTTTTT++++++++++++++++++++zz+zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzH@@BHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHHHHHHHHHHg@@Q00Q@@B0000000000000000000000000000000000000000000000008888Q@@@HHHHHHHHHHHmmmmmmmmmmHHHHHHHHmmmmmmmmmmmmmHHHHHHHHHH8@@@ )]
[( @@g+zzzzzzzzzz++++++TTTTTTTTTTTTTTTT++T+++++++++++++++++++++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz+++Q@@0HHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHHHHHHHHHHG@@@#00g@@%0000000000000000000000000000000000000000008888888888g@@QHHHHHHHHHHHmmmmmmmmmmmHHHHHHHmmmmmmmmmmmmmHHHHHHHHHHB@@ )]
[( @@@+zzzzzzzzzz++++++TTTTTTTTTTTTTTTT+++++++++++++++++++++++++++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzz+++++++9@@gHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHHHHHHHHHHH8@@@$08@@@#0000000000000000000000000000000000000888888888888888@@@#HHHHHHHHHHHmmmmmmmmmmmHHHHHHHmmmmmmmmmmmmmHHHHHHHHHH@@@ )]
[( @@@ozzzzzzzzzz++++++TTTTTTTTTTTTTTTTT+++++++++++++++++++++++++++++++++zzzzzzzzzzzzzzzzzzzz+++++++++++B@@$HHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHHHHHHHHHHH%@@@808@@@$000000000000000000000000000000008888888888888888888$@@@0HHHHHHHHHHHmmmmmmmmmmmHHHHHHmmmmmmmmmmmmmmHHHHHHHHH8@@ )]
[( @@@ezzzzzzzzzz++++++TTTTTTTTTTTTTTTTT++++++++++++++++++++++++++++++++++++++zzzzzzzzzzzz+++++++++++++S@@@mHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHHHHHHHHHHHHQ@@g00$@@@8000000000000000000000000000888888888888888888888888%@@@GHHHHHHHHHHHmmmmmmmmmmmHHHHHHmmmmmmmmmmmmmmHHHHHHHHHQ@@ )]
[( @@@9zzzzzzzzzz++++++TTTTTTTTTTTTTTTTT+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++$@@BHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHHHHHHHHHHHH@@@Q00%@@@8000000000000000000000008888888888888888888888888888Q@@@HHHHHHHHHHHHmmmmmmmmmmmmHHHHHmmmmmmmmmmmmmmHHHHHHHHG@@@ )]
[( @@@Dzzzzzzzzzz++++++TTTTTTTTTTTTTTTTT++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++n@@@DHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHHHHHHHHHHHm@@@B00B@@g0000000000000000000000888888888888888888888888888888&@@QHHHHHHHHHHHmmmmmmmmmmmmmHHHHmmmmmmmmmmmmmmmHHHHHHHH#@@ )]
[( @@Bzzzzzzzzzz++++++TTTTTTTTTTTTTTTTT++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++TTm@@&HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHHHHHHHHHHHHD@@@%00&@@Q0000000000000000088888888888888888888888888888888888@@@BHHHHHHHHHHHmmmmmmmmmmmmmHHHHmmmmmmmmmmmmmmmHHHHHHHHg@@ )]
[( @@@ozzzzzzzzz+++++++TTTTTTTTTTTTTTTT++++++++++++++++++++++++++++++TTTTTTT+++++++++++++++++++TTTTTT%@@#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHHHHHHHHHHHH8@@@$00g@@B0000000000888888888888888888888888888888888888888888@@@#HHHHHHHHHHHmmmmmmmmmmmmmmHHmmmmmmmmmmmmmmmmHHHHHHHD@@ )]
[( @@@mzzzzzzzzz+++++++TTTTTTTTTTTTTTTT+++++++++++++++++++++++++++++TTTTTTTTTTTTTT++++++++TTTTTTTTTTn@@@DHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHHHHHHHHHHHH#@@@808@@@%000000888888888888888888888888888888888888888888888$@@@8HHHHHHHHHHHmmmmmmmmmmmmmmHHmmmmmmmmmmmmmmmmHHHHHHH%@@ )]
[( @@Q+zzzzzzzz+++++++TTTTTTTTTTTTTTTT+++++++++++++++++++++++++++++TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTO@@@mHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHHHHHHHHHHHHB@@@80$@@@$008888888888888888888888888888888888888888888888888#@@@DHHHHHHHHHHHmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmHHHHHHm@@ )]
[( @@@9zzzzzzzz+++++++TTTTTTTTTTTTTTTTT+++++++++++++++++++++++++++++TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT8@@QHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHHHHHHHHHHHHH&@@@80#@@@8888888888888888888888888888888888888888888888888888%@@@GHHHHHHHHHHmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmHHHHHH#@@ )]
[( @@Q+zzzzzzz++++++++TTTTTTTTTTTTTTT+++++++++++++++++++++++++++++++TTTTTTTTTTTTTTTTTTTTTTTTTTTTTT&@@$HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOOOOOOOOOOOOOHHHHHHHHHHHHH@@@g00B@@@8888888888888888888888888888888888888888888888888888B@@@HHHHHHHHHHHmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmHHHHHm@@ )]
[( @@@Gzzzzzzzz++++++++TTTTTTTTTTTTTTT++++++++++++++++++++++++++++++++TTTTTTTTTTTTTTTTTTTTTTTTTTTe@@@DHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOOOOOOOOOOOHHHHHHHHHHHHH@@@&88Q@@g8888888888888888888888888888888888888888888888888888Q@@gHHHHHHHHHHHmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmHHHHH#@@ )]
[( @@@Szzzzzzz+++++++++TTTTTTTTTTTTTTT+++++++++++++++++++++++++++++++++TTTTTTTTTTTTTTTTTTTTTTTTTm@@@HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOOOOOOOOOOHHHHHHHHHHHHm@@@Q88&@@Q8888888888888888888888888888888888888888888888888888g@@&HHHHHHHHHHHmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmHHHHm@@ )]
[( @@&nzzzzzz+++++++++TTTTTTTTTTTTTTTT+++++++++++++++++++++++++++++++++++TTTTTTTTTTTTTTTTTTTTTT#@@BHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOOOOOOOOOHHHHHHHHHHHHG@@@Q88g@@B8888888888888888888888888888888888888888888888888888@@@BHHHHHHHHHHHmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmHHHH#@@ )]
[( @@QTzzzzz+++++++++TTTTTTTTTTTTTTTTT++++++++++++++++++++++++++++++++++++++++TTTTTTTTTTTTTTTTg@@$HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOOOOOOOHHHHHHHHHHHHHG@@@Q88@@@B8888888888888888888888888888888888888888888888888888@@@#HHHHHHHHHHmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmHHHHG@@ )]
[( @@Bozzzz+++++++++TTTTTTTTTTTTTTT+T++++++++++++++++++++++++++++++++++++++++++++++++TTTTTTTS@@@DHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOOOOOOHHHHHHHHHHHHHD@@@B88@@@%888888888888888888888888888888888888888888888888888$@@@$HHHHHHHHHHmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmHHHHQ@ )]
[( @@Qnzzz++++++++++TTTTTTTTTTTTTT+++++++++++TT++++++++++++++++++++++++++++++++++++++++TTTTG@@@HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOOOOOHHHHHHHHHHHHHD@@@B88@@@%888888888888888888888888888888888888888888888888888#@@@0HHHHHHHHHHmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmHHH0@ )]
[( @@gezz++++++++++TTTTTTTTTTTTTT++++++++++TTT++++++++++++++++++++++++++++++++++++++++++TT%@@BHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOOOOHHHHHHHHHHHHH0@@@B8$@@@#888888888888888888888888888888888888888888888888888%@@@DHHHHHHHHHmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmHHmg )]
[( @@O+++++++++++TTTTTTTTTT+TTT++++++++++TTTT++++++++++++++++++++++++++++++++++++++++++Tg@@#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOOHHHHHHHHHHHHH8@@@%8#@@@$888888888888888888888888888888888888888888888888888%@@@DHHHHHHHHHmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmD8%g )]
[( @@D++++++++++TTTTTTTTT+TT++++++++++++TTTTT+++++++++++++++++++++++++++++++++++++++++n@@@0HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOOHHHHHHHHHHHHH8@@@%8#@@@$888888888888888888888888888888888888888888888888888%@@@DHHHHHHHHHmmmmmmmmmmmmmmmmmmmmmmmmmmmmG8#Q@@@@@ )]
[( @@%o++++++++TTTTTTT+++++++++++++++++TTTTT+++++++++++++++++++++++++++++++++++++++++9@@@mHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOOHHHHHHHHHHHHH8@@@%8%@@@8888888888888888888888888888888888888888888888888888%@@@DHHHHHHHHmmmmmmmmmmmmmmmmmmmmmmmmmD$B&@@@@@@ )]
[( @gHT+++++++TTTT+++++++++++++++++++TTTTTT++++++++++++++++++++++++++++++++++++++++G@@@HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOOHHHHHHHHHHHHH8@@@%8%@@@8888888888888888888888888888888888888888888888888888%@@@GHHHHHHHHmmmmmmmmmmmmmmmmmmmmm0#Q@@@@@@ )]
[( @&mo+++++TTTT+++++++++++++++++++TTTTTTT+++++++++++++++++++++++++++++++++++++++$@@QHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOHHHHHHHHHHHHH8@@@%8%@@@8888888888888888888888888888888888888888888888888888B@@@GHHHHHHHHmmmmmmmmmmmmmmmmG8%&@@@@@@ )]
[( @@Do++++++++++++++++++++++++++TTTTTTT+++++++++++++++++++++++++++++++++++++++Q@@%HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOOHHHHHHHHHHHH8@@@%8%@@@8888888888888888888888888888888888888888888888888888B@@@GHHHHHHHHmmmmmmmmmmmmD$Bg@@@@@@ )]
[( @QHo++++++++++++++++++++++++TTTTTTT++++++++++++++++++++++++++++++++++++++T@@@$HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOOHHHHHHHHHHHH8@@@%8%@@@8888888888888888888888888888888888888888888888888888B@@@mHHHHHHHmmmmmmmmG8#Q@@@@@@ )]
[( @g0eT++++++++++++++++++++++TTTTTT++++++++++++++++++++++++++++++++++++++n@@@0HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOOHHHHHHHHHHHH8@@@%8%@@@8888888888888888888888888888888888888888888888888888B@@@mHHHHHHHmmmmD8%&@@@@@@ )]
[( @@QmnT+++++++++++++++++++TTTT++++++++++TT++++++++++++++++++++++++++++e@@@DHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOOHHHHHHHHHHHH8@@@%8%@@@8888888888888888888888888888888888888888888888888888Q@@@HHHHHHHmD$Bg@@@@@@ )]
[( @@%OT+++++++++++++++++TTT++++++++++TTT+++++++++++++++++++++++++++TX@@@mHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOHHHHHHHHHHHH8@@@%8%@@@8888888888888888888888888888888888888888888888888888Q@@@HHHm0#Q@@@@@@ )]
[( @@gDZT++++++++++++++TT+++++++++++TTTT+++++++++++++++++++++++++TTH@@@HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOOHHHHHHHHHHH8@@@%8%@@@8888888888888888888888888888888888888888888888888888Q@@@8%&@@@@@@ )]
[( @@%OT+++++++++++++++++++++++++TTTT+++++++++++++++++++++++++TTG@@gHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOHHHHHHHHHHH8@@@%8%@@@8888888888888888888888888888888888888888888888888888B@@@@@@@@ )]
[( @@g0eT++++++++++++++++++++++TTTT+++++++++++++++++++++++++TTG@@gHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOHHHHHHHHHH0@@@B8%@@@8888888888888888888888888888888888888888888888888888B@@@ )]
[( @@Bmo+++++++++++++++++++++TTT++++++++++++++++++++++++TTTG@@gHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOHHHHHHHHHH0@@@B8#@@@$888888888888888888888888888888888888888888888888888%@@@ )]
[( @@@$XT++++++++++++++++++TTT++++++++++++++++++++++++TTTG@@gHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOHHHHHHHHHHD@@@B8$@@@#888888888888888888888888888888888888888888888888888#@@@ )]
[( @@Qmn++++++++++++++++TTT+++++++++++++++++++++TTTTTTm@@@HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOHHHHHHHHHD@@@Q88@@@%8888888888888888888888888888888888888888888888888888@@@ )]
[( @@@$XT+++++++++++++TTT++++++++++++++++++++TTTTTTTm@@@HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOHHHHHHHHHG@@@Q88@@@%8888888888888888888888888888888888888888888888888888@@@ )]
[( @@g0eT+++++++++++T++++++++++++++++++++TTTTTTTTO@@@mHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOHHHHHHHHm@@@Q88@@@B8888888888888888888888888888888888888888888888888888g@@ )]
[( @@@QGeT++++++++T++++++++++++++++++++TTTTTTTTS@@@DHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOHHHHHHHHm@@@&88g@@Q888888888888888888888888888888888888888888888888#BQ&@@@ )]
[( @@@&0XT++++++++++++++++++++++++++TTTTTTTTo@@@8HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOHHHHHHHH@@@&88&@@&888888888888888888888888888888888888888888#%Qg@@@@@@@@ )]
[( @@@g$Oo+++++++++++++++++++++++TTTTTTTTTB@@BHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOHHHHHHH@@@&88B@@@8888888888888888888888888888888888888#BQg@@@@@@@@ )]
[( @@@%meT++++++++++++++++++++TTTTTTTTG@@@HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOHHHHHHHg@@g88%@@@88888888888888888888888888888888#B&g@@@@@@@ )]
[( @@@&09o+++++++++++++++++TTTTTTTTZ@@@8HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOOHHHHHHQ@@@88$@@@$88888888888888888888888888#B&@@@@@@@@ )]
[( @@@@BDXo++++++++++++++TTTTTTTT$@@&HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOHHHHHH%@@@888@@@#888888888888888888888$%Q@@@@@@@@ )]
[( @@@@%GST+++++++++++TTTTTTTe@@@8HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOOOOOOOHmD8#B@@@@888g@@%88888888888888888$%Q@@@@@@@ )]
[( @@@@%GST+++++++TTTTTTTTD@@gmHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHOHm0$%&@@@@@@@@@g888Q@@B8888888888888#B&@@@@@@@ )]
[( @@@@%D9n++++TTTTTTTnQ@@%HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHm0$%&@@@@@@@@@@gB#$88888B@@B888888888#B&@@@@@@ )]
[( @@@@&#GXoTTTTTToX@@@DHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHmD0$%B&@@@@@@@@ @@@@@@gQB$888#@@B88888#Bg@@@@@@ )]
[( @@@@Q$mSoToo0@@gmHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHG0$#B&@@@@@@@@@@ @@@@gB88@@B8$%&@@@@@ )]
[( @@@@@Q8m9B@@BHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHmD0$%Qg@@@@@@@@@ @@@%&@gg@@@@ )]
[( @@@@@@@@&QQQBB%%%##$$80DDGGGGGDD008$$#%BQ&g@@@@@@@@@@ @@@@ )]
[( @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ )]
[( )]
[( )]
[()]
[(examples/dosh.png)]
[(316x115 \0508x12\051)]
[(1)]
[()]
] 18 -0 0 0 false DrawText
grestore
restore showpage
%%Trailer
end
%%EOF

View file

@ -4,7 +4,7 @@ import subprocess
import tkinter import tkinter
filename_noext = input(']>> ') filename_noext = input(']>> ')
filename_text = filename_text.replace('.txt', '') filename_text = filename_noext.replace('.txt', '')
filename_text = filename_noext + '.txt' filename_text = filename_noext + '.txt'
filename_ghost = filename_noext + '_render.ps' filename_ghost = filename_noext + '_render.ps'
@ -27,4 +27,4 @@ print('Writing Postscript')
c.postscript(file=filename_ghost, width=lines_width, height=lines_height) c.postscript(file=filename_ghost, width=lines_width, height=lines_height)
t.destroy() t.destroy()
print('Writing PNG') print('Writing PNG')
subprocess.Popen('PNGCREATOR.bat', shell=True, cwd='D:/!/o/asscii') subprocess.Popen('PNGCREATOR.bat', shell=True, cwd=os.getcwd())