_   ___  ___  _  __  ___  __
                                       /_\  |  \ |  \ | /  '  |  (__`
                                      /   \ |__/ |__/ | \__.  |  .__)

                ___  ____ ____  __  ___  ____     _   _    ___      _   ____ ___ ____ ___
                |__) |__  |__  /  \ |__) |__     /_\  |\ | |  \    /_\  |__   |  |__  |__)
                |__) |___ |    \__/ |  \ |___   /   \ | \| |__/   /   \ |     |  |___ |  \



::::::::::::::::::::::::::::::::::::::::::::::::::::  ::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::  ::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::''   '    ' ' '::::::::::::::::::::  :::::::::::::::::''   '    ' ' '::::::::::::::::::::
:::::::::::::'                   '''::::::::::::::::  :::::::::::::'                   '''::::::::::::::::
:::::::::::::                         ::::::::::::::  :::::::::::::                        :::::::::::::::
::::::::::'                            :::::::::::::  ::::::::::'                          '::::::::::::::
:::::::::                               ::::::::::::  ::::::::                               :':::::::::::
::::::::'      ::::8888888bo.           ':::::::::::  ::::::::'         :  8:                 ':::::::::::
:::::::.      ::::8888$888888888o.        ':::::::::  ::::::::      :   :: 88:                  ':::::::::
::::::::      ::::888$$$8888$$8888b       ':::::::::  :::::::       ::: ::888booooo'oo,..       ':::::::::
:::::::'    ::::::8888$$8888$$88888b       :::::::::  ::::::''    ::::::888888888888888""b      ::::::::::
:::::::    ::''...'""888888888P""""8       :::::::::  :::::.:    ::''...'""888888888P" oo8      ::::::::::
:::::::    ::.==- -  \8888PP""'-ooo        :::::::::  :::::::    ::.==::::  8888PP""'-o88       ::::::::::
::::::     ::::48' 8',`:8::  '8' 8>        '::::::::  :::::      ::: .;..;\:`:8::  ::"",>        :::::::::
:::::.   o ::::::::::: :8:: oooooood8       .:::::::  ::::::     ::::."""".: :8:: oo....od8       ::::::::
::::::   q8::88888888:.:8l: :88888888       ::::::::  ::::::   8b::::888888:.:8:: :888$$888       ':::::::
:::::'    p:::88$$$88:.:$b   88$$$88:       .:::::::  :::::    q8::888$$$$8:.:8l: :88$$$$88         ::::::
:::::.     ':::8$$$8P::d$$:  888$88::       ::::::::  ::::::     ':b:8:$$8P::d@@:  :88$::::        .. ::::
:::::'      :::88888::.""".:: 8888::'       ::::::::  ::::::      :8:8:888::.""".:8b:88:::         ' :::::
::::::      '::88888:::88::::: 888::        ::::::::  ::::::      '::8:888:::88:::"8:888::         :: ::::
::::::       ::::888::888888:  88P:'        ::::::::  ::::',       ::::888::888888: :88P:'          ::::::
:::::'        :::88-'""^-^"'-: 88:          ::::::::  :::::'         :::88"'"^--^"'-: 8:           '::::::
:::::          '::8o."$$$$$",:::'            :::::::  :::::           '::8o."..:::",::'             ::::::
::::'          '.'::::oeeeo::::'              ::::::  ::::'           '.':::.oo$$.:::'              ':::::
:::'            . .'::88888P:' .               :::::  :::'            . .'::8888$P:' .                ::::
::'             ::. . . . . . ::                ':::  ::'             ::. . . . . . ::                 '::
:               :::':::::::::::                       :               :::':::::::::::
             .:.::::::::::::::'               : .  .               .:.::::::::::::::'               : .  .
        ..:::::::::::::::::::::.                   .          ..:::::::::::::::::::::.                   .
                                      _   _  _ ___  ___   __  _ ___
                                     /_\  |\ | |  \ |__) /  \ | |  \
                                    /   \ | \| |__/ |  \ \__/ | |__/


::::::::::::::::::::::::::::::::::::::::::::::::::::  ::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::  ::::::::::::::::::::::'..'::::::::::::::::::::::::::
:::::::::::::::::::'''''''':::::::::::::::::::::::::  ::::::::::::::::::::'''''' :::::::::::::::::::::::::
:::::::::::::::''               ''''::::::::::::::::  ::::::::::::::::''              ''':::::::::::::::::
::::::::::::::'                      :::::::::::::::  :::::::::::::::'                    ':::::::::::::::
:::::::::::::'.  :.:. . . . ....      ':::::::::::::  ::::::::::::::'.       ,:::'          ::::::::::::::
::::::::::::'  d88888888888888b::::    :::::::::::::  :::::::::::::'               ...      ':::::::::::::
::::::::::    d888888888888888$b:::.   :::::::::::::  :::::::::::              ,.   ""'      :::::::::::::
:::::::::: ' .8888888888888888$8:::: `. ::::::::::::  :::::::::::        ,o8oo8888oooo::::    ':::::::::::
::::::::: .: :8888888888888888$$8:::: : ::::::::::::  ::::::::::        o8oooooooooo888::::   . ':::::::::
::::::::' : .d88888888888888888$8::::   ':::::::::::  ::::::::: .:      88oooo8ooo8oooo8o::   :: '::::::::
:::::::: :' :88o""""""V8o8o8o8P"""'::.   :::::::::::  ::::::::: :'     8oooo8ooooo8oo8oP''::  '::.::::::::
:::::::: '  :88P::::::.:88888:,:""":::   :::::::::::  ::::::::'.:     d""""""V888o8"  ,,:..:   :::::::::::
::::::::    :8::4{,'8>::8888::4{,'8 ::   :::::::::::  :::::::::'    '.:::::::"q88:' ,:""":::   '::::::::::
:::::::::   o:o:::oo:::::88::::::oo:::   :::::::::::  :::::::::     .o:<(,')>::"8l::<(,')>::   ....'::::::
:::::::::   :o:o888888P::88::888888:::   :::::::::::  ::::::::'     :8::',,,,'::8l::',,,,'::   :::::::::::
:::::::::d8 ::o:o8$$$P ,d88b,:88::::::db.:::::::::::  :::::::' .    :o:o8oooP::l8l:: "ooo"::  ::::::::::::
:::::::::88 :::o:o8$8  b.oo.dl':::::::}8b:::::::::::  ::::::::'     ::o:o888:: 88l::':8$P:::  ':::::::::::
:::::::::q8 ::o:o.88P o8P"""4b..::::::"dP:::::::::::  :::::::  .    :o:o.88P  d888:::.:P::::   '::::::::::
::::::::::qb:::o:o:o:'         '::::' dP::::::::::::  :::::::.:'    ::o:o:o:' "888:: '::::'    ...::::::::
:::::::::: ql:o:o:o:   ._,__.    :::  P:::::::::::::  ::::::::.:'   'o:o8o::..o ""     :::  ':.:::::::::::
::::::::::.  \:o::::.=""""""""=.:::.  ::::::::::::::  :::::::::.     :o:8::. : :  : :. ::.   .::::::::::::
:::::::::::::.`':::::::-'''''-:::::;  .:::::::::::::  :::::::::'.   .:.'::: ,,"""""". ' .;  .'  ':::::::::
:::::::::::::::::::'':::::::::::'::.':::::::::::::::  :::::::    `..:::. :'  : :::: :  .:::''      '':::::
::::::::::::::' ::::....       ..:::.  '':::::::::::  ::::          :::::.. .:l: : l: .::::           ':::
:::::::::::'    '::::::::::::::::::::      '':::::::  ::             :::::::. ll::ll:.:::::             ::
:::::::'         :::::::::::::::::::'          '':::  :              `:::::::::::::::::::'               :
::::'            ':::::::::::::::::'              ':                   `::::::::::::::::'                
:'                 `'::::::::::::'                                       `'':::::::::' 
                                      _  ___  _  _  __  _  _ ____
                                      |  |__) |__| /  \ |\ | |__
                                      |  |    |  | \__/ | \| |___


::::::::::::::::::::::::::::::::::::::::::::::::::::  ::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::  ::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::'' ' .'' '   ' ' ':::::::::::::::::::  ::::::::::::::::'' ' .' '  '  ''::::::::::::::::::::
:::::::::::::' .  '  ''   .   '   ':::::::::::::::::  :::::::::::::'  . '  ''   .   '   ':::::::::::::::::
:::::::::::. .`;.  '. '  '    ' `.' ':::::::::::::::  ::::::::::::'. . `;  '. '  ' .  ' `.''::::::::::::::
::::::::::  `.  ``   ,.   ' .      ,' ::::::::::::::  ::::::::::   `.   `   ,.  '` .      ,' :::::::::::::
:::::::::.` .,  .::,ooooooooooo.::. `;  ::::::::::::  :::::::::.  ',  .:::,oooooooooo.:. `;  :::::::::::::
:::::::::   '' :::d88888888888888b::.   ':::::::::::  :::::::::  ` . ::::d8888888888888b:.   '::::::::::::
::::::::. .` .::o:l8888888888888888b::   :::::::::::  ::::::::.  .`.::o::l88888888888888b::   ::::::::::::
::::::::  `. ::o:oo88888888888888888::. .:::::::::::  :::::::: ` . ::o:oo8888888888888888::. .::::::::::::
:::::::. `..::o:oo888888888888888888l::  :::::::::::  :::::::. .`.::o:oo888888888888888888o:  ::::::::::::
::::::::   ::o:88888888888888888888888: .:::::::::::  ::::::::   ::o:8888888888888888888888o .::::::::::::
::::::o8o  :o::,......'"88888",-====-"8:8:::::::::::  ::::::o8o  :o::""'....."88888P",====."8:8:::::::::::
:::::l":"l ::8::''<'_D>:l888P '4{'_D :8:l:::::::::::  :::::l":"l ::8::''<'_D>:l888P '4{'_D 8::l:::::::::::
:::::",:'.':l8$bb::::::::888:oo,,,,,;;8 8:::::::::::  :::::l,:'.':l888boooooo::888:oooooood"8 8:::::::::::
::::::l;'.'8:l8$$88888b::88l:l8888888ld8::::::::::::  :::::"l;'.'8:l8$$booodb::l88:l8boood8ld8::::::::::::
:::::::`l.'8o:o8$$88888l:88l:l888$$$8 8l::::::::::::  :::::::"o '8o:o88$$$888l:d88.l88$$$$8 8l::::::::::::
:::::::::" 8:o:o:l$8888l:888:l888$$8P:':::::::::::::  :::::::::" 8:o:o888888P;:888b:l888888:':::::::::::::
:::::::::::8::o:o:88888::8$$l:888$8l: ::::::::::::::  :::::::::::8::o88P".o8:o88888Pdo`"88l ::::::::::::::
:::::::::::8:o:o:o88888o' "".,8888l:' ::::::::::::::  :::::::::::8:8o:oo88888o' "".,d88o 8l ::::::::::::::
:::::::::'/.'::o:o888888888888888P:'.:::::::::::::::  :::::::::'/.'8o::88P888888888888P88P.:::::::::::::::
::::::::'/:: :::o:o"P""",""",""8P:'.::::::::::::::::  :::::::' /:: :8o:"8o. aeaeaeaeae 8P.::::::::::::::::
::::'_.-'\::\ '.'o:o"b"""""""'ol:: :::::::::::::::::  :::''_.-'\::\ '8o::88b."4$$$$P",dP: ::::::::::::::::
__.-::::. :::\  :.o':"88888888l":'.:::::::::::::::::  __.-::::. :::\  "::'8888booood8P"'.:::::::::::::::::
:::::::::.`:::  :.''::"888888P:: .::::::::::::::::::  :::::::::\`:::  :.''"P8888888P:: .::::::::::::::::::
:::::::::: \:::\  . . .'""""""' .:::::::::::::::::::  ::::::::::. :::\  . . .'""""""' .:::::::::::::::::::
:::::::::::  :::\. . . .:::::o:|:\.'::::::::::::::::  :::::::::::\ :::\. . . .:::::o:|:\.'::::::::::::::::
::::::::::: `:::::. ::o:o:::o: |::\`-.':::::::::::::  ::::::::::: `:::::. :o:o:o:o:: |::\`-.':::::::::::::
:::::::::::: \::::\.:::o:o:o:: \:::\:::.':::::::::::  :::::::::::: \::::\.::o:o:o:o::\:::\:::.':::::::::::
                              _   _   _   ____ _   _  __    _   ____  __  ___ ____
                              |\ /|  /_\  |__  |\ /| /  \   |   |__  (__'  |  |__
                              | | | /   \ |___ | | | \__/   |__ |___ .__)  |  |___