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