.                                                                                              
                                                                                                 !                                                                                              
                                         ..'''                                                  .+                                                                                              
                                         '''''                                                  :/'                                                                                             
                                         .'''.                                            ..''''%X^'''                                                                                          
                         .''''....       ..''     .....                                .'''.   ./%%''.   .... .....            .'''''.  ..''''.    .....''''.      .....                        
                         ''''''''''''..  ''''  .'''''''''       ..'.....''''         .''''     !+++'.  .''''   .'''''      .'..  .''''''. .''''.     .'''''.       .'''                         
                        .     ''''       ''''.      .'''''    .'''       .'          ''''      /+++!    ''''    .''''    .''.      .'''''. .''''      '''''.       ''.                          
                              ''''       '::'     .'.''::'.  ''''.                  .''''     !/^+++!   '''.    .''''   ''''         '''''  .'''.     ''''''      ''.                           
                             .:::!''... .:!!'    . ^^+%XXX%!+!:'''''....            '''''    .+/^!^^+'  '''.    ''.    .'''.      .'':^+/+^!!+/^:.   .'''''''   .''.                            
                       ....'''!!::      .:!!'....'.!++/XXX%/XXX/!:'.'               '''''.   ^+/^^^^+:  '''..'''''     ''''.  !..!^+++XXX/++//X%!:  .:'..'''''  ''.                             
         ''.... . .':'::''''!!/+^^'. ...::!!'.  . .:^^^/%%+/%%X%/+^!::!..            ''''''. ^+/+^^!!^: '''   .''''.   .'^+^/'''!^^++%XX/^^^^+/+!::.'' ...::':'::'.                             
       .. ..::!^!:::!:::''''!^///%!:''::++//^:'..':!++%%%+++%%////+^'!:^!.'           .'''''!%///++!!!^:'''.    '''::'.:!!+%^%!^!^!^+///^^^^!^^+^:''. .''::!!:::::!^^!:                         
      ....'!^!!^^!^^!:'...::!+++/+!!!^!+//%%/^^:''!!+%X%/++++/%//++/!:!::!^!'           .''/XXXXXX%+++//!''.     :!::::''!!!^!^^^^^^^^+++++++++^//^::!!^!^^^/+^^!!^^:::'...''::'''...           
         :^!!!^^^!!!!:'.':::::!^++^^^^:^^+^^//+^!^^/XX///+//+/////+^!::''''':::!:.         ///%/+/+!!!+++.....   .:^^!!!!..'''':':^+////////++++++!!^^!^^!!!^+^!!::'::''...'::!!!^++^^!:'       
         .'!^^^^^^!!!'::::::!!!^!!!^!!:''!^+++++++%%/++/+///////+++^!:'..''!+!!!!!::'''.   +///^^^^^!^^/!.'':'':::!!!^%+!!'' .:!++/////////////++^^+++^^^:::!!!!!!::'.''':''::':!++++^^^+:      
             '^^^^!!!::::!:. ..'::::^++^^^^++++++++^+//+/////////++++!!^+^^!^+++++^^++++^!^++++^^+^!!!^+:!^^^!!:!!^+^^:'!^///++++//////////////^!!++/+++!::!^+^!!!!!!::!:::::::!!^^++++^:'      
              .^!!!!!^^!++.  .'::'.':+++++++^^^++++^:^++/////////+++++^++++++^!^+^+++^++++++++++++/+^+/!!^^!!!+^!!^!':!^+^+++%%XXX%%%%//////+^!':^+/+++^^^^+/+^'''''    '++:!^^^+++^^^!!!:      
               '!!!!!:...'   .'!..::^+^^^^++++^^^^^+^::^++++//////+++++++++++++^!!^^^+^++++++++////+^^^+^+!!!!:!^''!^^^++++^+++++///////+++!:.:+/!:!!^+//+++++^::'.''.   ^^!!:!!^^!^!^^!'       
                '!::!!^^!'..':'::.':++++^^++^^++++^!::::!!^+++//+/+/++++++++++++^!''^^^^+++++^+/////+++/+++^!!:..:^^+++/++++++/+/////+++/+^:::''::!^///++++///+^!.':'..  .':!^^^!:!:'           
                  .:!:::!^^!!!!:!!^^+^^!:!!!^!^^^+//^^^^^^^!!!^^+///////+/////+++++:':!^+++++^++++//+^+/+^+^^!'^++////////////////+^^^!:!::::!!+//+++^+^+^+++//^^:!:':'::^++^^:!^^              
                     '::!^^^++^^^!^^+^^:!!!!:!:!!!::::!!!!!!!!!!!:!^++//////////+++^':!^^++^+++//+//++/++^^!!''^++///////////++^^!!!^!!!^+++////////+/++++/++/////++++^++^^!!+++^               
                       '^^!!:!!:' .......'.'''....'''!!!^^^!!:'''!^!^^^^+++/////+/+^.'':!!^+++///+//+//+^^!:..'^+//////++++^+^^^+^!!^!!^!!!!^!!:::::''...'::!^^^!!^^+++/+++/++!'                
                               .':'    ..'...  .  ..'!^!!!:..'..!!!:!//^^+^:.:++/+++....':^+//+/+^++///+^:'.. '+///+^!':^^^+++^^^^!''::^^^+/%/+//^:':::!!':''''.:::!!!.'^^^^:.                  
                                  :.':.!:''''   .'...':!'''..''::!!!:^+:^^^'  .:++//!..'::!^+///+^++/++++:'.. !//+^'.  :^^:++!^^+^!:''.':!^/%%%%%:!:'':::!^:::'.::..                            
                                  ''..'':!'''.....'::!!!:':'::'''!^^^^^^^^!:'.  '^++/'.'!^+!+/^++^//+++++::..'+++!   .:!^//^^+/%XX^:::''':^%%%%%/^!:::::!^!^:'!!'.                              
                                    '...':'''''....''!!!+^!!!::!::::!^^^!!:!!:' .!^+++:.:!!:++^++^+++++++!'.://+!'. ::!!!+%/++%//+^!^!!!!^+%X%XXX%^!::!^^^^!::::.. .                            
                                      ..  '. .....'!^!'!+++^^!!^!!!!!!!!!!!!!^^!'.!+/+/^!^+++//+^++++++++!:+//+!:''!!!!^^^!^^!^^+%CX+^^^++//X00@X/+^!!:!!!::!!'.....                            
                                                .  '''!!!+++++^+^!^^!:'::!::!^^+/+^+////++//+//+:++++/+++^+///+!^+/++^!+/+!^^^++^^+%00/++++//+/C%/++^!:'::''''......                            
                                        .        ':'''!!^++++++++/^' .'':'':'.'':!^^+////+++++/+^^+++++/^^+///^^!::.'.:+/+^^^!^+/XX%%C%//+^//^!!+^^^!^:'::''''''.''.                            
                                        .   ...   .:!:'::^^+++++^'.. ..:::!::!^^!!^^!^////++++/+^^+++++++////!!!!!!^^!^%%/////++%XCCX%%/++:!!!::!^!!!^:::::''''''''.                            
                                       '     .'''.!'::  :.:+^!!:!:':::::!^+^++^^^+++++/////++//+^!+^++^+////+++++++^++%0@0CC0000CXXX%%X+!. :!!!:!^!!!^!::::''':::::'                            
                                       ''..''.' !  '..    '!:!!^^++++++++++++++/++//////+//++//++^+++++//////////^+++/X$$@$BNNNNNB$@CXX+.  !^^!!^^^^^^:.       .'::'                            
                                    '^^+////%/^::!  '''.   . '!^+++++///////++//+^!!!+/++/+++++/++++++++////++^^^+////XBB$BNMMMNNB@0X+^'   !^^^!^/%^'           .....  ' .                      
                               ...'!^/%%%%%%%%%:^!^.  :'    .::!++++++++^^!^+!:   .:^+//+++/////++///++++++/++:'. ..!/C00@BBBNNNBC%%/!:.  .^^^^^^//.                              .!:.          
                              .:^:'!+%%%%%%%%%%+^^+' '::'       .::!^+^^++!!!:.  .!^^!:!+++//+++++++/+/+++^!!+^^.   '+/0@$$$BBBB@%/%/!:.  .!^^^++/!                                 !%/!        
                              '!+/^^+%%%%%%%%%%/^+!'.:'!':            '::..'.  '':...'!:^+/////++^^++++++^':'.   !.. :+CC0@00C%/+++^!:.   .^^^+++^.                                   ^/.       
                               !^++:^%%%%%%%%%%^!+''...:''                       ''.'..!+///++++!:^/+^^++^::. ' '.   '!+/++++++++++!::.   .^+++++!                                              
                               :^+^'!/%%%%%%%%/+^^'''  ...' .                     !^^!!^+++/+++/^:!/+^^++^!!:::^'    :^+/++++/+^+^^^!!.   '++++++!  .:                                          
                              ':^^''!/%%%/%%%/:':!^.. ... .                       '//!^^++//++/+:!+/+^+++++!:^/+     :^////+//+++++^!^'   '^+++++!. ':                                          
                                .  ':+/////^. . :+^.' . .                          ^/+^++++/++++++/++!+/++^^!++'     !+/%/////++++^!'!.   '^^^^++!'  ^'                                         
                                   .'. ^//^' .!.+%! . . ''                         '!+//++++!+++/+^+^^+++^/++^:.     !///////+^^^^^+:'    .!^^^^^!'  :^                                         
                               ..''^^! ^%%%^++!!%%^. .:...                          .!!::^^^!+++++:+!^^++^!!!'.     '!////+^^!::::^+.     .':::!!!:   ::.                                       
                             !''^^+/+:.!/%%%/+:+%/:'   ' .                            :'^!:!!++/++:!'^^+/^!!'       !!/+^'...   .':+:     .''.'::''    '!.                                   .  
                             :!.^!//+' '+%%%+!!/%^.. . : '                            . ':::!+/++^^+^+++/+'.       :^^^+^'..      ^%/+:  ...'^!:'.'...  .^.                                  /  
                               .^^/! .'.+%%%+++/+'   .   .                          ..  '. :!//+//////++:'.      '!!^^^+++^''.    /%///^^:''.::.   ...'.'!:                                  %' 
                               :^^+^!'''^////%%/!        .                          ....' '+///+^+^++++:.''.' .  .+////%%%%:..   '//++^!!''''........'''''!                                  %^.
                                ''^^!^^!++^//++^.'     '                          ...'::':+//++++!+//!++/:.....' .'^/^:^/%/'.    .!!+!'':+!::'.:'''':!!::::.                                  . 
                                 ':.   .'.'^//+'.''                             .'  :^++^+///+^+^^!+++!/+:..'   ....:^!::!!'.     :+/+^^':!..    ...''''''''                     .              
                                  ....'::!^///:'::'.'!::                       ''! ^+++++///+/!+:!^+^++++!:!^^!.':!.'!////^'.     !/////^:::'... ........ ..'                                   
                              .   .'':^//%%%%^.:'.':'^!^^'                    :':!^/+^+++//+++++!:'^!!/+/++/^/+'!::!.''^!:.        ''++++^^!!::''':.                                .....       
                             .''!^:...!+/+/+!:^!'...:^^+^:!                  ...:^//+^+!++///+++^!!^+++//++/++++!:'''.''..                                                              ..      
                          '^^+++//++^:.:/' '...:...':^^^^:+!               .  .':!//+++!++///++^++++++///^++/+++!!:'..:.                                                                  ..    
                            '!+/%/!.   ^%!.':!:.:::.!!!!!!+^               ....:^+//+++++^+/++++++/////+/^+^/!++++!!'':.                                                                        
               .'                    ..%/'''::::::^!!^:''^+!             . ..':!+///+/++/+///+++^+/+////+^+^/++^+/^!!!!'.   .                                                                  .
                +!      !'          ..:/:.'':!!:''^%/+. .^!:              .'.::^+///////++^+////^^++////+++^++++++!!!!!'.   ..                                                                  
        :+!.    ..  '  :/+          . .. ''':::'  ^^+^  '!..               .':'!!!^^+/++++++////+^/////////+/++++^!!:::.     .'.                                       .                        
        :/%/:      .'.'^!'         .......''''''  +/^    .'                  '.  .:..^+////////++^/++//////+++^!'  .:''.     ..''                                     '.                        
          !/%!      :!''            ........'''.  !^+.   ::                     .     !+++///+++++++++/+/+/^   . .....        .''.                                   :'                         
            !/:                         ........  :.    .!                       ..   :+++++/////+/////++++!   .   ....        .'.                                  ::                          
              :.                             ...  :.   .!'                         . :+^^^++++++//++^+^+^:++:      ....         ..                                 .'                           
                                              ..  '.  ':.                           ..:!!^^^:.''':'  '!!^!::.     . ...                                            .                            
                                 .             .. .  ':'                                                          ''.'..                                                                        
                                            '!  . .  ''.                                                          ''' ..                                                                        
                                             .  .     ':                                                          ' '. .                                          ..                            
                                                .    .:'                                                          '. '.                                           ..                            
                       .                        .    .!.                                                          '   .                                                                         
                      '                              '!.                                                          '    .