He’s an ASCII-kicker, not an EBCDIC-head

8 Jul

After my previous PG post, I just couldn’t resist making an ASCII-art shrine to another one of my heroes: Chris Hardwick

No, I’m probably not the first or the last person to textualize the Nerdist, but I’m pretty sure no one else has converted this particular image* (yet):

::::::::::::::::::--::-----.:ooh+//+/------::-----+/::-::::::::::::::::::::::+o++ss+ooyosyyosyyyssoosshhsoyss+oooys+++y+://://////+++///+/////+///////////////////////:------:::::::--/oyoo:-/:::://::::::o++::/:://:::::::::/oos
::::::::::::::::::--------:--::-.--------:-------/o::::::::::::::::::::::::::+oooys+ooyooyysssssssssooooooyyy+o++sssoos+::::////////////+/////+///////////////////////:--::--:-:::-/::-ys//::/::-+//::::::+oo::/::/:::::::::::oos
:::::::::::::::::-----:------::::-------::ooo/:oos:-::::--:::::::::::::::::::/ossy+syyssosssssssssooosooooooo+ooo+syooo+/////+++/+////////////////////////////////////:::::---::::/-++y:---/:::::+++::://::oo/::::/:::::::::::++s
:::::::::::::::::---------:----.----////++o//-:++:--::::::::::::::::::::::/::/osss+syyosooooooooo+++++oooosssosoosssoos+/////+++++++//////////////////////////////////::::----:://-/ss/-://:::--:///::::::-+++::::::::::::::::++s
:::::::::::::::::------------//:/+++++/////---+oo.-:::::::::::::::::::::://::/ssss+ooo+oo+++sooossssssssssssssssssoo++s+///////+/+++/+++//////////////////////////////:::::---:::::o++.:://-:/--::::::::::://+::::::::::::::::++y
:::::::::::::::::---------..:++++++/----./+---/oo-:::::::::::::::::::::::/:::/syyooooosyyyyhssssyhyyssssooo++++++o+ooos+///////++++++++++/////////////////////////////:::::--:::--/+--::-::-:::::/::/:::::://+-::::::::::::::-++y
::::::::::::::::::----------:::/+..:-:::--+//:-++::::::::::::::::::::://///::/sooohdmmNdhhhdmmmmmhyyhhdddddddmmmmNmmNNds+++++//++++++////////++++++++++///////////////:::::--:::--::::-::::::::::::::::::::::::::::::::/-:::::///
:::::::::::::::::-----------:--/+-----::--+++-/oo-:::::::::::::::::::://+//::+yhhmNmmmmdmNNMNMMMNNmmmNNNNNNmmmmmmmmmNNMNy++/+oo+/+++++++/++++///////////::::::::::::------:--:::--::::::::::::::::::::::::::::::::::::::-::/:::::
://///::::::::/:::-----------..+/---::::--+oo./oo-:-:::::::::::::::::///://::odNNMNNNNMNMMMNNNNNNNNNNNNNNNNNNNNNNNNmmmMMNhh+shh+:/:://::::///::::::::::::::::--------::::-:--:::::----::---------------------------::--:::::::--:
:::::::::::::::--------------..//---:-----///-/++-:::::::::::///////////:/+oohNMMNNMMMMNMMMNNNNNMMMMMMMMMMMMMMMMMNNmmmmmmNNhdmmyoo++ooooooooooooooooooooooooo++++++++++//-:--:--:::---::::::::::://////////////////++//+o:::::::/
-------------..------------------..-::---::--/::://://////////////++syhhdmmMMMNNNMMMMMMMMMMmNNNNNNMMMMMMMMMMMMNNNMMMMMMMNNNMNNNMNdhhyyyyyyyyyhdhyyyyyysyyyyyyyyyyyyysyy++-::::-:++oooooo++++oooooo+++oooo++++o+++++++oooy::-----/
......--..---------.--------:::----:/+::-/://////++///+++++++++oooyydmNNmMMNNNMMMMMMNNNNNNNNNNNMMMMMMMMMMMMMMMMMMNNNNNNNNmmMNMMMMNhhyhhhhhhhhddddddhhhyyyyyyyyyyyyyysyy++-::::-:++s+++o+oooo++++++oo++ooooo++o++ooo++oo+y:::::::/
----::::::::::////:---------:::/ooososooo::++:+//+o//////////ssyhdmmNNmmNMNMMMMMMNMNMMMNmNNMMMMMMMMMMNMMMMMMMMNNNNNNMMNmmNNNmMMNNMmmdyyyhhhdddddddmmddyyyyyyyyyyyyyyyyy++-:::--:++so++oosooo++++++oo++ossso++++ossso+oo+y:::::--/
/////+++//+++/++++-.--------/ooy+::/o/::sy///+///oo/+++ohhysdNNdhmMMMNmmNNMMMNNNNNNNNNNmNNNMMMMMMMMMMMMMMMMMMMMMMMNNNNNNMNNNMMMNNmNNmdddddddddhdddmdhhhyyyyyyyyyyyyyyyy++-:::::-//dsssh+yyy+osoo+oyyy+oyydhssysodddo+ooos//-:::::
//////////////++++-.--------+ss:+++:os++yyo++////os/oo+/hhyhNyyyNMNNNNMMNNMNNNNNNNNMMMNNMMMMMMMMMMMMMMMMMMMMMMMMMNNMMMMMMMMMMNNNNNNNmNmmmmmdddhddddhhhhyyyyyyyyyyyyyyyyoo-::::--::hhyys+syy+syhhosyyhsossyy//ssshhhy+ooos++-::::-
+////++++///+/++++:.--------+sss/oo:/s//+/yss:/+++y/+++/ooyNNhhdNNNNMNmmNNMMMMMMMMMMMMNNNNNNNNNMMMMMMMMMMMMMMMMMMMNNNNmNMMMMMMMMMNNNmNNNmNmdddhddddmNNdyyyyyyyyyyyyyyyyoo-:::::://ymyy+o+yyosyddysyyydooooyyyosysssysooos++-::::-
/////++++/+++++++o:.--------/++ys//ss+ss//hyy/+++oy+oo+sssdNhddMNNmmmNNNMMMMMMMMMMNMMMNNMMMNNNNNNNNNNNMMMMMMMMMMMMMMNNNmmdddNMMMMNNNNmmmmNmmmdhhddmNmmdyyyyyyyyyyyyyyyyoo-:::::.//hdoo+++ssysshhhossydyoooyhhooyoooss++oooo:::::-
+++++++++++++++++o:.--------:///://::+/////ooo+//+//+++hssdNNmmNNMMMNNNNMNNNNNMMMMMMMMMMNNNMMMMMMMMMNNMMMMNmmddddmmmmmmNMMMMMNNMMMMMNNNNmNMNNNmdddyyhhdmdyyyyyyyyyyyyyyoo:::::-://yhhhssysshysooss++o/o++oooooss++sooooooss:::::-
+++++++++++++++++o:.----::--:////:://+yy///++/+++sssssshoodNdmmdNmmmNmmmmmmmmmNNNMMMMMMMNNNMNNNNMMMMMMNNNNNNNNmddhdNMMNNNNNMMNNMMNMMMNNNmNNNNNmmddhyyyhmhyyyyyyyyyyyyyyoo::::::-::s+yys++ooyoo+++ooo+s+ooo+oo+hh++so+ooooyy:::::-
+++++o+++++++++++o:.------:-:///:///::oos+://+syyooossyyhhdmmmmmmNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNMMMMNNNNNNNmmdddddddmNmmmmNMMMNMMMMMNNNmNNNNNMmmhyhhdhhhhyyyyyyyyyyyyoo::::::-::sossyo+ooo+ooo++oo++o++oo++ooyoo+oo++ooyy/::---
+++++++++++++++++o:.------::://:ooo+////s+/oodmyy+++oosyddmmNMMMMNNNNMMMNMMNNNNNNNmmmmmmdddmmNNNNNNNNNNNMNNNNNNNNmhysssyhddhhddNMMNNMNNNNmmmmNNmddmNddyydhhhyyyyyyyyyyyss::::::---oo++o++++ooo++o+++oo+++o+ss+odssooy++ooyy/-:::-
+++++++++/+++++++o/-------:-://++///////:so++osddmmddddmmmmNNNNNMMNNNNNNNNNNNNMMMMNNNNNNNNNmdmmNNNNNNmmmmdhhhdddddhhhhdNmddyhhhyyhmmmNNNNNNNNNmNNNNNddddhddhyyyyyyyyyyyss:::::::::+oooyyyssyo+ssh+oossyyysyoooyoddoyhddooss+::::-
+++++++++/+++++++o/-----:::-://:///oo///osssshdddmmmmmNNNNNNNmmNNNNNNNmmmNNNNNNMMNNNNNNmmdddmmmmNmmmNNNNNNdhhyyyyddhyyyhdddmdddhyyddNmNNNmdmmNNNNNmNMMdhdhhyyyyyhhyyyyyss:::::::--/oooyy+sshsoyyhy++hd+sshhhhshsmmyhsyyyoooo:-::-
+++++++++++++++++o/-----:::-:///+++os///yddddmNmmmdmNNNNNNmmddddmmmmmmmmmmmNNNNNNNNNNNmdhddddddmddddmNNNNNNNNdyoosshddhssyymNMMMMMNNmmNNmmmmmmNNNNmmMMNhhhhhhhhddhhhyyyss:::::::--/s++oyoddhohhhodyyodosshyhhsysyyoo+//ysooo/-::-
+++++++++/+++++++o/-------:::++:+++osooohdmNNNmmmmdNNNddhhhddddddddddddddmmmmNNNNNNNmmdhhdddddddhhhhddmmmmmNNMNmmysshhddhhhyhddddNNNmmNNmmNNNmNmNNMmmmmmdhhhhhhhhhyyhyyss:::::::--/s+++sdhhsoohhyydd+hhssysssooo+++oooosyoos/-:::
/+++//+++/+++/++++/----:::-:/+++////ohNNMNmddhhddmmdmmNmddhhmdddhhhhyyhhhhhddmmNNNNmNNmhyhhyyyyyssssssssyyhhhhddddmNmmhyyyyhhhhhhdddhhmmMNdNNMmNNNmmNNNmdhhhhhhddhhhyyyss/::::::--/s++o+oyysohyyss++hy+ooo++++sssso+o++o+ooy/-::-
/+++//+++///+//++++----:::--://////+yhddhhdhhhNmmhdmNNmyyymmhddhhhhhyyyyyyyhhdmMMmdddddhyyyssssssooooooossyyyyhhhdddmmmNmddhyyyyyyhhhhddNNNmmmNmNNmmNNmmmddhyhhhyyyyyyyyy/::::::--/s++o++ooydh+++oooyysyyssssohsssyooooo+ooy/-:::
/+++////+///+//++++----::::::////::/ss++/syhhdhhhdMmddhdmmdddddhyyyysssssoossydNNmyhyyhhysssooooo+//+++++oosssyyyhddmmmNmmmhhyyyssyyhyyyhdMNNmNNNNmmNNNmmmmdhhhyyyyyyyyyy/::::::--/oooo++++shoooo+++yhoyyoyoosyohhdhmdds+ooy+-:::
////////////+////++:----::::://////+ssoooyyhhyymmNddddmmmmmddhhysooooooooosssoymmNyysssssooo/++++/////////+++ossssyhdddddmmmdyyyyhyysyhhddmdddmNmmmmNNMmdmmmmddhhhyyyyyyy/::::::--:ooo+++oooo/yyho++yh+ss+yyyysoyyysdddhsoos+---:
+++//////////////++:----::::://+oooooooossyddNNhhhMMmmdmmmdyyssooooo+++++o+//ooooddooo+://///::::::::----::::////++oooosssssshhdhosshhssyhdNNNmmNNMmhhmNmddmNNNdhyyyyyyyy/:::::::::+ss+oooo+oooosossyyoyyh+hhyoo++oyyyyyo++oo:--:
+////+///////////++:---:::::://////++syyyymNNmhmmMMmmmddmmhsooooo+++////+////++++sds+++/://////::::::--------::::/++++//+++o+++shhssoyyyhdhhhdNdmmMNhhdMNdddNNNNmhhhyyyyy/:::::::::+ss+oo+++++oos+sshhossd+ssy+ooo+syoooo++os:--:
/////////////////++:---:::::://////+oyhhymNdddNMMNmmmmddhhsoooo++////////:/::/+++ohy//++:////::::::::---------::::://////+++++++oyyysoyyhddhhhmdddNMhhhMmhhdNNNMNmhhhyyyy//::::::::/ss+o+++oo+ooy+++sy+oos+oo+o+++++o+++oooos:--:
++++++////////////+:---::::://///+++yhyymNmddmNNNNmmdddhyyo+++++//////:::://///+++ohss/+/::/::::::::::::-----:::::::////++++ooo++oyyyossydmmmmddddmmmmhmNhhdNmmMmNddyyyyy//:://:::-/sso++ooo+ossso++++++++++++++++++++++o++ss/--:
/////////////////++:---::::::///+++yhdddmdmNNNNNNNddhhysoo+++++//////:::///:::::::/ssso+::::::::::::::::-----------::::::::/://+oooooyyyyhdmmNNhddmNmmhhmddhNMMMdddddyyyy/:///:::::/ooo+o++++++++++++++++++++///////////+///+:--:
/////////////////++/---:::::://o+ssdmdmmNdmNNNNNNmhdhhsooo+++////::::::://:::::::::+ooo/://:::::::::::::---------:----:::::::////+ooosssyhdmmNMhhhdmNNmdmdddNNNMNmyyddhyy+::::::::::++/////://:::::::::::::::////////////////::::
/////////////////+o/---::::::+++oddmdmddNdmmmNNNNmhhyyso+++++++///::::::/:::::/::::://+/::::::::::::::-----------:----::::::://::/+++ooosyhddmNmdddmNNmdmddhNNNMMNmmyy+:://///:://::///+///://:::////////////::////////////::::::
/////////////++++oo/--::::-:/++:smmdhmdddmmNNNmddddyssoo+++///////::::::::::::::::::::/::::----------------------------:::::::://:///+oooshddmNMmmmdmmmdmddymMMNNmddmms:://///:///:://///::::::::::::::::::::------------:::::---
::::::::--::---...:---::--:////smmmhdmmmmmmNNmdddhhysso+++//+////::::::::::::::::-----::--------------------------------:::::::::///:://+ooyydNmNNMmddmhdNNydNNNMNmmsoyoo//++///::::::::::::-::::::::::::::::--:::::::::-::::::::
............-.---.----:::::/:::hdddhddddNddmmmdddhysoo++++++/::::::::::::::::::::------------------------------------------::::::::::////+oooyNNddNMddddhNNhyNNMNNNNh++oo+/////:--/-:::::--:::::/-::-::---::::/::::::::::::::::::
----------..-.-----:--:::::/:++dmdddmdddmddddmdddhysoo+++++//////::::::::::------------------------------------------------:::::::::://///+++sdNdddNmmdddNNdhNNMNmmmd++++/////:///-/oos+:---:/::::::-:::::-::-:::::-://::::::::::
////////////+++++os+--:-::/::hhmdyydddmmdhhhhmmhhysoooo+////:///::::::--------------..................--------------------------::::::::///+++oymmNmNNdmdmmNmmmNNNmmNy++++/////:..hy---:://--/::.::::-:::::----o++-/:::::::-:::::
oooooooooo++ooooosyo---:::::/yymhyydddmmhhhddddhhysoooo+////////::::::::------------..................-----...------------------::::::::::/+++ooyyNdddmmdddmdmmNmNNNmho+++////:/++y:--/:/..::-::/:::-os--:.//+-+//-/:::::---:::::
++++++++++oo++ooosy+---://::+yymhhhdddddyhdhhhhyysssooo+///////:::::::::------------.................--------------------------:::::::::::////+ooodmddmmmddddmmmmNNNhhs+++/////-sso-///:-//yy:ooh+--+ss--/yhhs:+++::-::::----:::-
++++++++++oo+oooosy+--:://://hhdhddddmhhyddhhhhyysssoo++////::::::::::-------------.................---------------------------:::::::::::////+o++ymddddmmmhhmmmdNNNdmy+++////::yys-::---sssyooo/o++y:---+s//+-///:::::::::-::::-
++++++++++++++ooooso--::::/-/hhhdmmddhyyddhhhhhyyyoo+++////::::::::::-------------...............--------------------------:::::::::::::://////++++ymmhydddhdddddNmmmNdoo/////:/::+sssys+sssssoo/://+yyoo+/+++++oo-:::::---------
o+++++++++oooooooos+--::::/:+hhddmmdddhhdhhhhhyyysoooo++///::::::::::----------........----.......--------------------------::::::::::::://////++++sddhyhhhhhhhydmmmmNmss/+///:/:::---:::--:-/::/::::::----:::-:oo::::::----:---:
ooo++++++o++oooooos+--::::::oddmdmmmddddhhhhhhyssssooo++///:::::::::-------------.....--........-------------..--------------:::::::::::///////++++ohhhysyyyhyyyhmddmmNhh/+////:::/::::::--::/--:-:::--::::::--://::::::---------
ooooo++++oooooooooso::-:::-:shhmdmmmddddhhhhhyyssssooo++///::::::---------------------...........------------------------------:::::::::////////++++ssysosssyyyyhdddddNmm+/////-::/::::::::/::::::::::::::::://:---::::::--------
oooooooo++ssysooooso---::::/yddddmmmddhhhhhyyyssssoo+++///::::::-----------.......------------------.....----------------------:::::::////////+/+++++++osssssyyyhhhhdmdNNh:///:/:::/oos+/::/:+::::::-::::/:::-::::://::::--------
+ooooo++++ooso+oosso---::::/sddddmmmmdhhhhhyyyssssso+++///::::::-----------.......----------------------------------------------::::://////++++++++++++oossssssyhdddhmdmmm////::--/ooo+:---::o//::--:--::::--:/:::-++::::--------
+ooooo++++ooso+ooooo:::::::/sddddmmmmmhhhhhhhyssssso+++///::::::----------....---------------------------.-...------------------::::::::///+++/++++++++o+oossooyhhhhyddhhm+:::/:--sy//:/-::-:+//-://+:///:+//::-::-o+:://:::-:---
+++ooo++++ssssoooos+---:::::ohhdmmmdmdhhhhhyyyyyysso++////::::::------..----------------.----.....--------.--------...-----------:::::::::////////+++++oooosossyydddhhhmmmo:://://osooossoo:/:oo+/yyho+oo+oss//o++soy//os//------
++++o++++ossoo+++os+---::::-ohhhmmmdddhhdhhyyhhyysoo++/::::::::-------------------.----------................-------....-------------::::::::://////+++oo++sosssyhdddhhddms::///:::/ooooooooo+oooo::oss++/oss//soo/:/--:+++:-----
++++++++ooooo+o++os+---:::::sddhmmmdddhhhhhhhhhyysso++/::::::::------------------------------..................----......---------------::::::/:////+++++++sssssyhmmmdhddms/////:::+ooo+/::::////:--/::::-:::::ooo:::::-/::--:---
+++++++++o++ooooooo+--::::::sdddmddhddhhhhhhhhhyyys+//::::::::::---------------------------......................-.........-------------::::::::////+++++oosssssyhmmNmdddms///::::::-----::-:-::-::::-:--::--:-+++-::::::--------
o++++ooo++++++ooo+o+::::::::sddhdmmhddhhdhdddhhhhys+//:::::::::::------------------------...................................--------.----::::::///:://++ooosssssyhmmNmdddms:://:::::::::::::::::::::::-:::::::-///:::::::--:----:
++++++++++oo++oooooo---::::-+yydmddhmmhhhhdmmdhhhyo///:::::::-----------:--:::::::--............``````.........................------------:::::///+++oooooossssyyddNNmdddo::/:/:::::::::::-:-::-:--::-:::-:::::--:-::::-:::-:::-
++++++++++oo++oooooo::-:--::/hhddddhddhhyhmddhdhho+/:::::::-----::::----:::::::::-..---.........````....``....`..`...........---------...-://::///+ooooosssoossyyyddNNmmmd+:://:::-::::-::::::----::::::::::::::::::::::::::-----
++++++++++oo++oooooo---:--:::yyddhhhddhhhhmmmddyy+/:::::::::-::-::::--::::::://::-::---......--..................`..........------------::://+oooooooooosssssssyyymmNNmmmd+:://:::::::::::::::-----------:::::::::-:::::::::-----
ooo+++++++++++ooooo+---::::::yyddhhyddhhhhdmmmhss/::::::::::-::::::::::::::///:--------:::::-:::--:::-......................------:::://++ooosysssyysssssssyssssysddMNmmmd+:://:::::::::::::::::::----::::::::::::::::::::::-----
++++o++++ooo++oooooo::-:--:::sshdddhddyyddhddds++//::::/::::-::::///::::::/+++////+/////+ooosooooo++/:////:::--............----::/++++++ossyyyyysssssssooyyyhddyyyddMmmmmh//////:::::::::::::------------::::-::::::::::/:::-----
+++ooo++osoo+++++ooo::-:--:::sshdddhddyyhdhddhs++///:::::::::::::///:::://++++/+++++++++osssssssyysso++++//:::-..........------::/+++osssssoo++/:::::://+oooyddyyyddMmmmmh//////:::::::-:::------------------:::::::::://:::-----
oooooooooooo+++++ooo::-::::::ssddmmhdmyyhddhhyo++/////:::::::///:///////++o+++////+oooo+++++oooossssso//:::::--..........---:::::/++osssyso//:::----:://+++oshhdhymmMmmmmy////::::::::::::::-------------::::::::::::::::::------
oooo//+++/+++++ooooo::-::::::oommmmhdmhhhmdhhso+++////:::::::///::///+oooo+////::::::::--::://////++++::-.-------........---:::::/ooosoo+//:://:::/:::::///ooyyddsddNmmddy///::::::::::::::::::::::::::::::::::::::::::----------
+++++++++++++++++ooo::-::::::++dmddddmddymmhhy+//+////::::::://+ossso+++/:::::---::-::::-::.-:://////:::---..----..`.....--:://++ooo/++++/+++++/+++////////++oohhyddMNmhh+////:::::///://::::::::-:::::::::::://::://::/::::-----
++++++++++ooooooooos::-:::::-//hmddddmddydmhhso+++////:::::::///+ooo+////:--------.---.::::/+++::////:::---..----..`...----//oos+ooo++////o///+++++o++//+///+ooyyyhhNNmyy/://///////////////////:://///:://///://////++//:::-----
++++++++/////////+++::-:::::://yNddddmddyhmhhso++++///////:::////+///:::-----::---:/::-:::://++++/:::/::---..----......--::+ooo+ooooo+:::oyoosyoooosss+//////++yyyhhNNdss::///:://///////////////////+sooo+//:://////////::------
...............-----::-::::::::oNmmmdddddhdhhyo+++////:::::/++++++//::--:----://////sss+yhhso+++/+ooo////:---------.``..-::+ossso+++oyhhydhhhh/-oohhhhyo/////++yyyhhmNdoo::////://+/////////::////:://o:::/ss+/:///:///////:-----
..........--..--------:::::::::omNNdddhhdhdhhhs+++////:::://++++/:::::----:+++/::/yhddhhdssyo//oo+///+////:--------.....-::ooooos+:::yyysdNddmy`--oyhhyoo//++++sysyymmh++::////://////+/////:/++++//:/s++::++o/oyyyo://:/:::-----
----..........--------:::::::::+dmmdddhhmhhhhhs+++////://///+//:----::::::/oo/-//ydhddddmhhd+  .++++:////::::------.....-::/soo/o:``:hhhshMyyhy::::+hhdy+++++++yysyymmh++::///::///+ssyo////:+sssoss+:o++/:++s+yoooy:////:::----:
...--....---.-----:-----:::::::+hNNdhmdddddhhhyoo///::::////:::::----:::::o++-oyy:+dddNshmmho   .-///:--::::::------....-::/+oo+-```.shhydmhhho-///+ssdho++++oosssssmmy++/:////://++ssyo+//::/oo-+hh+:ooo/+yy++ossso/:::://------
----.------------------:--:::::/smmNmhhhdmdddhyoo+////::::::----::::::::/:-++ho..`.oyyyhyyyo`  .-:///+--...--::::----------:/oooo+//:-::+ss++:-:+++ossyysoo++oossoooddo:::///:/:::/syyo/y++oosssyh//://::/+//oo+oosso++/://------
.---..----..-----------:::--:+++oyyhhhhhdmddddyoo+////:::::::---::::::---:+ooo/:::`.oosssoo. ..::/++:-....-----::----------:/oo+/::::-..-/////osoo++oossooo++ooooooohms///://:/-//+:ooysyss/+y++h+::/:-ooy+oosssoo+/:::////:-----
.----.----..-----------:::--/++////osyhhdmdmmdyoo+//:::::::::----:::::::--/+++/++/:-::::---::///:://-....-:----::--......---/ooo/-------::/+++ss++/+ooooo++++ooooo++hd+--:://:::::////oh/yy::s//o///://++o:::::::::////////:-----
.---....-...::--------::--:////:::::/+yydmmmmdyoo++/:::::::::-----::::::-..::+/::/-/////:--+///:::::-----------::--......---/oooo////:--:::::://///++++++++++++ooooohh+::/://::/:::+++/o/sso:s+++/:::/+::::////:::///::////:-----
....--:::-..::.-----------:/+++++//+:.--/ydmmdyoo/////:::::----------.....------------..`--....------.--------:::-----...---:++oo////::::::::::::://///++//////+ooooyysss+-:::/::::////o+++o:y::s/:://////+:://::://///////:-----
-...-/+++-../:------------://::-/++++:--./dmmhhoo/////::::------------....--------------....-----.....-----------:----...---:++oo+///-:::::::::::://///+///////+ooooy+::://:::/::://::/s+++s:o//oo::/+:::os//:/+:://:////++------
:...::..-:../:------------:/:--.///:::--.:ymmhhoo/////:::::----------..........................-......-----------:-----.----:++oo+///:-------:--:::::://:///////oosss+:///:::::::::///+y:ooo-s++:s//+y:::os////:///:o++//++:-----
:...::..-:../:------------:/:--.///--///::smmdhoo+////:::::-----.----...................................---------------------//oo+//::------------:::::::::::///+osso:-///://::::::///+y:oo+:oss-soo+y:::oy::/::++/ss--////:-----
/...-/:::-../:----:--------:-..-://:.::::/ohhmhoo+////::::::----.---.................................-------------::----...--//+o+//:::::-----------::::::::////+ossyssoo:://::::://///s/+++/:ss+:ss/oy///o//shoss+sdooso//:-----
:-----..:/..:-----:--------::--.-//:-...-++yydhsso////:::::::-----..........................```......------------:::----...--::+++//:-----:::-------::::::::////+oyyy/://////:::::////:o/oo+::sso:oo/ymoooo+++ho::+dy--ys//:-----
:---..../:..---------------::::.-//:-.``:+/oohdyyo////:::::::-----....................```...```......---..--------:-----...--::/+o++::-----:::-:::-::::::::::///+oyyy+////:::/:::::///:+o++o::ss+/ss-yhooysooyhhssyy///oo//:-----
:--.----:-....-------------::::-://-..``/:-//ydyyo////:::://:::---..................```````.````..........---------------..--:::/o++:-----.---:::::::::-:--:://++ossyo/:://:::/::::///:+s//s:-ss+/yy-y+//yoooyys+++:///:/:::-----
/::...--/::::::::://::-----::::-:::.``..-..::ohyys//////:://:::--................````````````............------::-----------::://+++/------..---::::::::::::://+oyhhhsossso//:/::://////+oossossys//:::::////++ooooo+++o///:-----
....-...-...........-------::::-:::.``..-`.::ohyyo+/////:://:::---........```..``````````................-----:::------------:://++++:-----...----::::::://////+oyhhsosyy+::://::://////+ooso+//::::://ooooooso+oooshdds+//::----
.----.....-------------------::-:::...---`-//+yss++/////////:::---.......```````````````..................---::::-------:---...:/++++:-----...----::::::://////+osyyy+////:////::://////:::://::::::/:::://++//+++oo++++://:--..-
-........-...------------------::::......`-::/yssoo/////////:::-----.....```````````````..................-::::--------:---.```-:/+++/::.....-------::::////++++osyyy/://////:/::://///////::/:::/::///++++ooo+/////::::://:-----
-:::..--.--------------------::-///.-.....---/sssoo+////////::::--.............```.```.`..............``..-:::----------.``..---.-:::+//-.`....--------:://+++++oyyys+///////:/::://////////:://+soo+/////+++/+++++++++////:----.
:///..--..---.---------------::-///------..--:ssssso////////::::--...............`..````..........``````.-::::---.-----..``......----+//:.`.....-------::::/+++oosyy++/////////:::///////:://:::::::::/:::/::://::://///:///-----
:--...--...........------------:///:--::-.`../syyoss++//////::::----..........```.`...............````...-:::--..---..-.`..`...`..--:+++:..```....-----::::/+++ossss:++/////////:::+++/+////:///://///::://::///////////+///:.---
----.--------..--.--------------:///-...:--..-oyysoo///////:::::----...........``.`..............````.``.------...------.```......::/+oo/.........------:::/+++ooyss/++//////+/////+++//////:///://////////::://///////:/::::----
..........::-..--..-------------::::+/---::::/osssoo++/////////:-----.............``............`````.....-::-.::/+o++:::......---//++//:..---........---:::++++ohss/+++++////////:::::---------..---.....---........--.....-:::-
....--------.......-------------:::://::::-..:osssoo++/////////::-----..........................`````.``.`.::-.--:+sss///::------/oo++//--.-----......---:::/+++oyss+++////////:::::::-----------...-----------------::::::-.---.
.....---......-....-------------::::::::::-..-:++soo++++////////:-------........................`````.``..`--::--`-///::+++-::::/osso+//---..-----....---:::/+++oyss++++++o++:/:::/++++//////////////++++++++++++++ooooooss+-----
----------..--....-.....--------:::::///:-:....--oo+++++++++////::-------...................`....`````.......-://:-.....-::/++++oo++o+++/:----------....---:///++yddhhhyyyhss:/:::+soo++o++++/++syoo++++++oss++++++++++o+oo/-----
.......................-...--------:--//:--------+oo++++++++////::::------.--..............`...`````.............:::-----//////+++ooso+++/:-------::--..---:///+oshhhhyyyyhss/:/::/y+++++//+++oo++oo+o+++syss+++++++/+++++++-----
..........................--.--.------::/-...-...:oo++++++++////::::----------..............````````.............-::::::::://///+++++ooo++/:::----::::--.--:://+oshhhhyyyyhyy/:/::/y++oosssso+///+sss/+sso+++/++++++++++++++-----
..........................--.--.....--..::-...-..:oo+++++++//////::::---------..............``````................-:::/:::://///+++++o++++///::::::::::-.---://+oshhhhyyyyyss/:/::/yoossyyyyyysso///y++yyo++++osoo+++//+++++-----
.....---------------.........::o/++//+++o+///:-...+o++++++////////:::----------.............````.........-----...---..-----////::::://+++//////::::::://:---://osshhyyyyyyyss///::/sssssyyyoooooyhoo+ss+++shhdhyhhyss+++++++-----
----------------------.......::+/ooo//+++/+oo+/---+ooo++++////////::::::---------...---......```.........------..----------:///:--::://////////::::::://+---://osshhyyyyyyyss///::/syysoyssoso++oyhhoyyoohdddysossssyoo+++++-----
----------------------.......--/+ooo+////+ossso+++oooo++////////////::::::-------..----......``.........---------.------...-///-----::////////:/::::::/++::--//osshhyyyyyyyss+//:::oyyyohoooyyss+ohhydhyyhhsssyooosyhoo++oo+-----
----------------------.........oo//++////osooooooysooo++////////////::::::-------..---............---.---.--------------.---:::------////////:-/::::///+o::--::osshhyyyyyyyss+:/:::+hhyshoooosss++++yhddds+++shsoosyhoo++ooo-----
----:-..-----..-------.......--///////////+ooso++oysoo++++//://///////:::::--------..............--------------.............-::-..--:////::////:::::///+o++--//osyhhyyyyyyyyy+:::::/yysyshhhsooo++//+ysyyoo//+/syyyy+//o+++o:.---
-..:+////-::::///:----......`--///////+++++++oo+++ssoo++++/:////:///////:/:--------.............-----------......-.........------://+++++/////:///::///+o++--//osyhhyyyyyyyyy+:::::/sssyssshhhyy++oo+ysyy++oooysyyyooooo+++s:.---
::::::::::--:/+//:-.--......`--//////////+///+++++syss+/++/:///////////////::----:--...........-------..--............-::::////://++ooooooo++//:////::/+o++.-//ssyhhyyyyyyyyy+:::::/ssosyssyhsssyyoo+yossosssyshyy+++//++++s:.---
:::-.:---::::::::::---......`..//:::://///+++++++++osso//////::::://///////::-------........------...............`..--:////////++ooooooossyyyss///////:/o++.-++syyyyyyyyyyyyy+::::-/yyo+ooosyyhhmdoo+yoyyyyhhddhssyyooo++++s:.---
://-.---.-::---:::-.--......`..::///+ooooo+///++++ooooo++++/::::::::://////:::------...----------.....--.....-:::/++oooooooooooo++++++++++ooosshyyo/::/+s//./oosyhyyyyyyyyyyy+-::::/ssooyyyyhsoo++//+ysssy++++shyyyy+yys+++s/.---
------------.---------......`..:/+++oo++/////++//+ss+++o+++//////:::::////::::--------------...-..........-::/osssoo+++++++/+++/////++++ooo++++osss+///+o::./oosyhyyyyyyyyyyy+-::::/ssoyy++yy+yyho+++yyyyy++++ysssyysooyo++s/.---
.---------::----------.........::::::/oo:++///+///ss++oo//+//////::::://:////:::::---------.---..........:+ssysooo++/////////////////+////+++++///+/::+o/..:ossyhyyyyyyyyyyyyo-/::-/oosy+hhy+hooos++oyooohhoooysssh+h++sy++o+...-
:::::::::://----------.........::::::/oo/oo++//+++oyooosoo+//////::::::::////:::::----..----:--........./osssoooo+//::::::::::://///:////++++/////++++o+---:osshhyyyyyyyyyyyyo-:::-/oosyhyyoss//ohyy/yhyyhdmmysssssodooyy++o+----
---------.::---..-----........./::::::+++o+//////+oo+++sssoo+////::::::::::::::::::---------....----:///:----:---:::::::////::::::::::::://:::-://+ooo/--::oyhhhhyyyyyyyyyyyyo::::-:oosyymmh+ooo/+yysshss+y++yddhhhysyyso++o/.--.
:::://:::-------------.........::::++/++/+///////++o++ssooo++///:::::://:://///:::-------------.-.........----:::::::::::::::-------::::::/::::://+o++:-:++syhhhyyyyyyyyyyyyyo::::-:ooyyshhdhoooshssodo//o/oos+osssysyyo+++o/----
-...-----------..-----.........::::/+///:/+++//+++/o++sssss++++/:::::://:://///::::--------------....`...-----......---------..-----:----::::--:++oo+++/:ooyyhhhyyyyyyyyyyyyyo::::::++soyyyhyhhhs+//ds:ooo/++++ooo+++oo++++o+----
---.-----------...----.........::--:::::::///://///+//osssyso+++/////::::://///:::::::-----------.---..................----....-::--------:---:/++oooo+/oyyhyyyyyyyyyyyyyysyyo:::::-//o+yyyyhdhhosdds+ooo/++++oo//oso++++++o+-..-
-..-.-::.:---.--------.........:/:::/:::::::://////+//++++sysoo+++////::/:///::///::::------------.............```..........---::---.-----:::/+///os+++yhyyhyyyyyyyyyyyyysyyys::::--++o++++++oooho++o+y++o+yyoyhsssssoo++++o+----
-..-.-::.----.----..--.........-/:::////-++//+o+++/+++++++osyssooo++////+///////////::--------------...........``..........----::--------::////://ss++syhyyyyyyyyyyyyyyyyyyyys-:::--++o++oo++hoooyssyyhssyshhyysooshy++o+++++----
:::/::::-:---..--...--.........::--/+///++o++osss+//++++ooooyyysoooo+/+++/////////+/:::::::---------.-.....................-------------:////::://yssshhhhhhhhhdhyyyyysssssyys:-::--//o++oo/odooodoohhh++syyyyhyssossyyso++oo:---
------::-----..---.............::::++-//s:+++oyoo++/++++oo++oyyys+ooo++++/////////+///:////:--------.-..................------------::::://::::/++ssyydhdhhhhdddhyyyyysyysyyys:-::-.//soo+++yhooydyyhys++yysssssooooossoooooo....
/::::::::/---..-------.........-:--:/:--:/+///+++///++++ooo+/++yhysssooo++//////////++//////::::--..-----------------------------::::-----:::://ooyhddhhdhhyyyyhhhhhhhyyyyyyys:---:-:://:::/::::::::://::-:::://:::::////////----
.--.----:/---.--------.........::::+o/::://:::////////+oooo++++oyhyysssso+/////::/:/+++//////:::------------------------.....---::-------::////+sshdhhhyyhhhhyyyyyyyyyssssssso:----.---.---------------::-------..----------:----
-------------.---------........-osso+//////:::/:://///+ooo++++++oyyyyyssss+//+////:/+++++//////::----------------------......--::--------:/++//ossdyssyssoooooo++////////::::-:-------:-:-------------.--.---.-------------.-.---
----------------------.........-///-:::::/::::////+/++o+ooo++///+ossyyyyhysoo+//////////////:///:-------------------.........---------:::////osyyyyoooooo+++//////////:::::::::----------------------..----------------.-..------
-----------------------........-:::-::::-:://////++oooooooo++///++oossssyyysso+++++/:://////://:::::--..---..................---------/////++syhyysssssoooo++///////:::::::::--------------------.----------------------------...
-----------------------........-::::::::-::///++++ooooooooo++///++++sssssyyhhysoo++/////+++////:------..--..........----.....--------///+++ssyyhyysssssooooo++++//::::::::-----:----..------......----.........---...--....-.----
----------------------.......``.----------::://////////+ooo++/////++osssosyhhhysso+///+//++////:::::-------....--.------.....--------+++++ossyhyyyssssssooooo++++////::::-------..-------------------------::--::::--:::::::.----
......................................--.----::::::////+ss+++///////++ooooossyyhhhysssoo+++///////::::----------------......-----:///++++oshhddyyyyysssysoooooooo++++////::::---../sssssssssssssssssssssssssssssssssssssssss:----
...................................-..-------::::///++/oss+++////////+oooooooosyyhhyyysoooo+++++//::::---:::::-----:::-----.-----://+oooooydddhysssysssssooooooooo+++++////:::--../sssyyysssssssssssssssssssssyhssosssssssss-----
..........................`......----.----:::::::///::/soo+++/////////++o++ooosssyhhhhyyssso+oo+/////::::-::::::::::::::----:::::/++osooohdhhhdmddddyysssssssssooo+++++++//::---..:syydhhhhysoyysyssoyyssysoohhhhhsossssssss:.---
....................``.......---------:::::::://///+oosoooo++///////////+++ooosssssyyyhhyssssooo++////++/::::::::::::::::::-:///:/oososshddhhhdNNNNNddhysyyyyssoooooo++++////:--..:syyhssyyhysyyhmyyshyooyssshsshhysssssssss:.---
----:-----::--:::--:::-.--.-.---:::--::::-:::////sdNddo+ooo++++/::////////////+ooossssssyhhdhyysoo++oo+++/////::::::////::://///osssshdddhhhhhhmNNmmNNNmdyyssssysyhhsoo++++//:::--/yyyhsssssyyddyyhhyyyyyyysshyossyyssssssss:.---
++++++////++++++++++++:.--.----:::::::::-/syyhyyydmhoo+oooo+//////::://////////++o+oooossssyhhhyysssoo+++++++/////++++//////+ooosyhhddddhhyyyhhdNNNmmmmmmmmhyyysosyysoooo++++//:--/yyyhssoosyhddhhhhdssyyyysshyossysssssssss:.---
////////////////////oo:...---::-:::/:://+hmNNNmmmmhs++oo++++////////:://:://///++++oooooooosyhhhhhyyyysssoo++++++++ooo+++ooosyyyhdddmhhhyyyyyhhhddmNmmmmdNNmmddyooooooo++++++///::/yyyhyyyyyhhhho+ssmyyhhyyssdhyhhhsssssssss:.---
/////////+/////////+oo:...---::::::--/yymdmddhddddho+++++++++///////////::::://///+++++++++oosssyhhhhhyyyyyyyssssoossssssyyhhhhhdmddhyyyyyyyyyhhyydNmmmmdmmNNmmdhsooooooo+++++//::+yyydhhdddhssssysshhhyyyyoohyyyyyossssssss:.---
+////++++o+++//+++++oo/.---::::::++yddhhhmdddddddds+++++oo+++/////////:://::://::://////////////++++++ooossssosssssssssssssyyyyhhhyyyssssssyyyhdhhydNNmmmmmmmmmmmmmmhs+ooooooo++//+yhhyyshhssysssyssssssssssssosssysssssssss/.---
///+++++++///+++++++oo/.:::----:sddmddddmmdddddddds+++/++++++/////////::/:::::::::::///////:////////////+++++/++++++ooooooossyyyyyyysssssssyyyhdhhydmmmmmmmmmmmmmmmmmhsooooooooo//oyyyyyyyyyyyyysssssyssssssssssssssssssssss/.---
ooooo+///+//+++++++ooo+-::--/ssddddddddddmdddddddds/////++++//////////::/::::::::::::://///://////////:::::////////++++++ooosyyyyssssssssssyyyyhhhydmmmmmmmmmmmmmmmmNmhssoooo+++//ohyyyyhhhyyyyyysssyyssssssssssssssssssssss/.---
+++/////+o++++++++ooss+.--:+ymmdhhhddhhhdmddddddddy/:://++++/////////::://:::::::::://///::::::://////:::://////////////+ooosyyyyssssssssssyyyyhyyydmmmmmmmmmmmmmmmmNNmddhhyysso++oyyyhddmmhyyssyyyyssyyyssyysssyyysssssssss/---:
///++++++++++oooooooooooddmmdhhmmddhhdddhdddddddddh+:::///+/+////////::::/::::::::::::///////::::::::::::::--:::::::::/++++ossssssssoooosssyyyyhyyydmmmmmmmmmmmmmmmmmmmmmNmmmNmmNNNNmmmhyddhyyyyyyyyyyyyyyyyyyhdyyssyyyyyyyy+-:::
+oooosssss++ooooooossshmNNdhdmmhhddmdhhhddddddddddhs:::///+/////////:::::/:::::::::::::////////:::::::::::----::::::::/+ooosssssssssooooossyyyyhyysdmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmNmmNNmhyhhhyhhhhyhhhhyyhddddhyyyyyyyyy+::::
ossyyysso+oooooooosyddmdddhmmddddddhhdhhhddddddddddy:::///+/////////:::::/::::/:::::::://////////:::----------------::/++++osssssoooooooossyyyyhsssdmmmmmmmmmmmmmmmmmmmmmmmNNmmmmmNmmmNmmmmmNdmmNhddhhdmmdhhhNdhdddyyhhyyyyy+::::
ssssoooosossssossyhmmmmmmmddddddddddddhhhhdddddddddhss-://///////:::/:::/:::::::::::::::::::////::::::----:::-------::/+ooosooossooooooossyyyysyyyohmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmdddddyyymdddmddddhyyyyyyhhy+-:::
ooosssyyyyyyyyhddmmdddddddhhdddhhhhhhhhhhhhddddddddhdds:::/+/////:////:::::::::::::::::::///////////:::::-----------::/sy+++osssoooooooosssssssysssdddmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmNmmdmdddddNNhyyhhhdhyyyyyyy+-::/
yhhhyyyyyyhhddmmmddddddddddddddddddhhhhhhhhhhdddddddddyo--:+/////://////:::::::::/::::::::::/::://////::::-------..-::oysoo+ooooooooo+oosssssssyooymmmdmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmNmmmmmmmmmNmmmNmmmmdmmdhhddmNmhhyhhhy+:///
hyyyyhddddmmmdddddddddddddddddddddddhhhhhhhhhdddddddhhdh//:/+///:://////::::::::::::::::::://::::///////::----------//ss++++ooo++ooo++oossssssssooymmmdmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmNmmmmmmmmmmmmmmmmmNmmmmmNNNdhhyyyhyyyysoo:
syyhdmmmNmmmdddddmmmmmmmmmddhhhhddddhhhhhhhhhhdddddddddhyy/:+///::::::///:::::::::::::--::://:::::///////::--------:ooys/oooo+++++++++oosssssssssshdmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmNmmmmmmmmmmmmmmNmmmmNmmh
mddhdddddddddmmmmmmmddddddhhdddhddddhhhhhhhhhyhdddddddddhhy+///:::::::::::-:::::::-::::--::::::::::::::://:::----::ohho:///+++++++++++oosssooossyyddmmmdmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmNmmNNmmmN
dmmmmdddddmmmmmdddddhhhhhhhddddhhdddhhhhhhhhhhhhhdddddddhhhy///:::::::::::---:::::--::::-::::::::::::::://///:----+sss+::///++++++++++sssosoooooddmdmmmdmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
dddddddddmmmmdddddddhhhhhhhddddhhddddhhhhhhhhhyhhdddddddddhhs::/:-::--:::::--::::::-:::----:::::::::::::://::::::/sy++://:://+++/++++osssooooo+sddmdmmmdmmmmdddmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
ddddmmddddddddhhhhhhhhhhhhdddddhhhhdddhhhhhhhhhhhhhmdddddddhhyy:-:---:---::::-::::-------------::-----::::/+++ooos+/:::::////////++++osso+soo+sdddddmmmmmmmmdmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
dmmmmmmmddddddhhhhhhhhhhdddddddhhhhdddhhhhhhhhhhhhydmmddddddhhhy:.:::-::------::::-------------::::::----:://++++//:--::/::/::://+++oosso+o+++hddddmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmdddddddddddhhhhhhhhhhddddhhhhhhhhddhhhhhhhhhhhhyhddmddddddhhdo-..----------:-------------:---:::::----::::////::::::::--:::::/+++osooo+///ydddddmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mdddddddddddddhddddhhhhhddddhhhhhhhhddhhhhhhhhhhhhhyhhdmdddddddhho---:----------------------------------:::::::::::::::----:::://+++os+++/:oodddddmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmNmNNN
dddddddddhhhhhhhhhhhhhhhdddhhhhhhhhhhddddhhhhhhhhhhhyyhdmmdddddhhdyy+-..---::------------------------:----:::::--:---------://///+oooo//:+ydddddddmmmmmmmmmmmddmmmmmmmmmmmmmmmdmNNmmNNmmNmmNmmNNmmmmmmmmmmmmmmmmmmmmmmmmmmmmmNNNN
dddddddddhhhhhhhhhhhhhhdddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhddddddddhhdddo...--..-:----------------------:----:::::::----------::::/++++o///+yddddddmmmmmmmmmmmmmmmmmmmmmmmNNNmmmmNmmmmmmmmNmNNNNmmmNNNNmmNNNmmmmmmmmmmmmNNNNNNmmmmmm
ddddddhhhhhhhhhhhhhhhhddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdddhhddhhhdyss..----.------------------:::----:::::::-------------:////ooo+://sdmhhhmdmmmmmmmmmmmmmmmmmdmmmmmNNNmmmmNmNNNNNNmmNNNdmmmmNmmmNmmmmmNmmmmmmmmmmmmNNNNmmmmmm
dddhhhhhhhhhhhdddhhhhhhhddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyhddddhhdddhhddo:...:----------.....-----::--::::::::--------------:///+o++/+sshddddddmmmmmmmmmmmmmmmmmmmmmmNNmmmmNNmddNNmmNNNNmNNmNmmmmmmmNNmmmNNmmNNmmmNmmmmNmmmmmmmmN
hhhhhhhhhhhhhhhhhhhhdddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyhddddddhhhhhhhdhoo:...-.----.....------::::---::::::::--....----:://+//oohdddmddmmmmmmmmmmmmmmmmmmmmmmmmmmmmNNNNNNNy+::::::-/hyyyhydddNmmNNmmmNNmmmmmmmmmmmmNNNNmmmmmm
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhmmdhhhhhhddhhhhhy+--...---.....--------:::::::::::----....----://///shhddddddmmmmmmmmmmmmmmmmmmmmmNddmmNNNmmNNmmy::::--////+ooss/++sNNNNmmmmNNNNNmmmmNNmmmNmmmmmmmmN
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhhhhyyydddhhhhhhhddhhhhoo-..--.....-....-----:::::-::-------....-:::://+yddddddddmmmmmmmmmmmmmmmmmmdNmmNydNNmNmhhhdoo...--.-::::://:o/::/oddsyNNNhyddNNmNNNNmmmmmmmmmNNNN
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhddddhhhhdhhhhhhhhh/-..`....------:::/:++o+:..-:---..---.----/sshdddddmmmmmmmmmmmmmmmmmmmmmmmmNNhoyss/+o:::/---:-..:---:::--.-///:.::-:hhh--oohNNNNNmmNNmNmmmNNddd
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhddhhhhhhhhhhhhhhhhhhyyhhhddddhhhddhhhhhhdddy/.```---:-:++o/:::/+++:---:-...-:oyyhddddddddmdmmmmmmmmmmmmmmmmmmmNNNmoo-:---/:+//-://:::::::::--:////:------://::/soo::+++oyhmmmNNNdh/::/
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhddddhhhhdhhhhhhhhhdy++:-:::-:+++///::///:---///++sydddddddddmmmdmmmmmmmmmmmmmmmmmmmmddNs--:/://:.:ooo+++:.://:://::/:::/:::-:::/:/oo+/::-.:///oooodNyy++/+++
hhhhhhhhhhhhhhdddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhhyyhhdddhhhhhhhhhhhhhhhhhhdyyyso+ooo+++oosoooossyyyhhdddhhdddddmmmmdmmmmmmmmmmmmmmmmmdmmNNm:----/hhss+::odyy:.:++:://:::---////:::::-:+++/:://:////+::os////:::/
hhhhhhhhhhhhhddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdddhhhhhhhhhhhhhhhhhhhhhhhhddddhhhhhhhddhhhhhhhhhhhhhhddyyhdhhhhddddddhhhhddddddddddmmmmmmmmmmmmmmmmmmmmmmNmmy://:-oyydh+--:+oo+:soo-----::---::::::::-:/:::+//+:-///-://:+::+/:::+
ddddddddddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhdddddddddddddmmmmmmmmddmmmmmmNNmdmmNmh++./---.ohhso+++::++-odoo..-----::::::::://:--::/:::://--::://:-:::/+oo+
dddddddddddddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdhhhhhhhhhhhhhhhhhhhhhyyhhhhdddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhddhddddhhdddddmmmmdNNdmmmdmmmmmmmNNmdNNNh:..--::-:o//+osyyo///.+y//----::-///:::::/++::::::::::+/::++:--/+++://+++
dddddhhhhhddddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyyyyhhhhddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhddddddmmdmmmmmmddmdddhmmmmmmmmmNNNNyo-::-----//..-::++so++.+y++-:--:/:::::///:://:-://+/::::://o+::://:://////
dddddddddddddddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdddddddmmmdmddhdhssmmNNNNdmmNNNNNmy//...---:--.+/::::---:/oosss::.---://::-::::::::/::///:::/--//+//++//:::/+//+
hdddddddddddddddddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyyhhhhhhhhhhhhdddddddddddddddddddddddhhddmmds+..:///o:sdds./--..::-/:---.---+ooo/:-:::---+s/..-///:-:::://////::/:://:-::://:::/+//+-::++:::/
ddddddddddddddddddddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhdddmmdds//:::-..---::.----::---::--:-::-:ossyyy++-.::oo/--::----:--://///:::::-::/:::-:://::////////++oo+
ddddddddddddddddddddddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyyyyyyyyyhhhhyyyyyyyyhhhhhhhhhhhhhhhdddhdhh+/:::----.-.---:----...-/-:::-::::-../+s++-:++so::::...-::::::///::::::---:::::::::::://-:::-:oss+
hhhhhhddddddddddddddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhhhhhhyyyyhhhhhhhyyyhhhhhhhhhddddhddddmdss//----.//:::--:-----://-::::::----::::-:///+////-::-...-:://:::::////:::::::::::::://://--..:-++++
hhhhhhhhhhhhhdddddddddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyyhhhhyyhhhhyyyyhhhhhhhhhhhhhhhhhhhhhddddddddddmh++:::--------:---::----:://+::----.::--::::::::::-://::::::-:::/+//::///:://++//-:/:://:::-:ssy/-::/
hhhhhhhhhhhhhhhhhhhhddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhyyyyyyyyyyhhhhhhhhhhhhhhhhhhhhhhhddddddddd+::/:----:-----::--.--::+++::///::::/+::-:---:///:::--------:::/oo//::::/::::/:--:/:::/:://-oddy:-///
hhhhhhhhhhhhhhhhhhhhdddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyyyyyyyyyyyyyhhhhhhhhhhhhhhhhhhhhhhhddddddddy+ooo-.::::--:--::------/oo+::::////::///:/::::/::-:---:::://///+o+////::://:::---::::::////-/oo+--///
yyyyyyyyyyhhhhhhhhhddddddddddddhhhhhhhdddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdhddddddmmo:----::::---::-::::-//+/:::/:--///////////://:---:::++ss++::://++/+++////:-:://--://:::::--/-..:::///
yyyyyyyyyyyyhhhhhhhhddddddddddddhhhhhhdddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhddddmmdd/-::/:.::o/--::---::::://--:++..::::/+::://::::::::/://+o++++///++++++:::/::////--++::://---:---:::::/
yyyhhhyyyyyyyyhhhhhhhhhhhhhddddddhhhhhhhhddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyyyyyhhhyyyyhhhhhhhhhhhhhhhddddddddmdyy:::::-:////..-/:::--/--/soo/////::--::-:::::--::::-::///---/o++++++++/----::::://///-::yo-::--::::/+++
hhhhhhhhhyhhhhhhhhhhhhhhhhhhddddddddddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyyyhhhhyyyyhyhhhhhhhhhhhdddddddddddd++::::-:/--.:--:::-----:::oyy/-/+++:::-::::-:-:::/:::-/::..---+o++oo+sso-:::::::::::/::++hy/--::::://///
hhhhhhhhyyhhhhhyyyyyyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyyhhyyyyyyyyyyyyyyyyyhhhhhhhhddddddddddds++s/:::-:::-----:---::+:::+hhsohhhy/sso-:++/.----:::.:---..--.-:+++:/++/:::/:-::/+///:////++///////////:
hhhhhhhhhhhhhhyyyyyyyyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhyyyyyyyyyyyyyhhhhhhhddddddddddmsooo:--:------:::----:::--sysssyoyydsoooys---::::::..-:.....-----//+/:---:--::::://++///++ooo//+///://///
hhhhhhhhhhyyyyyyyyyyyyyyyyhhhhhhhhhhhhhhhhhhhyhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyyyyyyyyyyyhhhhhhhdddddddddddsss+-----:----//+:---:-:ssdooos++oohs//ymy----://----o:.--:------::++:--+o//:-::://////:::///++s+//::///:
hhhhhhhhhhyyyyhhhhhhyyyyyyyhyyyyyyyhhhhhhhhhhyyhhyyhhhyhhhhhhhhhhyyyyhhhhhhhhhhhhhhhhhhhhyyyyyyyyyyyyyhhhhhdddddddddmmds+yy+----:::::-//+:.--:-oyyyo++:.:--/yyymms++-.:--.-++s:.:::---.-:::+o/--/+/////::::////:///+oyyyo:::/+//:
yyyyyhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhhhhhhhhhyyhhhyhyyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhyyyyyyhhhhhhhddddddddddso++/::::----:/:::/:--:/syy+/--oo:--osoohys//+:-::+s::-........-::::-:///-://++:::/+++/:+//:/+//-::://////
yyyyyhhhhhhhhhhhhhhhhhhhhhyhhhhhhyyyyyhhhhyyyyhyyyyhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhhhyyyyyyyyyyyhhhhhhhhddddddddmyo++:/::-::::----://///-:ssss//.-:///:yym+:::++-::++::--.--..--:::///::::.://+++///+---//::://::----:::///

Although a clean-shaven “Bright Eyes” in the movie Planet of the Apes somehow looked less intelligent to Cornelius, I don’t think ANYTHING, not even being enshrined in ASCII, could make Chris look any less mega-awesome-hip.

*Original photo by Sian Kennedy, from Chris’ wired.com article “Diary of a Self-Help Dropout: Flirting With the 4-Hour Workweek.”

Advertisements

Senor Pablo El Rey de Shredo Returns to KC

7 Jul
My guitar hero, Paul Gilbert, will be returning to the Kansas City area July 17th and 18th for two invite-only guitar clinics at Guitar Center. He will be at the Independence, MO store on the 17th and the Overland Park, KS store on the 18th.

The day, nay, the very MINUTE I saw these clinics listed on Paul’s website, I called both stores to find out the details. Neither store had a freakin’ clue how the admission was going to work, if cameras/recorders were allowed, would there be meet-and-greet afterwards, etc. (by the way, how does that even happen Guitar Center?) Anyway, both stores said I would be placed on their list of people to contact once they had more information about the clinics. So far, I’ve heard zilch-o back from either store. TFN, Guitar Center!

I’ve since found out that invitations were sent to “randomly selected” customers who had an email address and/or phone number listed in Guitar Center’s database (NERD HYPOTHESIS: SELECT EmailAddress FROM Customers WHERE AmountSpent >= 1000.00). They said if I haven’t received an invitation by now, well, then I probably won’t be getting one. Ever. Not even if I had a sackful of money and unwrapped a warehouse-full of Wonka bars would I find one.

BUT WAIT!

I’ve been placed on the alternate list! You know, the list of people to call in case one of those randomly selected customers happens to die, swallow an entire bottle of dumbass pills the day before, or otherwise cancel. Of course this means I still have no real chance at getting in: that was just supposed to make me feel hopeful for a minute or two. I realized I had no chance way before the Overland Park store guy reiterated, oh I don’t know, probably 18 times on the phone that “I can’t promise anything” and “We just gotta make sure people know this doesn’t guarantee they will get in”. Really? Because for a minute there, I thought being on the alternate list was virtually the same as collecting Paul’s tossed picks and sweat beads from the front row, you jerk.

So since I’m pretty sure I won’t get to see him in person, I’ve done the next best thing. I created a virtual, ASCII Paul instead (thank you glassgiant.com and whoever took this picture*). I call it “El Shredador Mas Fina”. Feast thine eyes upon my nerd shine to guitar awesomeness:

;:,.```                                                                      ```.,...,,,,,,,,,....````........,,::;''''''''''''''''''''''+++++++++++++++++++#####################################
;:,.```                                                                      ```.,,,,,,,,:::,,,...........,,,,::;;'++++++++';,.`     `.,;'+++++++++++++++++####################################@@
:,..```                                                                      ``..,,,,,,:::::::,,,,,,,,,,,::::;;''+++++++++;.`            `:'++++++++++++++#################################@@@@@@
:,.````                                                                     ```.,,,,:::::;;;;;::::::::;;;'''+++++++++++++'`                .;++++++++++++###############################@#@@@@@@@
,..````                                                                    ```..,::::::;;;'''';;;;'''++++++++++#########+.                  `;+++++++++##############################@#@#@@@#@@@@
,..````                                                                   ```..,:;;;;;;'''++++++++++++##################+`                   .+++++++#############################@#@@@#@#@@#@@@@
,..````                                   ``                           ````..,:;;''''''+++++++++########################+,                   `'+++################################@######@####@#@
..````                                   ````                      ``````..,,:;'+++++++++###############################+'                   `;+###########################################@#####
..`````                                 ``````              ````````...,::;''++++++#######################################.                  `'+#################################################
..`````                                ```..````   ``````````....,::;''++++################################################.                 :###################################################
..`````                               ```....`````````....,,::;''++++#+#####################################################;               ;####################################################
..``````                            ```..,:,.......,,,:;;'++++++##############################################################+:.`      `.;########+++++++++++++++++++###########################
..````````                       `````.,:;;;::::;;''+++++++#########################################################################+###########+++++++++++++++++++++++++++######################
...``````````              ````````..,,;'++++++++++#########################################################################################+++++++++''''''''''''''++++++++++++##################
....`````````````````````````....,,:;'+++++++#############################################################################################+++++++''''''''''''''''''''''+++++++++++###############
.......``````````````......,,:;;'++++++#################################################################################################+++++++''''';;;;;;;;;;;;;;'''''''+++++++++++#############
,....................,,::;''++++++################################################################@############@######################++++++''''';;;;;;;;;;;;;;;;;;;'''''''++++++++++++##########
,,,,,,,,,,,,,,,,::;;''+++++++######################################################@########@#####@###@#############################++++++'''';;;;;;::::::::::::;;;;;;''''''+++++++++++++########
:::::::::::;;'''++++++++############################################################@##@######@#######@############################+++++'''';;;;::::::::::::::::::;;;;;;''''''++++++++++++++#####
;;;;;;'''''+++++++++##############################################################@#############@#################################+++++'''';;:::::,,,,,,,,,,,::::::;;;;;''''''''++++++++++++++###
''''''+++++++++++###############################################################################################################++++++''';;:::,,,,,,,,,,,,,,,,,,::::;;;;;;'''''''++++++++++++++#+
++++++++++++++#+###############################################################################################################++++++''';;::,,,,............,,,,,::::;;;;;''''''''+++++++++++++++
+++++++++++++++##############################################################################################################+++++++''';;::,,.................,,,,::::;;;;;''''''''++++++++++++++
+++++++++++++###############################################################################################################+++++++''';::,,,....``````````......,,,::::;;;;;'''''''++++++++++++++
++++++++++++###############################################################################################################++++++'''';;::,,...```````````````....,,,::::;;;;;'''''''+++++++++++++
++++++++++###############################################################################################################++++++++'';;;::,,..``````````````````....,,,::::;;;;'''''''+++++++++++++
+++++++############################################################################+++++++++############################+++++++''';;:::,,...```````````````````....,,,::::;;;;''''''''+++++++++++
++++#####################################################################+++#+++++++++++++++++++######################++++++++''';;;::,,...`````````````````````....,,,:::;;;;;'''''''+++++++++++
+#####################################################################+#++++++++++'''+''+++++++++++#################+#+++++++''';;;::,,...```````````````````````...,,,::::;;;;''''''''++++++++++
###+###+++++####################################################+++++++++++++''''''''''''++++++++++++##############+++++++++''';;;::,,,...````````````````````````...,,,::::;;;;'''''''''++++++++
##+++++++++++++++++#+############################################+''''''''++''''+'+++++++++++++++++++++###########+++++++++''';;;::,,,....````````````````````````...,,,,:::;;;;;'''''''+++++++++
++++++++++++++++++++++++++##############################+######+'''';;'''''''''++++++++++++++++++++++++++##+++##++++++++++''';;;::,,,,....````````````````````````....,,,,:::;;;;''''''''++++++++
++++++'''''''''''+++++++++++++#++######################+####++''';;''''''''''++++++++++++++++++++++++++++++++++++++++++++''';;;:::,,,....`````````````````````````....,,,,::::;;;;;''''''''++++++
+++''''''''''''''''''+++++++++++++++##################++##+++''';;'''''+'+++++++++++++++++#+++++++++++++++++++++++++++++''';;;:::,,,.....`````````````````````````....,,,,,::::;;;;''''''''++++++
''''';;;;;;;;;;;;;'''''''++++++++++++++++##+#########+++++++'''''''''+'++++++++++++++++++++++++++++++++++++++++++++++++''';;;::::,,,......```````````````````````.....,,,,,,::::;;;;'''''''++++++
'';;;;;::::::;;;;;;;''''''''++++++++++++++++++++####++++++'';'''''''+'+++++++++++++++++#++#++++#++++++++++++++++++++++'''';;;:::,,,,.......``````````````````````......,,,,,::::;;;;'''''''''++++
;;;::::::::::::::;;;;;'''''''+++++++++++++++++++++++++++''';''''''++++++++++++++++++++#######+++++++++++++++++++++++''''';;;::::,,,,.......`````````````````````.......,,,,,,::::;;;;''''''''++++
;:::,,,,,,,,::::::;;;;;;'''''''''+++++++++++++++++++++''''''''''+++++++++++++++++++++++++######+++++++++++++++'+++++'''';;;::::,,,,,........```````````````````........,,,,,,::::;;;;;''''''''+++
::,,,,,,,,,,,,::::::;;;;;'''''''''++++++++++++++++++++'''''''+'+++++++#+++++++++++++++++##+######+++##+++++++++'''''''';;;::::,,,,,,,.......``````````````````........,,,,,,,,::::;;;;''''''''+++
,,,........,,,,,:::::;;;;;;'''''''''++++++++++++++++''''+++++'+++++++#+++++++++++++++++++#########+++###++++++++'''''';;;;::::,,,,,,,........```````````````..........,,,,,,,,::::;;;;;'''''''''+
,............,,,,:::::;;;;;;''''''''''+++++++++'''''''+++++++'+'+++#+#+++++++#+#+#+++++++++#########++##+++++++++''''';;;:::::,,,,,,,,........`````````...............,,,,,,,,::::;;;;;''''''''++
....`..`......,,,,:::::;;;;;;''''''''''+++++++'+'''''++++++++''++++###+++++#########++++++++#########++###++++++++''';;;;:::::,,,,,,,,........```````................,,,,,,,,,:::::;;;;;''''''''+
..````````.....,,,,::::;;;;;;;''''''''''+++''''''''''+++++++''+++++###++##############+++++++##########+###+++++++''';;;;:::::,,,,,,,,.........``..``...............,,,,,,,,,,,::::;;;;;'''''''''
```````````.....,,,,::::;;;;;;'''''''''''''''''''''++++++++''++#######+#################++++++##########++##+++++++'';;;::::::,,,,,,,,.............................,,,,,,,,,,,:::::;;;;;;''''''''
````````````.....,,,,:::;;;;;;;'''''''''''''''''''++++++++++++++############@@@@@@@######++++++##########++##+++++++'';;:::::::,,,,,,,...........................,,,,,,,,,,,,,,:::::;;;;;;'''''''
`````````````.....,,,::::;;;;;;;''''''''''''''''+'++++++++++++++#############@@@@@@@@#####++++++##########++##+++++++';;:::::::,,,,,,,..........................,,,,,,,,,,,,,,:::::;;;;;;;'''''''
``````````````....,,,,:::;;;;;;;''''''''''''''''++++++++++++++#################@@@@@@@@####++++++#########+++##++++++'';;::::::,,,,,,,.........................,,,,,,,,,,,,,,,::::::;;;;;;'''''''
``````````````.....,,,::::;;;;;;;'''''''''''''''++++++++++######################@@@@@@@@####++++++##########++##++++++'';:::::::,,,,,,........................,,,,,,,,,,,,,,,:::::::;;;;;;;''''''
``````````````.....,,,,::::;;;;;;'''''''''''''+++++++++###########################@@@@@@@###++++++##########++###++++++';;::::::,,,,,,........................,,,,,,,,,,,,,,,:::::::;;;;;;;''''''
```````````````.....,,,,:::;;;;;;;'''''''''''+++++++###############################@#@@@@###+++++++###########+###++++++';;:::::,,,,,,.......................,,,,,,,,,,,,,,,::::::::;;;;;;;;'''''
```````````````.....,,,,::::;;;;;;''''''''''+++++++######@####################################+++++############++##++++++';;::::,,,,,,......................,,,,,,,,,,,,,,,:::::::::;;;;;;;;'''''
```````````````......,,,,::::;;;;;;'''''''''++++++####@@@@@####################################++++#############+##++++++'';::::,,,,,,.....................,,,,,,,,,,,,,,,::::::::::;;;;;;;;;''''
``````````````.......,,,,::::;;;;;;'''''''''++++++###@@@@@@@##########+++++####################++++++###########+++#++++++';;::::,,,,,.....................,,,,,,,,,,,,:,:::::::::::;;;;;;;;;''''
`````````````........,,,,,::::;;;;;'''''''''++++#+###@@@@@@@#########++++++++++++++#+++#########+++++#############++#++++++';:::,,,,,,....................,,,,,,,,,,,,::::::::::::::;;;;;;;;;;'''
````````````.........,,,,,::::;;;;;''''''''++++++####@@@@@#@########++++++++++++++++++++++++####+++++##############+##++++++';:::,,,,,....................,,,,,,,,,,,:::::::::::::::;;;;;;;;;;'''
````````````.........,,,,,,::::;;;;'''''''++++++++###@@@@@@#######++++++'''''''''''''''''++++++#+++++##############++#+++++++';::,,,,,,..................,,,,,,,,,,::::::::::::::::;;;;;;;;;;;'''
```````````..........,,,,,,::::;;;;;''''''++++++++##@@@@@@#######+++++++''';;;';;;;;;;;;''''++++#+#+++#############++##++++++'';:,,,,,...................,,,,,,,,,,:::::::::::::::::;;;;;;;;;;;''
``````````...........,,,,,,,::::;;;;;''''+++++++++##@@@@########++++++'''';;;;;;;;;:;;;;;;''''++++#+++#############+++++++++++';::,,,,..................,,,,,,,,,,:::::::::::::::::;;;;;;;;;;;'''
`````````...........,,,,,,,,::::;;;;''''+++++++++###@@@#######++++++'''';;;::::::::::::::;;;''''++#+++##############+++#++++++'';:,,,,..................,,,,,,,,,::::::::::::::::::;;;;;;;;;;;;''
`````````...........,,,,,,,,:::::;;;;''++++++++++##@@######++++++++''''';;:::::::,::::::::;;;''''++++++##############+++++++++++'::,,,..................,,,,,,,,,:::::::::::::::::;;;;;;;;;;;;;''
````````...........,,,,,,,,,:::::;;;'''++++++++++##@######+++++'+''''';;;::,,,,,,,,:::::::::;;;'''++++++##############+++++++++++;::,,,.................,,,,,,,,::::::::::::::::;;;;;;;;;;;;;;;''
```````..........,,,,,,,,,,,:::::;;;''++++++++++########+++++''''''';;;;:::,,,,,,,,,,:::::::;;;;'''+++++##############+++++++++++';:,,,.................,,,,,,,,::::::::::::::::;;;;;;;;;;;;;;;''
.``````..........,,,,,,,,,,,:::::;;'''+++++++++++#####++++'''''';;;;;;:::::,,,,,,,,,,,,:::::::;;;''++++++##############+++++++++++';:,,.................,,,,,,,:::::::::::::::::;;;;;;;;;;;;;;;''
.``````.........,,,,,,,,,,,,:::::;;;''+++++++++++####++++'''';;;;;;;;::::::,,,,,,,,,,,,,,,:::::;;;''+++++###############+++++++++++':,,,................,,,,,,,:::::::::::::::;;;;;;;;;;;;;;;;;''
``````.........,,,,,,,,,,,,,:::::;;''+++++++++++####+++''';;;;;;;:::::::::,,,,,,,,,,,,,,,,,:::::;;;''+++++##############++++++++++++;:,,................,,,,,,,::::::::::::::;;;;;;;;;;;;;;;;;'''
``````.........,,,,,,,,,,,,::::::;;'+++#+#++++++###+++'''';;;;;;:::::::::,,,,,,,,,,,,,,,,,,,:::::;;;'++++++##############+++++++++++';:,................,,,,,,,::::::::::::;;;;;;;;;;;;;;;;;;;'''
``````........,,,,,,,,,,,,::::::;;;'+++#+#+++++###+++''';;;;;;:::::::::::,,,,,,,,,,,,,,,,,,,,:::::;;''+++++###############+++++++++++';,................,,,,,,::::::::::::;;;;;;;;;;;;;;;;;;;;'''
```````.......,,,,,,,,,,:,::::::;;''+++#+#+++++###++'''';;;;;;::::::::::,,,,,,,,,,,,,,,,,,,,,::::::;;'++++++###############+++++++++++';,...............,,,,,,:::::::::::;;;;;;;;;;;;;;;;;;;;;'''
``````.......,,,,,,,,,,:::::::;;;;'++++#+#+++++##+++''';;;;;;;::::::::::,,,,,,,,,,,,,,,,,,,,,,::::::;;'++++++##############++++++++++++;:,..............,,,,,,:::::::::::;;;;;;;;;;;;;;;;;;;;;'''
``````.......,,,,,,,,,,:::::::;;;;'+++###++++#+##++''';;;;;;;::::::::::::,,,,,,,,,,,,,,,,,,,,,,::::::;''+++++###############+++++++++++';,,.............,,,,,,:::::::::::;;;;;;;;;;;;;;;;;;;;''''
``````......,,,,,,,,,::::::::::;;''+++###++++++##++''';;;;;;;:::::::::::,,,,,,,,,,,,,,,,,,,,,,,,,::::;;'+++#+###############++++++++++++':,,............,,,,,::::::::::;;;;;;;;;;;;;;;;;;;;;;''''
``````......,,,,,,,,,:::::::::;;;''+++###++++###+++'';;;;;;;;:::::::::::::,,:,,,,,,,,,,,,,,,,,,,,,,:::;;'+++#+###############+++#+++#++++':,.............,,,,,:::::::::;;;;;;;;;;;;;;;;;;;;;'''''
``````......,,,,,,,,::::::::::;;;'++++###+#+#+##++''';;;;;;;;;:::::::::::::::,,,,,,,,,,,,,,,,,,,,,,,:::;;'++++################+++#+++#++++;,.............,,,,,::::::::;;;;;;;;;;;;;;;;;;;;;;'''''
``````.....,,,,,,,,::::::::::;:;'''++####+#+#+##++'';;;;;;;;;;:::::::::::::::,,,:,,,,,,,,,,,,,,,,,,,::::;'++#+################+++##++##+++':,............,,,,:::::::::;;;;;;;;;;;;;;;;;;;;'''''''
``````.....,,,,,,,,::::::::::;;;'++++####+######++''';;;;;;:;;::::::::::::::::,,,,,,,,,,,,,,,,,,,,,,,::::;'+###################++###+##++++':,...........,,,,,::::::::;;;;;;;;;;;;;;;;;;;''''''''
``````.....,,,,,,,:::::::::::;;;'+++####+#######++'''';;;;;;;;;;;:::::::::::::,,,,,,,,,,,,,,,,,,,,,,,::::;;'+##################+++#####+++++;:,..........,,,,,:::::::;;;;;;;;;;;;;;;;;;;;''''''''
``````.....,,,,,,,::::::::::;;;''+++####+#######+++'';;;;;;;;;;;;:::::::::::::,,,,,,,,,,,,,,,,,,,,,,,,,:::;'+###################++######+++++;,,.........,,,,,:::::::;;;;;;;;;;;;;;;;;'';''''''''
``````.....,,,,,,,::::::::::;;;'++++####+#######+++''';;;;;;;;::::::::::::::::::,,,,,,,,,,,,,,,,,,,,,,,,::;;'+###################++#####+++++':,,........,,,,,::::::;;;;;;;;;;;;;;;;;;'''''''''''
``````.....,,,,,,:::::::::::;;''+++#####+#######+++'';;;;;;;;:::::::::::::::::,:::,,,,,,,,,,,,,,,,,,,,,,,:::;'+##################+++####++++++':,,.......,,,,,::::::;;;;;;;;;;;;;;;;'''''''''''''
``````.....,,,,,,::::::::::;;;''+++#####+#######+''';;;;;;;;;::;::::::::::::::::::,,,,,,,,,,,,,,,,,,,,,,,,::;;++##################+++####++++++':,,......,,,,,::::::;;;;;;;;;;;;;;;''''''''''''''
``````.....,,,,,::::::::::;;;;''+++#############+''';;;;;;;;::;;::::::::::::::::::::,,,,,,,,,,,,,,,,,,,,,,,::;'+###################++####+++++++;,,......,,,,,::::::;;;;;;;;;;;;;;'''''''''''''''
``````.....,,,,,::::::::::;;;''++++#############+'''';;;;;;;;::::::::::::::::::::::::,,,,,,,,,,,,,,,,,,,,,,,:;;'###########+###+####+#####+++++++;,,,....,,,,,:::::;;;;;;;;;;;;;;''''''''''''''''
``````.....,,,,,:::::::::;;;;''+++##############+'''';;;;;;;;:;::::::::::::::::::::::,,,,,,,,,,,,,,,,,,,,,,,,:;;+###########+#######++####+++++++';,,,...,,,,,:::::;;;;;;;;;;;;;'''''''''''''''''
``````.....,,,,,::::::::;;;;;''+++#######+######+'''';;;;;;;;;::::::::::::::::::::::,,,,,,,,,,,,,,,,,,,,,,,,,,:;'+##########+#######+++####++++++'':,,...,,,,,:::::;;;;;;;;;;;;''''''''''''''''''
``````.....,,,,,:::::::;;;;;;''+++##############++''';;;;;;;;;;:::::::::::::::::::::::,,,,,,,,,,,,,,,,,,,,,,,,::;+##########+######+#++#####+++++++':,,,,,,,,,:::::;;;;;;;;;;;;''''''''''''''''''
``````.....,,,,::::::::;;;;;'''+++######+#######++''';;;;;;:;:::::::::::::::::::::::::,::,,,,,,,,,,,,:::::::::::;'####################++####++++++++':,,,,,,,,:::::;;;;;;;;;;;;''''''''''''''''''
``````.....,,,,::::::::;;;;;''+++######++#######++'';';;;;;;:;:::::::::::::::::::::::::,::::::,,,,:::::;;;;;::::;;+####################++###+++++++++':,,,,,,,:::::;;;;;;;;;;;'''''''''''''''''''
``````.....,,,,::::::::;;;;;''++++####+++#######++'';;;;;;:::::::::::::::::::::::::::::::::::::::::;;;;;'';;;;::;;'+##################+++####+++++++++;,,,,,,,:::::;;;;;;;;;;;'''''''''''''''''''
``````.....,,,,::::::::;;;;'''++++####++########+''';;;;;;;:::::::::::::::::::::::::::::::::::::;;;;''''''';;;;;;;'+###################++####+++++++++';,,,,,,:::::;;;;;;;;;;;'''''''''''''''''''
`````.....,,,,,:::::::;;;;;''''+++####+#########+''';';;;;;;::::::::::::::::::::::::::::::::::;;'''+++'''';;';;;;;;'+########+##########++####+++++++++':,,,,,:::::;;;;;;;;;;;'''''''''''''''''''
`````.....,,,,,::::::::;;;;'''+++#####+#########++';;;;;;;:::::;;;;;;;::::::::;:::::::::;;;;;;'''++++'+'';;;;;;;;;;'++##################++#####++++++++'':,,,,::::;;;;;;;;;;;''''''''''''''''''''
`````.....,,,,,::::::;;;;;;'''++++####+#+#######+'';;;;;;;:;:;:;;;;;;;;::::::::;;:;::::;;;;;'''+++++++'''';;;;;;;;;''++################++++####+++++++++'':,,,:::::;;;;;;;;;'''''''''''''''''''''
````......,,,,,::::::;;;;;''''++++####+#########+'';';;;;;;;;;;;;;;;;;;;:::;::;;;:;;;;;;;;''''++++++++++++''';;;;;;;'+++################+++#####++++++++'';:,,:::::;;;;;;;;;'''''''''''''''''''''
````......,,,,,::::::;;;;;'''+++++####+#########+'';';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'''''++###+''';;''++'';;;;;;'++#################++######++++++++'';::::::;;;;;;;;;''''''''''''''''''''''
````......,,,,,::::::;;;;;'''++++####+++########+'';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'''''++##+++####+'''++'';;;;;'+++################+###+###+++++++++'';::::::;;;;;;;;''''''''''''''''''''''
``........,,,,,::::::;;;;''''++++####+++########+';';;;;;;;;;;;;;;;;;;';;;;;;;;;;;;;;''''''''+#+++#@#+++''+++++';;;;;'+++#+##############++###++#++++++++'';';::::;;;;;;;;;''''''''''''''''''''''
``........,,,,,::::::;;;;'''+++++####+#+########+';;;;;'''';;;;;;;'''''';;;';;;;;;;;;'''''''+++++#####++;;;+++'';;;;;;'+++#+##############+###+++#+++++++++';';:::;;;;;;;;'''''''''''''''''''''''
`.........,,,,,::::;;;;;;'''++++#####+#+########''';''''''''''''''''''''''''';;;;;;;;;''''''+++++###@##+;:;;;'''';;;;;'++++++##############+####+#++++++++++';';::;;;;;;;''''''''''''''''''''''''
..........,,,,,:::::;;;;';''++++####+++#########'''''''''++++++''+''''++'''''';;;;;;;;'''''+++++''#####':::::;;;;;;;;;;++++++##############+#####+#++++++++++''';:;;;;;;;''''''''''''''''''''''''
..........,,,,,:::::;;;;';''+++#####+++########+'''+++++++++++++++++++++++++''';;;;;;;;''''++++';;'+#+'::::::::::;;;;;;'+'++++#############++###++#+++++++++''''';;;;;;;;''''''''''''''''''''''''
..........,,,,,:::::;;;;'''++++#####+++########+'''+++++++####+++++++++++++++'';;:::;;;''''++''''';';;:::::::::::::::;;'''++++##############+####++#++++++''+''''';;;;;;'''''''''''''''''''''''''
.........,,,,,,:::::;;;;'''++++####++++########+''+++++++##++########+++++++++';::,::;;;''''''+''''';;;;;:::::::::::::;;''+++++#+#################+#+++++++'+'''++;;;;;;;''''''''''''''''''''''''
.........,,,,,,:::::;;;'''++++#####++#+######@#+++++++++++++###########+++++++';:::::;;;;;;''''''''';;;;;;:::::::::::::;'''++++####################+#+++++++'+'''+';;;;;;''''''''''''''''''''''''
.........,,,,,::::::;;;'''++++#####++++#########++++++++++########+++###++##++';::,,::;;;;;;;'''''''';;;;;;:::::,,,,:::;;'''+++####################+##++++++'++'''+';;;;'''''''''''''''''''''''''
.........,,,,,,::::;;;;'''+++++####++++#########+++++++++####@@####++++++++##+';::,,:::;:::;;'''''''''';;::::::,,,,,::::;'''++++###################++##++++++'++'''+';;;'''''''''''''''''''''''''
........,,,,,,:::::;;;;'''++++++###+++##########+#++++++########+#+'++#++++++++';:,,,::::::;;;;;';;;;;:::::::::,,,,,,:::;'''++++##############+#####++#+++++++'+''''+'';'''''''''''''''''''''''''
........,,,,,,:::::;;;;''++'+++###++++###########++++++########@##+;''++++++++'';:,,,:::::::;;;;;::::::::,,,,,,,,,,,,,::;;''++++####################++#+++++++'++''''''''''''''''''''''''''''''''
.......,,,,,,,:::::;;;'''++++#+###++++###########+++++####++######';'+++++'+++';;:,,,::::::::::::::::::::,,,,,,,,,,,,,::;;''++++#####################++#++++++'+++';'''''''''''''''''''''''''''''
......,,,,,,,,:::::;;;''+++++++###++++##########++++++####+++####+''''+''''+++';;:,,,,,,:::::::::::::::,,,,,,,,,,,,,,,:::;'''+++###++###############++++++++++'+++'''''''''''''''''''''''''''''''
.....,,,,,,,,,:::::;;;''+''++++###+++###########+++++####++'''++''''''''''++''';:::,,,,,,:::,,,,,::::::,,,,,,,,,,,,,,,:::;'''+++###++##############+++++++++++++++'''''''''''''''''''''''''''''''
.....,,,,,,,,,:::::;;;''+'++++####+++#########@#+++++###+'''''''''''''''''''''';::,,,,,,,,::,,,,,,::::::,,,,,,,,,,,,,,,::;;''+++###++###############+++++++++++++++''''''''''''''''''''''''''''''
...,,,,,,,,,,,:::::;;;'+''+++++##++++#########@#++++++##++''''''''''''''''''''';:::,,,,,,,,,,,,,,,,,:::::,,,,,,,,,,,,,,:::;''++####+#++##############++#++++++++++++'''''''''''''''''''''''''''''
,,,,,,,,,,,,,::::::;;;'+''+++++##++++#########@#++++++++++''''''''''''''''''''';;::,,,,,,,,,,,,,,,,,,,:,,:,,,,,,,,,,,,,:::;'''+######++########+#####+++++++++++++++'''''''''''''''''''''''''''''
,,,,,,,,,,,,,::::::;;'++''++++###+++###+######@##++++++++++''''''+''''';;;''''';;::,,,,,,,,,,,,,,:::,,,,,:,,,,,,,,,,,,,,:::;''++####+++###############++++#++++++++++''''''''''''''''''''''''''''
,,,,,,,,,,,,,::::::;;'+'''++++###+++#############++++++'++++++++''';;;;;;;''''';;::,,,,,,,,,,,,,,::::::,::,,,,,,,,,,,,,,:::;''++####++++##############++++++++++++++++'''''''''''''''''''''''''''
,,,,,,,,,,,,,::::::;;'+'''++++##+++###+#########+++++''''''''''';;;;;;;;;;;'''';;:::,,,,,,,,,:,,:::::::::,,,,,,,,,,,,,,,:::;''++####+++##########+#####++++++++++++++++''''''''''''''''''''''''''
,,,,,,,,,,,,,::::::;;'+'''++++##+++###+##@###@##+++'''''''''';;;;;;;;;;;;;;'';;;;:::,,,,,,,,,::,::::::::::,,,,,,,,,,,,,,:::;;'++#####+#################+++++++++++++++++'+'+'''''''''''''''''''''
,,,,,,,,,,,,::::::;;;++'''+++###+++###+##@######+++'''''';;;;;;;;;;;;;;;;;;'';;;;;::,,,,,,,,::::::::::::::,,,,,,,,,,,,,,:::;;''+######+##################++++++++++'+++++++'+''''''''''''''''''++
,,,,,,,,,,,,:::::::;;+''''+++###+++###+##@######+++'''';;;;;;;;;;;;;;;;;;;'''';;;:::,,,,,,,,,:::::::::::::::,,,,,,,,,,,,::;;;''+######+##################+++++++++++++++++++++'+''''''''''+++++++
,,,,,,,,,,,:::::::;;;+''''+++###++#######@######+++''';;;;;;;;;;;;;;;;;;;;'''';;;:::,,,,,,,,,,:::::::::::::::,,,,,,,,,,:::;;;''+#########################+++++#++++++++++++++++++'+++++++++++++++
,,,,,,,,,,::::::::;;;+''''+++###+####+###@######+++''';;;;;;;;;;;;;;;;;;;;'''';;;::::,,,,,,,,,,,::;;;;:::::::::,,,,,,,::::;;;''+#########################++++++++++++++++++++++++++++++++++++++++
,,,,,,,,,,::::::::;;'+''''++####+########@######+++'';;;;;;;;;;;;;;;;;;;;;''';;;;::::,,,,,,,,,,,,:;;;;;;::::::::,,,,,:::::;;;''+##########################++++##+++++++++++++++++++++++++++++++++
,,,,,,,::::::::::::;'+;'''++#############@######+++''';;;;;;;;;;;;;;;;;;;;''';;;;:::::,,,,,,,,,,,,:;;;;;;;::::::::::::::::;;;''++##########################+++###+##+++++++++++++++++++++++++++++
,,::::::::::::::::::'';';++++#######+############+++''';;;;;;;;;;;;;;;;;;'''';;;;:::::,,,,,,,::::::;;;;;;;;;:::::::::::::;;;;''++##########################++++###+##++++++++++++++++++++++++++++
::::::::::::::::::::'';;;+++########+##########@#+++''''';;;;;;;;;;;;;;;;''';;;;;;;;::::::::::;'';:;:;;;;;;;;;;:::::::::;;;;;'''+###########################+++#########++++++++++++++++++++#+++#
::::::::::::::::::::';;;;+++#+######+#+########@#+++''''';;;;;;;;;;;;;;;;'';;;;;;;;;;;;;;;;;;'+++';:::;;';;;;;;;;:::::::;;;;;'''+############################++##########++++++++++++++++++++###+
::::;;;;;;;;;;;:::::';:;;+++#+#################@@#+++''''';;;;;;;;;;;;;;;'';;;''''''';;;;;''++++'';:::::;''''';;;;;;::::;;;;;'''+############################++###+##++++#++++++++++++++++++++++#
;;;;;;;;;;;;;;;;::::';:;'+++#######+############@#+++''''''';;;;;;;;;;;;''';''''''''''''''''''++';;::::::;''''''';;;;::;;;;;;'''+############################++######+#+###++++++++++++++++++++++
;;;;;;;;;;;;;;;;;;::';;;'+++#+#####+############@@#+++'''''';;;;;;;;;;;;'''''+++++++++'''''';;''';::::::::;;'+++''';;;;:;;;;;'''+#############################+########++##++++++++++++++++++++++
''''''''''''';;;;;;;'';;++++#+#####+##+####@#####@#++++''''';;;;;;;;;;;;''''++######++'''';;;;;;;:::::::::;;;''+++'';;;;;;;;;;''+#############################++########++##+++++++++++++++++++++
+'''''''''''''';;;;;'';'++++######++#######@#####@@#+++''''';;;;;;;;;;;''''+++++##+++++'';;;;:;;::::::::::;;;;''+++'';;;:;;;;;''+##############################+#########+#++++++++++++++++++++++
+++++++++++''''';;;;'';'++#+#+####+###############@##+++'''''';;;;;;;;''''+++++++++++++'';;::::;;:::::::::;;;;'''+#+';;;:;;;;;'''+##@##########################++##########+#++++++++++++++++++++
#++++++++++++''''';;+';''+#+#+####+############@@##@#+++''''''';;;;;;;'''''''++++++++++'';;;;;;;;;:;;::;:;;;;;''''++';;:;;;;;;''++##@###########################+##########++++++++++++++++++++++
###++++++++++++'''''++'+++########+##########@#@@@#@@#+++'''''';;;;;;'''''''''+++++++++''';;;;;;';;;;;;;;;;;';''+'++';::;;;;;;;''###@######################################++++++++++++++++++++++
##++++++++++++++++++++++++########+#########@##@@@@#@#+++'''''''';;;;''''''''''''+++++''''';;;';';;;;;;;;;;;'''''''+';;:;;;;;;;''+#@@@############################+#########+++++++++++++++++++++
###++++++++++++++++++#++++#######++#########@##@@@@@#@#+++'''''''';''''''''''''+''++++'''''';;;'';;';'';';;;;'++'''+';;:;;;;;;;''+#@@@#####################################++++++++++++++++++++++
##++++++++++++++++++++++++#######+##########@##@@@@@#@@+++'''''''';'''''''''''''++++++++'''';''';;;';'';;;;;'++'''''';;:;;;;;;;''##@@@@#################################+++#+++++++++++++++++++++
##+++++++++++++++++++++++++######+##########@#@@@@@@@@@#++'''''''''''''''''''''++++++'''''''''';;';;;;;;;:;;';;'''''';;;;;;;;;;'+##@@@#@#####@############################++#++##++++++++++++++++
##++++++++++++++++++++#++++#####++############@@@@@@@@@@#++'''''''''''''''''''++++++++'''''''';;;;;;::::;;;':;;;'''';;;;;;;;;;;'+##@@@####################################+++#+++++++++++++++++++
##++++++++++++++++++++#++++##################@@@@@@@@@@@#+++'''''''''''+'''+'+++++++++''''''';;;;::::::;;';;::;;;''';;;;;;;;;;''+##@@###################################+#+++++++++++++++++++++++
#+++++++++++++++++++++#+++++####+#############@@@@@@@@@@@#++++''''''''++'+++++++++++++'';;;'';;:::::;;;'';;::::;;'+'';;;;;;;;;''+##@@####################################+++#++++++++++++++++++++
#+++++++++++++++++++++#+++++###+#############@@@@@@@@@@@@#+++++''''''+++++++++++++++++';;:;;;;;;;;;'''';;;::::::;'+'';;;;;;;;''+##@@@####################################++++++++++++++++++++++++
#+++++++++++++++++++++#++++++################@@@@@@@@@@@@@#++++''''''+++++++++++++++''';;::;;;;'''+';;;:::::::::;''''';;;;;;;;'+##@@@#####################################+++++++++#+++++++++++++
++++++++++++++++++++++++++++++###############@@@@@@@@@@@@@#+++++'''''+#++++++++++'''''';;;;;;''+++';;;:;::::::::;''''''';;;;;''+###@@#####################################+++++++++#+++++++++++++
++++++++++++++++++++++++++++++###############@@#@@@@@@@@@@##++++'''''+++++#+++'''''''''+'++++++';;;;;:;::;::::::;''+'''';;;;;'+####@######################################+++++++++++++++++++++++
++++++++++++++++++++++++++++++################@@@@@@@@@@@@@#+++++''''++++++++++''''+++####++''';;;;;;;;;;;::::::;''++''';;';''+###@##+####@###@#########################++++++++++++#+'++++++'+++
+++++++++++++++++++++++++++++##################@@@@@@@@@@@@##+++++'''+++++++++++++####++'''';;;;;;;;;;;;;;::::::;''''''''''''+####@##+########@@#########################++++##+++++#++'++'+''+++
+++++++++++++++++++++++++++++##################@@@@@@@@@@@@@#+++++'''+++++++#####++++'''''';;;;;;''''';;;:::::::;'''''''''''++######++#####################################++#+++++++++''''''''''
+++++++++++++++++++++++++++++##################@@@@@@@@@@@@@##++++''''++++++++++++++''''''';;''''''''';;;:::::::;;''''''''''+++####+++#########@@#########################++++++#++++++''''''''''
+++++++++++++++++++++++++++++###################@@@@@@@@@@@@@#++++'''++++++++++''++'''''''''++++'''';;;;::::::::;;'''''''''+++#####++########@#@@@###@@#####################+++##++++++''''''''''
++++++++++++++++++++++++++++++##################@@@@@@@@@@@@@##++++++''+++++++'''+++''''''''++++''';;;;;::::::::;;;'''''''++++####++++##########@@@##@@######################+++#+++#++''''''''''
+++++++++++++++++++++++++++++++##################@@@@@@@@@@@@@#++++++'''++++++'++++++++++++++'''''';;;;;::::::;;;;;'''+'''++++####+++++#####@@@@@@@@##@@#####################+++##+#++++'''''''''
+++++++++++++++++++++++++++++++##################@@@@@@@@@@@@@@#++++++'++++++''+'++++++++++++'''''';;;:::::::;;;;;''''+''+++++###+++++######@@@@@@@@@##@@@###################++####+++++'''''''''
+++++++++++++++++++++++++++++++###################@@@@@@@@@@@@@##+++++++++++'''''''+++++++++''''';;;;::::;:::;;;;;'''''''+'++++#+++++++#####@@@@@@@@@@#@@################+####+####+++++'''''''''
+++++++++++++++++++++++++++++++###################@@@@@@@@@@@@@@#+++++++++#+++''''''++++'+++'''';;;:::::::::;;;;;'''''''++++++##+++++++#####@@@@@@@@@@#@@################++########+#+++'''''''''
+++++++++++++++++++++++++++++++####################@@@@@@@@@@@@@@#++++++++#++++''''''+++'''+'''';;;:::::::::;;;;''''''+'++++++#++++++++#####@@@@@@@@@@@@@#################+##########++''''''''''
+++++++++++++++++++++++++++++++####################@@@@@@@@@@@@@@@#+++++++#+++++''+''+'''''''';;;;:::::::::;;;;'''''''''+++#+#+++++++++######@@@@@@@@@@@@#@@@#############++#########++''''''''''
+++++++++++++++++++++++++++++######################@@@@@@@@@@@@@@@@#+++##+#+++++'''''''''''''';;;;::::::::;;;;'';'''++'+++###++'''++'++######@@@@@@@@@@@@@@@@@#############+#########++''''''''''
++++++++++++++++++++++++++++++######################@@@@@@@@@@@@@@@##+++#####+++++'''''''''';;;;;;;;:::::;;'';'''';'+++++###++''''+''++######@@@@@@@@@@@@@@@@@@############++#######+++''''''''''
++++++++++++++++++++++++++++++######################@@@@@@@@@@@@@@@@@##++##+##+++++''''''''';';;;;;;;;;:;;;'''''''''+++++##++''''+'''++######@@@@@@@@@@@@@@@@@@#############+#######++'''''''''''
+++++++++++++++++++++++++++++++#####################@@@@@@@@@@@@@@@@@@###+++##+++++++''''''''';;;;;;;;;;;;;''''''''+++####++'''''''''+++####@@@@@@@@@@@@@##@@@@#############+##+####+''''''''''''
+++++++++++++++++++++++++++++++######################@@@@@@@@@@@@@@@@@@#########+#+++++++''''''';;;;;;;;'''+'+''''++####++++'''''''''+++#####@@@@@@@@@@@@#@@@@@@##@#@#######+#######+''''''''''''
+++++++++++++++++++++++++++++++######################@@@@@@@@@@@@@@@@@@@######++++++++++++++'''';'''''''''''+''+++#####++++''''''''''++++#####@@@@@@@@@@@##@@@@#####@##############+'''''''''''''
+++++++++++++++++++++++++++++++#######################@@@@@@@@@@@@@@@@@@@#####+++++++++#++++++''''+''''''''++++++#####+++''''''''''''++++#####@@@@@@@@@@@##@@@@@###@@#############++'''''''''''''
++++++++++++++++++++++++++++++#+######################@@@@@@@@@@@@@@@@@@@@#########+++++++++++++'++++'++''+++++#####++++'''''''';''''+++++#####@@@@@@@@@##@@@@@#################+++''''''''''''''
++++++++++++++++++++++++#+++++++######################@@@@@@@@@@@@@@@@@@@@@@#####+++#+#++#++++++++++++++++++++#####++++'''''''';;;'''''++######@@@@@@@@@###@@@@#######@#########++'''''''''''''''
++++++++++++++++++++++++#+++++++#######################@@@@@@@@@@@@@@@@@@@@@@@#####+++##++###++++++##++++++#######++++'''''''';;;;'''''++######@@@@@@@@@@###@@@@##@@@#############+'''';;;'''''''
++++++++++++++++++++++++#+++++++#######################@@@@@@@@@@@@@@@@@@@@@#@@#######+##+##+++########+########++++'''''''''';;;;'''''++#@#####@#@@@@@@##@#@@@###@@@#############+'';;;;;;;'''''
++++++++++++++++++++++++#+#+++++#########################@@@@@@@@@@@@@@@@@@@@@@@@########+++++#+##+###########+++++'''''''''';;;;;''''+++########@@@@@@@#####@@##@@###############++''';;;;;;;;;;
+++++++++++++++++++++++++##+++++########################@@@@@@@@@@@@@@@@@@@@@@@@@#####+####+#++#############++++'''''''''''';;;;;''''+++##@@######@@@@@@#########@@###############+++''';;;;;;;;;
+++++++++++++++++++++++++#++++++########################@@@@@@@@@@@@@@@@@@@@##@@@##################@######+++++'''''''''''';;;;;'''''+++###@######@@@@@@#######@#@#@##############+++++''';';;;;;
+++++++++++++++++++++++++##+++++########################@@@@@@@@@@@@@@@@@@@###@@@#######################+++++'''''''';'''';;;;;''''''+++###########@@@#@######@##@@@#################++''''''''''
+++++++++++++++++++++++++##+++++########################@@@@@@@@@@@@@@@@@@@###@@@#####+#++++########++++++++'''''''';';';;;;;;'';''''++################@######@@@#@@##@@###########++++''''''''''
++++++++++++++++++++++++++#+++++##########################@@@@@@@@@@@@@@@@@###@@######+++++++++++++++++++++'''''''';;;';;;;;;''''''''++################@########@#################+++++''''''''''
++++++++++++++++++++++++++###+++########################@##@@@@@@@@@@@@@@@@###@@#####++++++++++++++++++++''''''''';;;;;;;;';'';''''''++#########################@#@############++++++++''''''''''
+++++++++++++++++++++++++++##+++###########################@@@@@@@@@@@@@@@@##@@@######+++++++++++++++++''''''''''';;;;;;;;;'''''''''++##########################@@@############++++++++''''''''''
+++++++++++++++++++++++++++####+########################@@##@@@@@@@@@@@@@@@##@@@######+++++++++++++++''+'''''''''';;;;;;;;;'''''''''++##########################@@############++++++++'''''''''''
++++++++++++++++++++++++++++############################@###@@@@@@@@@@@#@@#@#@@########++++++++++++''''''''''''''';;;;;;;;''''''''''++########################################++++++++'''''''''''
++++++++++++++++++++++++++++################################@@@@@@@@@@@@####@@@#######++++++++++++'''''''''''''''';;;;;;;';''''''''+++#######################################++++++++''''+'''''''
++++++++++++++++++++++++++++################+###############@@@@@@@@@@@@@###@@########+++++++++++''''''''''''''';;;;;;;;;;;''''''''++#######################################+++++++++'''++++'''''
+++++++++++++++++++++++++++++##############++###############@@@@@@@@@@#@####@@@######++++++++++++''''''';'''''';;;;;;;;;;;;';'''''+++#############################@########++++++++++'++++'''''''
+++++++++++++++++++++++++++++##############++###############@@@@@@@#@@#######@@##+###+++++++++++++'''''''''''';;;;;;;;;;;;;'''''''+++######################################++++++++++'++++'''''''
++++++++++++++++++++++++++++++############+++###############@#@@@@@@@@###########+##+++++++++++++++''''''''';;;;';;;;;;;;;''''''''+++#####################################++++++++++++++++'''''''
+++++++++++++++++++++++++++++#############++++#+###############@@@@@@############+##++++##++++++++++''''''''';;;';;;;;;;;;''''''''++#####################################++++++++++++++'+++++''''
+++++++++++++++++++++++++++++#############++++#+###############@@@@@@###############++++###+++++++++++''''''';;';';;;;;;;'''''''''++#####################################++++++++++++++++++++++''
+++++++++++++++++++++++++++++############++++++++##############@@@@@@@##############++++###+++++++++++'''''''''''';;;;;;'''''''''+++###################################++++++++++++++++++++++++++
++++++++++++++++++++++++++#+#########+###++++++++###############@@@@@###############++++##@#+++++++++++'''''''';;';;;;;;;;'''''''+++###################################++++++++++++++++++++++++++
+++++++++++++++++++++++++++++##########++''''++++###############@#@@@@##########+###+'++#@@#+++++++++++'''''''';'';;;;;;;''''''''++###################################+++++++++++++++++++++++++++
+++++++++++++++++++++++++++############+'''''++'++###############@@@@##########+++##+'+##@@@#++++++++++''''''''''';;;;;';''''''''++##################################++++++++++++++++++++++++++++
++++++++++++++++++++++++++####+########+'';''++'++###############@@@@##########+++##+'+##@@@@#++++++'''''''''''''''''''''''''''''++#################################+++++++++++++++++++++++++++++
+++++++++++++++++++++++++####++++######';;;;'++'++################@@@##########+++##+++###@@@##+'+++'''''''''''''''''''''''''''''++################################++++++++++++++++++++++++++++++
+++++++++++++++++++++++++###+++++######';;;;'+++++################@#@##+#######+++##++###@#@@@#+'''++''''''''''''''''''''''''''''+################################+++++++++++++++++++++++++++++++
++++++++++++++++++++++++#####+++++####+';;:;'+++++#####################+#######++##+++###@@@@@@#+''''''''''''''''''''''''''''''''+################################+++++++++++++++++++++++++++++++
+++++++++++++++++++++++######++++++###+'';:;'+++++####################+#########+#++++####@@@@@#+'''''''''''''''''''''''''''''''++###############################++++++++++++++++++++++++++++++++
+++++++++++++++++++++++#####+++++++###+'';::'+++++############################++##+++######@@@@@#+''''''''''''''''''''''''''''''++###############################++++++++++++++++++++++++++++++++
++++++++++++++++++++++#######++'+++###+';;::;++'''+###########################++##+++#####@@@@@@#++'''''''''''''''''''''''''''''+################################++++++++++++++++++++++++++++++++
++++++++++++++++++++++######++'''''+#+'';;;:;++';'++#############@###########++++++++######@@@@@@#+'''''''''''''''''''''''''''''+###############################+++++++++++++++++++++++++++++++++
++++++++++++++++++++++######++';;;;+++'';::;;++;:'++#############@###########++++++++#######@@@@@@#'''''''''''''''''''''''''''''+##################+##+##########++++++++++++++++++++++++++++++++
++++++++++++++++++++++######++';;:;''''';:::;+'::;+++########################++++++++#######@@@@@@#+'''''''''''''''''''''''''''+#################+++##+##+#++##++++++++++++++++++++++++++++++++++
++++++++++++++++++++++######+'';:::;;''';:,,:+'::;+++###############+########+++++++########@@@@@@@#+''';'''''''''''''''''''+''+#################+++#####+++###++++++++++++++++++++++++++++++++++
++++++++++++++++++++++######+';;::,:;;;;';:,:''::;++++###########@##+#######++++++++#########@@@@@@#+''';;;''''''''''''+''+'+''+#################++#+#####++##+++++++++++++++++++++++++++++++++++
++++++++++++++++++++++######+';::,,,::;;';:::';;:;++++++#########@##########+++++'++########@@@@@@@@#+'';;;'''''''''''''+++++'+##################+#++++###++##+++++++++++++++++++++++++++++++++++
++++++++++++++++++++++######+';::,,,,,:;';::;;;::;'+''++#########@##########+++++'++########@@@@@@@@#++';;;;;;''''''''++++++++####################++++++++++##+++++++++++++++++++++++++++++++++++
+++++++++++++++++++++#######+';::,,,..,;''::;;:::;'+;;++#################++#++++''++#########@@@@@@@##+'';;;;;'''''''+++++++##################+##+#+++++++++##+++++++++++++++++++++++++++++++++++
++++++++++++++++++++########+';::,,....,;':,:;;:;;'+;:;+#################++#++++++++########@@@@@@@@##+'';;;;;;''''''+++++####################+##+++#++++++##++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++#######+';::,,...`.,;;::::;;;'';,:+################+++##+++++++#########@@@@@@####+';;;;;;''''''++++#####################+##+++++#+#++##++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++######+';::,,...``.,;;;,,:;''';,:'################+++##++++++##########@@@@@@####+';;;;;;'''''+++####################+++++#+#++++++####++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++########+';:,,...```.,:;;,:;'''':,;+##############+++##+++++++#########@@@@@@@@####+;;;;;;'''+++#######################+#++++++++++++##+++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++########+';:,,...````.,:;;:;'''':,:+##############++++#++++++++########@@@@@@@#####+';;;;''+++############################+++++++++++##+++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++########+';:,,...`````.,:;;;'';;:,:'#############+++++#++++++++++######@@@@@@@######+'''+++################################++++++++#+#++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++########+';::,...``````.,:;;'';;;::;#############++++#+++++++++++######@@##@@@#####+++###########################+####+++++++++++++++#++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++########+';:,,...``````..,;'';;;;;;+############+++##++++++++++++#####@@##############################################+++#++###++++##++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++########+';:,,....```````.,:'':'';'+#############++++++++++++++++####@@@#############################################+#+++++##+#+++#+++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++########++';:,,...````````.,;';;+''++##############++++++++++++++####@@###############################################++++++++++++##+++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++#########+';::,....``````...,'''+++++#############++++++++++++++++###@@################################################+++++++#++###+++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++#########++';:,,....`````...,;'''+++++############+++'++++++++++++###@###################+++##########################+++#+++++++###+++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++#########+';::,,...........,:'''+##+++###########+++'++++++++++++##################++++++##########################++++++####+++###+++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++########++';::,,.........,,:;+++##++++##########++++++++++++++++###############++++++#############################++##++++#++++##++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++########++';::,,,......,,,:;'+++##+++###########+++++++++++++++#############++++++###+++++++++#+##################+#++++++++++##++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++##########+'';::,,,,,,,,,,::;'++####+++#########+++++++++++++++##############+++###++++++++++++###################+++++#++##+++##++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++#########+'';:::,,,,,,:::;''+++#####+#########+++++++++++++++#################+++++++++++++#####################++++##+###+++#+++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++##########+'';;::::::::;;''++++##+++++####++###++++++++++++++##############+++++++++++++++######################+++##+########+++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++##########++'';;;;;;;;'''++++++#++++++###++####+++++++++++++###########++++++++++++++++++++####################+####++##+####+++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++##########+++'''''''''++++++++#+++++++##+++####++++++++++++##########+++++++++++++++++++++##############++##++++####++#+####+++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++############++++++++++++++++++++#++++''+##+++####++++++++++##########+++++++++++++++++++++################+#++##+####+###+##+++++++++++++++++++++++++++++++++++++##+++
+++++++++++++++++++++++++++++############++++++++++++++++++#++'''''+##+++####+++++++++##########+++++++++++++++++++++################+#++##########++##+++++++++++++++++++++++++++++++++++++##+++
+++++++++++++++++++++++++++++###############++++++++++++++++++';;;''+##++++#++++++++++########+++++++++++++++++++++++##################++##########++##+++++++++++++++++++++++++++++++++++++##+++
+++++++++++++++++++++++++++++++#############++++++++++++++++++'';'''++###+++'+++++++++#######++++++++++++++++++++++++#####################+########++#++++++++++++++++++++++++++++++++++++##+##++
++++++++++++++++++++++++++++++++############++++++++++++++'';''++'''''+###++''++++++++######++++++++++++++++++++++++######################+######+##+#++++++++++++++++++++++++++++++++++++####++#
++++++++++++++++++++++++++++++++++##########+++++++++++++'';;;''++++''+++++'''++++++++######++++++++++++++++++++++++###############+################+#++++++++++++++++++++++++++++++++++++##+#++#
++++++++++++++++++++++++++++++++++++#######+++++++++++++'';;;''''+++''''+'''''+++++++######++++++++++++++++++++++++################++###+#+###########+++++++++++++++++++++++++++++++++++####+###
++++++++++++++++++++++++++++++++++++++++#++++++++++++++';;;;''''++'';;''''''''+++++++#####+++++++++++++++++++++++++###############++###+##############++++++++++++++++++++++++++++++++++#########
++++++++++++++++++++++++++++++++++++++++++++++++++++++';;;;'''++++'';;'''';'''+++++++#####+++++++++++++++++++++++++################+##################++++++++++++++++++++++++++++++++++#########
+++++++++++++++++++++++++++++++++++++++++++++++++++++'';;'''''++++'';;'';;;'''+++++++####+++++++++++++++++++++++++####################################++++++++++++++++++++++++++++++++++#########
++++++++++++++++++++++++++++++++++++++++++++++++++++'';;''''++++++';;;';;;;'''++++++#####+++++++++++++++++++++++++###################+###########+###++++++++++++++++++++++++++++++++++##########
+++++++++++++++++++++++++++++++++++++++++++++++++++'';'''''+++++++';;;;;;;;'''++++++####++++++++++++++++++++++++++###################+###############+++++++++++++++++++++++++++++++++++#########
++++++++++++++++++++++++++++++++++++++++++++++++++'';;''++++++++++';;;;;;;;''+++++++####+++++++++++++++++++++++++####################################++++++++++++++++++++++++++++++++++##########
++++++++++++++++++++++++++++++++++++++++++++++++++''''''+++++++++';;;;;;;;;'''++++++###++++++++++++++++++++++++++#####+##############################+++++++++++++++++++++++++++++++++###########
+++++++++++++++++++++++++++++++++++++++++++++++++''''''++++++++++';;;;;;;;''''+++++####+++++++++++++++++++++++++#####################################++++++++++++++++++++++++++++++++############
+++++++++++++++++++++++++++++++++++++++++++++++++'''''+++++++++++;;;;;;;;;''''+++++###++++++++++++++++++++++++++#####################################++++++++++++++++++++++++++++++++############
++++++++++++++++++++++++++++++++++++++++++++++++'''''+++++++++++';;;;;;;;;'''++++++##+++++++++++++++++++++++++++######+##############################++++++++++++++++++++++++++++++++############
++++++++++++++++++++++++++++++++++++++++++++++++'''''+++++++++++';;;;;;;;;'''+++++###+++++++++++++++++++++++++++#####++#############################+++++++++++++++++++++++++++++++++############
+++++++++++++++++++++++++++++++++++++++++++++++'''''++++++++++++;;;;;;;;;'''++++++###+++++++++++++++++++++++++++#####+#############################+++++++++++++++++++++++++++++++++#############
+++++++++++++++++++++++++++++++++++++++++++++++'''''+++++++++++';;;;;;;;;''''+++++##+++++++++++++++++++++++++++######+##############################++++++++++++++++++++++++++++++++#############
++++++++++++++++++++++++++++++++++++++++++++++''''''+++++++++++';;;;;;;;;'''+++++###++++'++'+++++++++++++++++++######+#############################++++++++++++++++++++++++++++++++##############
+++++++++++++++++++++++++++++++++++++++++++++''''''++++++++++++;;;;;;;;;;'''+++++##+++++''''+++++++++++++++++++#####++#############################++++++++++++++++++++++++++++++++##############
+++++++++++++++++++++++++++++++++++++++++++++'''''++++++++++++';;;;;;;;;'''++++++##++++''''++++++++++++++++++++#####+##############################++++++++++++++++++++++++++++++++##############
++++++++++++++++++++++++++++++++++++++++++++'''++'++++++++++++';;;;;;;;;'''+++++##++++'''''+'+++'++++++++++++#######+##############################+++++++++++++++++++++#+#++++++################
++++++++++++++++++++++++++++++++++++++++++++''++++++++++++++++;;;;;;;;;;'''+++++##++++''''''''++++++++++++++++######+##############################++++++++++++++++++++#+#+++++++################
++++++++++++++++++++++++++++++++++++++++++++''+++++++++++++++';;;;;;;;;'''++++++##++++'''''+'''+++++++++++++#+######+##############################++++++++++++++++++++#+++++++++################
+++++++++++++++++++++++++++++++++++++++++++''++++++++++++++++';;;;;;;;;''''++++##++++'''''''''+++++++++++'+########++#############################++++++++++++++++++++++++++++++#################
++++++++++++++++++++++++++++++++++++++++++'''++++++++++++++++;;;;;;;;;;'''+++++##++++'''''''''++++++++++'++########++#############################++++++++++++++++++++++++++++++#################
+++++++++++++++++++++++++++++++++++++++++'''++++++++++++++++';;;;;;;;;;'''+++++##+++'''''+'+++++++++++++'++########+##############################++++++++++++++++++++++++++++++#################
+++++++++++++++++++++++++++++++++++++++++'''++++++++++++++++';;;;;;;;;;''++++++#++++'''''++++++++++++++''+##+######+##############################+++++++++++++++++++++#+++++++##################
+++++++++++++++++++#++++++++++++++++++++'''++++++++#++++++++';;;;;;;;;;''+++++##++++''''+++++++++++++++'++##+######+#############################++++++++++++++++++++++##++++++##################
++++++++++#+++++++++++++++++++++++++++++'''+++++++++++++++++;;;;;;;;;;'''+++++##+++''''''+++++++++++++'++###+#####++#############################+++++++++++++++++++#++#++++++###################
++++++++++++++++++++++++++++++++++++++++'''++++++++#+++++++';;;;;;;;;;'''+++++##+++''';;''+++'++++++++'++#########++#############################+++++++++++++++++++++#++++++++##################
+++++++++++++++++++++++++++++++++++++++'''+++#+++++##++++++';;;;;;;;;;'''++++##++++++'::'++++++++++++''+###+######+##############################+++++++++++++++++++##+++++++####################
+++++++++#+++++++#+++++++##+#++++++++++'''+++#++++###++++++';;;;;;;;;'''+++++##+++++';:;'++++++++++++'++###+######++############################++++++++++++++++++++###++++++####################
++++++++++++#+++##+++++++#++++++++++++''''++##++++###+++++';;;;;;;;;;''''++++##+++++':,;'+++++++++++''++###+######++############################+++++++++++++++++++#+#+++++++####################
+++++++++++++#+###++#+++#+++++#++++++++++'++##++++###+++++';;;;;;;;;;''''+++###++++';::''+++++++++++'++###########+++###########################+++++++++++++++++++####+++++#####################
+++++++#+#+##++#+++#++#####+++++++++++++++++##+++####+++++';;;;;;;;;;'''++++##+++++'::;'+++++++++++''++###+######++#############################++++++++++++++++++#####+++++#####################
++++++++#+####++##+###+++#++#+++++++++++++++##+++####+++++';;;;;;;;;''''++++##++++':::;''++++++++++''+####+######++#############################+++++++++++++++++++###++++++#####################
+++++++++#+#+#+###++#+#+++++#++#+++++++++++###+++####++++';;;;;;;;;;'''++++###+++':,,:''++++++++++''++####+######++#############################+++++++++++++++++++####++++######################
+++++##++#+##########+#+###++++#+++++++++++###+++#####+++';;;;;;;;;;'''++++##+++'::,,;''++++++++++''++###########++#############################+++++++++++++++++######+#+#######################
+++++++#+###++##########+##+##+++++++++++++###++######+++';;;;;;;;;;'''++++##++':,,,:''+++++++++++''+####+#######++#############################++++++++++++++++++#####+#+#######################
++++++##+#######++####+#####+##++++++++++++###++######+++';;;;;;;;;''''++++##+':,,,:'''++++++++++''++####+######++#############################++++++++++++++++++######+#########################
++++#+############+###########+#+++++++++++###++######+++';;;;;;;;;'''+++++##'::,,:;''+++++++++++''+###+'+######++#############################++++++++++++++++++######++########################
++++++#+##############+#+######++++++++++++###++######++';;;;;;;;;;'''++++##+;:,,,:'''+++++++++++'++##';;+######+++############################+++'''''''+++++++#+######+########################
+++++##+######+################++++++++++++###++######++';;;;;;;;;;''+++++#+;:::,:'''+++++++++++''+++'::'+######+++###########################++';;;:::;;;'++++##################################
++++++#########################++++##++++++###+#######++';;;;;;;;;''+++++++';::,:''''+++++++++';''++;:::'#######+############################+''::::,:::::;'+++##################################
++++#+#########################++++###+++++###+#######++';;;;;;;;;'''++++++;;:::''''+'+++++++'::'++::::;+#######+#+##########################+;:::::,,::::;;'++##################################
+++++#########################+++++###+++++##++#######++';;;;;;;;;'''+++++';:::'''''++++++++;,,:'+:,:::;+#######++###########################':;;;';:::::;::;'+##################################
++++#++#######################++++####+++++#+++#######++;;;;;;;;;;'''+++++';::'+'''''+'++++',,,;+;,,:::;+######++############################+;'+++';::::::::;+##################################
++++#+########################+++######++####+########+';;;;;;;;;'''++++++';:'+''''++';'++':,,:;',,,:::'#######+++###########################+++++++':::::::::'##################################
+++++########################++++######++###++########+';;;;;;;;;'''++++++;;'++'''++;:,::;:,,,:':,,:::;+#######+++############################+++++++:,::::;;;;##################################
+++##########################++++##########+++########+';;;;;;;;;'''+++++';''++'''':,,,,,,,,,,:;,,,,::;+#######++#############################+++++++;,::::;;;'##################################
++++#+#######################+++############++########+';;;;;;;;''''+++++''''+''';,,,,,,,,,,,:;:,,,::;'+#######++#############################+++++++;::::;';;;##################################
+++++#######################++++###########+++########+';;;;;;;;'''+++++++';++'';,,,,;:,,,,,,:;,,,,::;'########+##############################+++++++::::::';;'##################################
+++#########################+++#############++########+';;;;;;;;'''++++++';;++';,,,:;+;,,,,,,:;,,,::;;'#######++##############################++++++;::;;::;;''##################################
++++#+######################+++#############++########+;;;;;;;;;'''++++++;:;++':,,,;++;,,,,,,;:,:::;;;+#######++###############################++++'::::;;;;'''##################################
++#+#######################++++#############+########+';;;;;;;;'''++++++';:'+';,,,:'++;,,,,,,;:,:::;;'+#######++##############################+++';;::,:;;;;'''##################################
+#+########################++++#############++#######+';;;;;;;;'''++++++';;'+;,,,,'+++;,,,,,:':,::;;;'+#######++############################+''';;::::,::;;;;;+##################################
++#########################+++##############+########+';;;;;;;;'''++++++;;;'':,,,;++++:,,,,::+::::;;;'########++############################+:::::::::::::;;;'+##################################

Simply amazing, isn’t it? It’s way cooler than ASCII boobs, but admittedly not as perky.

*Original image found here, discovered via Google Images.

Come to KCDC 2010!

26 May

So I’ll be one of many fine speakers at the KCDC this year. JPeck also got the nod. We will both be imparting our wisdom con mucho gusto in the “Agile Track”.

I’m probably the millionth person to liken KCDC to ACDC, but I’m probably the only speaker who has gone to the trouble of making a rockin’ KCDC logo using…you guessed it! PowerPoint! Looks amazing, huh? Yep, I thought so too.

I hope people stick around to 4:30 PM to hear my schtuff. They should; a good time will be had by all.

(FYI, I tried to get free beer for all audience members, but it just wasn’t possible this time)

What’s your name?

20 Apr

In .NET, having access to the name of a property can be valuable in several scenarios, such as data-binding. However, hard-coding the name of the property in the designer or in a string variable is error prone and can be a pain to deal with when refactoring. We need an easy way to get the “code” name of an object’s property, not it’s property value.

The Props class below has a static method for getting the name (as a string) of a given object’s property. This method uses the generic Expression type to build an expression tree and access the member (property/field) information. I wish there was a way to get rid of the “() =>” syntax, but I can’t seem to find one.

Try it out:

using System;
using System.Linq.Expressions;

namespace PropertyNames
{
    class Program
    {
        static void Main(string[] args)
        {
            Car audi = new Car();

            Console.WriteLine("The name of the property with the engine data is {0}",
                Props.GetName(() => audi.Engine));

            Console.WriteLine("The name of the property with the spoiler flag is {0}",
                Props.GetName(() => audi.HasSpoiler));

            Console.Read();
        }
    }

    internal class Car
    {
        public bool HasSpoiler { get; set; }
        public string Engine { get { return "V8";} }
    }

    internal static class Props
    {
        public static string GetName<T>(Expression<Func<T>> expression)
        {
            MemberExpression memberExpression = expression.Body as MemberExpression;
            if (memberExpression == null)
                throw new ArgumentException("Property specified is invalid");
            else
                return memberExpression.Member.Name;
         }
    }
}

A Call To Share

12 Apr

I was asked to speak at the upcoming Kansas City IT Symposium. I’ve attended the event before and found that most of the sessions are geared toward upper IT management. My session will target middle managers and I’ll discuss some of the anti-patterns of management I’ve seen while working for and with different IT people over the years.

I’m really looking forward to the event and I had a blast creating my slide deck. Here is the opening slide:

I even have some props: a pair of drumsticks and a U.S. Robotics 56k Modem. We’ll see how it goes…

Bruce Schneier Looks Like Fred Armisen

9 Mar

Stop at 0:22

My Take On JPeck’s TDD Example

9 Mar

I had some spare time today, so I caught up on my friend James’ blog. He recently posted a real-world example of TDD taken, I assume, from his real-world job of developing software for a bank.

In the comments section of this particular post, someone named Darren made a case for using interfaces and mocks in the design of the tests and the resulting software. James stated that he would probably try that approach next. Well, the original post is about one month old now and I happen to have T.A.D.D. (Technical Attention Deficit Disorder). So, I’ve posted my version of James’ real-world TDD example. A few comments about my design:

  • I changed the design of the HumanResourcesService. I renamed it to “IEmployeeService”, extracted and renamed the methods and created a criteria-based lookup.
  • I renamed the “HumanResources” class to “EmployeeManager” and made it work against the IEmployeeService abstraction.
  • I exposed the GetEmployeeById as a public method in EmployeeManager. I figured this would be a good thing to provide consumers.
  • I used Rhino Mocks and SpecUnit as the mocking and TDD frameworks, respectfully.
  • I generated a report (HR.Specs.html) showing the different specifications the test code is exercising. The report looks nice, but to get it I had to use underscores in the spec class names (yuck). Was it worth it? Probably.

In general, I tried to follow the AAA (Arrange, Act, Assert) pattern in the spec code. I’ve included James’ very-slightly-modified code in the solution for reference (I renamed a couple of variables I found offensive). Click here to download the code. Rename it to a .zip file to access the contents.