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