.d8888b.  888          8888888b.                   888b    888          888    
d88P  Y88b 888          888   Y88b                  8888b   888          888    
888    888 888          888    888                  88888b  888          888    
888        888  .d88b.  888   d88P .d88b.  .d8888b  888Y88b 888  .d88b.  888888 
888  88888 888 d88""88b 8888888P" d88""88b 88K      888 Y88b888 d8P  Y8b 888    
888    888 888 888  888 888       888  888 "Y8888b. 888  Y88888 88888888 888    
Y88b  d88P 888 Y88..88P 888       Y88..88P      X88 888   Y8888 Y8b.     Y88b.  
 "Y8888P88 888  "Y88P"  888        "Y88P"   88888P' 888    Y888  "Y8888   "Y888 
                                                                                
                                                                                
                                                                                
 .d8888b.                                                                       
d88P  Y88b                                                                      
Y88b.                                                                           
 "Y888b.    .d88b.  888d888 888  888  .d88b.  888d888                           
    "Y88b. d8P  Y8b 888P"   888  888 d8P  Y8b 888P"                             
      "888 88888888 888     Y88  88P 88888888 888                               
Y88b  d88P Y8b.     888      Y8bd8P  Y8b.     888                               
 "Y8888P"   "Y8888  888       Y88P    "Y8888  888