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