:::::::::xxxxxx:::::::::xxxxxx::::::::::::::::::::
:::::::::xxxxxx:::::::xxxxxx::::::::::::::::::::::
:::::::::xxxxxx:::::xxxxxx::::::::::::::::::::::::
::::::::::xxxxxx::xxxxxx::::::::::::::::::::::::::
:::::::::::xxxxxxxxxxx::::::::::::::::::::::::::::
:::::::::xxxxx::xxxxxx::::::::::::::::::::::::::::
:::::::xxxxxx:::xxxxxx::::::::::::::::::::::::::::
:::::xxxxxx:::::xxxxxx::::::::::::::::::::