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