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