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