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