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