------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------
------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------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------