ooooo   ooooo       .o.       oooooooooo.   oooooooooooo  .oooooo..o 
`888'   `888'      .888.      `888'   `Y8b  `888'     `8 d8P'    `Y8 
 888     888      .8"888.      888      888  888         Y88bo.      
 888ooooo888     .8' `888.     888      888  888oooo8     `"Y8888o.  
 888     888    .88ooo8888.    888      888  888    "         `"Y88b 
 888     888   .8'     `888.   888     d88'  888       o oo     .d8P 
o888o   o888o o88o     o8888o o888bood8P'   o888ooooood8 8""88888P'  