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