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