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