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