:::   :::              :::       :::::::::::          :::    :::          ::::::::::         :::    :::                      ::::::::::          ::::::::: 
      :+:+: :+:+:           :+: :+:         :+:              :+:    :+:          :+:                :+:    :+:                      :+:                 :+:    :+: 
    +:+ +:+:+ +:+         +:+   +:+        +:+              +:+    +:+          +:+                +:+    +:+                      +:+                 +:+    +:+  
   +#+  +:+  +#+        +#++:++#++:       +#+              +#++:++#++          +#++:++#           +#+    +:+                      :#::+::#            +#++:++#:    
  +#+       +#+        +#+     +#+       +#+              +#+    +#+          +#+                +#+    +#+                      +#+                 +#+    +#+    
 #+#       #+#        #+#     #+#       #+#              #+#    #+#          #+#                #+#    #+#          #+#         #+#                 #+#    #+#     
###       ###        ###     ###       ###              ###    ###          ##########          ########           ###         ###                 ###    ###