/*
TG: https://t.me/OnlyDevERC20
WEB: https://onlydevs.dev
X: https://twitter.com/OnlyDevsERC

*/

//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKkdc;'...............................'',,,;coxOKXNNNXXXNNNNNNNWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXNNNNNNNXKOd:,'......................................',;:cox0KNNNNNNNNNNNNNNNNNNXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXKOxoc,...................'''.....................''',:ldOKKXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXNNNNNNWNNNXKOkdc;''''''.................'''''''.....................',:ldk0XNNNNNNNNNNNNNWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWNX0Odc;,''...'''................''''..........'''................',:lxO0XNNXNNNNNNNWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWNNNNNXOxl:,.........................''''''..........'','''....     .......';cdk0KXXNNNXNNNWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWNNNNWWNNX0xc,..........................''''''''''...........'''''......   .......',:okOKXNNXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWNNNNNNWNNNWWWNKOo:............................'',,,,,''...................''...   .........,:lxOXNNNXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXNNXXXNNNNNNXXXXNWWNXkoc;'.............................'','''................................    ....';lx0KKXXNXXXXXXXXXXXXNNXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXOO0kOX0k00k0NNWKkO0kONXOkkO00Oko;...cddddddddol,..............'ldl'......':dkO00Okdc'. ....:od:. .lool'.....;d0OkKXOO000000000kOOO000000KK0KXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKkKMKkXO0WNk0WNW0ONM0xkoxXWXkdkKWKc.,dOOKWMWXOOk;..............;0MK;.....l0WWKOxxk0NWXx,.  .dWMx..;KMWWO;....;0MXx0XOKMWNKKKKK0kkOKMWNKKKXNNKO0XNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKkXM0kXO0WNO0WNN0ONMOo:cKMXc...;lo:'....;0MNl..................;0MK;.. 'kWW0c'.....;xNMKc. .dWMx. ;KMWMWKc...,OMXdkKkKMNkOK0K00K0kKMXkOK0000NW0OKNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKkXMKkXO0WNO0WNN0ONMO;.,OWWOoc;'........,0MXc..................;0MK:...oWM0,....... .oNM0' .dWMd. ;KMNO0WNd'.,OMXolxx0MNOkOO0OO00kKMKkKWWWNOONW0OXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKkKMKkXO0WNOONNNOkNMk'..,oOXWWNKkc......,0MX:..................;0MK;.';xMMx......    ;KMX; .dWMx. ;KMK,.xNWk,,0MXc,:l0MMNKKKKKkxkkKMXkKWNNWKkXMKOXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXNNNNKkXM0kXO0WNO0NXKdxNMk......,:lxKWNd.....,0MX:..................;0MK; ..oWM0,......  .oNM0' .dWMx. ;KMK; .lXWKOXMX:.':0MW0kOOOOxxkxKMXkKWNNNOONM0OXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN0k00OOKXOONMKkX0OWW0k0kdlOWMk'..:lc,...oNMO. .. ,0MX:    ......,loc'...cXMK;...,kWW0c'.....,xNMXc. .dWMx. ;KMK; ..:0WMMMX:..;0MXdlxxkkxxxxKMXkO00000NWKOKNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWXOKWWK00KNWXO0WXO0WWX0OOKWNO;..'xNWKxoxKWKc.    '0MX:.......''':OWW0xdkXWXd,.''.;dKWWKkxxk0XWXk:....dWMx. ;KMK, ...,kWMMX:..,0MWKO0000OxoxKMWXKKKXWNKOOXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWX000KKKK000KNNNXK0000K0Odc.....,cdO000kl,.     .ldo,..'',;;::::cok0KK0Oxocc::::::ldkO0KKK0kdc;,,,,'cdx:. 'ldl. .....cddo'  .lxxxxxxxxkxdxk00000KK000XNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKK000KXNNNNNNNN0d:'.................     ......',,;::ccccccclcclllllooodddddddddoooooolllllllcc:;,''......   ...        .........,cxO0OkkO0KXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXNNNKkl,............         ....',;;:cccllloooollloooddddddddxxxxxddddxxxxxdddddddooollc::;'....   ..     ............,:oxxxkO0KXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWWNNXXNNKxl,.............        ...',;:cllllllooooooooddddxxxxdddxxxxxxddxxxxxxxddddddddddoooolc:;'...          ..     ...',;::cldOKXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWNNNNNKx:'.................. .....,;:ccllllllooddddddddxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxddddddddolc:,'..              .......'',;cdOKXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXNWNKxc'................   ....',:cllooooooooddddxxxxxxxxxxxxxxxxxxxxxxxxxxxxxkkkxxxxxxxxxxdddddolc:;'...           ........',:ok00KKXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWNOl,..'......   ...     ..',;:looddddddddxxxxxxxxxxxxxxxxxxxxxxxxxkkxxxxxxkkkkkkkkkkkkkxxxxxxddolc;'...         ...   ...';cokOOOKXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWWNNKx:...'.......         ..';:cloddddddddxxxxxxxxxxxxxxxxxkkkkkkkkkkkkxxxxxxxkkkkkkkkkxxkkxxxxxxddol:,'...        ....  ...';:ldxkOKXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWNNKOl'..''........  ... ...';cllodddddddddxxxxxxxxxxxxxxxkkkkkkkkkkkkkxxxxxxxxkkkkkkkxxxxxkxxxxxxxddoc;,...            ......':lxk00KXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWNNNNNNNXOd:....'.................,:loodddddddddxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxxxdoc;'..            ......';ldkO0KXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWNNNNNNNKkl,........ ............';codddddddddxxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxkkxxxxxxxxxdol:,..            ... ..';:loxOKXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKd:,........  ...........,:looddddddxxxxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxddolc;'..               ...';ldkOKXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXOo;'....................';clodddddxxxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxxxddol:,...       .     .....,lxO0KXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWWXkc'....................',:coddddddxxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxxxxdolc;'..            .    ..:ok0KXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWNKx:'....................',:loddddxxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxkkxdolc;'...               ...';lxOKXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWNKx:'....................',:codxxxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxxkxxdolc;'...               ....';lx0XXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKxc'....................',:codxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxxddolc;'...               ....,;ldOKXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKxc,....................';:lodxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxddoolc;'......              ..,:lx0XNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKkc,....................';clodxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxddool:,....                ..';lx0XNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXOl,....................,:clodxxxxxxxxxxxxxkkkkkkxkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxkkkkkkkkkxxxxkxxxxxdddolc,....                ...,cx0XNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNX0o;'..................';cloddxxxxkkkkxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxkkkkxxxdddol:,'....            ......';d0XNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKd:,..................,:lodddxxxxxxxddddxxxdxxkkkkkkkkxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxkxxxxxddolc;'.....           .......;d0XNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKkl;..................,:lodddddoooollllloooooddxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkxxxddddddddddddodxxxxddol:,.......          .....':x0NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXOd:'................';codxxddocc:::::::::::::ccclloddxxkkkkkkkkkkkkkkkkkkkxxxdoolllcc:::cclcc:::looddddoc,'.....              ..':xKNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNX0kl,...............',:ldddolc:;,;;,,,'''''..'''',;clloxkkkkkkkkkkkkkkkkkxxddoc:;,,'''...',,,,',,,;:lloddl:,'....              ..'ckKNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXK0d:'.............',:loddoc;,''',,,''............';:clddxxxkkkkkkkkxxxxddoolc:,'.............',,,,,;:coddoc;'....      ..    ...,lOXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWNNNXKkc'.............,:coddol:;,,,,,,,,,,,;;;;;;;:;;;:cloodddxxxxxxxxxxxxdoolllc:;;,,,;;;:::;,''',;;;;;::coxxdl,.....     .   ....':d0NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXOl,............';codddolc:::::::::cclodooooooolllloooddddxxxxxxxxxxddolllloolllllooddddolc::::cccccccldkxo:'.....           .,cxKNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKOl,............,clodxxdoccccllooooddxxxxxxxxxxddddooodddxxxxxxxxxxxddooooodddddddddxxkkxxddoollllollloodxdl;'.. ...         .,cx0NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXNNXKkl,...........':lddddddollooodddxxxxxxxkkxxxxxxxxdddodddxxxxxxxxxxxddddoodddxxxxxddxkkkxxxxxddddoooooododdoc,.....         ..;lkKNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXNNXOo;...........,cdxxxddddoddddddxxddoooodddooooodxxddddddxxxxxxxxxxxdddodddddoooolllooddooddxxxxddooooddddddl:,...       ....'cdOKNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXNNN0d;'..........;ldkkxxxxddddddddddolc:::::::;;:cloddddddddxxxxxxxxxdddooddddlcc:;,,,;;:::clodddddddddddxxxxxdl;.. .         .,lk0XNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXNNNXXXNN0d:'..........;lxkkxxxxxxddxxddocc::;,'....';;:::cldxddddddxxxxxxxxddddddolc::c:,......',;:cloxxxxdddxxxxxxdo:'........    .,lx0XNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXNNNNNXXX0xc,.........':oxkkxxxxxxddddol:,,:c:,.....,:cc:,;cdxxddddddxxxxxxdddddxdoc::cll,......,;,,,:lodxddxxxxxxxxxdl;........  ...,lx0XNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXNNNNNNXXKkl,.........':oxkkkkkkxxdoooc:;,;col:,''',:cllc:codxddoodddxxxxxxddoddxxdlllool:,'',;:clc:;;:loooddxxxxxxxxxo:'............;oOKXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXKOo;'........,cdxkkkkkkxxxxxolllodddolcclllodddddddxdddddddxxxkkkxddoodxxxddoddoooooooodddoolllooddxxkkkkkkkxo:'........  ..:xKXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXX0xc,'.......,cdxkkxxxxkkkkxxddxkkxddddddxxxddxkkkxddddddxxxkkkkkkxddoddxxxxxdddxkkxxxddxxxxdddddxxxkkkkkkkkxo:'. .........,lOXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXKko:;,''....,cdkkkxxxxkxxxxxkkkxdddxxxxxddddxxxxxddooddxxxkkkkkkkxxxdddddxxxxdddddxxdddxxxxxxkkkkkkkkkxxkkkxo:'.......,;:cldOKXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXKOdc:;;,'...,cdxkkxxxkkkkkxkkkkkxxdddddxxxxxxxxxddddddxxxkkkkkkkkkxxxdddddxkxxddxxxxxxxxxxxkkkkkkkxxxxxxkkkxdc'.......,:cldkKXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXKkdlccc:;'..,cdxkkkkkkkkkkkkkkkkkkxxddxxxxxxxxxdxxxdddxxxkkOOOOkkkxxxxdddxxxxxxxxxxxxxxxxkkkkkkkkkkxxxkkkkkkdc'...',,;:cclokKNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXNXX0kdooool:,..,cdxkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxddxxdddxxkkkOOOOOkkxxxxddxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkxdc'...,:cllllllx0XNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXNNNNNNNX0kdoddddl;'.':oxkkkkkkkkkkkkkOOkkkkkxxxxxxxxxxxxdddddxxkkkkOOOOOkkxxxxxxxxxxxkkxxxxxxxxkkkkkkkkkkkkkkkkkkkkxdc,..';lodoooooxOKXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNX0kdddxxxo:,.':oxkkkkkkkkkkkkkOOkkkkkxxxxkkkkkkkxxdddxxkkkkkOOOkkkkkxxxxxdxxxxkkkxxkkkkkkkkkkkkkkkkkkkkkkkkkxdc;'',codddddddxk0XXNNXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXNNX0kxdddddo:,.':oxkOkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxdddxkkkkkOkkkkkkkkxxddxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxdl;,,;lodxxddoodOKXXNNXNNNNNNNXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXNNX0kdddxxdo:,.':oxkOkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxkkOOkkkkkkOkkxxdxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkxdl:,,;codddddddxOKXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXNNX0kdddxxxo:,',:oxkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxddxkkkkxkkkkkkkkkkkkkxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkxdo:;,;codddddddk0KXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXNNXKOxddxxxo:;,;cdxkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxdddxkkkkkkxxxkxxxxxxxxxkxxxxdddxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkxdoc;;;coxxddddxO0XXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXNNNNNNXXKOxddxxxoc;;:ldxkkkkkkkkkkkkkkkkkkkkkkkkkkkkxddxxxxxxddddddxddddxdddxxxxxxdddxxxkkkkkkkkkkkkkkkkkkkkkkkkkkxxxol:;:ldxxxddxkOKXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXNNNNXXXX0kxddxxoc:;:ldxkkkkkkkkkkkkkkkkkkkkkkkkkkkxxddddddoolllooddddddolccloddddddddxxxkkkkkkkkkkkkkkkkkkkkkkkkxxxxdlcccldxxxddxk0XXNNXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXNNNNXXXXKOxddxxdl:::loxkkkkkkkkxxxxxxxkkkkkkkkkkxxxxddooooolccclloodddolc;,;clodddddddxxxxxkkkkkkkkkkkkkkkkkkkkkxxxddollloddxddxkOKXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXNNNNXXXXK0kxdxxxoc::loxxkkkkkkxxxxxxxxxxkkkxxxxxxxxxddoooooolloooooolooooolllccloddddxxxxxxkkkkkkkkkkkkkkxxkkkkxxxxddoolloddddxxk0XXNXXNNNNXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXNNNNXXXXXXK0kxxxxdlccldxxxxkkkxxxxxxxxxxxxxxxxxxxxxxxdddddooooddddoooooooddddollodxxxxxxxxxxkkkkkkxxxxxkkxxxxkkkxxxxddooooodxxxxkOKXNNNNNNNNNNXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXNNXXXXNNXXXKOkxdddoolodxxxxxkkxxxxxxxxxxxxxxxxxxxxxxxxxxxxdoooodddooodddooooloddxxxxxxxxxxxxxxxxxxxxxxxxxxxxxkkkxxxxdddoooddxxxkO0KXNNNNNNNNNNXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXNNXXXXNNNXXXK0OxxdddooodxxxxxxkxxxxxxxxxxxxxxxxxxxxxxxxxxxxxddddddoooddddooddddddxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxddddddddxxxkOKXNNNNNNNNNXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXNNXXXNNNXXXXKKOkxxxddoodxxkkxxxxxxxxxxxxxxxxxxxxxxxxxxxdooddxxdddooooooooodxkxddooddddxxxxxxxxxxxxxxxxxxxxxxxxxkkkxxxdddddddddxkO0KXNNNNXXNNNXXXNXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXNXXK0kxxxddoodxxkkxxxxxxxxxxxxxxxxxxxdxxxxddooooddxxddddddddoooodxxxdooodddddxxxxxxxxxxxkxxxxxxxxxxxxkkkxxxdddxxxdddxk0KXXNNXXXXNNNNXXXXXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXNXNNNNX0OkxxxddddxxxxxxxxxxxxxxxxxxxxxxxxxddoollooddddddddddooooooooddddddddoooodxxxxxxxxxxkxxxxxxxxxxxxkkkxxxxdddddxxkkO0KXXXXXXNNNNXXXXXXXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXNNNXK0OkkxxddddxxxxkkxxxxxxxxxxxxxxxxxdolcccloddoolccllllllllllllllooddddoollloddxxxxxxxxxxxxxxxxxxxxkkkxxxxdddxxxkOO0KXXNNNXXNNXXXXXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXNNNNXXK0Okxdoooddxkkkkxxxxxxxxxxxxxxxxddoc:::clllc::;;::cccccccccccccclllooolc::codxxxxxxxxxxxxxxxxxxxxkxxxxxdxxxxkOO0KXNNNNNNXXXXXXXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXNXK00Oxddooodxkkkkxxxxxxxxxxxxxxxxxdoc::ccc:;;:::ccloooooooollcc:::::cllc:;;:codxxxxxxxxxkxxxxxxxxkxxxxxddddxxkO0KXXNNNNNNNXXXXXXXNNNXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXNXXK0Okkxddddxxkkkxxxxxxxxxxxxxxxxxdoc::::;'',;cllodxxxxxxxxxdolc::;,,;;;;;;:codxxxxxxxxxkxxxxxxxkkkxxxxdddxxkk0KKXXXXXXXNNNXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXNXXKK00OOkxdddxxkkxxxxxxxxxxxxxxxxxxoc::::;'',:clooddddddxxkkxdoolc:,'',;:cccloxxxxxxxxxxkxxxxxxxkkkxxxxdxxkOO0KKXXNXXXXNNNXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXNNXXKK000Okxxxxxkkxxxxxxxxxxxxxxxxxxdollllc::::clloooooooooddooooollc:;:cllllodxkxxxxxxxxxxxxxxxxkkkkxxxxkO0KKKKXXNNNNNNNNXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXNNXXXKKKK0OkxxxkkkxxxxxxxxxxxddxxxkkxdddooollcccllooooooooooooooollllooooddolodxkkxdddxxxxxxxxxxxkkkkxxxkO0KXXXXXXXXXXNNNNNXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXNNNXXXXXXKK0OkkkkkkxxxxxxxxxxddddxxxxxxddddooolllooooodddddddddddollloddxxxxdoodxkxxddddxxxxxxxxxxkkkkxxkO0KKKKXXXXXXXXXXXXNNNNNNXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXNNXXXXXXXXXXKOkkxxkkkxxxxxxxxxdddddxxxddxxxxdooooooollloodddddooollllooddxxxxxxdxxxxxdxxdddxxxxxxxxkkkxxxkO0KXXXXXXXXXXNXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXNXXXXXXNNNXK0OkxxxkkxxxxxxxxxxxddddddddxxxxdoooddollccccclllllcccllooddddddxxxxxxxxxxxxdddxxxxxxxxkkkxxkO0KXXNNNNXXXXNNNNXXXXXNNNNNNNNNNNNNNNNNNNNNNNNXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXNNNXXXXXXXXXXXXXXXXNNNXXK0Okxxxkkxxxxxxxxxxxxddddddxxxxdoodddollc:::;;::::clllooddddxxxxxxddxxxxddddxxxxxxxxxxkkkxkO0KXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXXXXXXXXXXK0Okxxxxxxxxxxxxxxxddxxxxdxxxxxdddxxddolc::;;,,,,;:clooddddxxxxxxdddxxxxddddxxddxxxxxxxkxxkOKXXNNNXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXNNXXXNNNXXXXXXK0Okxxxxxxdxxxxxxddddxxxddddxxxxxxxxddooollc::::clooddxxxxxxxxxxdddddxxdddddddddxxxxxxxxxk0KNNNNNXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXNNXXNNNXXXXXXXKKOkxxxxxxxxxxxdddddddddddddxxxxxxxxxxxxxxddooooddxxxkkkxxxxxxxxddddddddxdddddddxxxxxxddxk0XNNNNXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXNNXXNNNXXXKXXXXK0kxxxxxxxdddddddddddddddddxxxxxxxxdxxxxddxxxxxxxxxxxxxxxxxxxxxdddddddxxdddddddddddxdddxOKXXXXXXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXNNXXKKXXXXK0kxdxxxxxdddddddddddoodddxxxxxxxxdddddddddxxxxxxxxxxxxxxxxxxxddddddddddddddddddddddddxk0KXXXXXXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXNNXXXXXXXXX0Oxxxxxxddoooddddooolloddxxxxxxxdddddddddddddddddddxxxxxxxxxxddddddddddddooodddodddddxk0KXXXXXXNXXXXXXXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXNNNXXXXXXXXXXXXNXXXXXXXXXXKOkxxxxddoolloooooolcclodxxdddooooodddddddddoooooddddddxxxxxxdddddoooooooooooooodddddxO0XXXXXXXXXXXXXXNNXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXNNNXXXXXXXXXXXXXXXXK0OkxxdddolllloollllcclloddollllloooooooooooooooooooddddddddddoooooooollloooooodddddxkOKXXNNNXXXXXXXXXNNNXXXNNNNNNNNNNNNNNNNNNNNNNNNNXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXNXXXXXXXXXXXXXXXXXXXK0OkxxddollllllllllllllllllccccllllllllllllllloooooooooooooooollllllllllllloooddddxxkOKXXNNNNXXXXXXXXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXNNXXXXXXXXXXNNXXXKXXKKOkxddddollllccccccccclllcccccclllllllllcccllllllllllllclllllccccccccclllllooddddxkO0KXXXNXXXXXXXXXXXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXNNNNNNXXXXXXXXXXNNNXXXXXXK0kxddddooollcccccc:::ccccc::ccccccccccccccccccccccccccccccccc:::ccccccllloooodddxkO0KXXXXXXXXXXXXXXXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXNNXXXNNNNNNNNXXXXXXXXXXXXXXXXXK0Oxdoooooolllcc:::::::::::::::::::::::::::cccc:::;;:cccc:::::::::cccclloooooodddxkOKXXXXXXXNNNXXXXXXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXNNXXXNNNNNNXXXXXNNNXXXXXXXXXNNXK0kxdddooollccc::;;;;;;::::::;;;;;;;;;;;;;;::;::;;;;:::::;;;;;:::cclllooodddddddxk0KXNNNXXXXXXXNNNXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXNNXXXXXXXXXXXXXXNNNXXXXXXXXXNXXK0Okxxdooollcccc::;;;;;;;;;;;,,,,,,,,,,,,,,;;,,,,,,,;;;;;;;;;;::cccloooooodddxxxkO0KXNXXXXXXXXNNNNNXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXNNNXXXXXXXXXXXXXXXXXXNNXXXXXXXXX0Okxddooollllccccc::;,,,,,,,,,,,,''',,,,,,,,,''''''''',,;;::ccccllllllooooddxxxkO0KXXXXXXXXXXNNNNNXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXNNNXXXXXXXXXXNNNXXXXXNNNXXXXXXK0kxdddooolllllllcc:;,,,,,,,,,,''''',,,;;;,,''''''''',,,;:ccccclllllllooooddxxxxO0XXXXXXXXXXXNNXXNNNNNNXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXNNNNNXNNXXXXXXXXXXXXXXXXXXXXNNNXXXXXXNNNXXXXXK0kxxxddooollcccccc::;;;;;;;,,,,,,,,,,,,,,,,,,,,,,,,;;;:::ccccccllllloooodddddxkOKXNXXXXNNNXXXXXXXXNNNNXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXNNNNNNNNXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXKK0Okxxddoolllccccccccc::::;;;;;;;;;;;;;,,,,,,;;;;;;;::cc::::ccclllooloooddddddxk0KXNXXXXXNNNXXXXXXXXNNXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXNNNNNNXXXXXXXXXNNNXXXNNXXXXXXXXXXXXNNXXXXXXXXXXXXXXXXXXK0Oxxddooollllccccccccc:::::::::::::::;;;;;;;::::::::ccccccccllllloolooodddxxxxk0KXXXXXXNNNNXXXXXXXXXNXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXNNNNNNNNNNXXXXXNNXXXXXNNNNXNNNXXXNNXXXXXXXXXXXXXXXXXXXXNNXXXXXXXXXXXKOxxddooooollllllccccc:::::ccccc::;::::;:::::::::::cccccccclllllloooooooddxxxxkO0KXXNNNNNNXXXXXXXXXNNNNXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXNNNNNNNNNNXXXXXNNNNNXXXXXXXNNXXXXNNNXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXKOkxxdddddooolllllccccccccccccc::;;::::::cccccccccccllclllllllllloooddddddxxxxxkO0KXNNNNXXXXXXNNXXXXNNNNNNNNNNNNNNNNNNNNNNXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXNNNNNNNNNNNNNNXXXXXNNNNXXXXXXNNNXXXXXNNNXXXXXXXXXXXXXXXXXXXXXNXXXK0OOOO00kxxxxxdddddoolllllccccccccccccccccccccccccccccccclllccccclllooooooddddddddddxxkkkO00000KXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXNNNNXXXXXXXXXXXXXXXNNXXXXXXNXXXXXXXXXXXXXXXXKOkdoodxkkkxxxxxxddddddooollllllccccccccclllllcccccccccccccllllcccclloooooooddddddxdddxxkkkkkkxddkO0XXNNXXXNNNNNNXNNNNXXXXNNNNNNNNNNNNNNNNNNNXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXNNNNXXXXXXXXXXXXXXXNNNXXXXNNNNNNXXNXXXXXXKK0koc::ldkkkxxxxxxxxddddddddooolllllcllllllllllllllllllllccllllllllllloooddoddddddddddddxxxxxkkkdl:coxOKXXXXXNNNNNXXXNNNXXXNNNNXXNNNNNNNNNNNNNXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXXNNNNXXXXNNXXXXNXXXXXXXXXXXKK0Okxdl:;;:lxOOkxxdddxxxxdddddddddoooooooollllllllllllllllllllllllllooooodddddddddddddxddddddddxxkOOxl:;;coxO0KKXXNNNNNXNNNNNNNNNNXXXNNNNNNXXNNNNNNXXXXNNXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXXNNNXXXXXXXXXXXXXXXXXXXKKOkxdolc::;;;:oxOOkxddddddxxxxddddddddddddddoooollllllllllllllllloooooooooddddddddddddddddddddddxxkkkkxoc:;;:clodxO00KXXXNNNNNNXXNNNXXXXXNNNXXXXNNNNNNXXXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXNNNNNNNXXXXXXXXXXNXXXXXXNXXXXXXXKK00Oxol:;;;;;;;;;:ldkkkxddxddoodxxxdddddddddddddddoooooooooooooooooooooooddddoooooodddddddddddxxxxddxkOkdl:;;;:::::ccllodxOKKXXNNNXXXXXNNNNNNNNNXXXXNNNNNNXXXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXNXXNNXXXNXXXXXXXXXNNNXXXXXKOxooolc:;,,,,;;;;;;cldxkxddxxxdddxxxxxxddddddddddddddddddddddoooodddoooooooddddddddddddxxxddxxdddxxxxxxdlc;,,;;;;;;;;:::::coxO0KXXNNXNNNNNNNNNNNNNXXXXXNNNXXXXXXNNXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXNNNNNXXXXXNNNNXXXXXXNNNXXXXKK0OOOkxdlc:::::;;,,,,;;;,,,;:ldxkxxdxxxxddddxxxddddddddddddddddddddoooodddoooodddodddddxxxxxddddddddxxxddxxdolc:;;,,,;;;;;;;;;;;;;;:cloxO0KKXXNNXXNXXXXNNNXXXNNNXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXNNXXXNNNNNNXXXNNNNXXXXXXXNNXXXK0kdollc:;;;;::::;;,,,,,,;;;;,,,;coxkxxdxxxdoodxxxdddxxxxxdddddddddooooooodooooddddddddddxxxxxxxddddddxxxdddolc;,,,;;;;;,;;;;;;;;;;::;;;;;:ldxkO0KKXXXXXKXXXNNNNNNXXXXXXXXNNNNXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXXXXXXXXXXXXXXXXXKK0Okxolccc:;,',;;;;;;;;;,,',,,,,,,,'',:odxxddddddddxxdddxxxxxxxddddddddddddddddddddddddddxxxxdddddxxdddddxxxdolc:;,,,,;;,,,,,,,,;;;;;;;::;,,,,;:ccllodxk0KXXXXXXXNNNNNNXXXXXXXNNXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXXXXXXXXXXXKK0Okxxdoc:;;;::;,'',;;;;;;;;;;,,''',,,,,,'',;clodddddxxxdddxxxxxxxddxdddddddxxdxxxxxddddddddddxxxxxddddddxxxxxdoolc;,'''',;;,,,,,,'',,;;;;;;;;;,,,,;;:::::ccldkO0XXXXXXNNNNNNNXXXXXXNNXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXNNNNXXXKKOxdlc::::;,'',;::,'',,;;;,,;;;;;,,,''',,,,,,'''',:lodddxxxddxxxxddddddxxxxxxxxxxxxxxxxxxxxxxxdxddddxxxxxdddxxxdol:;,''',,,''',,,,,,,,,,,;;;;,,;;;;;,,,,;;:cc::::codk0KKKXXXXNNNNNNXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXNXXXXXXXXXXXXXK0Okdl:;;;;;;;,'',;;;;,,,;,,;;;;;;;;;,,,'''''''',''''',;::codxdddxxxxxdxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdddxxxxxxddooc:;;,''''',,,'',,,,,',,,,,,,,,,,,;;;;;,,,,;;::::;;;::clodxO0KXXXNNNNNNXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNXXNNNNXXNNNNNNNNNNXXXXXXNNNXXXXK0OOkxdlc:,,,,;::;,,,,,;;;;,,;;;;;;;;;;;;;,,,'''''''''',,'''''';:clooddxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxddddoolc:,''''''''',,,,,,,,,'',,,,,,,,,,;;;,,,,,,,,;;;;;;;;::::::cldxkOO0KXXXNXXXXXNNNXXXNNNNNNXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNXXXXNNNXXNNNNXXNNNXXXNNNXXXXXXXXXXKK0Okxolc:;;,,,,,;;:;;,,,,;;;;;;,,;;;;;;;,,,,,,,,,,'',,,''',,''''''',,;:cloodddxxxxxxxxxxxxxxxxxxxxxxxxxxxkkkxxxxddolc:;,,''.''''''''',,,,,,,,,,,,,,,,,,,,,,,;;,,,,,,,;;;;;;;;:::;;::cllooxkO0KXXXXXXNXXXXXXNNNNNXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNXXNNNNNNNXXXNNNNXNNNXXXXXXXXXXXK0Okxxdoc;,'',,,;;;;;;;;,,,,,;;;;;;,,,;;;;;,,,,,,,,,,,,,,,,,,'''''''''''''',,;;:cloodxxxxxxxxxxkkkxxxxxxxkkkkxxxdolcc:;;,'''''..'''''''''',,,,,,,,,,,,,,,,,,,,,,;;,,,,,,,;;;;;;;;;;;;;;::ccccloodkOKKXXXNXXXXNXXXNNNNNNNXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNNNNNNXXXNNNNNNNNNXXXXXXKK0kxdoollc:;,'',,;;;::;;;,,,,,;;;;;;;,,,,;;;;;;,,,,,,,,,,,,,,,'''''''',,,''''''...',;::clllooooooooooooooooooooollcc:;,,''....''''''''''''',,,,,,,,,,,,,,,,,,,,,,,;;;,,,,,,,;;;;;;;;;;;;;;;:::::::ccldxkO0KXXXNNNNXXNNNNNNNXXXXNNNNNXNNNNNNNNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNXXXXXNNNNNNNNNNNNXXXXKKOkxolc::::::;,,,,;;;;;;;;;,,,,;;;;;;;;;,,;;;;;;;;,,,,,,,,,,,,,,,'''''''',,,,'''''''''''''''',,,;;;;;;;;;;;;;;;;;,,,''''........',,,,''''''''',,,,,,,,,,,,,,,,,,,,,,;;;,,,,'',,;;;;;;;;;;;;;;;;;::::::::clldxkO0KXXXNNNNNNNNNNNNNNNNNNNNNNNNNNXNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNNNNNNNNNNNNXXXXNNNNXXXXNXXXK0OOkxolcc::::::;;,,,;;;;;;;;;;;;;;;;;;:::;;;,;;;;;;;;;,,,,,,,,,,,,,,,,,'''''''''''''''''''''......'''''''....'''''''''''...'''.....''',,'''''''''',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;;;;;;;;;;;;;;;;;::::::::ccllodxk0KKXXXNNNNNNNNNNNNNNNNNNNNNNXXXNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNXNNNNNNNNNNNNNNNNXXXXXKK0OOkxdolc:::::::::;,,,,,;;;;;;,,;;;;;;;;;;;;;;;;,,,;;;;;;;,,,,,,,,,,,,,,,,,,,''''''''''''''''..'''...'.....................'''''''''''''''''''',,'''''',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;;;;;;;;;;;;;;;;;;::::::::ccccclodxkO0KKXXNNNXXXNNNNNNNNNNNNNNXNNNNNNNNNNNNNNNNNN
//NNNNNNNNNNNXXNNNNNNXXXXNNNNXXKK0Okxolcccc:::;;;;;;;;;,,,,,,,,,;;;;;,;;;;;;;,,;;;;;,,,,,,;;;;,,,,,,,,,,,,,,,,,'',,,,,''''''''''''...........'''''''''........''''.'''''''''''''''''','''''',,,''',,,,,,,,,,,,,,,,,,,,,,,,,;;;;;;;;;;;;;;;;;;,;;;;;;;::::::::ccllodkO00KKXXXXXXNNNNXXNNNNNNNNNNNNXXNNNNNNNNNNN
//NNNNNNNNNNXXXXNXXXXXXXXXXXXXXKkdolcc::::::;;;;;;;;;;;,,,,;;,,,;;;;,,,,;;;;;,,,;;;;,,,,,,,,;,,,,,,,,,,,,,,,,,''''',,,,,,,''''''''''''''''''......''''....'''''''''''''''''',,''''''''''''''',''''',,,,,,,,,,,,,,,,,,,,,,,;;;;;;;;;;;;;;;;;;,,,;;;;;;;:::;;:::cccclloddxkOO0KXXXNNNNNNNNNNNNNNNNNXNNNNNNNNNNNN
//NNNNNNNNNNNXXXXXXXXXXXXXXXXK0kdl::::::::;;;;;;;;;;;;;,,,,;;;,;;;;;,,,,;;;;;,,,;;;;,,,,,,,,,,,,,,,,,,,,,'',,,,,,''''''',,,,,,,''''''''''''''''.....''''''''''''''''''''''''''''',,,'''',,,,''''''',,,,,,,,,,,,,,,,,,,,,,,;;;;;;;;;;;;;;;;;,,,,;;;;;;;:::::::::ccccccllooodxkO0KXXNNNNNNNXXXNNNNNNNNNNNNNNNNNN
//NNXXNNNXXNNNNXXXNNXXXXXNXK0kdocc:::;;;;;;;;;;;;;;;;,,,,,,,;;;;;,,,,,,;;;;;;;;;;;;;,,,,,,,,,,,,,,,,,,,,''',,,,,,,''''''''''''''''''''''''''''''''''''',,,,''''''.'''''''''''''''',,,''''',,,,,',,,,,,,,,,,,,,,,,,,,,,,,,,;;;;;;;;;;;;;;;;;;;;;;;;;;;::::::::::::::cclllllcclodx0KNNNNNNXXNNNXXXNNNNNNNNNNNNNN
//NXXXNNNNNXXXXXXNNNNNXXXX0kdlcc::::;;;;;;;;;;;;;;;;,,,,,,,,;;;;;,,,;;;;;;;;;;;;;;;,,,,,,,,,,,,,,''',,,,''',,,'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''',,,,'''''',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;;;;,;;;;;;;;;;;;;;;;;;;;;;;;;::::::::::::cccccccclloxOKXNNNNNNNNNNXXXNNNNNNNNNNNNN
//NXXXNNNNXXXXXXNXXXXXXXKOxoc::::;;;;;;;;,,;;;;;;;;,,,,,,,,,,;;;;;,,;;;;;;;;;;;;;,,,,;,,,,,'',,,,,',,'''',''''''''''''''''''''''''''''''...''''''''''..'''....''''''''''''''''''''''''''''''',,,,,,,,,,'''',,'',,,,,,,,,,,;;;,,,,,;;;;;;;;;,,,,,;;;;;;;;;;;:::::::::::::ccccllcloxO0XNNNNNNNNXXXXNNNNNNNNNNNNN
//NXXXNNNNXXXXXXNXXXXXKOxdlc::::::;;;;;;;,;;;;,,,;;,,,,,,,,,,,;;;;;;;;;;;;;;;,cdddl;;;,,,:odl,',,',;ldkOOOOkdc;'''',ldo:'',',cdo:''''''coo:'''''''';odc'..,cdo:'''''''':odc,','''''';lddddddol:,',,,,,:dddddddddl,;odo;,,,;,;ldd:,;;;;;;;;;,,,,,;;;;;;;;;;;;;;;;;::::::::ccccccclodkKNNNNNNNNXXXNNNNNNNNNNNNNN
//NNNNNNNNXXXXXXXXXXXKkdlc::::::::::;;;;,,;;;,,,,,;,,,,,,,,,,,,;;;;;;;;;;;;;;,dNWWXx;,;,,oXMO;',';dKWNKOkk0KNW0o;'',oXW0:',',xWM0:''''cKW0c''''''''oNMO;..;OWWKl''''''cKWW0;''''''''cKWWX00KXNXOl;',,,dWMNK00000x;;kWWx;,;,,oXW0:,;;;;;;;;,,,,,,;;;;;;;;;;;;;;;;;;:::::::::ccccccloxOXNNNNNNNNNNXNNNNNNNNNNNNN
//NNNNXXXNNXXXXXXXXK0koc;;::::;;;::;;;;,,,,,;,,,,;;,,,,,,,,,,,,;;;;;;;;;;;;;;,dNMMMNk:,,,lXMO,'':OWNOl;,'',;lONWO:',,dNWO;'':0WMWO:'':0WXl'''''''''lNMO;..;OWMWKc''''cKMMM0;','''','cKMXl,,;:lONNO:',,dWMO;,;,,;,,,:OWNd,,,lKMKc,,;;;;;;;,,,,,,;;;;;;;;;;;;;;;;;;;;;;::::::cccccccldk0KXXXXXNNNNXXXNNNNNNNNNNN
//XNNNXXXXNXXXXXXXKOxoc:;::;;::;;;;;;;,,,,,,,,,,,;;,,,,,,,,,,,,;;;;;;;;;;;;;;,dWMXOXW0l,,lXMO;',kWWk;',,,,,,';kWWx,'',xWWk;;OWWWWWk,;OWNd''''''''''lXMO;'.;OMMWWKc'':0MMMM0;''''''''cKMK:',,,',xWWk;',dWMO:;;;;;,,,,:0WXo,c0WXl,,,;;;;;;;;,,,,,;;;;;;;;;;;;;;;;;;;;;;;;;:::::::ccccodkOKXXNNNNNNNNNNNNNNNNNNNN
//NNNXXXXXXXXXNNXKOdlc::::;;;:::;;,,,,,,,,,,,,,,,;;,,,,,,,,,,,,;;;;;;;;;;;;;;,dWMk,c0WXd,lXMO;':0MNo',,,,,,,,'oNM0;',';OWW00WWklkWN0KWWx,''''''''''lNMO;..;OMMNNWKlc0WWNWM0;','''',':KMK:',,,,'lXMK:',dWMWXKKKK0l,,,,cKWXk0WNd,,,,;;;;;;;;,,,,,;;;;;;;;;;;;;;;;;;;;;;;;;;::::::cccclodkOKXNNNNXXNNNNNNNNNNNNNN
//NXXXNNNXXXXXXXKOxl:;:::;;,;;::;,,,,,,,,,,,,,,;;;,,''',,,,,,,,,,,;;;;;;;;;;;,dNMk;,:kNN00WMO;';kWWx,,,,,,,,',xWWk,',,':0WMMWk;.;OWMMWO;'''''''''''lNMO;..;OMNdlKWNNWXloXW0;'''''',':KMK:',,,',xWMO;',dWWKdloool:,,,,,lXMWMNd,,,,,;;;;;;;;,,,,,,;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::cccclodxOKXNNXXXXNNNNNNNNNNNNN
//NXXXNNNXXXXXXKOxl::;;;;;;;;;,,,;;;;,,,,,,,,,;;;;,,''',,,,;;;,,,,,,;;;;;;;;;,dWMk;,,;dXWMMMO;',cKWNkc,'''',ckNW0c',,,,':0WW0:''':0WW0:''''''''''''lNMO;.';OMNl.lKWWXl.cXM0;'''''',':KMKc',,;ckNW0c,,,dWWk,',,,,,,,,,,,oXMWk;,,,,,;;;;;;;,,,,,,,;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::cccccllox0XXNXXXXNNNNNNNNNNNNN
//NXXXXNXXXXXX0kdlc::;;;;;;;;,,',;;;;,,',,,,,,;;;;,'''',,,,;;;,,,,,,;;;;;;;;;,dWMk;,;,,lKWWWO;',,:kXWXOkxxk0NWXx:'',,,,''cKKc','''cKKc'''''''''''''lNMO;.';OWNl.'lXXo,.cXM0;'''''','cKMWKOO0XWN0d:,,,,dWMXOxkkkkx:',,,;;dNO:,;,,,,;;;;;;;,,,,,,,,;;;;;;;;;;;;;;;;;;;;;;;;;;;::::ccccccclok0XXNNNNNNNNNNNNNNNNN
//XXXXXXXXXXXKOdlc:::;;;;;;;;,,,,;;,,,'',,,,,,;;;,,'''',,,,,,,,,,,,,;;;;;;;;;,cxkl,,;;,,cdxkl,,,,,,:oxOKKK0Oxo:,',',,,,'',cc,''''''cc'''''''''''''':dxl,'',oxd:'',ll,'';dxo,'''''',';dxxxxkxxol;',,,,,cxkkkkkkkxx:',,,;,;l:,;;,,,,;;;;;;,,,,,,,,,;;;;;;;;;;;;;;;;;;;;;;;;;;;::::::ccccccldk0XXNNNNXNNNNNNNNNNN
//XXXXXXXXXXKOxlc:::::;;;,,;,,,;;,,''''',,,,,,;;;,''''',,,,,,,,,,,;;;;;;,,;;;,,,,,,;;;,,,,'''',,,,,,,',,,;,,'',,,,,,,,,,,''''''''''''''''''''''''''''''','''''',,,''''''''''''''',,,,''''''''',,,,,,,,,,,,,,,,,,,,,,,,;;;,,;;,,,,,;;;;;;,,,,,,,,;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::::::cccccldk0XNNNNXNNNNNNNNNNN
//XXXXNNNXXX0koc::;;;;;;;,;;,,,,,,'',,'',,,,,,;;;,'''',,,,,,,,,,,;;;;;;,,,;;;;;,,;;;,,;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,'''''''''''''''''''''''''''''',,',,,,,,,,,,,,,''''''''''',,,,,,,,',,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;;;;;;,,,,,;;;;;;;,,,,,,,;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::;;;::ccccccldk0XNNNNNNNNNNNNNNN
//XXXXXXXXK0kdc:;;;;;;;;;;;;,'',,,,,,,,'',,,,,,;;,'''',,,,,,,,,;;;;;;;;,,,;;;,;;;;;,,;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,''''''''''''',''',''',,,,,,,,,,,,,,,,,,,,,,,,,,,,''''''','',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;;;;;;,,,,,,;;;;;;,,,,,,,,,;;;;;;;;,,,;;;;;;;;;;;;;;;;;;;;;::::cccccldkKXNNNNNNNNNNNNNN
//XXXXXXXKOkdl:;;;;;;,,;;;,,,'',,,,,,,,,,,,,,,,,,,'''',,,,,,,,,;;;;;;;;,,,;;;;;;;;;,,;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,''''''''',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,''',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;;;;;;;;,,,,;;;;;;;,,,,,,,,,,;;;;;,,,,,,;;;;;;;;;;;;;;;;;:::::::cccccoxOKXXNNNNNNNNNNNN
//XXXXXXX0kdlc:;;;;;;,,,;;,,,'',,,,,,,,,',,,,,,,,,'''',,,,,,,,;;;;;;;;,,,,;;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;;;;;;;;;,,,,;;;;;;,,,,,,,,,,;;;;;,,,,,,;;;;;,,;;;;;;;;;;;::::::cccccloxOKXXNNNNNNNNNNN
//XXXXXXKOxoc:;;;;;;;,,,,,,,,'',,,,,,,,''',,,,,,,,'''',,,,,,;;;;;;;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;;;;;;;;;;;,,,;;;;;;,,,,,,,,,,;;;;;,,,,,,;;;;,,,;;;;;;;;;;;;;;::::::::cldk0KXNNNNNNNNNNN
//XXNNXX0koc:;;;;;;;,,,,,,,,'''',,,,,,,''',,,,,,,,'''',,,,,;;;;;;;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;;;;;;;;;;;,,,;;;;;,,,,,,,,,,,;;;;;,,,,,,,,;,,,,;;;;;;;;;;;;;;::::::::clodk0KXNNNNNNNNNN
//XXXNXX0xl;;,;;;;;,,,,,,,,,'''',,,,,,''''',,,,,,,'''',,,,,;;;;;;;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;;,,,,,,,,,,,;;;;;;;;;;,,;;;,,,,,,,,,,,,,,;;;,,,,,,,,,,,,,,,;;;;;;;;;;;;:::;::ccccclodkKXNNNNNNNNNN
//NNNNXK0dc;,,;;;;;;,,,,,;,,,,,,,,,,,,,,,,,,,,,;,,''',,,;;;;;::;;;;;;;;;;;;;;;;;;;;;;;;;;,,,;;;;;;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,,,,,,,;;;;;;;;;;;;;;;;;,,,;;::;;;;;;::::::;::clllclldk0XNNNNNNNNNN


// SPDX-License-Identifier: MIT

pragma solidity 0.8.20;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval (address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

}

contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

contract OnlyDevs is Context, IERC20, Ownable {
    using SafeMath for uint256;
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private bots;
    address payable private _taxWallet;
    uint256 firstBlock;

    uint256 private _initialBuyTax=14; //SNIPERS
    uint256 private _initialSellTax=24; //JEETS
    uint256 private _finalBuyTax=5;
    uint256 private _finalSellTax=5;
    uint256 private _reduceBuyTaxAt=29;
    uint256 private _reduceSellTaxAt=34;
    uint256 private _preventSwapBefore=20;
    uint256 private _buyCount=0;

    uint8 private constant _decimals = 9;
    uint256 private constant _tTotal = 100000000 * 10**_decimals;
    string private constant _name = unicode"OnlyDevs";
    string private constant _symbol = unicode"OnlyDevs";
    uint256 public _maxTxAmount = 12200000 * 10**_decimals;
    uint256 public _maxWalletSize = 122000000 * 10**_decimals;
    uint256 public _taxSwapThreshold= 12000000 * 10**_decimals;
    uint256 public _maxTaxSwap= 12000000 * 10**_decimals;

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;

    event MaxTxAmountUpdated(uint _maxTxAmount);
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () {

        _taxWallet = payable(_msgSender());
        _balances[_msgSender()] = _tTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_taxWallet] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function setTaxRates(uint256 newInitialBuyTax, uint256 newInitialSellTax, uint256 newFinalBuyTax, uint256 newFinalSellTax) external onlyOwner {
    _initialBuyTax = newInitialBuyTax;
    _initialSellTax = newInitialSellTax;
    _finalBuyTax = newFinalBuyTax;
    _finalSellTax = newFinalSellTax;
    }

    function setTaxWallet(address newTaxWallet) external onlyOwner {
    require(newTaxWallet != address(0), "Invalid tax wallet address");
    _taxWallet = payable(newTaxWallet);
    }

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 taxAmount=0;
        if (from != owner() && to != owner()) {
            require(!bots[from] && !bots[to]);
            taxAmount = amount.mul((_buyCount>_reduceBuyTaxAt)?_finalBuyTax:_initialBuyTax).div(100);

            if (from == uniswapV2Pair && to != address(uniswapV2Router) && ! _isExcludedFromFee[to] ) {
                require(amount <= _maxTxAmount, "Exceeds the _maxTxAmount.");
                require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize.");

                if (firstBlock + 3  > block.number) {
                    require(!isContract(to));
                }
                _buyCount++;
            }

            if (to != uniswapV2Pair && ! _isExcludedFromFee[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize.");
            }

            if(to == uniswapV2Pair && from!= address(this) ){
                taxAmount = amount.mul((_buyCount>_reduceSellTaxAt)?_finalSellTax:_initialSellTax).div(100);
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            if (!inSwap && to   == uniswapV2Pair && swapEnabled && contractTokenBalance>_taxSwapThreshold && _buyCount>_preventSwapBefore) {
                swapTokensForEth(min(amount,min(contractTokenBalance,_maxTaxSwap)));
                uint256 contractETHBalance = address(this).balance;
                if(contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        }

        if(taxAmount>0){
          _balances[address(this)]=_balances[address(this)].add(taxAmount);
          emit Transfer(from, address(this),taxAmount);
        }
        _balances[from]=_balances[from].sub(amount);
        _balances[to]=_balances[to].add(amount.sub(taxAmount));
        emit Transfer(from, to, amount.sub(taxAmount));
    }


    function min(uint256 a, uint256 b) private pure returns (uint256){
      return (a>b)?b:a;
    }

    function isContract(address account) private view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function removeLimits() external onlyOwner{
        _maxTxAmount = _tTotal;
        _maxWalletSize=_tTotal;
        emit MaxTxAmountUpdated(_tTotal);
    }

    function sendETHToFee(uint256 amount) private {
        _taxWallet.transfer(amount);
    }

    function addBots(address[] memory bots_) public onlyOwner {
        for (uint i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }

    function delBots(address[] memory notbot) public onlyOwner {
      for (uint i = 0; i < notbot.length; i++) {
          bots[notbot[i]] = false;
      }
    }

    function isBot(address a) public view returns (bool){
      return bots[a];
    }

    function openTrading() external onlyOwner() {
        require(!tradingOpen,"trading is already open");
        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        swapEnabled = true;
        tradingOpen = true;
        firstBlock = block.number;
    }

    receive() external payable {}

}