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