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