------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
XX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXX
--XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX----
----XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX------
------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------
--------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX----------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------