LS0gJElkOiB0ZXN0ZXMvZmlsZXMubHVhICQKLS0gU2VlIENvcHlyaWdodCBOb3RpY2UgaW4gZmlsZSBhbGwubHVhCgpsb2NhbCBkZWJ1ZyA9IHJlcXVpcmUgImRlYnVnIgoKbG9jYWwgbWF4aW50ID0gbWF0aC5tYXhpbnRlZ2VyCgphc3NlcnQodHlwZShvcy5nZXRlbnYiUEFUSCIpID09ICJzdHJpbmciKQoKYXNzZXJ0KGlvLmlucHV0KGlvLnN0ZGluKSA9PSBpby5zdGRpbikKYXNzZXJ0KG5vdCBwY2FsbChpby5pbnB1dCwgIm5vbi1leGlzdGVudC1maWxlIikpCmFzc2VydChpby5vdXRwdXQoaW8uc3Rkb3V0KSA9PSBpby5zdGRvdXQpCgoKbG9jYWwgZnVuY3Rpb24gdGVzdGVyciAobXNnLCBmLCAuLi4pCiAgbG9jYWwgc3RhdCwgZXJyID0gcGNhbGwoZiwgLi4uKQogIHJldHVybiAobm90IHN0YXQgYW5kIHN0cmluZy5maW5kKGVyciwgbXNnLCAxLCB0cnVlKSkKZW5kCgoKbG9jYWwgZnVuY3Rpb24gY2hlY2tlcnIgKG1zZywgZiwgLi4uKQogIGFzc2VydCh0ZXN0ZXJyKG1zZywgZiwgLi4uKSkKZW5kCgoKLS0gY2Fubm90IGNsb3NlIHN0YW5kYXJkIGZpbGVzCmFzc2VydChub3QgaW8uY2xvc2UoaW8uc3RkaW4pIGFuZAogICAgICAgbm90IGlvLnN0ZG91dDpjbG9zZSgpIGFuZAogICAgICAgbm90IGlvLnN0ZGVycjpjbG9zZSgpKQoKLS0gY2Fubm90IGNhbGwgY2xvc2UgbWV0aG9kIHdpdGhvdXQgYW4gYXJndW1lbnQgKG5ldyBpbiA1LjMuNSkKY2hlY2tlcnIoImdvdCBubyB2YWx1ZSIsIGlvLnN0ZGluLmNsb3NlKQoKCmFzc2VydCh0eXBlKGlvLmlucHV0KCkpID09ICJ1c2VyZGF0YSIgYW5kIGlvLnR5cGUoaW8ub3V0cHV0KCkpID09ICJmaWxlIikKYXNzZXJ0KHR5cGUoaW8uc3RkaW4pID09ICJ1c2VyZGF0YSIgYW5kIGlvLnR5cGUoaW8uc3RkZXJyKSA9PSAiZmlsZSIpCmFzc2VydChub3QgaW8udHlwZSg4KSkKbG9jYWwgYSA9IHt9OyBzZXRtZXRhdGFibGUoYSwge30pCmFzc2VydChub3QgaW8udHlwZShhKSkKCmFzc2VydChnZXRtZXRhdGFibGUoaW8uaW5wdXQoKSkuX19uYW1lID09ICJGSUxFKiIpCgpsb2NhbCBhLGIsYyA9IGlvLm9wZW4oJ3h1eHVfbmFvX2V4aXN0ZScpCmFzc2VydChub3QgYSBhbmQgdHlwZShiKSA9PSAic3RyaW5nIiBhbmQgdHlwZShjKSA9PSAibnVtYmVyIikKCmEsYixjID0gaW8ub3BlbignL2EvYi9jL2QnLCAndycpCmFzc2VydChub3QgYSBhbmQgdHlwZShiKSA9PSAic3RyaW5nIiBhbmQgdHlwZShjKSA9PSAibnVtYmVyIikKCmxvY2FsIGZpbGUgPSBvcy50bXBuYW1lKCkKbG9jYWwgZiwgbXNnID0gaW8ub3BlbihmaWxlLCAidyIpCmlmIG5vdCBmIHRoZW4KICAoTWVzc2FnZSBvciBwcmludCkoIidvcy50bXBuYW1lJyBmaWxlIGNhbm5vdCBiZSBvcGVuOyBza2lwcGluZyBmaWxlIHRlc3RzIikKCmVsc2UgIC0teyAgbW9zdCB0ZXN0cyBoZXJlIG5lZWQgdG1wbmFtZQpmOmNsb3NlKCkKCnByaW50KCd0ZXN0aW5nIGkvbycpCgpsb2NhbCBvdGhlcmZpbGUgPSBvcy50bXBuYW1lKCkKCmNoZWNrZXJyKCJpbnZhbGlkIG1vZGUiLCBpby5vcGVuLCBmaWxlLCAicnciKQpjaGVja2VycigiaW52YWxpZCBtb2RlIiwgaW8ub3BlbiwgZmlsZSwgInJiKyIpCmNoZWNrZXJyKCJpbnZhbGlkIG1vZGUiLCBpby5vcGVuLCBmaWxlLCAicitiayIpCmNoZWNrZXJyKCJpbnZhbGlkIG1vZGUiLCBpby5vcGVuLCBmaWxlLCAiIikKY2hlY2tlcnIoImludmFsaWQgbW9kZSIsIGlvLm9wZW4sIGZpbGUsICIrIikKY2hlY2tlcnIoImludmFsaWQgbW9kZSIsIGlvLm9wZW4sIGZpbGUsICJiIikKYXNzZXJ0KGlvLm9wZW4oZmlsZSwgInIrYiIpKTpjbG9zZSgpCmFzc2VydChpby5vcGVuKGZpbGUsICJyKyIpKTpjbG9zZSgpCmFzc2VydChpby5vcGVuKGZpbGUsICJyYiIpKTpjbG9zZSgpCgphc3NlcnQob3Muc2V0bG9jYWxlKCdDJywgJ2FsbCcpKQoKaW8uaW5wdXQoaW8uc3RkaW4pOyBpby5vdXRwdXQoaW8uc3Rkb3V0KTsKCm9zLnJlbW92ZShmaWxlKQphc3NlcnQobm90IGxvYWRmaWxlKGZpbGUpKQpjaGVja2VycigiIiwgZG9maWxlLCBmaWxlKQphc3NlcnQobm90IGlvLm9wZW4oZmlsZSkpCmlvLm91dHB1dChmaWxlKQphc3NlcnQoaW8ub3V0cHV0KCkgfj0gaW8uc3Rkb3V0KQoKaWYgbm90IF9wb3J0IHRoZW4gICAtLSBpbnZhbGlkIHNlZWsKICBsb2NhbCBzdGF0dXMsIG1zZywgY29kZSA9IGlvLnN0ZGluOnNlZWsoInNldCIsIDEwMDApCiAgYXNzZXJ0KG5vdCBzdGF0dXMgYW5kIHR5cGUobXNnKSA9PSAic3RyaW5nIiBhbmQgdHlwZShjb2RlKSA9PSAibnVtYmVyIikKZW5kCgphc3NlcnQoaW8ub3V0cHV0KCk6c2VlaygpID09IDApCmFzc2VydChpby53cml0ZSgiYWxvIGFsbyIpOnNlZWsoKSA9PSBzdHJpbmcubGVuKCJhbG8gYWxvIikpCmFzc2VydChpby5vdXRwdXQoKTpzZWVrKCJjdXIiLCAtMykgPT0gc3RyaW5nLmxlbigiYWxvIGFsbyIpLTMpCmFzc2VydChpby53cml0ZSgiam9hbyIpKQphc3NlcnQoaW8ub3V0cHV0KCk6c2VlaygiZW5kIikgPT0gc3RyaW5nLmxlbigiYWxvIGpvYW8iKSkKCmFzc2VydChpby5vdXRwdXQoKTpzZWVrKCJzZXQiKSA9PSAwKQoKYXNzZXJ0KGlvLndyaXRlKCci4WxvIicsICJ7YX1cbiIsICJzZWNvbmQgbGluZVxuIiwgInRoaXJkIGxpbmUgXG4iKSkKYXNzZXJ0KGlvLndyaXRlKCfnZm91cnRoX2xpbmUnKSkKaW8ub3V0cHV0KGlvLnN0ZG91dCkKY29sbGVjdGdhcmJhZ2UoKSAgLS0gZmlsZSBzaG91bGQgYmUgY2xvc2VkIGJ5IEdDCmFzc2VydChpby5pbnB1dCgpID09IGlvLnN0ZGluIGFuZCByYXdlcXVhbChpby5vdXRwdXQoKSwgaW8uc3Rkb3V0KSkKcHJpbnQoJysnKQoKLS0gdGVzdCBHQyBmb3IgZmlsZXMKY29sbGVjdGdhcmJhZ2UoKQpmb3IgaT0xLDEyMCBkbwogIGZvciBpPTEsNSBkbwogICAgaW8uaW5wdXQoZmlsZSkKICAgIGFzc2VydChpby5vcGVuKGZpbGUsICdyJykpCiAgICBpby5saW5lcyhmaWxlKQogIGVuZAogIGNvbGxlY3RnYXJiYWdlKCkKZW5kCgppby5pbnB1dCgpOmNsb3NlKCkKaW8uY2xvc2UoKQoKYXNzZXJ0KG9zLnJlbmFtZShmaWxlLCBvdGhlcmZpbGUpKQphc3NlcnQobm90IG9zLnJlbmFtZShmaWxlLCBvdGhlcmZpbGUpKQoKaW8ub3V0cHV0KGlvLm9wZW4ob3RoZXJmaWxlLCAiYWIiKSkKYXNzZXJ0KGlvLndyaXRlKCJcblxuXHRcdCAgIiwgMzQ1MCwgIlxuIikpOwppby5jbG9zZSgpCgoKZG8KICAtLSBjbG9zaW5nIGZpbGUgYnkgc2NvcGUKICBsb2NhbCBGID0gbmlsCiAgZG8KICAgIGxvY2FsIGYgPGNsb3NlPiA9IGFzc2VydChpby5vcGVuKGZpbGUsICJ3IikpCiAgICBGID0gZgogIGVuZAogIGFzc2VydCh0b3N0cmluZyhGKSA9PSAiZmlsZSAoY2xvc2VkKSIpCmVuZAphc3NlcnQob3MucmVtb3ZlKGZpbGUpKQoKCmRvCiAgLS0gdGVzdCB3cml0aW5nL3JlYWRpbmcgbnVtYmVycwogIGxvY2FsIGYgPGNsb3NlPiA9IGFzc2VydChpby5vcGVuKGZpbGUsICJ3IikpCiAgZjp3cml0ZShtYXhpbnQsICdcbicpCiAgZjp3cml0ZShzdHJpbmcuZm9ybWF0KCIwWCV4XG4iLCBtYXhpbnQpKQogIGY6d3JpdGUoIjB4QUJDcC0zIiwgJ1xuJykKICBmOndyaXRlKDAsICdcbicpCiAgZjp3cml0ZSgtbWF4aW50LCAnXG4nKQogIGY6d3JpdGUoc3RyaW5nLmZvcm1hdCgiMHglWFxuIiwgLW1heGludCkpCiAgZjp3cml0ZSgiLTB4QUJDcC0zIiwgJ1xuJykKICBhc3NlcnQoZjpjbG9zZSgpKQogIGxvY2FsIGYgPGNsb3NlPiA9IGFzc2VydChpby5vcGVuKGZpbGUsICJyIikpCiAgYXNzZXJ0KGY6cmVhZCgibiIpID09IG1heGludCkKICBhc3NlcnQoZjpyZWFkKCJuIikgPT0gbWF4aW50KQogIGFzc2VydChmOnJlYWQoIm4iKSA9PSAweEFCQ3AtMykKICBhc3NlcnQoZjpyZWFkKCJuIikgPT0gMCkKICBhc3NlcnQoZjpyZWFkKCIqbiIpID09IC1tYXhpbnQpICAgICAgICAgICAgLS0gdGVzdCBvbGQgZm9ybWF0ICh3aXRoICcqJykKICBhc3NlcnQoZjpyZWFkKCJuIikgPT0gLW1heGludCkKICBhc3NlcnQoZjpyZWFkKCIqbiIpID09IC0weEFCQ3AtMykgICAgICAgICAgICAtLSB0ZXN0IG9sZCBmb3JtYXQgKHdpdGggJyonKQplbmQKYXNzZXJ0KG9zLnJlbW92ZShmaWxlKSkKCgotLSB0ZXN0aW5nIG11bHRpcGxlIGFyZ3VtZW50cyB0byBpby5yZWFkCmRvCiAgbG9jYWwgZiA8Y2xvc2U+ID0gYXNzZXJ0KGlvLm9wZW4oZmlsZSwgInciKSkKICBmOndyaXRlW1sKYSBsaW5lCmFub3RoZXIgbGluZQoxMjM0CjMuNDUKb25lCnR3bwp0aHJlZQpdXQogIGxvY2FsIGwxLCBsMiwgbDMsIGw0LCBuMSwgbjIsIGMsIGR1bW15CiAgYXNzZXJ0KGY6Y2xvc2UoKSkKICBsb2NhbCBmIDxjbG9zZT4gPSBhc3NlcnQoaW8ub3BlbihmaWxlLCAiciIpKQogIGwxLCBsMiwgbjEsIG4yLCBkdW1teSA9IGY6cmVhZCgibCIsICJMIiwgIm4iLCAibiIpCiAgYXNzZXJ0KGwxID09ICJhIGxpbmUiIGFuZCBsMiA9PSAiYW5vdGhlciBsaW5lXG4iIGFuZAogICAgICAgICBuMSA9PSAxMjM0IGFuZCBuMiA9PSAzLjQ1IGFuZCBkdW1teSA9PSBuaWwpCiAgYXNzZXJ0KGY6Y2xvc2UoKSkKICBsb2NhbCBmIDxjbG9zZT4gPSBhc3NlcnQoaW8ub3BlbihmaWxlLCAiciIpKQogIGwxLCBsMiwgbjEsIG4yLCBjLCBsMywgbDQsIGR1bW15ID0gZjpyZWFkKDcsICJsIiwgIm4iLCAibiIsIDEsICJsIiwgImwiKQogIGFzc2VydChsMSA9PSAiYSBsaW5lXG4iIGFuZCBsMiA9PSAiYW5vdGhlciBsaW5lIiBhbmQgYyA9PSAnXG4nIGFuZAogICAgICAgICBuMSA9PSAxMjM0IGFuZCBuMiA9PSAzLjQ1IGFuZCBsMyA9PSAib25lIiBhbmQgbDQgPT0gInR3byIKICAgICAgICAgYW5kIGR1bW15ID09IG5pbCkKICBhc3NlcnQoZjpjbG9zZSgpKQogIGxvY2FsIGYgPGNsb3NlPiA9IGFzc2VydChpby5vcGVuKGZpbGUsICJyIikpCiAgLS0gc2Vjb25kIGl0ZW0gZmFpbGluZwogIGwxLCBuMSwgbjIsIGR1bW15ID0gZjpyZWFkKCJsIiwgIm4iLCAibiIsICJsIikKICBhc3NlcnQobDEgPT0gImEgbGluZSIgYW5kIG5vdCBuMSkKZW5kCmFzc2VydChvcy5yZW1vdmUoZmlsZSkpCgoKCi0tIHRlc3QgeWllbGRpbmcgZHVyaW5nICdkb2ZpbGUnCmYgPSBhc3NlcnQoaW8ub3BlbihmaWxlLCAidyIpKQpmOndyaXRlW1sKbG9jYWwgeCwgeiA9IGNvcm91dGluZS55aWVsZCgxMCkKbG9jYWwgeSA9IGNvcm91dGluZS55aWVsZCgyMCkKcmV0dXJuIHggKyB5ICogegpdXQphc3NlcnQoZjpjbG9zZSgpKQpmID0gY29yb3V0aW5lLndyYXAoZG9maWxlKQphc3NlcnQoZihmaWxlKSA9PSAxMCkKYXNzZXJ0KGYoMTAwLCAxMDEpID09IDIwKQphc3NlcnQoZigyMDApID09IDEwMCArIDIwMCAqIDEwMSkKYXNzZXJ0KG9zLnJlbW92ZShmaWxlKSkKCgpmID0gYXNzZXJ0KGlvLm9wZW4oZmlsZSwgInciKSkKLS0gdGVzdCBudW1iZXIgdGVybWluYXRpb24KZjp3cml0ZVtbCi0xMi4zLQktMHhmZmZmKyAgLjN8NS5FLTNYICArMjM0ZSsxM0UgMHhERUFEQkVFRkRFQURCRUVGeAoweDEuMTNBcCszZQpdXQotLSB2ZXJ5IGxvbmcgbnVtYmVyCmY6d3JpdGUoIjEyMzQiKTsgZm9yIGkgPSAxLCAxMDAwIGRvIGY6d3JpdGUoIjAiKSBlbmQ7ICBmOndyaXRlKCJcbiIpCi0tIGludmFsaWQgc2VxdWVuY2VzIChtdXN0IHJlYWQgYW5kIGRpc2NhcmQgdmFsaWQgcHJlZml4ZXMpCmY6d3JpdGVbWwouZSsJMC5lOwktLTsgIDB4WDsKXV0KYXNzZXJ0KGY6Y2xvc2UoKSkKZiA9IGFzc2VydChpby5vcGVuKGZpbGUsICJyIikpCmFzc2VydChmOnJlYWQoIm4iKSA9PSAtMTIuMyk7IGFzc2VydChmOnJlYWQoMSkgPT0gIi0iKQphc3NlcnQoZjpyZWFkKCJuIikgPT0gLTB4ZmZmZik7IGFzc2VydChmOnJlYWQoMikgPT0gIisgIikKYXNzZXJ0KGY6cmVhZCgibiIpID09IDAuMyk7IGFzc2VydChmOnJlYWQoMSkgPT0gInwiKQphc3NlcnQoZjpyZWFkKCJuIikgPT0gNWUtMyk7IGFzc2VydChmOnJlYWQoMSkgPT0gIlgiKQphc3NlcnQoZjpyZWFkKCJuIikgPT0gMjM0ZTEzKTsgYXNzZXJ0KGY6cmVhZCgxKSA9PSAiRSIpCmFzc2VydChmOnJlYWQoIm4iKSA9PSAwWGRlYWRiZWVmZGVhZGJlZWYpOyBhc3NlcnQoZjpyZWFkKDIpID09ICJ4XG4iKQphc3NlcnQoZjpyZWFkKCJuIikgPT0gMHgxLjEzYVAzKTsgYXNzZXJ0KGY6cmVhZCgxKSA9PSAiZSIpCgpkbyAgIC0tIGF0dGVtcHQgdG8gcmVhZCB0b28gbG9uZyBudW1iZXIKICBhc3NlcnQobm90IGY6cmVhZCgibiIpKSAgLS0gZmFpbHMKICBsb2NhbCBzID0gZjpyZWFkKCJMIikgICAtLSByZWFkIHJlc3Qgb2YgbGluZQogIGFzc2VydChzdHJpbmcuZmluZChzLCAiXjAwKlxuJCIpKSAgLS0gbG90cyBvZiAwJ3MgbGVmdAplbmQKCmFzc2VydChub3QgZjpyZWFkKCJuIikpOyBhc3NlcnQoZjpyZWFkKDIpID09ICJlKyIpCmFzc2VydChub3QgZjpyZWFkKCJuIikpOyBhc3NlcnQoZjpyZWFkKDEpID09ICI7IikKYXNzZXJ0KG5vdCBmOnJlYWQoIm4iKSk7IGFzc2VydChmOnJlYWQoMikgPT0gIi07IikKYXNzZXJ0KG5vdCBmOnJlYWQoIm4iKSk7IGFzc2VydChmOnJlYWQoMSkgPT0gIlgiKQphc3NlcnQobm90IGY6cmVhZCgibiIpKTsgYXNzZXJ0KGY6cmVhZCgxKSA9PSAiOyIpCmFzc2VydChub3QgZjpyZWFkKCJuIikpOyBhc3NlcnQobm90IGY6cmVhZCgwKSkgICAtLSBlbmQgb2YgZmlsZQphc3NlcnQoZjpjbG9zZSgpKQphc3NlcnQob3MucmVtb3ZlKGZpbGUpKQoKCi0tIHRlc3QgbGluZSBnZW5lcmF0b3JzCmFzc2VydChub3QgcGNhbGwoaW8ubGluZXMsICJub24tZXhpc3RlbnQtZmlsZSIpKQphc3NlcnQob3MucmVuYW1lKG90aGVyZmlsZSwgZmlsZSkpCmlvLm91dHB1dChvdGhlcmZpbGUpCmxvY2FsIG4gPSAwCmxvY2FsIGYgPSBpby5saW5lcyhmaWxlKQp3aGlsZSBmKCkgZG8gbiA9IG4gKyAxIGVuZDsKYXNzZXJ0KG4gPT0gNikgICAtLSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIGZpbGUKY2hlY2tlcnIoImZpbGUgaXMgYWxyZWFkeSBjbG9zZWQiLCBmKQpjaGVja2VycigiZmlsZSBpcyBhbHJlYWR5IGNsb3NlZCIsIGYpCi0tIGNvcHkgZnJvbSBmaWxlIHRvIG90aGVyZmlsZQpuID0gMApmb3IgbCBpbiBpby5saW5lcyhmaWxlKSBkbyBpby53cml0ZShsLCAiXG4iKTsgbiA9IG4gKyAxIGVuZAppby5jbG9zZSgpCmFzc2VydChuID09IDYpCi0tIGNvcHkgZnJvbSBvdGhlcmZpbGUgYmFjayB0byBmaWxlCmxvY2FsIGYgPSBhc3NlcnQoaW8ub3BlbihvdGhlcmZpbGUpKQphc3NlcnQoaW8udHlwZShmKSA9PSAiZmlsZSIpCmlvLm91dHB1dChmaWxlKQphc3NlcnQobm90IGlvLm91dHB1dCgpOnJlYWQoKSkKbiA9IDAKZm9yIGwgaW4gZjpsaW5lcygpIGRvIGlvLndyaXRlKGwsICJcbiIpOyBuID0gbiArIDEgZW5kCmFzc2VydCh0b3N0cmluZyhmKTpzdWIoMSwgNSkgPT0gImZpbGUgIikKYXNzZXJ0KGY6Y2xvc2UoKSk7IGlvLmNsb3NlKCkKYXNzZXJ0KG4gPT0gNikKY2hlY2tlcnIoImNsb3NlZCBmaWxlIiwgaW8uY2xvc2UsIGYpCmFzc2VydCh0b3N0cmluZyhmKSA9PSAiZmlsZSAoY2xvc2VkKSIpCmFzc2VydChpby50eXBlKGYpID09ICJjbG9zZWQgZmlsZSIpCmlvLmlucHV0KGZpbGUpCmYgPSBpby5vcGVuKG90aGVyZmlsZSk6bGluZXMoKQpuID0gMApmb3IgbCBpbiBpby5saW5lcygpIGRvIGFzc2VydChsID09IGYoKSk7IG4gPSBuICsgMSBlbmQKZiA9IG5pbDsgY29sbGVjdGdhcmJhZ2UoKQphc3NlcnQobiA9PSA2KQphc3NlcnQob3MucmVtb3ZlKG90aGVyZmlsZSkpCgpkbyAgLS0gYnVnIGluIDUuMy4xCiAgaW8ub3V0cHV0KG90aGVyZmlsZSkKICBpby53cml0ZShzdHJpbmcucmVwKCJhIiwgMzAwKSwgIlxuIikKICBpby5jbG9zZSgpCiAgbG9jYWwgdCA9e307IGZvciBpID0gMSwgMjUwIGRvIHRbaV0gPSAxIGVuZAogIHQgPSB7aW8ubGluZXMob3RoZXJmaWxlLCB0YWJsZS51bnBhY2sodCkpKCl9CiAgLS0gZXZlcnl0aGluZyBvayBoZXJlCiAgYXNzZXJ0KCN0ID09IDI1MCBhbmQgdFsxXSA9PSAnYScgYW5kIHRbI3RdID09ICdhJykKICB0WyN0ICsgMV0gPSAxICAgIC0tIG9uZSB0b28gbWFueQogIGNoZWNrZXJyKCJ0b28gbWFueSBhcmd1bWVudHMiLCBpby5saW5lcywgb3RoZXJmaWxlLCB0YWJsZS51bnBhY2sodCkpCiAgY29sbGVjdGdhcmJhZ2UoKSAgIC0tIGVuc3VyZSAnb3RoZXJmaWxlJyBpcyBjbG9zZWQKICBhc3NlcnQob3MucmVtb3ZlKG90aGVyZmlsZSkpCmVuZAoKaW8uaW5wdXQoZmlsZSkKZG8gIC0tIHRlc3QgZXJyb3IgcmV0dXJucwogIGxvY2FsIGEsYixjID0gaW8uaW5wdXQoKTp3cml0ZSgieHV4dSIpCiAgYXNzZXJ0KG5vdCBhIGFuZCB0eXBlKGIpID09ICJzdHJpbmciIGFuZCB0eXBlKGMpID09ICJudW1iZXIiKQplbmQKY2hlY2tlcnIoImludmFsaWQgZm9ybWF0IiwgaW8ucmVhZCwgIngiKQphc3NlcnQoaW8ucmVhZCgwKSA9PSAiIikgICAtLSBub3QgZW9mCmFzc2VydChpby5yZWFkKDUsICdsJykgPT0gJyLhbG8iJykKYXNzZXJ0KGlvLnJlYWQoMCkgPT0gIiIpCmFzc2VydChpby5yZWFkKCkgPT0gInNlY29uZCBsaW5lIikKbG9jYWwgeCA9IGlvLmlucHV0KCk6c2VlaygpCmFzc2VydChpby5yZWFkKCkgPT0gInRoaXJkIGxpbmUgIikKYXNzZXJ0KGlvLmlucHV0KCk6c2Vlaygic2V0IiwgeCkpCmFzc2VydChpby5yZWFkKCdMJykgPT0gInRoaXJkIGxpbmUgXG4iKQphc3NlcnQoaW8ucmVhZCgxKSA9PSAi5yIpCmFzc2VydChpby5yZWFkKHN0cmluZy5sZW4iZm91cnRoX2xpbmUiKSA9PSAiZm91cnRoX2xpbmUiKQphc3NlcnQoaW8uaW5wdXQoKTpzZWVrKCJjdXIiLCAtc3RyaW5nLmxlbiJmb3VydGhfbGluZSIpKQphc3NlcnQoaW8ucmVhZCgpID09ICJmb3VydGhfbGluZSIpCmFzc2VydChpby5yZWFkKCkgPT0gIiIpICAtLSBlbXB0eSBsaW5lCmFzc2VydChpby5yZWFkKCduJykgPT0gMzQ1MCkKYXNzZXJ0KGlvLnJlYWQoMSkgPT0gJ1xuJykKYXNzZXJ0KG5vdCBpby5yZWFkKDApKSAgLS0gZW5kIG9mIGZpbGUKYXNzZXJ0KG5vdCBpby5yZWFkKDEpKSAgLS0gZW5kIG9mIGZpbGUKYXNzZXJ0KG5vdCBpby5yZWFkKDMwMDAwKSkgIC0tIGVuZCBvZiBmaWxlCmFzc2VydCgoe2lvLnJlYWQoMSl9KVsyXSA9PSB1bmRlZikKYXNzZXJ0KG5vdCBpby5yZWFkKCkpICAtLSBlbmQgb2YgZmlsZQphc3NlcnQoKHtpby5yZWFkKCl9KVsyXSA9PSB1bmRlZikKYXNzZXJ0KG5vdCBpby5yZWFkKCduJykpICAtLSBlbmQgb2YgZmlsZQphc3NlcnQoKHtpby5yZWFkKCduJyl9KVsyXSA9PSB1bmRlZikKYXNzZXJ0KGlvLnJlYWQoJ2EnKSA9PSAnJykgIC0tIGVuZCBvZiBmaWxlIChPSyBmb3IgJ2EnKQphc3NlcnQoaW8ucmVhZCgnYScpID09ICcnKSAgLS0gZW5kIG9mIGZpbGUgKE9LIGZvciAnYScpCmNvbGxlY3RnYXJiYWdlKCkKcHJpbnQoJysnKQppby5jbG9zZShpby5pbnB1dCgpKQpjaGVja2VycigiIGlucHV0IGZpbGUgaXMgY2xvc2VkIiwgaW8ucmVhZCkKCmFzc2VydChvcy5yZW1vdmUoZmlsZSkpCgpsb2NhbCB0ID0gJzAxMjM0NTY3ODknCmZvciBpPTEsMTAgZG8gdCA9IHQuLnQ7IGVuZAphc3NlcnQoc3RyaW5nLmxlbih0KSA9PSAxMCoyXjEwKQoKaW8ub3V0cHV0KGZpbGUpCmlvLndyaXRlKCJhbG8iKTp3cml0ZSgiXG4iKQppby5jbG9zZSgpCmNoZWNrZXJyKCIgb3V0cHV0IGZpbGUgaXMgY2xvc2VkIiwgaW8ud3JpdGUpCmxvY2FsIGYgPSBpby5vcGVuKGZpbGUsICJhK2IiKQppby5vdXRwdXQoZikKY29sbGVjdGdhcmJhZ2UoKQoKYXNzZXJ0KGlvLndyaXRlKCcgJyAuLiB0IC4uICcgJykpCmFzc2VydChpby53cml0ZSgnOycsICdlbmQgb2YgZmlsZVxuJykpCmY6Zmx1c2goKTsgaW8uZmx1c2goKQpmOmNsb3NlKCkKcHJpbnQoJysnKQoKaW8uaW5wdXQoZmlsZSkKYXNzZXJ0KGlvLnJlYWQoKSA9PSAiYWxvIikKYXNzZXJ0KGlvLnJlYWQoMSkgPT0gJyAnKQphc3NlcnQoaW8ucmVhZChzdHJpbmcubGVuKHQpKSA9PSB0KQphc3NlcnQoaW8ucmVhZCgxKSA9PSAnICcpCmFzc2VydChpby5yZWFkKDApKQphc3NlcnQoaW8ucmVhZCgnYScpID09ICc7ZW5kIG9mIGZpbGVcbicpCmFzc2VydChub3QgaW8ucmVhZCgwKSkKYXNzZXJ0KGlvLmNsb3NlKGlvLmlucHV0KCkpKQoKCi0tIHRlc3QgZXJyb3JzIGluIHJlYWQvd3JpdGUKZG8KICBsb2NhbCBmdW5jdGlvbiBpc21zZyAobSkKICAgIC0tIGVycm9yIG1lc3NhZ2UgaXMgbm90IGEgY29kZSBudW1iZXIKICAgIHJldHVybiAodHlwZShtKSA9PSAic3RyaW5nIiBhbmQgbm90IHRvbnVtYmVyKG0pKQogIGVuZAoKICAtLSByZWFkCiAgbG9jYWwgZiA9IGlvLm9wZW4oZmlsZSwgInciKQogIGxvY2FsIHIsIG0sIGMgPSBmOnJlYWQoKQogIGFzc2VydChub3QgciBhbmQgaXNtc2cobSkgYW5kIHR5cGUoYykgPT0gIm51bWJlciIpCiAgYXNzZXJ0KGY6Y2xvc2UoKSkKICAtLSB3cml0ZQogIGYgPSBpby5vcGVuKGZpbGUsICJyIikKICByLCBtLCBjID0gZjp3cml0ZSgid2hhdGV2ZXIiKQogIGFzc2VydChub3QgciBhbmQgaXNtc2cobSkgYW5kIHR5cGUoYykgPT0gIm51bWJlciIpCiAgYXNzZXJ0KGY6Y2xvc2UoKSkKICAtLSBsaW5lcwogIGYgPSBpby5vcGVuKGZpbGUsICJ3IikKICByLCBtID0gcGNhbGwoZjpsaW5lcygpKQogIGFzc2VydChyID09IGZhbHNlIGFuZCBpc21zZyhtKSkKICBhc3NlcnQoZjpjbG9zZSgpKQplbmQKCmFzc2VydChvcy5yZW1vdmUoZmlsZSkpCgotLSB0ZXN0IGZvciBMIGZvcm1hdAppby5vdXRwdXQoZmlsZSk7IGlvLndyaXRlIlxuXG5saW5lXG5vdGhlciI6Y2xvc2UoKQppby5pbnB1dChmaWxlKQphc3NlcnQoaW8ucmVhZCJMIiA9PSAiXG4iKQphc3NlcnQoaW8ucmVhZCJMIiA9PSAiXG4iKQphc3NlcnQoaW8ucmVhZCJMIiA9PSAibGluZVxuIikKYXNzZXJ0KGlvLnJlYWQiTCIgPT0gIm90aGVyIikKYXNzZXJ0KG5vdCBpby5yZWFkIkwiKQppby5pbnB1dCgpOmNsb3NlKCkKCmxvY2FsIGYgPSBhc3NlcnQoaW8ub3BlbihmaWxlKSkKbG9jYWwgcyA9ICIiCmZvciBsIGluIGY6bGluZXMoIkwiKSBkbyBzID0gcyAuLiBsIGVuZAphc3NlcnQocyA9PSAiXG5cbmxpbmVcbm90aGVyIikKZjpjbG9zZSgpCgppby5pbnB1dChmaWxlKQpzID0gIiIKZm9yIGwgaW4gaW8ubGluZXMobmlsLCAiTCIpIGRvIHMgPSBzIC4uIGwgZW5kCmFzc2VydChzID09ICJcblxubGluZVxub3RoZXIiKQppby5pbnB1dCgpOmNsb3NlKCkKCnMgPSAiIgpmb3IgbCBpbiBpby5saW5lcyhmaWxlLCAiTCIpIGRvIHMgPSBzIC4uIGwgZW5kCmFzc2VydChzID09ICJcblxubGluZVxub3RoZXIiKQoKcyA9ICIiCmZvciBsIGluIGlvLmxpbmVzKGZpbGUsICJsIikgZG8gcyA9IHMgLi4gbCBlbmQKYXNzZXJ0KHMgPT0gImxpbmVvdGhlciIpCgppby5vdXRwdXQoZmlsZSk7IGlvLndyaXRlImEgPSAxMCArIDM0XG5hID0gMiphXG5hID0gLWFcbiI6Y2xvc2UoKQpsb2NhbCB0ID0ge30KYXNzZXJ0KGxvYWQoaW8ubGluZXMoZmlsZSwgIkwiKSwgbmlsLCBuaWwsIHQpKSgpCmFzc2VydCh0LmEgPT0gLSgoMTAgKyAzNCkgKiAyKSkKCgpkbyAgIC0tIHRlc3RpbmcgY2xvc2luZyBmaWxlIGluIGxpbmUgaXRlcmF0aW9uCgogIC0tIGdldCB0aGUgdG8tYmUtY2xvc2VkIHZhcmlhYmxlIGZyb20gYSBsb29wCiAgbG9jYWwgZnVuY3Rpb24gZ2V0dG9jbG9zZSAobHYpCiAgICBsdiA9IGx2ICsgMQogICAgbG9jYWwgc3R2YXIgPSAwICAgLS0gdG8tYmUtY2xvc2VkIGlzIDR0aCBzdGF0ZSB2YXJpYWJsZSBpbiB0aGUgbG9vcAogICAgZm9yIGkgPSAxLCAxMDAwIGRvCiAgICAgIGxvY2FsIG4sIHYgPSBkZWJ1Zy5nZXRsb2NhbChsdiwgaSkKICAgICAgaWYgbiA9PSAiKGZvciBzdGF0ZSkiIHRoZW4KICAgICAgICBzdHZhciA9IHN0dmFyICsgMQogICAgICAgIGlmIHN0dmFyID09IDQgdGhlbiByZXR1cm4gdiBlbmQKICAgICAgZW5kCiAgICBlbmQKICBlbmQKCiAgbG9jYWwgZgogIGZvciBsIGluIGlvLmxpbmVzKGZpbGUpIGRvCiAgICBmID0gZ2V0dG9jbG9zZSgxKQogICAgYXNzZXJ0KGlvLnR5cGUoZikgPT0gImZpbGUiKQogICAgYnJlYWsKICBlbmQKICBhc3NlcnQoaW8udHlwZShmKSA9PSAiY2xvc2VkIGZpbGUiKQoKICBmID0gbmlsCiAgbG9jYWwgZnVuY3Rpb24gZm9vIChuYW1lKQogICAgZm9yIGwgaW4gaW8ubGluZXMobmFtZSkgZG8KICAgICAgZiA9IGdldHRvY2xvc2UoMSkKICAgICAgYXNzZXJ0KGlvLnR5cGUoZikgPT0gImZpbGUiKQogICAgICBlcnJvcihmKSAgIC0tIGV4aXQgbG9vcCB3aXRoIGFuIGVycm9yCiAgICBlbmQKICBlbmQKICBsb2NhbCBzdCwgbXNnID0gcGNhbGwoZm9vLCBmaWxlKQogIGFzc2VydChzdCA9PSBmYWxzZSBhbmQgaW8udHlwZShtc2cpID09ICJjbG9zZWQgZmlsZSIpCgplbmQKCgotLSB0ZXN0IGZvciBtdWx0aXBlIGFyZ3VtZW50cyBpbiAnbGluZXMnCmlvLm91dHB1dChmaWxlKTsgaW8ud3JpdGUiMDEyMzQ1Njc4OVxuIjpjbG9zZSgpCmZvciBhLGIgaW4gaW8ubGluZXMoZmlsZSwgMSwgMSkgZG8KICBpZiBhID09ICJcbiIgdGhlbiBhc3NlcnQobm90IGIpCiAgZWxzZSBhc3NlcnQodG9udW1iZXIoYSkgPT0gdG9udW1iZXIoYikgLSAxKQogIGVuZAplbmQKCmZvciBhLGIsYyBpbiBpby5saW5lcyhmaWxlLCAxLCAyLCAiYSIpIGRvCiAgYXNzZXJ0KGEgPT0gIjAiIGFuZCBiID09ICIxMiIgYW5kIGMgPT0gIjM0NTY3ODlcbiIpCmVuZAoKZm9yIGEsYixjIGluIGlvLmxpbmVzKGZpbGUsICJhIiwgMCwgMSkgZG8KICBpZiBhID09ICIiIHRoZW4gYnJlYWsgZW5kCiAgYXNzZXJ0KGEgPT0gIjAxMjM0NTY3ODlcbiIgYW5kIG5vdCBiIGFuZCBub3QgYykKZW5kCmNvbGxlY3RnYXJiYWdlKCkgICAtLSB0byBjbG9zZSBmaWxlIGluIHByZXZpb3VzIGl0ZXJhdGlvbgoKaW8ub3V0cHV0KGZpbGUpOyBpby53cml0ZSIwMFxuMTBcbjIwXG4zMFxuNDBcbiI6Y2xvc2UoKQpmb3IgYSwgYiBpbiBpby5saW5lcyhmaWxlLCAibiIsICJuIikgZG8KICBpZiBhID09IDQwIHRoZW4gYXNzZXJ0KG5vdCBiKQogIGVsc2UgYXNzZXJ0KGEgPT0gYiAtIDEwKQogIGVuZAplbmQKCgotLSB0ZXN0IGxvYWQgeCBsaW5lcwppby5vdXRwdXQoZmlsZSk7CmlvLndyaXRlW1sKbG9jYWwgeQo9IFgKWCA9ClggKgoyICsKWDsKWCA9ClgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTsKXV06Y2xvc2UoKQpfRy5YID0gMQphc3NlcnQobm90IGxvYWQoKGlvLmxpbmVzKGZpbGUpKSkpCmNvbGxlY3RnYXJiYWdlKCkgICAtLSB0byBjbG9zZSBmaWxlIGluIHByZXZpb3VzIGl0ZXJhdGlvbgpsb2FkKChpby5saW5lcyhmaWxlLCAiTCIpKSkoKQphc3NlcnQoX0cuWCA9PSAyKQpsb2FkKChpby5saW5lcyhmaWxlLCAxKSkpKCkKYXNzZXJ0KF9HLlggPT0gNCkKbG9hZCgoaW8ubGluZXMoZmlsZSwgMykpKSgpCmFzc2VydChfRy5YID09IDgpCgpwcmludCgnKycpCgpsb2NhbCB4MSA9ICJzdHJpbmdcblxuXFxjb20gXCJcIicnY29pc2FzIFtbZXN0cmFuaGFzXV0gXV0nIgppby5vdXRwdXQoZmlsZSkKYXNzZXJ0KGlvLndyaXRlKHN0cmluZy5mb3JtYXQoIngyID0gJXFcbi0tIGNvbW1lbnQgd2l0aG91dCBlbmRpbmcgRU9TIiwgeDEpKSkKaW8uY2xvc2UoKQphc3NlcnQobG9hZGZpbGUoZmlsZSkpKCkKYXNzZXJ0KHgxID09IHgyKQpwcmludCgnKycpCmFzc2VydChvcy5yZW1vdmUoZmlsZSkpCmFzc2VydChub3Qgb3MucmVtb3ZlKGZpbGUpKQphc3NlcnQobm90IG9zLnJlbW92ZShvdGhlcmZpbGUpKQoKLS0gdGVzdGluZyBsb2FkZmlsZQpsb2NhbCBmdW5jdGlvbiB0ZXN0bG9hZGZpbGUgKHMsIGV4cHJlcykKICBpby5vdXRwdXQoZmlsZSkKICBpZiBzIHRoZW4gaW8ud3JpdGUocykgZW5kCiAgaW8uY2xvc2UoKQogIGxvY2FsIHJlcyA9IGFzc2VydChsb2FkZmlsZShmaWxlKSkoKQogIGFzc2VydChvcy5yZW1vdmUoZmlsZSkpCiAgYXNzZXJ0KHJlcyA9PSBleHByZXMpCmVuZAoKLS0gbG9hZGluZyBlbXB0eSBmaWxlCnRlc3Rsb2FkZmlsZShuaWwsIG5pbCkKCi0tIGxvYWRpbmcgZmlsZSB3aXRoIGluaXRpYWwgY29tbWVudCB3aXRob3V0IGVuZCBvZiBsaW5lCnRlc3Rsb2FkZmlsZSgiIyBhIG5vbi1lbmRpbmcgY29tbWVudCIsIG5pbCkKCgotLSBjaGVja2luZyBVbmljb2RlIEJPTSBpbiBmaWxlcwp0ZXN0bG9hZGZpbGUoIlx4RUZceEJCXHhCRiMgc29tZSBjb21tZW50XG5yZXR1cm4gMjM0IiwgMjM0KQp0ZXN0bG9hZGZpbGUoIlx4RUZceEJCXHhCRnJldHVybiAyMzkiLCAyMzkpCnRlc3Rsb2FkZmlsZSgiXHhFRlx4QkJceEJGIiwgbmlsKSAgIC0tIGVtcHR5IGZpbGUgd2l0aCBhIEJPTQoKCi0tIGNoZWNraW5nIGxpbmUgbnVtYmVycyBpbiBmaWxlcyB3aXRoIGluaXRpYWwgY29tbWVudHMKdGVzdGxvYWRmaWxlKCIjIGEgY29tbWVudFxucmV0dXJuIHJlcXVpcmUnZGVidWcnLmdldGluZm8oMSkuY3VycmVudGxpbmUiLCAyKQoKCi0tIGxvYWRpbmcgYmluYXJ5IGZpbGUKaW8ub3V0cHV0KGlvLm9wZW4oZmlsZSwgIndiIikpCmFzc2VydChpby53cml0ZShzdHJpbmcuZHVtcChmdW5jdGlvbiAoKSByZXR1cm4gMTAsICdcMGFsb1wyNTUnLCAnaGknIGVuZCkpKQppby5jbG9zZSgpCmEsIGIsIGMgPSBhc3NlcnQobG9hZGZpbGUoZmlsZSkpKCkKYXNzZXJ0KGEgPT0gMTAgYW5kIGIgPT0gIlwwYWxvXDI1NSIgYW5kIGMgPT0gImhpIikKYXNzZXJ0KG9zLnJlbW92ZShmaWxlKSkKCi0tIGJ1ZyBpbiA1LjIuMQpkbwogIGlvLm91dHB1dChpby5vcGVuKGZpbGUsICJ3YiIpKQogIC0tIHNhdmUgZnVuY3Rpb24gd2l0aCBubyB1cHZhbHVlcwogIGFzc2VydChpby53cml0ZShzdHJpbmcuZHVtcChmdW5jdGlvbiAoKSByZXR1cm4gMSBlbmQpKSkKICBpby5jbG9zZSgpCiAgZiA9IGFzc2VydChsb2FkZmlsZShmaWxlLCAiYiIsIHt9KSkKICBhc3NlcnQodHlwZShmKSA9PSAiZnVuY3Rpb24iIGFuZCBmKCkgPT0gMSkKICBhc3NlcnQob3MucmVtb3ZlKGZpbGUpKQplbmQKCi0tIGxvYWRpbmcgYmluYXJ5IGZpbGUgd2l0aCBpbml0aWFsIGNvbW1lbnQKaW8ub3V0cHV0KGlvLm9wZW4oZmlsZSwgIndiIikpCmFzc2VydChpby53cml0ZSgiI3RoaXMgaXMgYSBjb21tZW50IGZvciBhIGJpbmFyeSBmaWxlXDBcbiIsCiAgICAgICAgICAgICAgICBzdHJpbmcuZHVtcChmdW5jdGlvbiAoKSByZXR1cm4gMjAsICdcMFwwXDAnIGVuZCkpKQppby5jbG9zZSgpCmEsIGIsIGMgPSBhc3NlcnQobG9hZGZpbGUoZmlsZSkpKCkKYXNzZXJ0KGEgPT0gMjAgYW5kIGIgPT0gIlwwXDBcMCIgYW5kIGMgPT0gbmlsKQphc3NlcnQob3MucmVtb3ZlKGZpbGUpKQoKCi0tICdsb2FkZmlsZScgd2l0aCAnZW52JwpkbwogIGxvY2FsIGYgPSBpby5vcGVuKGZpbGUsICd3JykKICBmOndyaXRlW1sKICAgIGlmICguLi4pIHRoZW4gYSA9IDE1OyByZXR1cm4gYiwgYywgZAogICAgZWxzZSByZXR1cm4gX0VOVgogICAgZW5kCiAgXV0KICBmOmNsb3NlKCkKICBsb2NhbCB0ID0ge2IgPSAxMiwgYyA9ICJ4dXh1IiwgZCA9IHByaW50fQogIGxvY2FsIGYgPSBhc3NlcnQobG9hZGZpbGUoZmlsZSwgJ3QnLCB0KSkKICBsb2NhbCBiLCBjLCBkID0gZigxKQogIGFzc2VydCh0LmEgPT0gMTUgYW5kIGIgPT0gMTIgYW5kIGMgPT0gdC5jIGFuZCBkID09IHByaW50KQogIGFzc2VydChmKCkgPT0gdCkKICBmID0gYXNzZXJ0KGxvYWRmaWxlKGZpbGUsICd0JywgbmlsKSkKICBhc3NlcnQoZigpID09IG5pbCkKICBmID0gYXNzZXJ0KGxvYWRmaWxlKGZpbGUpKQogIGFzc2VydChmKCkgPT0gX0cpCiAgYXNzZXJ0KG9zLnJlbW92ZShmaWxlKSkKZW5kCgoKLS0gJ2xvYWRmaWxlJyB4IG1vZGVzCmRvCiAgaW8ub3BlbihmaWxlLCAndycpOndyaXRlKCJyZXR1cm4gMTAiKTpjbG9zZSgpCiAgbG9jYWwgcywgbSA9IGxvYWRmaWxlKGZpbGUsICdiJykKICBhc3NlcnQobm90IHMgYW5kIHN0cmluZy5maW5kKG0sICJhIHRleHQgY2h1bmsiKSkKICBpby5vcGVuKGZpbGUsICd3Jyk6d3JpdGUoIlwyNyByZXR1cm4gMTAiKTpjbG9zZSgpCiAgbG9jYWwgcywgbSA9IGxvYWRmaWxlKGZpbGUsICd0JykKICBhc3NlcnQobm90IHMgYW5kIHN0cmluZy5maW5kKG0sICJhIGJpbmFyeSBjaHVuayIpKQogIGFzc2VydChvcy5yZW1vdmUoZmlsZSkpCmVuZAoKCmlvLm91dHB1dChmaWxlKQphc3NlcnQoaW8ud3JpdGUoInF1YWxxdWVyIGNvaXNhXG4iKSkKYXNzZXJ0KGlvLndyaXRlKCJtYWlzIHF1YWxxdWVyIGNvaXNhIikpCmlvLmNsb3NlKCkKYXNzZXJ0KGlvLm91dHB1dChhc3NlcnQoaW8ub3BlbihvdGhlcmZpbGUsICd3YicpKSkKICAgICAgIDp3cml0ZSgib3V0cmEgY29pc2FcMFwxXDNcMFwwXDBcMFwyNTVcMCIpCiAgICAgICA6Y2xvc2UoKSkKCmxvY2FsIGZpbGVoYW5kbGUgPSBhc3NlcnQoaW8ub3BlbihmaWxlLCAncisnKSkKbG9jYWwgb3RoZXJmaWxlaGFuZGxlID0gYXNzZXJ0KGlvLm9wZW4ob3RoZXJmaWxlLCAncmInKSkKYXNzZXJ0KGZpbGVoYW5kbGUgfj0gb3RoZXJmaWxlaGFuZGxlKQphc3NlcnQodHlwZShmaWxlaGFuZGxlKSA9PSAidXNlcmRhdGEiKQphc3NlcnQoZmlsZWhhbmRsZTpyZWFkKCdsJykgPT0gInF1YWxxdWVyIGNvaXNhIikKaW8uaW5wdXQob3RoZXJmaWxlaGFuZGxlKQphc3NlcnQoaW8ucmVhZChzdHJpbmcubGVuIm91dHJhIGNvaXNhIikgPT0gIm91dHJhIGNvaXNhIikKYXNzZXJ0KGZpbGVoYW5kbGU6cmVhZCgnbCcpID09ICJtYWlzIHF1YWxxdWVyIGNvaXNhIikKZmlsZWhhbmRsZTpjbG9zZSgpOwphc3NlcnQodHlwZShmaWxlaGFuZGxlKSA9PSAidXNlcmRhdGEiKQppby5pbnB1dChvdGhlcmZpbGVoYW5kbGUpCmFzc2VydChpby5yZWFkKDQpID09ICJcMFwxXDNcMCIpCmFzc2VydChpby5yZWFkKDMpID09ICJcMFwwXDAiKQphc3NlcnQoaW8ucmVhZCgwKSA9PSAiIikgICAgICAgIC0tIDI1NSBpcyBub3QgZW9mCmFzc2VydChpby5yZWFkKDEpID09ICJcMjU1IikKYXNzZXJ0KGlvLnJlYWQoJ2EnKSA9PSAiXDAiKQphc3NlcnQobm90IGlvLnJlYWQoMCkpCmFzc2VydChvdGhlcmZpbGVoYW5kbGUgPT0gaW8uaW5wdXQoKSkKb3RoZXJmaWxlaGFuZGxlOmNsb3NlKCkKYXNzZXJ0KG9zLnJlbW92ZShmaWxlKSkKYXNzZXJ0KG9zLnJlbW92ZShvdGhlcmZpbGUpKQpjb2xsZWN0Z2FyYmFnZSgpCgppby5vdXRwdXQoZmlsZSkKICA6d3JpdGVbWwogMTIzLjQJLTU2ZS0yICBub3QgYSBudW1iZXIKc2Vjb25kIGxpbmUKdGhpcmQgbGluZQoKYW5kIHRoZSByZXN0IG9mIHRoZSBmaWxlCl1dCiAgOmNsb3NlKCkKaW8uaW5wdXQoZmlsZSkKbG9jYWwgXyxhLGIsYyxkLGUsaCxfXyA9IGlvLnJlYWQoMSwgJ24nLCAnbicsICdsJywgJ2wnLCAnbCcsICdhJywgMTApCmFzc2VydChpby5jbG9zZShpby5pbnB1dCgpKSkKYXNzZXJ0KF8gPT0gJyAnIGFuZCBub3QgX18pCmFzc2VydCh0eXBlKGEpID09ICdudW1iZXInIGFuZCBhPT0xMjMuNCBhbmQgYj09LTU2ZS0yKQphc3NlcnQoZD09J3NlY29uZCBsaW5lJyBhbmQgZT09J3RoaXJkIGxpbmUnKQphc3NlcnQoaD09W1sKCmFuZCB0aGUgcmVzdCBvZiB0aGUgZmlsZQpdXSkKYXNzZXJ0KG9zLnJlbW92ZShmaWxlKSkKY29sbGVjdGdhcmJhZ2UoKQoKLS0gdGVzdGluZyBidWZmZXJzCmRvCiAgbG9jYWwgZiA9IGFzc2VydChpby5vcGVuKGZpbGUsICJ3IikpCiAgbG9jYWwgZnIgPSBhc3NlcnQoaW8ub3BlbihmaWxlLCAiciIpKQogIGFzc2VydChmOnNldHZidWYoImZ1bGwiLCAyMDAwKSkKICBmOndyaXRlKCJ4IikKICBhc3NlcnQoZnI6cmVhZCgiYWxsIikgPT0gIiIpICAtLSBmdWxsIGJ1ZmZlcjsgb3V0cHV0IG5vdCB3cml0dGVuIHlldAogIGY6Y2xvc2UoKQogIGZyOnNlZWsoInNldCIpCiAgYXNzZXJ0KGZyOnJlYWQoImFsbCIpID09ICJ4IikgICAtLSBgY2xvc2UnIGZsdXNoZXMgaXQKICBmID0gYXNzZXJ0KGlvLm9wZW4oZmlsZSksICJ3IikKICBhc3NlcnQoZjpzZXR2YnVmKCJubyIpKQogIGY6d3JpdGUoIngiKQogIGZyOnNlZWsoInNldCIpCiAgYXNzZXJ0KGZyOnJlYWQoImFsbCIpID09ICJ4IikgIC0tIG5vIGJ1ZmZlcjsgb3V0cHV0IGlzIHJlYWR5CiAgZjpjbG9zZSgpCiAgZiA9IGFzc2VydChpby5vcGVuKGZpbGUsICJhIikpCiAgYXNzZXJ0KGY6c2V0dmJ1ZigibGluZSIpKQogIGY6d3JpdGUoIngiKQogIGZyOnNlZWsoInNldCIsIDEpCiAgYXNzZXJ0KGZyOnJlYWQoImFsbCIpID09ICIiKSAgIC0tIGxpbmUgYnVmZmVyOyBubyBvdXRwdXQgd2l0aG91dCBgXG4nCiAgZjp3cml0ZSgiYVxuIik6c2Vlaygic2V0IiwgMSkKICBhc3NlcnQoZnI6cmVhZCgiYWxsIikgPT0gInhhXG4iKSAgLS0gbm93IHdlIGhhdmUgYSB3aG9sZSBsaW5lCiAgZjpjbG9zZSgpOyBmcjpjbG9zZSgpCiAgYXNzZXJ0KG9zLnJlbW92ZShmaWxlKSkKZW5kCgoKaWYgbm90IF9zb2Z0IHRoZW4KICBwcmludCgidGVzdGluZyBsYXJnZSBmaWxlcyAoPiBCVUZTSVopIikKICBpby5vdXRwdXQoZmlsZSkKICBmb3IgaT0xLDUwMDEgZG8gaW8ud3JpdGUoJzAxMjM0NTY3ODkxMjMnKSBlbmQKICBpby53cml0ZSgnXG4xMjM0NicpOmNsb3NlKCkKICBpby5pbnB1dChmaWxlKQogIGxvY2FsIHggPSBpby5yZWFkKCdhJykKICBpby5pbnB1dCgpOnNlZWsoJ3NldCcsIDApCiAgbG9jYWwgeSA9IGlvLnJlYWQoMzAwMDEpLi5pby5yZWFkKDEwMDUpLi5pby5yZWFkKDApLi4KICAgICAgICAgICAgaW8ucmVhZCgxKS4uaW8ucmVhZCgxMDAwMDMpCiAgYXNzZXJ0KHggPT0geSBhbmQgc3RyaW5nLmxlbih4KSA9PSA1MDAxKjEzICsgNikKICBpby5pbnB1dCgpOnNlZWsoJ3NldCcsIDApCiAgeSA9IGlvLnJlYWQoKSAgLS0gaHVnZSBsaW5lCiAgYXNzZXJ0KHggPT0geS4uJ1xuJy4uaW8ucmVhZCgpKQogIGFzc2VydChub3QgaW8ucmVhZCgpKQogIGlvLmNsb3NlKGlvLmlucHV0KCkpCiAgYXNzZXJ0KG9zLnJlbW92ZShmaWxlKSkKICB4ID0gbmlsOyB5ID0gbmlsCmVuZAoKaWYgbm90IF9wb3J0IHRoZW4KICBsb2NhbCBwcm9nbmFtZQogIGRvICAtLSBnZXQgbmFtZSBvZiBydW5uaW5nIGV4ZWN1dGFibGUKICAgIGxvY2FsIGFyZyA9IGFyZyBvciBBUkcKICAgIGxvY2FsIGkgPSAwCiAgICB3aGlsZSBhcmdbaV0gZG8gaSA9IGkgLSAxIGVuZAogICAgcHJvZ25hbWUgPSAnIicgLi4gYXJnW2kgKyAxXSAuLiAnIicKICBlbmQKICBwcmludCgidGVzdGluZyBwb3Blbi9wY2xvc2UgYW5kIGV4ZWN1dGUiKQogIGxvY2FsIHRlc3RzID0gewogICAgLS0gY29tbWFuZCwgICB3aGF0LCAgY29kZQogICAgeyJscyA+IC9kZXYvbnVsbCIsICJvayJ9LAogICAgeyJub3QtdG8tYmUtZm91bmQtY29tbWFuZCIsICJleGl0In0sCiAgICB7ImV4aXQgMyIsICJleGl0IiwgM30sCiAgICB7ImV4aXQgMTI5IiwgImV4aXQiLCAxMjl9LAogICAgeyJraWxsIC1zIEhVUCAkJCIsICJzaWduYWwiLCAxfSwKICAgIHsia2lsbCAtcyBLSUxMICQkIiwgInNpZ25hbCIsIDl9LAogICAgeyJzaCAtYyAna2lsbCAtcyBIVVAgJCQnIiwgImV4aXQifSwKICAgIHtwcm9nbmFtZSAuLiAnIC1lICIgIicsICJvayJ9LAogICAge3Byb2duYW1lIC4uICcgLWUgIm9zLmV4aXQoMCwgdHJ1ZSkiJywgIm9rIn0sCiAgICB7cHJvZ25hbWUgLi4gJyAtZSAib3MuZXhpdCgyMCwgdHJ1ZSkiJywgImV4aXQiLCAyMH0sCiAgfQogIHByaW50KCJcbihzb21lIGVycm9yIG1lc3NhZ2VzIGFyZSBleHBlY3RlZCBub3cpIikKICBmb3IgXywgdiBpbiBpcGFpcnModGVzdHMpIGRvCiAgICBsb2NhbCB4LCB5LCB6ID0gaW8ucG9wZW4odlsxXSk6Y2xvc2UoKQogICAgbG9jYWwgeDEsIHkxLCB6MSA9IG9zLmV4ZWN1dGUodlsxXSkKICAgIGFzc2VydCh4ID09IHgxIGFuZCB5ID09IHkxIGFuZCB6ID09IHoxKQogICAgaWYgdlsyXSA9PSAib2siIHRoZW4KICAgICAgYXNzZXJ0KHggYW5kIHkgPT0gJ2V4aXQnIGFuZCB6ID09IDApCiAgICBlbHNlCiAgICAgIGFzc2VydChub3QgeCBhbmQgeSA9PSB2WzJdKSAgIC0tIGNvcnJlY3Qgc3RhdHVzIGFuZCAnd2hhdCcKICAgICAgLS0gY29ycmVjdCBjb2RlIGlmIGtub3duIChidXQgYWx3YXlzIGRpZmZlcmVudCBmcm9tIDApCiAgICAgIGFzc2VydCgodlszXSA9PSBuaWwgYW5kIHogPiAwKSBvciB2WzNdID09IHopCiAgICBlbmQKICBlbmQKZW5kCgoKLS0gdGVzdGluZyB0bXBmaWxlCmYgPSBpby50bXBmaWxlKCkKYXNzZXJ0KGlvLnR5cGUoZikgPT0gImZpbGUiKQpmOndyaXRlKCJhbG8iKQpmOnNlZWsoInNldCIpCmFzc2VydChmOnJlYWQiYSIgPT0gImFsbyIpCgplbmQgLS19CgpwcmludCcrJwoKcHJpbnQoInRlc3RpbmcgZGF0ZS90aW1lIikKCmFzc2VydChvcy5kYXRlKCIiKSA9PSAiIikKYXNzZXJ0KG9zLmRhdGUoIiEiKSA9PSAiIikKYXNzZXJ0KG9zLmRhdGUoIlwwXDAiKSA9PSAiXDBcMCIpCmFzc2VydChvcy5kYXRlKCIhXDBcMCIpID09ICJcMFwwIikKbG9jYWwgeCA9IHN0cmluZy5yZXAoImEiLCAxMDAwMCkKYXNzZXJ0KG9zLmRhdGUoeCkgPT0geCkKbG9jYWwgdCA9IG9zLnRpbWUoKQpEID0gb3MuZGF0ZSgiKnQiLCB0KQphc3NlcnQob3MuZGF0ZShzdHJpbmcucmVwKCIlZCIsIDEwMDApLCB0KSA9PQogICAgICAgc3RyaW5nLnJlcChvcy5kYXRlKCIlZCIsIHQpLCAxMDAwKSkKYXNzZXJ0KG9zLmRhdGUoc3RyaW5nLnJlcCgiJSIsIDIwMCkpID09IHN0cmluZy5yZXAoIiUiLCAxMDApKQoKbG9jYWwgZnVuY3Rpb24gY2hlY2tEYXRlVGFibGUgKHQpCiAgX0cuRCA9IG9zLmRhdGUoIip0IiwgdCkKICBhc3NlcnQob3MudGltZShEKSA9PSB0KQogIGxvYWQob3MuZGF0ZShbW2Fzc2VydChELnllYXI9PSVZIGFuZCBELm1vbnRoPT0lbSBhbmQgRC5kYXk9PSVkIGFuZAogICAgRC5ob3VyPT0lSCBhbmQgRC5taW49PSVNIGFuZCBELnNlYz09JVMgYW5kCiAgICBELndkYXk9PSV3KzEgYW5kIEQueWRheT09JWopXV0sIHQpKSgpCiAgX0cuRCA9IG5pbAplbmQKCmNoZWNrRGF0ZVRhYmxlKG9zLnRpbWUoKSkKaWYgbm90IF9wb3J0IHRoZW4KICAtLSBhc3N1bWUgdGhhdCB0aW1lX3QgY2FuIHJlcHJlc2VudCB0aGVzZSB2YWx1ZXMKICBjaGVja0RhdGVUYWJsZSgwKQogIGNoZWNrRGF0ZVRhYmxlKDEpCiAgY2hlY2tEYXRlVGFibGUoMTAwMCkKICBjaGVja0RhdGVUYWJsZSgweDdmZmZmZmZmKQogIGNoZWNrRGF0ZVRhYmxlKDB4ODAwMDAwMDApCmVuZAoKY2hlY2tlcnIoImludmFsaWQgY29udmVyc2lvbiBzcGVjaWZpZXIiLCBvcy5kYXRlLCAiJSIpCmNoZWNrZXJyKCJpbnZhbGlkIGNvbnZlcnNpb24gc3BlY2lmaWVyIiwgb3MuZGF0ZSwgIiU5IikKY2hlY2tlcnIoImludmFsaWQgY29udmVyc2lvbiBzcGVjaWZpZXIiLCBvcy5kYXRlLCAiJSIpCmNoZWNrZXJyKCJpbnZhbGlkIGNvbnZlcnNpb24gc3BlY2lmaWVyIiwgb3MuZGF0ZSwgIiVPIikKY2hlY2tlcnIoImludmFsaWQgY29udmVyc2lvbiBzcGVjaWZpZXIiLCBvcy5kYXRlLCAiJUUiKQpjaGVja2VycigiaW52YWxpZCBjb252ZXJzaW9uIHNwZWNpZmllciIsIG9zLmRhdGUsICIlRWEiKQoKY2hlY2tlcnIoIm5vdCBhbiBpbnRlZ2VyIiwgb3MudGltZSwge3llYXI9MTAwMCwgbW9udGg9MSwgZGF5PTEsIGhvdXI9J3gnfSkKY2hlY2tlcnIoIm5vdCBhbiBpbnRlZ2VyIiwgb3MudGltZSwge3llYXI9MTAwMCwgbW9udGg9MSwgZGF5PTEsIGhvdXI9MS41fSkKCmNoZWNrZXJyKCJtaXNzaW5nIiwgb3MudGltZSwge2hvdXIgPSAxMn0pICAgLS0gbWlzc2luZyBkYXRlCgoKaWYgc3RyaW5nLnBhY2tzaXplKCJpIikgPT0gNCB0aGVuICAgLS0gNC1ieXRlIGludHMKICBjaGVja2VycigiZmllbGQgJ3llYXInIGlzIG91dC1vZi1ib3VuZCIsIG9zLnRpbWUsCiAgICAgICAgICAgICAge3llYXIgPSAtKDEgPDwgMzEpICsgMTg5OSwgbW9udGggPSAxLCBkYXkgPSAxfSkKZW5kCgppZiBub3QgX3BvcnQgdGhlbgogIC0tIHRlc3QgUG9zaXgtc3BlY2lmaWMgbW9kaWZpZXJzCiAgYXNzZXJ0KHR5cGUob3MuZGF0ZSgiJUV4IikpID09ICdzdHJpbmcnKQogIGFzc2VydCh0eXBlKG9zLmRhdGUoIiVPeSIpKSA9PSAnc3RyaW5nJykKCiAgLS0gdGVzdCBsYXJnZSBkYXRlcyAoYXNzdW1lIGF0IGxlYXN0IDQtYnl0ZSBpbnRzIGFuZCB0aW1lX3QpCiAgbG9jYWwgdDAgPSBvcy50aW1le3llYXIgPSAxOTcwLCBtb250aCA9IDEsIGRheSA9IDB9CiAgbG9jYWwgdDEgPSBvcy50aW1le3llYXIgPSAxOTcwLCBtb250aCA9IDEsIGRheSA9IDAsIHNlYyA9ICgxIDw8IDMxKSAtIDF9CiAgYXNzZXJ0KHQxIC0gdDAgPT0gKDEgPDwgMzEpIC0gMSkKICB0MCA9IG9zLnRpbWV7eWVhciA9IDE5NzAsIG1vbnRoID0gMSwgZGF5ID0gMX0KICB0MSA9IG9zLnRpbWV7eWVhciA9IDE5NzAsIG1vbnRoID0gMSwgZGF5ID0gMSwgc2VjID0gLSgxIDw8IDMxKX0KICBhc3NlcnQodDEgLSB0MCA9PSAtKDEgPDwgMzEpKQoKICAtLSB0ZXN0IG91dC1vZi1yYW5nZSBkYXRlcyAoYXQgbGVhc3QgZm9yIFVuaXgpCiAgaWYgbWF4aW50ID49IDJeNjIgdGhlbiAgLS0gY2Fubm90IGRvIHRoZXNlIHRlc3RzIGluIFNtYWxsIEx1YQogICAgLS0gbm8gYXJpdGggb3ZlcmZsb3dzCiAgICBjaGVja2Vycigib3V0LW9mLWJvdW5kIiwgb3MudGltZSwge3llYXIgPSAtbWF4aW50LCBtb250aCA9IDEsIGRheSA9IDF9KQogICAgaWYgc3RyaW5nLnBhY2tzaXplKCJpIikgPT0gNCB0aGVuICAgLS0gNC1ieXRlIGludHMKICAgICAgaWYgdGVzdGVycigib3V0LW9mLWJvdW5kIiwgb3MuZGF0ZSwgIiVZIiwgMl40MCkgdGhlbgogICAgICAgIC0tIHRpbWVfdCBoYXMgNCBieXRlcyBhbmQgdGhlcmVmb3JlIGNhbm5vdCByZXByZXNlbnQgeWVhciA0MDAwCiAgICAgICAgcHJpbnQoIiAgNC1ieXRlIHRpbWVfdCIpCiAgICAgICAgY2hlY2tlcnIoImNhbm5vdCBiZSByZXByZXNlbnRlZCIsIG9zLnRpbWUsIHt5ZWFyPTQwMDAsIG1vbnRoPTEsIGRheT0xfSkKICAgICAgZWxzZQogICAgICAgIC0tIHRpbWVfdCBoYXMgOCBieXRlczsgYW4gaW50IHllYXIgY2Fubm90IHJlcHJlc2VudCBhIGh1Z2UgdGltZQogICAgICAgIHByaW50KCIgIDgtYnl0ZSB0aW1lX3QiKQogICAgICAgIGNoZWNrZXJyKCJjYW5ub3QgYmUgcmVwcmVzZW50ZWQiLCBvcy5kYXRlLCAiJVkiLCAyXjYwKQoKICAgICAgICAtLSB0aGlzIGlzIHRoZSBtYXhpbXVtIHllYXIKICAgICAgICBhc3NlcnQodG9udW1iZXIob3MudGltZQogICAgICAgICAge3llYXI9KDEgPDwgMzEpICsgMTg5OSwgbW9udGg9MTIsIGRheT0zMSwgaG91cj0yMywgbWluPTU5LCBzZWM9NTl9KSkKCiAgICAgICAgLS0gdGhpcyBpcyB0b28gbXVjaAogICAgICAgIGNoZWNrZXJyKCJyZXByZXNlbnRlZCIsIG9zLnRpbWUsCiAgICAgICAgICB7eWVhcj0oMSA8PCAzMSkgKyAxODk5LCBtb250aD0xMiwgZGF5PTMxLCBob3VyPTIzLCBtaW49NTksIHNlYz02MH0pCiAgICAgIGVuZAoKICAgICAgLS0gaW50ZXJuYWwgJ2ludCcgZmllbGRzIGNhbm5vdCBob2xkIHRoZXNlIHZhbHVlcwogICAgICBjaGVja2VycigiZmllbGQgJ2RheScgaXMgb3V0LW9mLWJvdW5kIiwgb3MudGltZSwKICAgICAgICAgICAgICAgICAge3llYXIgPSAwLCBtb250aCA9IDEsIGRheSA9IDJeMzJ9KQoKICAgICAgY2hlY2tlcnIoImZpZWxkICdtb250aCcgaXMgb3V0LW9mLWJvdW5kIiwgb3MudGltZSwKICAgICAgICAgICAgICAgICAge3llYXIgPSAwLCBtb250aCA9IC0oKDEgPDwgMzEpICsgMSksIGRheSA9IDF9KQoKICAgICAgY2hlY2tlcnIoImZpZWxkICd5ZWFyJyBpcyBvdXQtb2YtYm91bmQiLCBvcy50aW1lLAogICAgICAgICAgICAgICAgICB7eWVhciA9ICgxIDw8IDMxKSArIDE5MDAsIG1vbnRoID0gMSwgZGF5ID0gMX0pCgogICAgZWxzZSAgICAtLSA4LWJ5dGUgaW50cwogICAgICAtLSBhc3N1bWUgdGltZV90IGhhcyA4IGJ5dGVzIHRvbwogICAgICBwcmludCgiICA4LWJ5dGUgdGltZV90IikKICAgICAgYXNzZXJ0KHRvbnVtYmVyKG9zLmRhdGUoIiVZIiwgMl42MCkpKQoKICAgICAgLS0gYnV0IHN0aWxsIGNhbm5vdCByZXByZXNlbnQgYSBodWdlIHllYXIKICAgICAgY2hlY2tlcnIoImNhbm5vdCBiZSByZXByZXNlbnRlZCIsIG9zLnRpbWUsIHt5ZWFyPTJeNjAsIG1vbnRoPTEsIGRheT0xfSkKICAgIGVuZAogIGVuZAplbmQKCmRvCiAgbG9jYWwgRCA9IG9zLmRhdGUoIip0IikKICBsb2NhbCB0ID0gb3MudGltZShEKQogIGlmIEQuaXNkc3QgPT0gbmlsIHRoZW4KICAgIHByaW50KCJubyBkYXlsaWdodCBzYXZpbmcgaW5mb3JtYXRpb24iKQogIGVsc2UKICAgIGFzc2VydCh0eXBlKEQuaXNkc3QpID09ICdib29sZWFuJykKICBlbmQKICBELmlzZHN0ID0gbmlsCiAgbG9jYWwgdDEgPSBvcy50aW1lKEQpCiAgYXNzZXJ0KHQgPT0gdDEpICAgLS0gaWYgaXNkc3QgaXMgYWJzZW50IHVzZXMgY29ycmVjdCBkZWZhdWx0CmVuZAoKbG9jYWwgRCA9IG9zLmRhdGUoIip0IikKdCA9IG9zLnRpbWUoRCkKRC55ZWFyID0gRC55ZWFyLTE7CmxvY2FsIHQxID0gb3MudGltZShEKQotLSBhbGxvdyBmb3IgbGVhcCB5ZWFycwphc3NlcnQobWF0aC5hYnMob3MuZGlmZnRpbWUodCx0MSkvKDI0KjM2MDApIC0gMzY1KSA8IDIpCgotLSBzaG91bGQgbm90IHRha2UgbW9yZSB0aGFuIDEgc2Vjb25kIHRvIGV4ZWN1dGUgdGhlc2UgdHdvIGxpbmVzCnQgPSBvcy50aW1lKCkKdDEgPSBvcy50aW1lKG9zLmRhdGUoIip0IikpCmxvY2FsIGRpZmYgPSBvcy5kaWZmdGltZSh0MSx0KQphc3NlcnQoMCA8PSBkaWZmIGFuZCBkaWZmIDw9IDEpCmRpZmYgPSBvcy5kaWZmdGltZSh0LHQxKQphc3NlcnQoLTEgPD0gZGlmZiBhbmQgZGlmZiA8PSAwKQoKbG9jYWwgdDEgPSBvcy50aW1le3llYXI9MjAwMCwgbW9udGg9MTAsIGRheT0xLCBob3VyPTIzLCBtaW49MTJ9CmxvY2FsIHQyID0gb3MudGltZXt5ZWFyPTIwMDAsIG1vbnRoPTEwLCBkYXk9MSwgaG91cj0yMywgbWluPTEwLCBzZWM9MTl9CmFzc2VydChvcy5kaWZmdGltZSh0MSx0MikgPT0gNjAqMi0xOSkKCi0tIHNpbmNlIDUuMy4zLCAnb3MudGltZScgbm9ybWFsaXplcyB0YWJsZSBmaWVsZHMKdDEgPSB7eWVhciA9IDIwMDUsIG1vbnRoID0gMSwgZGF5ID0gMSwgaG91ciA9IDEsIG1pbiA9IDAsIHNlYyA9IC0zNjAyfQpvcy50aW1lKHQxKQphc3NlcnQodDEuZGF5ID09IDMxIGFuZCB0MS5tb250aCA9PSAxMiBhbmQgdDEueWVhciA9PSAyMDA0IGFuZAogICAgICAgdDEuaG91ciA9PSAyMyBhbmQgdDEubWluID09IDU5IGFuZCB0MS5zZWMgPT0gNTggYW5kCiAgICAgICB0MS55ZGF5ID09IDM2NikKCmlvLm91dHB1dChpby5zdGRvdXQpCmxvY2FsIHQgPSBvcy5kYXRlKCclZCAlbSAlWSAlSCAlTSAlUycpCmxvY2FsIGQsIG0sIGEsIGgsIG1pbiwgcyA9IHN0cmluZy5tYXRjaCh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoJWQrKSAoJWQrKSAoJWQrKSAoJWQrKSAoJWQrKSAoJWQrKSIpCmQgPSB0b251bWJlcihkKQptID0gdG9udW1iZXIobSkKYSA9IHRvbnVtYmVyKGEpCmggPSB0b251bWJlcihoKQptaW4gPSB0b251bWJlcihtaW4pCnMgPSB0b251bWJlcihzKQppby53cml0ZShzdHJpbmcuZm9ybWF0KCd0ZXN0IGRvbmUgb24gJTIuMmQvJTIuMmQvJWQnLCBkLCBtLCBhKSkKaW8ud3JpdGUoc3RyaW5nLmZvcm1hdCgnLCBhdCAlMi4yZDolMi4yZDolMi4yZFxuJywgaCwgbWluLCBzKSkKaW8ud3JpdGUoc3RyaW5nLmZvcm1hdCgnJXNcbicsIF9WRVJTSU9OKSkKCgo=