.   ..:/@BNNNNNBNNNBBN/.                ..   .                         ... ...'X$C^0@:                 .       ..    . .   ...........................................................'
!!!!!!!!!!!!^X$NNNNNN@CX/$NNNBX:!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%@$//@0!:!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^!!^^^^^^!!!^^^^^^^^^!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
!!!!!!^!!!+0BNNNN@%+!!!!0NN$X!!!!!!!!!!!!!!!!!!!^!!^!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+0$0^C@%:!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^!^^^^^^^^^^^^^^^^^^^^^^!!^!!!!!!^!^!^!!!!!!!!!!!!!!!!!!!!!!!!
.       .:$NNB0+'  .  ..!!..  ..   .........................X@X............. ......^@$+!0X'  .. ...... ........... ...   . ... ................'............................ ............. .....
         $NN$:                     '%C%.        .          ^@0+.   '+/^.         ./$@^/C!                                            ............... .                          .. . .. .. . ...
:::':::::CBNBC+:::::::::::::::::::CBNBN0'::::!C@B$@@X.::::::::::::XBNBB$C!':::::^0B$CX^::::::::::::::::':::::::::::::::::::::::::::::::!!!!!:!!::::::::::::!!!!!:!!!!!!:!!!!!!!!!!!!!!!!!!!!!!!!
^!^^^^^^^^+X@BNN@X+^^^^^^^^^^^^^^0NN0+B@:^^^%NNNXCNB/:^^+@$X!^^^^@BB$%BBBBC:^^^/$B$@+:!^!!!!!!!!!!!!!!^!^!^!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^%CBNN$X!^^^^^^^^^^0NB%:XN$:^^CNNB++$C^!^^/BNNX:^^^CBB$^^BBBB+!^^/$B$%:!^^!^^!!^!^!!^^!!!!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^+^^^^^^^^^^^^^^^^^^
^^^^/%XCCCCX%+^^^+X0BB%!^^^^^^^XNB^!+B@X!!CNN@!!^!!^^^^$BB/:^^^XBN$^!@BB$^!+:+$BB%:^^^^:!^^!!^!^^^!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^+^^^^^^^^^^^^
^^XBNN0X%%/++/!!^^^^^XN%!^^^^^+BB+!^@C:!^XNB$:!^^%%:^^0NB+!^^^/BB$^!0BB$^+%'^@BB0:^^%+:!^!^^!!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^/NBNNN0CX%++++++/%C0@N/!^^^^^@NX:+@%:^^/BN0!!+XC+:^^XB@!^X+:^$B$+%$BB@+X/:!XBBB++C%!!!^^/%XX/^!!^!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^+@NNNNNNNMMNNNNNNNNN@+:^^^^^/BB!^$%:!^+$N0:+X$X!^^^%B$:%C!!^CBBC@%$B$X0!:^^@BB$00^:!^^+@$$$$$$0/!:!!^^^!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^+X0$BNNNNNNNNN$0X^!^^^^^^^+@BC@/:!^^^0B@@@%!!^^^^@BCX/:!^^/0@C!+$B$X:!^^^%$$0+:!!^!^+0^%$@$$$B@X!:!^^^^^^^^^^^^^^^^^^^^^^^^^^^^XX^:^^^^^^^^^^^^^^^^^^^^^^^/CX^!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^+
!!!!!!!!!^++++^!!::!!!!!!!!!!!!!!::!!!!!!!!::!!!!!!!^/+::!!!!!!:!!!^^::!!!!!!!!:!!!!!!!!!+@0:!/0$$$@^':!!!!!!+%!:!!!!!!!!!!!!!!!+$BBX:!!!!!!!!!!!!!!!!!!!!!!XBN$+:^C/::!!!!!!!!!!!!!!!!!!!!!!!!^
         .      .                             . .    .      .        ..... ...... ......'00' ...:C$B$!......'$@^ ....'%^ ......^$B$!.:/+......:%+ .. ......XNNC'..C$C...!%%.  .    .  ..   ....'
                                                                                       '00:       +$B@.    ...     .^$B@.   .X$BN@X+%B$$X.  ..$BX^^!    !0BNBC%!.'.  ..%BB$C    ':  .^%^        
                                                                         ..   .     ..:@$!.... ....+B$' ../B@.   .'0$BB@....'CBB+.'0BC:$/....%0/BNNX....!$N@:..!$N+..'0NC:@C...:$$':@NB!........
!::!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^$B%'!!!!!!!!!/B@::!XBB+:!!!/$C!BB0'!!+$NB+!!0BX:XBC::+0+!@NB%:!!!XNN0:!^%BNC:^^@NX!CNC:!+$NC+BNN%:^!!^^^^!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+$BC'!!!!!!!!^%0$^:!XB@!:!!!XBX.XNB^:!/BB@!!^/B%:+@!:!%0!^$N$++/'!CBBX:+!!BB/:^!XN%'/@!:!+$NCX@@N0://'!!!!!!
 ..                                    .. .         .   .  .................. ..../+@B0:''::!+/X0$BC' .:$C.!/..XNBX.@B+ .:$B%.++.$C 'C'../%.'@N@^X/../B$!:%!.XB!'/:'$C.'C: .'@NB@%:$@'X%    ..  
                                                                                  !BBBBBBBBBBBB$$%:    0@'/! .C%/B$CN@^..@BX+C: :BX!C: .%+..0N0X0:  ^B$+X%' ^N^^%..:N%!0: ..0NN@:.'$C@+         
                                                                                   :/+%XC0X%/^:.     . /+^  .%'  .!+^.  ^@X^.    !^!  .^.  .%X+.  . %@%: .  :%+.    !+!     :+^                 
                                                                                                                                               .      .         .   .    ....                   
                                                                                                                                                                  ....   ...                    
..                                                    .                                                                                                            . ..  ...                    
.                                                     .                                                                                                                .... .                   
                                                    ......''..             .   ... .                      ....    .                                                      ..                     
       .''..                                     ..........''::'. . .   .      ................ ..        ........                                                     .                        
       .. .....                           ..........'''''''''''':''''.............''''''''..''.....     ....''''''.....                                                                         
           ..''.                        ....''''::::::!!!!^^^!!:::::::::''''.''''':'''::::::::'''...    ...'::!!::'''''.....                                                                    
       .'^^^!::''                   ....'::::::!!!!!!^^++++//%%//^^!!!:!!!!!!:!!::!!!!!!!!!:::!:'...''.....':::::::::':'''......                                                                
     '.^0B@X+^^!:.            . ....'::!^^^^^^^^++^+//%XCXXC00@00C0CX%/+^+++^^^^^^^^^^^^^^^^^!!!!::'''!!:''::!!!!!!!:!::::'''''''.....                                  .  ..                   
     ..:!^!:...':.            ...''::!^^++++///%%XXXXXXC@@@$BB$$B$$$$$$@CX%%/+++++^+++++++//////+^^!!:::..':!!!!!!!!!!:::!::!:::::'''.....     .                                                
      ..'.     .        .......''::!!!^+//%XCC000@@@@00@$BNBNNNNNMNNBNNBBBB$$@$$@@@0C00@0@00000CX%/^^^!:..:!!!!!!!!!!!!!!!!!!!:::::::::'''.....  .  ...                   .                     
       .'.              ......''::!!!^+/%%XC0@@$$BBNBBNMMM###MMMMMMMMMMMNNNMNNNNNNNBBNNNB$$$$@@@CCCX%/+:.'!!^^!!!!!!!!!!!!!!!!!!!!::::::::''''.....                                            .
       ...               ..'.':::!!^+///XXCXCCCXCCCC@@BMM############MMMMMMMMMNNMMNMMNNNNNNNNBNBBNBB@0%:':!!^^!!!!!!!!!!!!!::::!::::::::::::::''..                 .                            
                          ..'':!!!+/%%CX%//+++++++++//+++++%0@$N######MM#MMMMMMMMMMMMMMMMMMMMMMNMMMNB@^':!^^^!!!!!!!!!!:!!!:::::::::::::::::::''.... .             .                 .          
         .'':'              .':^^/%C0@@@@@@@00C0@@$BNNNMN$C%/^!^+CN##MM###MMMMMMMMMMNBBBNNNNMMMMMMMN@!':^^^+^^!!!!!!!!!!!!!!!::::::'''''':::''..     . ..                                     ..
        .^//!.                .!^%C0@@$00X%%%///%XC0@@@$$BBNN$C%/%$MMMM#M##MM#M0/^!!:'::::!!^^/X$NB0::!^^^+++^^^!!!!!!!!^^+^!!::'..    .......       .                               .          
         .:'.                  .'!/X00%+/XXCCCCC00CCXXXC@$B$BBNMM###MMMMMMMMM#MB@0000@@0000CX%+!:X%':^++++^^^^+^^!^^^!!!!^^^!::..              .                                      .         
                                 .'^//'^$BBBNNNB$0X/:'!/XX0BBBNNMM#########MMMMMMNNNNBNNNNMMNNNB+''!+/%%/++^^^+^^^!!!!!!!!!!:'.                                .                     .          
                                    .':':%@$BN@$N0!+:  .:+//+/X@BN######MNNNNB$$00C00CC00@$BNN@+:!+/%CCX/++++^^^^^^^!!!!!!::'.    .                                                      .      
                                        ''..'!!::'.  .           .'!/C@@$BB$@@@@$$$C%/+/X000/''!^+//%%%++++^++++++^^^!!!:!:'.                          .            ....  .                     
                                           ..'''':'''''             .':'!XX$BNNNBC+/+'.'!X^..:!^++++++++^^^^^^^^^+^^^!!!:''.                                                  ...  . .          
          ...                                  ..''''.               ''. ':/@BMB^:'.. ..!^ .:!^^^^^+++^^^^^^^^!^^!!!!!:'..                                         ..           .. .            
       .  ':'..         ....'''''':'''...........'!!!'               ..  .':':+%^'':'''^/' .:!^^^^^^^^^^^^^^^^^!!!::::'.                       .                                                
..'::^^!:..!::'.......':!^+//+++++/////++++^!!^^^^+^'                ....  ...'::::!!^^:''  ':^^^^^^^^^^^^^!!^^^^!!::'.                                              .                .       . 
  ..':+//+:'!!::''::!%XC$$BBBBB$$$$NNNBBB$$$$$$$BB$X!'.          . ........:!:'.........''...:!^^^^^^^^^^^^^^^^^!!!:..   ^C'!.%'/0'!' +0C/+%+:X//!   .^. .+0!./+%^'%C.%X/%X'                  ..
      .'!^^:''!!:!+++X@BNMMMMMMMMMMM####MMMMMM#MNNB@C%+!:'.....''':::::''':XCX/^!:::''.''':. .'!^^^^^^^^^^^^^^!^!!!'.    0XXX/!.C%%+ :C%  +^.+X^'   '%.  ^0%^0%+^.!0/0: '%.                     
..::.....':!!':!!!^%C0$NNMMMMMMMMMMMNNMNMMMMNNNB@@@@BBBBB$@00CC@$$BBBB$0X+CBB$@@0XXC%/+^+^^:. .':!!!^^^^^^^^!!^^^^^!'.  'N+/X'%0!'%//X!  ^+ ^@/^.  :@%//%X!.0/+X:XC'^! ./'                      
'!:...  ..':!^^!^^^/C@$BNMM#MMMMNNNNNBNB$$@@@0@@00CC0@$NNNNBBMMMMMMMMMMMNNMNMMMMNNBB$@0@@C%^.  ..'::!!!^!^^!!!!!^^!!!:'.      .......        ..     ... .    .                                  
!!'        .:^//^^++%C@BBNMMMNNNNNNMM@^''!%C0C00CC00000@@BNMMMM##MMMMMMNNMMMNMMMMMMMMMNNBB0:       ....:!!!!!^^^!!!!!:'.       '/.'.+.!/''. ://+//^.^^^!  .^/.''!^^^.    ^+//%!                 
!'...:::'''. .':^/^^+/XC0$BNNNNMMMMB+.':^+::!+/%XXCC0C0$$BNMMMMMMMMNNNNNBNNNNNMMMNNNNNNNBC:              ...'''''''::'.        CXXC+^.C0%+.'@X!.^^.^X/^. .'0C%+.X%+'  .:XC:.+!                  
. .:^+^!:!!!!!+^:''..'^%C0BNBNMM##@:'!XC@$0/^:''!+/%X00@$NBBBBNNMMMNNNBBNNNNMMMMMMNNN$C+'                          ...        .$/%0:/@^:X!/C+..!/.+0+^. ./0!:%'0%+'.%%%0@. +^                   
 .'!/%+!!!!!!!^^!:.    .^X@NNNNMN%'.!/0@$BBB0/^!:''':^+/XX0@BBBNNNBBB$$@$NNNMMMNB0%+:                                          . .. .. ...'. . .. .''.   .. . .''. .'  ..  .      .'            
 '!^^^!!!!!!!^!!'.    ..:::+X@0/:.'!%CC$$BBNNN@X++^^!:''':!^/+^++%CCX%^/$NNBC/^'.                                              ....'''....                                                     .
   ':!!^^^^^!!'.       .:^^+/!:::!/XXC0C0$$BBNMMN$CXCCX+^^^^^^!!!^^^+%0$C+:.                                              .':^+%XC0000^!:+'!/:.: :+%///+.^^^^.'////^%%/^    .^..^/%::++.:.   .'0
     '!!+/!:.      ..  .':::++^!/C@@@00000@$BBNM####NB@00CCXXXX0@0CCC%^.                                               ..:!/%C0@@@CX@@XBXX:%C!/..0C!.:+':X/!..'''/'+C^'+...!@+.%%''.^0!/:    .'C
       ...               .:::!!::^/C@B$@0@BNNMMM##############MMN%'                                                    .:^++^!^++!:'@0%BCC$/'X^+X/. :X.!0+^''::'X:'X^0'.%%%0X!@X+/'CC.%:   . ...
                         '^^^^^!^^^+X@$BNNNMM################MM$+.                                                      .'''.   ..  ..'::''....'    ...':!!::....    .  .  ..  ..  .         .  
        .:::.            .:^^^^^+++X@$%/XC@NM###############N0+.                                                                                   ..':!:'..                                ..  
       .!%0B$C/^:.        :^^^++++++++++++^!!^/X0$$BNNNBB@X/:.                                                                              ......''!!:'. ..............''''''''''....          
 .   ..''''':+X@$@+'.     .!%+^^^^+++^^!:::'.''':!^++++^!:'                                                                          .....    ...':::'....''::!!!^^//%%XXCCCCCCXCX%/+^!:''.... .
...'.  '':!^!!!^^/C@C+:..   '!!^^^^!:'''.....''''':!!:'.....     .                                                                  ....'.......''::'..':!+/%C0$BNMMMMMMMMMMNB$$BBNNBB@C%/+^!:''
:'''''   .'!!!:!!!^+/%%X0%:''.......  ..     .......      ..'........                                                        .....''''..'''::::'''''..'!+%C$BNMMMMMMMNB$@$BNMNNB@$BMM#MNB@0CX%/+
!!:'::'.  '^!::!!!:::!^/X0C+^!''':::'......             ...'''':''''. .                                                   .'!^/%%/^:''...''::::::'...':^/X0BNBBBB$BBB@C%^^+X@B$@0$$NMMMMMMNB$@0C
!+^!::::'  ^%+!:::::''''!!+++^'':^///+!::::::'''''''.....''::::!^+X/.                                                     .'^X0$@X^:'....''.....     ..':^/XCCXX0@0@CC%^::!!+%/+%0BMMMMMMMNNNB$@
^^^^!!^+^:. ^XX%/^!:::'''''''...:^/%X%X^:'::::::::!::'':::::!^%0$C^.                                                        ..:!!::'''.''''...  .         .':!^/C$$$@%^:''...':^X$NNNNBB$@000@$$
^+/+++^+^^!:./@00CX/+!!:''''...'^/XX//%%+!'''':::!!!!!!!^+%0$$C^'..                                                            ....'''''''''''..........     ..'!+++^:'.      .:/C0C%%00CX%^!!+X
!^^^++/+/+^^::C$BB$$@0CX/^:''..'^%0@@C%/+^!!!:::!+^^^+%C$BN$%!'.....                                                            ..'''''''':::::'''''''''''....                  ..''':!!/%^:':!+
^++^+/^+%X%/+^:XNNNNNBB$$@C+!:''!X0XXXXX%/X@C+^/%%X0@BMMN@/:''.......                                                           ..''::::::!!^^!!!!!!!!!!!!::''.           .....   ....':!!:::!^%
!:!+/^++^+/%/^!!/$NNNNNNMNMNB@0C0@CX0@NM##MMMMNM#####MNC^:::'.......                                           ... .             ..:!!!!!^^++/+++^^^^!!^^+^:'..        ..':!!!!:'''''.':!^^^^++/