++++++++++++++++++++++++>=!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;??>++++++++)+++++++++++++=*************************************************************************-'
++++++++++++++++++++++++??;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;>=>++++++++++++++++++++++=*************************************************************************-'
++++++++++++++++++++++++??;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;)=>++++++++++++++++++++++=*************************************************************************-'
++++++++++++++++++++++++??;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!%>++++++++++++++++++++++=*******************************************************)++>>?************-'
++++++++++++++++++++++++>=!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;>%>+++++++++++++++++++++=***********************************************))+>>?===?>))?)***********-'
++++++++++++++++++++++++>=!;;;;;;;;;;;;;;;*+)*))+*;;;;;!**!!;+=+++++++++++++++++++++=****************************************)+>??===>+*;:~,.'``~?)***********-'
?>>++++++++++++++++++++++=*;;;;;;;;;;;;;*+!~^,,^~:)*;*+*;--:!*=>++++++++++++++++++++=*********************************))+>????>)!;-^.'``````````~=)***********-'
$$#$&%=?>>+++++++++++++++?>;;;;;;;;;;;;)*^,,,,,,,,^!+*^,,,,,^-??>+++++++++++++++++++=*************************))+>????>);-~,.'``````````````````~=************-'
)+>?=%&$$$$&%=?>+++++++++>=;;;;;;;;;;;**^,,,,,,,,,,,;^,,,,,,,,-?>+++++++++++++++++++=********************>???>+)*;:~,.'`````````   ```      ````^?************-'
))))))))+>?=%&&$$&%==?>>+>=*;;!;;;;;;;*^,,,,,,,,,,,,~-,,,,,,,,,*?+++++++++++++++++++=)******************++~,.'```````````````               ````^?)***********-'
?>++)))))))))))+==++>>?=%%&+;!?!;;;;;!;,,,,,,,,,,,,,^:,,,,,,,,,-?>++++++++++++++++++=*******************+*````````  `                         ``~=)***********-'
$$$$&%=?>+))))))==)**)))))>?;!?);;;;;*-,,,,,,,,,,,,,,;,,,,,,,,,~?>++++++++++++++++++=*******************+*``````                              ``~?)***********-'
&&&&&$$$$$&&>)))==))*)))))??!;++!;;;;*:,,,,,,,,,,,,,,;,,,,,,,,,:?+++++++++++++++++++=*******************+*`````        ``  ````````           ``~=)***********-'
%%%%%%%%&&$%?)))==+)))%$&&$$*;+)*;;;;!!,,,,,,,,,,,,,~:,,,,,,,,^)?+++++++++++++++++++=*******************+*```       ```''^~.;!-+*^```         ``~=)***********-'
%%%%%%%%%%&%?)))==+)))%$$###>;+!+;;;;;*-,,,,,,,,,,,^;^,^~~~~:)*=++++++++++++++++++++=*******************+!```      ``'>!;>+;?!~?*^```         ``^=)***********-'
%%%%%%%%%%&%?)))==+)))%&&&$$%!+;+!;;;;!)~,,,,,,^,,,;>*)++)))=#$%=?>>++++++++++++++++=*******************+!```       `'?*~?>:>;-+*:```       ````^=)***********-'
%%%%%%%%%%&&?)))==+)))%&&&&&$?+;*+;;;;;!):^,,,*&-~*);;;;;;;;;?>+>??=====??>+++++++++=*******************+*```        `*.'-'~^^.'```````````.^'``^=)***********-'
%%%%%%%%%%&&?)))==+)))%&%&&&$?+;;>!;;;;;!));:-*&++!;;;;;;;;;;*>))))))))+>>=====?>>++=*******************+*```     `````````````'`.,^,:;:;;-+!:``,?)***********-'
%%%%%%%%%%&&?)))==+)))%&%&&&$?;;;)*;;;;;;;;!***!;;;;;;;;;;;;;)$&%=?>++))))))))++>??%%*******************+*```````````'.'^;-`!-,=:&*%)=+*%?!+-?'`^?)***********-'
%%%%%%%%%%&&?)))==+)))%&&&&$%+)+!;;;;;;;;;;;;;;;;;;;;;;;;;;;*%#$####$$&&%?>++)))))))=*******************+)',^.:!~~+)^+!:+*>,??~===!?%>**!*:-!-``^?)***********-'
%%%%%%%%%%&&?)))==+)))%&%&$=!;;;;;;;;;;;;;;;;;;;;!!!!))))+++++=$&&&&&$$$$$$$$&%%>)))=*******************+).?*+?)))^-++~?)*>!+!***-~~^,''````````^=)***********-'
%%%%%%%%%%&&?)))==+)))%&%&$);**;;;;;;;;;;;;;;;!)++)*!!!!!!;;::;>&&&%%%&&&&&&&&$#=)))=*******************>)'?*^>;+:)+^:*:,.'.`````````````    ```^?************-'
%%%%%%%%%%&&?)))==+))+%&&&$!;*>);;;;;;;;;;;*)+)*;;;;;::::;:::::;?&&%%%%%%%%%%%&$=)))=*******************>)'-'`,`.`'``````````'.`~~.**,``      ``^?************-'
%%%%%%%%%%&&?)))==+)))%&&&$);*!!;;;;;;;;;!++!;::::::::::::::::::!%&&%%%%%%%%%%&$=)))=*******************?*````````` `.^'!!-*.)>!*-~=!,``      ``,?************-'
%%%%%%%%%%&&?)))==+)))%&%&$=;;;;;!;;;;;;)+*;;::::::::::::::::::::?&&%%%%%%%%%&&$=)))?*******************>*```       `*=,>,>:+)***:-?;~`       ``^?************-'
%%%%%%%%%%&&?)))=%+)))%&%&&&?*;!)*;;;;!+*:::::::::::::::::::::;::+$&&%%%%%%%%&&$=)))=*******************>*```      `'?>++!)'+-~^--',,'``      ``,>************-'
%%%%%%%%%%&&?)))=%+)*)%&%%&&&$%*!;;;;!+!::::::::::::::::::::::;::*&&&&%%%%%%%%&$=)))=*******************>*``       `'~`^,,`````````````       ``.>************-'
%%%%%%%%%%&&?)))=%+)*)%&%%&&&$&;;;;;;+*;:::::::::::::::::::::::::;?&&%%%%%%%%%&$=)))=*******************>*`         ````````` `   `  `        ``.?************-'
%%%%%%%%%%&&?**)=%+)*)%&%%%&&$%;;;;;!+;:::::::::::::::::::::::::::+&%%%%%%%%%%&$=)))=*******************>*``         `````                    ``.>************-'
%%%%%%%%%%&&?*))==+)*)%&%%%&&$%;;;;;)!:::::::::::::::::::::::::::!=&%%%%%%%%%%&$=)))=*******************>)``                                ````.>************-'
%%%%%=%%%%&&?)*)=%+)))%&%%%%&$=;;;;;+;::::::::;;;;!!;;!;;;;;;;!)?&&&%%%%%%%%%%&$=)))=*******************>)`      `                         `````'+)***********-.
%%%%?%%%%%&&?)*)=%+)))%&%%%%&$?;;;;;>;:::::;*)*!!;;;;;:;;;;)&&&&&&&&%%%%%%%%%%&$=)))=*******************>)`      ``                ```     `````'+)***********-,
%%%?=%%%%%&&?)))=%+)))&&%%%%&$>;;;;;>;:::;)*:~^^::-:*::!*>=&&&&&&&%&&&%%%%&&%%&$=)))=*******************>)`      `            ```````````````:^`'+)***********-,
%%=?&%%%%%&&?)))=%+)))&&%%%%&$+;;;;;+!::!=)+%&=%####@%!;!?&&&&&&%%%&&&&&&%&&&%&$%)))?*******************>)``             ```````,``````'~`^.`:~`'+)***********-,
%%>%%%%%%%$&?)*)=%+)))%&%%%%&$+;;;;;*)::+$&&&=?%#@##$%+)!:)&&&&&&&&&&$%?%&&&%&&$%)))=*******************>)``             `.'```.*'.^,-,.!':,`:~`'+)***********-,
%>%%%%%%%%$&=)))=%+)))&&%%%%&$);;;;;;+;:!==%==?>+)!;;;;;;;?$&$$&&%%%&=*;;>&&&&$%==+)=)******************+)````` ``` ``  ``:,`:''*'.)!):.!'-^`~-`'+)***********-,
??&%%%%%%%$&=)))=%+)))%&%%%%&$*;;;;;;*)::;!!!;::::::::::!%$$&?)!;;;;;!)+*!%&&$);:!==&?>+)***************+)```^.`````''````:,'!''*'.)*):'!'-~`~-`'+)***********-,
>%%%%%%%%%&&=)))=%+*))&&%%%&&&!;;;;;;;)):::::::::::::::;?$$?!;;;;;;;;;;;*>&&$?;;*+>)***+?>**************+)```:~,.`^'^:`~^`:,`;''*'.+*);'!'-~`~:`'))***********-,
%%%%%%%%%%$&=)))=%+*))%&%%%&$&!;;;;;;;;+);::::::::::::;>##>;;;;;;;;;;;;;;=$&$>;)>!;;;;;;;+>*************+)`:,:~-~`;'^;`~~`:,`!'')'.+*);'!.~-`^;``))***********-,
%%%%%%%%%%$&?)))=%+)))%&%%&&$%;;;;;;;;;;*+);:::::::;;*=$$=;;;;;!***!**;;;=$$$>!+;;;;;;;;;;*)************>)';^:^~^`;'^:`^~`:^'!''*..+*);`;.~:`,;``!)***********-,
%%%%%%%%%%$&?)))=%+)))%&%%&&$=;;!*)+++>+)))>>*!!!*)++*);+*;;;;;!**)+??+!)+)++)+*;;;;;*>>>+)+************>)`;^:^~~`;',:`~-`:^'!''*.'+*)!`;^,:`';``!)***********-,
%%%%%%%%%%&&?)))=%+)))%&&&%>>)*!;::-~^,,,,~~))))))*!;;)++;;;;;;;;;;;;;!)?:,,,,~!;;;!>+!;;*+?)***********>)`;^:~-~`;.,;`^:`:^`!'`!,')**!'-^.;'.!,^*)***********-,
%%%%%%%%%%&&?)))?%+)))%&&$!,,,,,,,,,,,,,,^;^~)!;;;;;;;*)*;;;;;;;;;;;;;;;;*:---:))*)>!;;;;;;!>)**********+)`;^:^-~`;.,!`,-`-^`;.`:,'***)-*)*>+>>+))************-.
%%%%%%%%%%&&?)))=%+)))&&$%~,,,,,,,,,,,,,,-:,,~)*;;;;;;+*!;;;;;;;;;;;;;;;;)$$$$)**>?!;;;;!!!!!+**********+)`;^-~~~`:..!`,-`^^';^^***>**))+)********************-'
%%%%%%%%%%&&=)))=%+)))&$$>,,,,,,,,,,,,,,,;^,,,~)*;;;;!*)!;;;;;;;;;!!!!!;;)&$$%;;;+*;;;*>>++>>?+*********+)';^~^^~`:.';.^!:)+>??>>>+)**************************-'
%%%%%%%%%%&&?)*)=%+)))&$$;,,,,,,,,,,,,,,~;,,,,,^)!;;;+:);;;;;;;;;;!*))++)>$&$?;;!+;;;++!;;;;;)?+********))':~~--;:))+?>>>++))*********************************-'
%%%%%%%%%&&&?)*)==+)))&$%^,,,,,,,,,,,,,,::,,,,,,~)!;!+-);;;;;;;;;;;;;;;;!?$$$+;;));;>);;;;;;;;!)********)?)>?>>>>++)*)****************************************-'
%%%%%%%%%%&&=)))==+)))&#+,,,,,,,,,,,,,,,;^,,,,,,,~)!);*>;;;;;;;;;;;;;;;;;*&&$*;;*+;));;;;;;;;;;***************************************************************-'
%%%%%%%%%%&&=)))==+)))&$;,,,,,,,,,,,,,^-;,,,,,,,,,~)?!?);;;;;;;;;;;;;;;;;*&&$*;;;)+>;;;;;!;;;;;)**************************************************************-'
%%%%%%%%%%&&?)))=%+))+&$!::::::;:;!!!!!!^,,,,,,,,,,^*=);;;;;;;;;;;;;;!;;;+&$$);;;;*>;;;;!>*;;;;+**************************!***********************************-'
%%%%%%%%%%&&=)*)=%>+>?>!-~~~~:*>*-^,,,,,,,,,,,,,,,,^)*;;;;;;;;;;;;;;*>*;;=$&$?;;;;;+!;;;+);;;;!+**************************************************************-'
%%%%%%%%%%&&=)))=%??!~,,,,,,,,,,^:*:^,,,,,,,,,,,,,~)*;;;;;;;;;;;;;;;)*;;>$&&$&!;;;;!>)*>);;;;;*)**************************************************************-'
%%%%%%%%%%&&=)))=%+~,,,,,,,,,,,,,,^:!:^,,,,,,,,,,~)!;;;;;;;;;;;;;;;;+!!>$$&&$=;;;;;*)!*!;;;;;;)***************************************************************-'
%%%%%%%%%%&&=)))%*^,,,,,,,,,,,,,,,,,,:*-,,,,,,,,:+!;;;;;;;;;;;;;;;;!+!!;%&&&$);;;;;)*;;;;;;;;+)***************************************************************-'
%%%%%%%%%%$&=))>)^,,,,,,,,,,,,,,,,,,,,^;!^,,,,,;);;;;;;;;;;;;;;;;;;)-,,,:%$$=;;;;;;!!;;;;;;;)+****************************************************************-'
%%%%%%%%%%$&=)+>~,,,,,,,,,,,,,,,,,,,,,~~:*^,,^*);;;;;;;;;;;;;;;;;;)*,,,,,;&$*;;;;;;;;;;;;;;!?)****************************************************************-'
%%%%%%%%%%&&=)>*,,,,,,,,,,,,,,,,,,,^:*>!^-:,~+*;;;;;;;;;;;;;;;;;;>!^,,,,,,)=;;;;;;;;;;;;;;;;?*****************************************************************-'
%%%%%%%%%%&&=)>~,,,,,,,,,,,,,,,,,,:+*;;)+*;;+!;;;;;;;;;;;;;;;;;;*)-,,,,,,^**;;;;;;;;;;;;;;;;?*****************************************************************-'
%%%%%%%%%%&&?)+^,,,,,,,,,,,,,,,,~**;;;;;;)));;;;;;;;;;;;;;;;;;;;)-;,,-;*+=>;;;;;;;;;;;;;;;;;?*****************************************************************-'
%%%%%%%%%%&&?))^,,,,,,,,,,,,,,,-+!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!:^;!))*;;>!;;;;;;;;;;;;;;;;!>*****************************************************************-'
%%%%%%%%%%&&?)+~,,,,,,,,,,,,,,:+!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*~,-);;;;+);;;;;;;;;;;;;;;;;!+*****************************************************************-'
%%%%%%%%%%&&>)):,,,,,,,,,,,,,-);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!!,,^*!;;)+;;;;;;;;;;;;;;;;;;))*****************************************************************-'
%%%%%%%%%%&&?))*,,,,,,,,,,,,~*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*~,,,~);;!!;;;;;;;;;;;;;;;;;;)******************************************************************-'
%%%%%%%%%%&%>)))~,,,,,,,,,,^!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,,,,,:*;;;;;;;;;;;;;;;;;;;;;+******************************************************************-'
%%%%%%%%%%&&>)));,,,,,,,,,,:*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!~,,,,,^!!;;;;;;;;;;;;;;;;;;;!+******************************************************************-'
%%%%%%%%%%&&?))))~,,,,,,,,^!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!:,,,,,,,~);;;;;;;;;;;;;;;;;;;))******************************************************************-'
%%%%%%%%%%&&?)))>!,,,,,,,,-!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!^,,,,,,,,-*;;;;;;;;;;;;;;;;;!+*******************************************************************-'
%%%%%%%%%%&&?)))=>~,,,,,,,!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!~,,,,,,,,,,;*;;;;;;;;;;;;;;;;*?*******************************************************************-'
%%%%%%%%%%$&?)))=%+^,,,,,-*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!-,,,,,,,,,,,^!*;;;;;;;;;;;;;;;++*******************************************************************-'
%%%%%%%%%&$&?)))=%=+^,,,,;!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!:,,,,,,,,,,,,,^!;;;;;;;;;;;;;;;)********************************************************************-'
%%%%%%%%%%&&?)))=%=+*~,,^*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!;,,,,,,,,,,,,,,,^*;;;;;;;;;;;;;;+********************************************************************-'
%%%%%%%%%%&&?)))=%>^~*:,^>*;;;;;;;;;;;;;;;;;;;;;;;;;;;;*;^,,,,,,,,,,,,,,,,-*;;;;;;;;;;;;)*********************************************************************-'
%%%%%%%%%%&&=)))%=-,,,;*-)!+!;;;;;;;;;;;;;;;;;;;;;;;;!):,,,,,,,,,,,,,,,,,,,;!;;;;;;;;;;*)*********************************************************************-'
%%%%%%%%%%&&=))+%;,,,,,~*+:;>+!;;;;;;;;;;;;;;;;;;;;;*+-,,,,,,,,,,,,,,,,,,,,^!;;;;;;;;;!+**********************************************************************-'
%%%%%%%%%%&&=))?!,,,,,,,,^:;~-*+*;;;;;;;;;;;;;;;;;;+*~,,,,,,,,,,,,,,,,,,,,,,-*;;;;;;;!+***********************************************************************-'
%%%%%%%%%%&&=)>+^,,,,,,,,,,,,,,~!++*!;;;;;;;;;;;;)+:,,,,,,,,,,,,,,,,,,,,,,,,,-*;;;;;;*)***********************************************************************-'
%%========%=>)>~.,,,,,,,,,,,,,,,,,~;)++)*!!!!*)+);^,,,,,,,,,.,,,,,,,,,,,,,,,,,;;:::!+*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-'
,,,,,,,,,......''''''''''''''''''''''.,,,,,,,,,,.''''''```````````````````'```'.''...'''''''''''''''.'''''''''''''''''''''''''''''''''''''''''''''''''''......''
----------;)!--------------------------;!---------:!))!:--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-~~~-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,'
;;;;;;;;)?>!;;;;;;;;;;;;;;;;;;;;;;;;;;;;>!;;;;;;;;;;;*?=?)!;;;;;::::::::::::::::::::::::::;;;:;;;;;::;;;;:;;;;;;:::;:::::::::::;;;;::::;;;;::::;;;:::::::::;;:^'
;;;;;!+>+!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;)+;;;;;;;;;;;;;;)?=+!;;;;:::::::::::::::::::::::::::::;:;::::::::::;:::::::;:::::::::::;::;:::::::::::::;:::::::::;;;;~'
;;!)>+*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!+;;;;;;;;;;;;;;;;*>=+!;;;;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;::::;;:;;;~'
!+?)!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!>;;;;;;;;;;;;;;;;;;*?=);;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;~'
>*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!?!;;;;;;;;;;;;;;;;;;;)=>!;;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!?!;;;;;;;;;;;;;;;;;;;;!>=!;;;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;!!-'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!?!;;;;;;;;;;;;;;;;;;;;;;+?!;;;;:::::::::::::::::::::::::::::::::;:::::::::;;::;:::::::;;;:::::::;;;;;:;;;;!!*)+>?===?;'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!?!;;;;;;;;;;;;;;;;;;;;;;;>>!;;;::::::::::::::::::::::::::::::;;;;:::::::::::::::::;;;;;;;:::::;;;;;;;;!*+?===?>+**!;;~'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!?!;;;;;;;;;;;;;;;;;;;;;;;!?);;;:;;::::::::::::::::::::::::::;;;;:;;;;;;:::::::::::;;;;:;;::;;:;;;;;*)?=?>)!;;;;;;;;;;~'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*>;;;;;;;;;;;;;;;;;;;;;;;;;*?!;;;;;;:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*+?%?)!;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;));;;;;;;;;;;;;;;;;;;;;;;;;;>%===???????????????????=?????????????????????????????????????????=&&=>*;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+!;;;;;;;;;;;;;;;;;;;;;;;;;;!%>)))))))**))))**)****************************************)***)+?%=);;;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!;;*+;;;;;;;;;;;;;;;;;;;;;;;;;;;;>=)*********************************************************)+?=>!;;;;;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+*:;*++!;;;;;;;;;;;;;;;;;;;;;;*%+)****************************************************)*)+??>!;;;;;;;;;;;!)+++++)!;;;;;~'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!;!?>+>=*;;;;;;;;;;;;;;;;;;;;;;;;;=>)))***********************************************)*))+?%>!;;;;;;;;;;;*>=?+))))+>>);;;~'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*^.^:!++++*!;;;;;;;;;;;;;;;;;;;;??)*)*********************+*************************)))?%?!;;;;;;;;;;;!>>*;;;;;;;;;!+>);~'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!*'`````'.~:*)+>)*!;;;;;;;;;;;;;;??)))*********************+***********************)))+%?*;;;;;;;;;;;;*?);;;;;;;;;;;;;;+>-'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+-````````````'^-!)+++)*!;;;;;;;;>?))**********************************************))?%+;;;;;;;;;;;;;*?*;;;;;;;;;;;;;;;;!:'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*!'`````````````````'.^:!)>>+)*;;;=?))))*******************************************)+==*;;;;;;;;;;;;;*?!;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!).``         `````````````',~;)+>>&%?++)))))**************************************)+=?!;;;;;;;;;;;;;!>*;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+~```  ```          `````````````',~;*>===?>+))))********************************))>%+;;;;;;;;;;;;;;;>);;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;);```` `'``````````         `    ` `````.^:*+?===?>+)))))))*********************)))?%);;;;;;;;;;;;;;;)>;;;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*+.`````'?:>*-``````````             `````````'.^-!+=%%=?>+)))))*****************)+?=*;;;;;;;;;;;;;;;;>!;;;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!+^```` `^?*>-^`,+;!-.`````````              ````````',-;*+?==?>++))))*))*********)?=!;;;;;;;;;;;;;;;;*>;;;;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!+^```````;)>)*'`:).?+-`:^.,``````                   ```````',~;)?===?>++))))))))*)>%!;;;;;;;;;;;;;;;;;+);;;;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!+~````````~^)'```+:'=,``);=?~)^:~``````````              ````````'.,-!+?===?>++)))+%);;;;;;;;;;;;;;;;;;>*;;;;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!>-```     ````````!.^?'``*%+=?!=:+!~>!^`````````            ```` ```````'.,-!+?===?=?;;;;;;;;;;;;;;;;;;;>!;;;;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;!>~````      `````````'.```!?,$+!)`->+):=-+,!,.,``                    ``````````'.,-;)>+>)*!;;;;;;;;;;;;;;>!;;;;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;;;;;;;;;;;;;;*>~``````          `````````''`:.^?*=:=+&-!&%:^=+>````````````            ```` ````````'.^-!+>>+)*;;;;;;;;;+*;;;;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;;;;;;;;;;;;;*?~'``````  ``  ``     ``` ````````'^..).>:?*=^.>?:```'?>;``'`````             ``````````````'',~:*+>+)*!;;:+);;;;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;;;;;;;;;;;;*=?*:~,'``````````````````      ` ````````.^;'!*)!)+```~?.?-)?>-'^``````         `  ````````````````'',-;)>++?>;;;;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;;;;;;;;;;;)>!;!)+>++*:^.'`````````````         `   ```````'.;*^*'`!*'?*?'^=;$,)-;-,'````````   ``````````````````````'.^:+;;;;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;;;;;;;;;;+>!;;;;;;;!*+>>>*;~,'`````````               ````````'-``;>>*~?,;>+=)?~!:&>~`-~.````````````````     ``````````'*!;;;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;;;;;;;;*>*;;;;;;;;;;;;;;!*)+++)!:^.'``````````````           ``````````-+),?~&>``^?'``~%>::*-```````````         ````````-);;;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;;;;;;!++!;;;;;;;;;;;;;;;;;;;;;!*+??>);~,'``````````                ````````,`;-``;)```.=.;>~>:)^'~``'`````            ```.);;;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;;;;;)?);;;;;;;;;;;;;;;;;;;;;;;;;;;;!!)+>>+*:^,'```````                  `````````^,```->`+:`*)=,:+:?>;.^````````````  ````;);;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;;;)?+!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!*)+>>)!-,'```````                     ``````.,`~?+=-='+!=,.:;)'+,`,.'`````  ````.+!;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;;)>>!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!?%=>+*;~,'`````  `                  ``````',''+>?,=^-,>=>%'`+;+=).``   ````-+;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;)?>*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!%>)++>?==?+!-^.'`````````           ````     ``''`~))^=,;+`'=.^?,```   ````'!*;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;*>?=>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!=?))))))))++>?==?+!-,'`````````      ```      `````````,`-~`~?`!*```      ```.)!;;;;;;;;;;;;;;;;;~'
;;;;;!)>?>)!*?;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;>=+*******)))))))+>?==?>!-^.'````` ``                  ``````',`!^``       ````,+;;;;;;;;;;;;;;;;;~'
;;;;+>+*;;;;;?*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;>=+))***********)))))))++>?==?>);^.'````         ````       `````````        ````~>!;;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;>);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;>%+))******************)**))))+>?===?+!-,.```````````` ````         ``       ``````->!;;;;;;;;;;;;;;~'
;;;;;;;;;;;;;)+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!=&>)*)*************************))))))+>&%==?+;~,'``````````                   ` `````->!;;;;;;;;;;;;;~'
;;;;;;;;;;;;;)>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+?>%+)********************************)))+))+>??==?+*:~,'`````````````````````  `  `````~+*;;;;;;;;;;;;~'
;;;;;;;;;;;;;*>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*?>;!%+)*************************************))))))))+>=%%=+!-^.'````````````````       ```,+*;;;;;;;;;;;~'
;;;;;;;;;;;;;*>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!>>*;;*%)********************************************))))))+=?!)+>+)!:~.'````````````    `````.));;;;;;;;;;~'
;;;;;;;;;;;;;)>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*>?*;;;;)=))*******************************************)**))))+%!;;;;;*+>?>);^,'`````````````````';>!;;;;;;;;~'
;;;;;;;;;;;;;)%>!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*+?>*;;;;;;??)*************************************************)))??;;;;;;;;;!!)+>>+*;-,'````````````,?>*;;;;;;;~'
;;;;;;;;;;;;;+))?>)!;;;;;;;;;;;;;;;;;;;;;;*)>?>);;;;;;;;!%+)***************************************************)+%+;;;;;;;;;;;;;;;!)+>>+*:^.'``````-)!>+!;;;;;~'
;;;;;;;;;;;;;?!;;*>????>>+))))**!!**))>???>+*;;;;;;;;;;;)%)*****************************************************)>%);;;;;;;;;;;;;;;;;;;!*)>>>+!-^.'!!;;)>*;;;;~'
;;;;;;;;;;;;!>;;;;;;;!!**)++>>>??>>>>+**!;;;;;;;;;;;;;;;=?)******************************************************)>%);;;;;;;;;;;;;;;;;;;;;;;;!)>??>=!;;;!>+!;;~'
;;;;;;;;;;;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;)%+)******************************************************)+=&+;;;;;;;;;;;;;;;;;;;;;;;;;;;;!!;;;;;;*>+!~'
;;;;;;;;;;;;?*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*%>)********************************************************)?>>>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;)?:'
;;;;;;;;;;;!>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!=?))********************************************************)?>:+>!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-'
;;;;;;;;;;;)+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!?=)**********************************************************)>?;;*?+!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;;>*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!==+)********************************************++************)+=;;;;+?*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;*>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*==)**********************************************))************)+%*;;;;*?+!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;;+);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;)%?))************************************************************))=>;;;;;!+?+!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;!?!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!?%>))**************************************************************)>%!;;;;;;!+?+!;;;;;;;;;;;;;;;;;;;;;;;;;;;;~'
;;;;;;;;;)>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+%?+)****************************************************************))=+;;;;;;;;;)?>*;;;;;;;;;;;;;;;;;;;;;;;;;;^'