!!!!!!!!!!::::::::::::::'::''''''::::::::::::::::::::::::::::::!!!!
!!!!!!!!!!:::::::::::'...''..  .....''::::::::::::::::::::::::::!:!
!!!!!!!!!!:::::::::::'::''..  ..'   ...:::::::::::::::::::::::::::!
!!!!!!!!!!:::::::''.':!^!:''.          .'''':::::::::::::::::::::!!
!!!!!!!!!!!:!:::..'':'..''....              .'::::::::::::::::::::!
!!!!!!!!!!!!!::'..'''!^+!:''''''..           .'::::::::::::::::::!!
!!!!!!!!!!!!!:'..':':!^+//^!:'...             .:::::::::!!:::::!!!!
!!!!!!!!!!!!!'..':!!^+%/+++!::'...            .:!::!:::::!!!!::!!!!
!!!!!!!!!!!!:..'.':!++^/X+!!^!:'.....         ':::::::::::::!::!!!!
!!!!!!!!!!!!:.....'::^/+^+%%//++^!'.  .'      :::::::::::::::::!!!!
!!!!!!!!!!!!:.  .''.:!:!+%/+^^+/+^'..::       ':::::::::::!:::::!!!
!!!!!!!!!!!!:. ...'':'!^/C0X%CCC%^^+/:.      .'::::::::::!:::::!!!!
!!!!!!!!!!!!!' .''...'!+X@$@@CCXXXX+'....    ::::::::::::!!!:::!!!!
!!!!!!!!!!!!!::X0%:'':+CBB$$@@0X%^^:....     '::::::::::::!:!::!!!!
!!!!!!!!!!!::!!CB0%!'!X$$@CXC%+^!'...        ::::::::!::::!:!:!!!!!
!!!!!!!!!!:::::X$CB@'!@NB$0X+/^!:..!^^:      :::::::::::::::!:!!!!!
!!!!!!!!!!:::::!$MN@^!@NMMNNB$0/!'^0@$@!     :::::::::::::::!:::!!!
!!!!!!!!!!:::::::X$@X^%@NNNNB$@XX0@BNMMX..  '!:::::::::::::!:::!!!!
!!!!!!!!!!::::::.  .X00$BBB$@@@$$CCMMMMC:   :!::!!:::::::!:!:::!!!!
!!!!!!!!!:!:::!'   .CNB$BB$@@$BB@0BNB$@%:  '!!::!:!::!:::!::!::!!!!
!!!!!!!!!!!!!!:.    XBN$$B$@@$BBBBB@0C!+   :!!!!!!!!!!:::!!!:::!!!!
!!!!!!!!!!!!::'.    :BB$00@$$$BN@%/%%+%^    :!!!!!!!!!!!!!!!!!:!!!!
^^!!!!!!!:''.'.      !0$@0XC@$$$@@$@C/+@0:  '.!!!!!!!!!!!!!!!!!!!!^
^^^!^!:'.......        !X0CX%C@$$@$0/^!'%N/.C..:!!!!!!!!!!!!!!!!!!^
^^^!:'.........          .!++^:!%C0CX+'. '@X+   .'!!!!!!!!!!!!!!!^^
!!::'''..... .                    ...      :.      ':!!!!!!!!!!!!!^
!:''''''........                          ...'       '!!!!!!!!!^^^^
!:''''....  ..... .                       0@$@'.      :!!!!!!!!^^^^
::''....... ... ..                      ./NBB$+.       :!!!!!!!!!^^
::'........ ..                      .^X@$B$C%!.         '!!!!!!!!^^
!'....... ..       .   .          ./BN$0%+++++!:.        '!!!!!^!^^
'............     ..   ..        :@NMNBB$@X^::.           !!!!!^!^^
.......... ..      ..  .'       ^BNMNNMM$^.  ..           :!!!!^!^^
..........  ..     ..  ..     .%NNNNNN$$/!++:..           '^!!!!!^^
........... ..    ...   ..   .CNNNNNB0@$$$$!              '^^^!^^^^
...............   ...    .. !0BBNBN$C$B@XX+...            .!^^^^^^^