#    #   ######   #####   ###     ######   #######      #    #   #       #    #    #   ######   #    #
##   #   #    #     #      #     #         #            #    #   #   #   #    #    #       #    #    #
# ## #   #    #     #      #    #          #######      #    #   #  # #  #    #    #     ##     #    #
#   ##   #    #     #      #     #         #            #    #    #     #     #    #   #        #    #
#    #   ######     #     ###     ######   #######      ######    #     #     ######   ######   ######