QkVHSU4gICB7CgkjIHNvbWUgaW5pdGlhbGl6YXRpb24gdmFyaWFibGVzCglhc2NpaWFydD0ibm8iOwoJd2Fzc2V0PSJubyI7CglsaW5lc2V0PTA7CglzYW1wbGU9Im5vIjsKCXdoaWxlICggZ2V0bGluZSB0aSA8InRhZ3MucmVmIiA+IDAgKSB7CgkJbmY9c3BsaXQodGksdGFnLCIJIik7CgkJdGFna2V5W3RhZ1sxXV09InllcyI7dGFncmVmW3RhZ1sxXV09dGFnWzJdOwoJfQoJc2tpcF93b3JkWyJhbmQiXT0ieWVzIjsKCXNraXBfd29yZFsiYmFja3NwYWNlIl09InllcyI7Cglza2lwX3dvcmRbImJlZXAiXT0ieWVzIjsKCXNraXBfd29yZFsiYnVncyJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJkYSJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJlbmQiXT0ieWVzIjsKCXNraXBfd29yZFsiZnRwIl09InllcyI7Cglza2lwX3dvcmRbImdvIl09InllcyI7Cglza2lwX3dvcmRbImhlbHAiXT0ieWVzIjsKCXNraXBfd29yZFsiaG9tZSJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJuZXdzIl09InllcyI7Cglza2lwX3dvcmRbImluZGV4Il09InllcyI7Cglza2lwX3dvcmRbImluc2VydCJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJpbnRvIl09InllcyI7Cglza2lwX3dvcmRbInB1dCJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJyZWZlcmVuY2UiXT0ieWVzIjsKCXNraXBfd29yZFsic2VjdGlvbiJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJzcGFjZSJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJzdGFydGluZyJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJ0b2dnbGUiXT0ieWVzIjsKCXNraXBfd29yZFsidmFyaW91cyJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJ2ZXJzaW9uIl09InllcyI7Cglza2lwX3dvcmRbImlzIl09InllcyI7Cn0KIwojIHByb3RlY3Qgc3BlY2lhbCBjaGFycwojCi9bPjwm4V0vIHtnc3ViKC8mLywiXFwmYW1wOyIpO2dzdWIoLz4vLCJcXCZndDsiKTtnc3ViKC88LywiXFwmbHQ7Iik7Z3N1Yigi4SIsIlxcJmFhY3V0ZTsiKTt9CiMKIyBlbmQgb2Ygc2FtcGxlIGxpbmVzIGJ5IG5vbi1ibGFuayBpbiBmaXJzdCBjb2x1bW4KIwpzYW1wbGUgPT0gInllcyIgJiYgc3Vic3RyKCQwLDEsNCkgPT0gIiZsdDsiIHsgc2FtcGxlID0gIm5vIjsgZ3N1YigvXiZsdDsvLCAiICIpOyB9CnNhbXBsZSA9PSAieWVzIiAmJiBzdWJzdHIoJDAsMSwxKSAhPSAiICIgJiYgc3Vic3RyKCQwLDEsMSkgIT0gIgkiICYmIGxlbmd0aCgkMCkgPiAwIHsgc2FtcGxlID0gIm5vIiB9CiMKIyBzYW1wbGUgbGluZXMgcHJpbnRlZCBib2xkIHVubGVzcyBlbXB0eS4uLgojCnNhbXBsZSA9PSAieWVzIiAmJiAkMCA9PSIiIHsgcHJpbnQgIiI7IG5leHQ7IH0Kc2FtcGxlID09ICJ5ZXMiICYmICQwICE9IiIgeyBwcmludCAiPEI+IiAkMCAiPC9CPiI7IG5leHQ7IH0KIwojIHN0YXJ0IG9mIHNhbXBsZSBsaW5lcyBpbiBuZXh0IGxpbmUKIwokMCA9PSAiJmd0OyIgeyBzYW1wbGUgPSAieWVzIjsgcHJpbnQgIiI7IG5leHQ7IH0Kc3Vic3RyKCQwLGxlbmd0aCgkMCktNCw1KSA9PSAiICZndDsiIHsgc2FtcGxlID0gInllcyI7IGdzdWIoLyAmZ3Q7JC8sICIiKTsgfQojCiMgaGVhZGVyIGxpbmVzIHByaW50ZWQgYm9sZCwgY29sb3JlZAojCnN1YnN0cigkMCxsZW5ndGgoJDApLDEpID09ICJ+IiB7IHByaW50ICI8Qj48Rk9OVCBDT0xPUj1cIlBVUlBMRVwiPiIgc3Vic3RyKCQwLDEsbGVuZ3RoKCQwKS0xKSAiPC9GT05UPjwvQj4iOyBuZXh0OyB9CiMKI2FkIGhvYyBjb2RlCiMKL14iXHxcJiAvIHtnc3ViKC9cfC8sIlxcJiMxMjQ7Iik7IH0KLyA9IGIgLyB7Z3N1YigvIGIgLywiIFxcJiM5ODsgIik7IH0KIwojIG9uZSBsZXR0ZXIgdGFnCiMKL1sgCV1cKi5cKlsgCV0vIHtnc3ViKC9cKi8sIlpXV1oiKTsgfQojCiMgaXNvbGF0ZWQgIioiCiMKL1sgCV1cKlsgCV0vIHtnc3ViKC8gXCogLywiIFxcJiM0MjsgIik7CgkJICAgIGdzdWIoLyBcKgkvLCIgXFwmIzQyOwkiKTsKCQkgICAgZ3N1YigvCVwqIC8sIglcXCYjNDI7ICIpOwoJCSAgICBnc3ViKC8JXCoJLywiCVxcJiM0MjsJIik7IH0KIwojIHRhZyBzdGFydAojCi9bIAldXCpbXiAJXS8Je2dzdWIoLyBcKi8sIiBaV1daIik7Z3N1YigvCVwqLywiCVpXV1oiKTt9Ci9eXCpbXiAJXS8gCSB7Z3N1YigvXlwqLywiWldXWiIpO30KIwojIHRhZyBlbmQKIwovW14gCV1cKiQvIAkge2dzdWIoL1wqJC8sIlpXV1oiKTt9Ci9bXiBcLwldXCpbIAldLyAge2dzdWIoL1wqLywiWldXWiIpO30KIwojIGlzb2xhdGVkICJ8IgojCi9bIAldXHxbIAldLyB7Z3N1YigvIFx8IC8sIiBcXCYjMTI0OyAiKTsKCQkgICAgZ3N1YigvIFx8CS8sIiBcXCYjMTI0OwkiKTsKCQkgICAgZ3N1YigvCVx8IC8sIglcXCYjMTI0OyAiKTsKCQkgICAgZ3N1YigvCVx8CS8sIglcXCYjMTI0OwkiKTsgfQovJ1x8Jy8geyBnc3ViKC8nXHwnLywiJ1xcJiMxMjQ7JyIpOyB9Ci9cXlZcfC8ge2dzdWIoL1xeVlx8LywiXlZcXCYjMTI0OyIpO30KLyBcXFx8CS8ge2dzdWIoL1x8LywiXFwmIzEyNDsiKTt9CiMKIyBvbmUgbGV0dGVyIHBpcGVzIGFuZCAifHwiIGZhbHNlIHBpcGUgKGRpZ3JhcGhzKQojCi9bIAldXHwuXHxbIAldLyAmJiBhc2NpaWFydCA9PSAibm8iIHtnc3ViKC9cfC8sIllYWFkiKTsgfQovXlx8Llx8WyAJXS8ge2dzdWIoL1x8LywiWVhYWSIpOyB9Ci9cfFx8LyB7Z3N1YigvXHxcfC8sIlxcJiMxMjQ7XFwmIzEyNDsiKTsgfQovXnNoZWxscGlwZS8ge2dzdWIoL1x8LywiXFwmIzEyNDsiKTsgfQojCiMgcGlwZSBzdGFydAojCi9bIAldXHxbXiAJXS8gJiYgYXNjaWlhcnQgPT0gIm5vIgl7Z3N1YigvIFx8LywiIFlYWFkiKTsKCQkJZ3N1YigvCVx8LywiCVlYWFkiKTt9Ci9eXHxbXiAJXS8gCSB7Z3N1YigvXlx8LywiWVhYWSIpO30KIwojIHBpcGUgZW5kCiMKL1teIAldXHwkLyAmJiBhc2NpaWFydCA9PSAibm8iIHtnc3ViKC9cfCQvLCJZWFhZIik7fQovW14gCV1cfFtzICwuKTsJXS8gJiYgYXNjaWlhcnQgPT0gIm5vIiB7Z3N1YigvXHwvLCJZWFhZIik7fQovW14gCV1cfF0vICYmIGFzY2lpYXJ0ID09ICJubyIge2dzdWIoL1x8LywiWVhYWSIpO30KIwojIHZhcmlvdXMKIwovJyIvIAl7Z3N1YigvJyIvLCJcXCYjMzk7XFwmIzM0OyciKTt9Ci8iLwl7Z3N1YigvIi8sIlxcJnF1b3Q7Iik7fQovJS8Je2dzdWIoLyUvLCJcXCYjMzc7Iik7fQoKTlIgPT0gMSB7IG5mPXNwbGl0KEZJTEVOQU1FLGYsIi4iKQoJcHJpbnQgIjxIVE1MPiI7CgoJcHJpbnQgIjxIRUFEPiIKCWlmICggRklMRU5BTUUgPT0gIm1ieXRlLnR4dCIgKSB7CgkgICAgIyBuZWVkcyB1dGYtOCBhcyB1c2VzIG1hbnkgbGFuZ3VhZ2VzCgkgICAgcHJpbnQgIjxNRVRBIEhUVFAtRVFVSVY9XCJDb250ZW50LXR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PVVURi04XCI+IjsKCX0gZWxzZSB7CgkgICAgIyBjb21tb24gY2FzZSAtIExhdGluMQoJICAgIHByaW50ICI8TUVUQSBIVFRQLUVRVUlWPVwiQ29udGVudC10eXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xXCI+IjsKCX0KCXByaW50ICI8VElUTEU+VmltIGRvY3VtZW50YXRpb246ICIgZlsxXSAiPC9USVRMRT4iOwoJcHJpbnQgIjwvSEVBRD4iOwoKCXByaW50ICI8Qk9EWSBCR0NPTE9SPVwiI2ZmZmZmZlwiPiI7CglwcmludCAiPEgxPlZpbSBkb2N1bWVudGF0aW9uOiAiIGZbMV0gIjwvSDE+IjsKCXByaW50ICI8QSBOQU1FPVwidG9wXCI+PC9BPiI7CglpZiAoIEZJTEVOQU1FICE9ICJoZWxwLnR4dCIgKSB7CgkgIHByaW50ICI8QSBIUkVGPVwiaW5kZXguaHRtbFwiPm1haW4gaGVscCBmaWxlPC9BPlxuIjsKCX0KCXByaW50ICI8SFI+IjsKCXByaW50ICI8UFJFPiI7CglmaWxlbmFtZT1mWzFdIi5odG1sIjsKfQoKIyBzZXQgdG8gYSBsb3cgdmFsdWUgdG8gdGVzdCBmb3IgZmV3IGxpbmVzIG9mIHRleHQKIyBOUiA9PSA5OTk5OSB7IGV4aXQ7IH0KCiMgaWdub3JlIHVuZGVybGluZXMgYW5kIHRhZ3MKc3Vic3RyKCQwLDEsNSkgPT0gIiB2aW06IiB7IG5leHQ7IH0Kc3Vic3RyKCQwLDEsNCkgPT0gInZpbToiIHsgbmV4dDsgfQojIGtlZXAganVzdCB3aG9sZSBsaW5lcyBvZiAiLSIsICI9IgpzdWJzdHIoJDAsMSwzKSA9PSAiPT09IiAmJiBzdWJzdHIoJDAsNzUsMSkgIT0gIj0iIHsgbmV4dDsgfQpzdWJzdHIoJDAsMSwzKSA9PSAiLS0tIiAmJiBzdWJzdHIoJDAsNzUsMSkgIT0gIi0iIHsgbmV4dDsgfQoKewoJbnN0YXIgPSBzcGxpdCgkMCxzLCJaV1daIik7Cglmb3IgKCBpPTIgOyBpIDw9IG5zdGFyIDsgaT1pKzIgKSB7CgkJbmJsYT1zcGxpdChzW2ldLGJsYXRhLCJbIAldIik7CgkJaWYgKCBuYmxhID4gMSApIHsKCQkJZ3N1YigiWldXWiIsIioiKTsKCQkJbnN0YXIgPSBzcGxpdCgkMCxzLCJaV1daIik7CgkJfQoJfQoJbnBpcGUgPSBzcGxpdCgkMCxwLCJZWFhZIik7Cglmb3IgKCBpPTIgOyBpIDw9IG5waXBlIDsgaT1pKzIgKSB7CgkJbmJsYT1zcGxpdChwW2ldLGJsYXRhLCJbIAldIik7CgkJaWYgKCBuYmxhID4gMSApIHsKCQkJZ3N1YigiWVhYWSIsInwiKTsKCQkJbnRhYnMgPSBzcGxpdCgkMCxwLCJZWFhZIik7CgkJfQoJfQp9CgoKRklMRU5BTUUgPT0gImd1aS50eHQiICYmIGFzY2lpYXJ0ID09ICJubyIgIFwKCSAgJiYgJDAgfiAvXCstLS0tLyAmJiAkMCB+IC8tLS0tXCsvIHsKCWFzY2lpYXJ0PSAieWVzIjsKCWFzY2lpY250PTA7Cgl9CgpGSUxFTkFNRSA9PSAicXVvdGVzLnR4dCIgJiYgYXNjaWlhcnQgPT0gIm5vIiBcCgkgICYmICQwIH4gL0luIHN1bW1hcnk6LyB7Cglhc2NpaWFydD0gInllcyI7Cglhc2NpaWNudD0wOwoJfQoKRklMRU5BTUUgPT0gInVzcl8yMC50eHQiICYmIGFzY2lpYXJ0ID09ICJubyIgXAoJICAmJiAkMCB+IC9hbiBlbXB0eSBsaW5lIGF0IHRoZSBlbmQ6LyB7Cglhc2NpaWFydD0gInllcyI7Cglhc2NpaWNudD0wOwoJfQoKYXNjaWlhcnQgPT0gInllcyIgJiYgJDA9PSIiIHsgYXNjaWljbnQrKzsgfQoKYXNjaWlhcnQgPT0gInllcyIgJiYgYXNjaWljbnQgPT0gMiB7IGFzY2lpYXJ0ID0gIm5vIjsgfQoKYXNjaWlhcnQgPT0gInllcyIgeyBucGlwZSA9IDE7IH0KIwl7IHByaW50IE5SICIgPD0+ICIgYXNjaWlhcnQ7IH0KCiMKIyBsaW5lIGNvbnRhaW5zICAiKiIKIwpuc3RhciA+IDIgJiYgbnBpcGUgPCAzIHsKCXByaW50ZigiXG4iKTsKCWZvciAoIGk9MTsgaSA8PSBuc3RhciA7IGk9aSsyICkgewoJCXRoaXM9c1tpXTsKCQlwdXRfdGhpcygpOwoJCWlpPWkrMTsKCQluYmxhID0gc3BsaXQoc1tpaV0sYmxhdGEsIiAiKTsKCQlpZiAoIGlpIDw9IG5zdGFyICkgewoJCQlpZiAoIG5ibGEgPT0gMSAmJiBzdWJzdHIoc1tpaV0sbGVuZ3RoKHNbaWldKSwxKSAhPSAiICIgKSB7CgkJCXByaW50ZigiKjxBIE5BTUU9XCIlc1wiPjwvQT4iLHNbaWldKTsKCQkJCXByaW50ZigiPEI+JXM8L0I+KiIsc1tpaV0pOwoJCQl9IGVsc2UgewoJCQlwcmludGYoIiolcyoiLHNbaWldKTsKCQkJfQoJCX0KCX0KCXByaW50ZigiXG4iKTsKCW5leHQ7Cgl9CiMKIyBsaW5lIGNvbnRhaW5zICJ8IgojCm5waXBlID4gMiAmJiBuc3RhciA8IDMgewoJaWYgICggbnBpcGUlMiA9PSAwICkgewoJCWZvciAoIGk9MTsgaSA8IG5waXBlIDsgaSsrICkgewoJCQlnc3ViKCJaV1daIiwiKiIscFtpXSk7CgkJCXByaW50ZigiJXN8IixwW2ldKTsKCQl9CgkJcHJpbnRmKCIlc1xuIixwW25waXBlXSk7CgkJbmV4dDsKCQl9Cglmb3IgKCBpPTE7IGkgPD0gbnBpcGUgOyBpKysgKQoJCXsKCQlpZiAoIGkgJSAyID09IDEgKSB7CgkJCWdzdWIoIlpXV1oiLCIqIixwW2ldKTsKCQkJdGhpcz1wW2ldOwoJCQlwdXRfdGhpcygpOwoJCQl9CgkJCWVsc2UgewoJCQluZm49c3BsaXQocFtpXSxmLCIuIik7CgkJCWlmICggbmZuID09IDEgfHwgZlsyXSA9PSAiIiB8fCBmWzFdID09ICIiIHx8IGxlbmd0aChmWzJdKSA8IDMgKSB7CgkJCQlmaW5kX3RhZzEoKTsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCWlmICggZlsxXSA9PSAiaW5kZXgiICkgewoJCXByaW50ZiAifDxBIEhSRUY9XCJ2aW1pbmRleC5odG1sXCI+IiBwW2ldICI8L0E+fCI7CgkJCQkJfSBlbHNlIHsKCQkJCQkJaWYgKCBmWzFdID09ICJoZWxwIiApIHsKCQlwcmludGYgInw8QSBIUkVGPVwiaW5kZXguaHRtbFwiPiIgcFtpXSAiPC9BPnwiOwoJCQkJCQl9IGVsc2UgewoJCXByaW50ZiAifDxBIEhSRUY9XCIiIGZbMV0gIi5odG1sXCI+IiBwW2ldICI8L0E+fCI7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJcHJpbnRmKCJcbiIpOwoJCW5leHQ7Cgl9CiMKIyBsaW5lIGNvbnRhaW5zIGJvdGggInwiIGFuZCAiKiIKIwpucGlwZSA+IDIgJiYgbnN0YXIgPiAyIHsKCXByaW50ZigiXG4iKTsKCWZvciAoIGo9MTsgaiA8PSBuc3RhciA7IGo9aisyICkgewoJCW5waXBlID0gc3BsaXQoc1tqXSxwLCJZWFhZIik7CgkJaWYgKCBucGlwZSA+IDEgKSB7CgkJCWZvciAoIG5wPTE7IG5wPD1ucGlwZTsgbnA9bnArMiApIHsKCQkJCXRoaXM9cFtucF07CgkJCQlwdXRfdGhpcygpOwoJCQkJaT1ucCsxO2ZpbmRfdGFnMSgpOwoJCQl9CgkJfSBlbHNlIHsKCQkJdGhpcz1zW2pdOwoJCQlwdXRfdGhpcygpOwoJCX0KCQlqaj1qKzE7CgkJbmJsYSA9IHNwbGl0KHNbampdLGJsYXRhLCIgIik7CgkJaWYgKCBqaiA8PSBuc3RhciAmJiBuYmxhID09IDEgJiYgc1tqal0gIT0gIiIgKSB7CgkJcHJpbnRmKCIqPEEgTkFNRT1cIiVzXCI+PC9BPiIsc1tqal0pOwoJCQlwcmludGYoIjxCPiVzPC9CPioiLHNbampdKTsKCQl9IGVsc2UgewoJCQlpZiAoIHNbampdICE9ICIiICkgewoJCQlwcmludGYoIiolcyoiLHNbampdKTsKCQkJfQoJCX0KCX0KCXByaW50ZigiXG4iKTsKCW5leHQ7Cgl9CiMKIyBsaW5lIGNvbnRhaW5zIGUtbWFpbCBhZGRyZXNzIGpvaG4uZG9lQHNvbWUucGxhY2UuZWR1CiMKJDAgfiAvQC8gJiYgJDAgfiAvW2EtekEtWjAtOV1AW2Etel0vIFwKCXsKCW5lbWFpbD1zcGxpdCgkMCxlbSwiICIpOwoJaWYgKCBzdWJzdHIoJDAsMSwxKSA9PSAiCSIgKSB7IHByaW50ZigiCSIpOyB9Cglmb3IgKCBpPTE7IGkgPD0gbmVtYWlsOyBpKysgKSB7CgkJaWYgKCBlbVtpXSB+IC9ALyApIHsKCQkJaWYgKCBzdWJzdHIoZW1baV0sMiwzKSA9PSAibHQ7IiAmJiBzdWJzdHIoZW1baV0sbGVuZ3RoKGVtW2ldKS0yLDMpID09ICJndDsiICkgewoJCQkJbWFpbGFkZHI9c3Vic3RyKGVtW2ldLDUsbGVuZ3RoKGVtW2ldKS04KTsKCQkJCXByaW50ZigiPEEgSFJFRj1cIm1haWx0bzolc1wiPiZsdDslcyZndDs8L0E+ICIsbWFpbGFkZHIsbWFpbGFkZHIpOwoJCQl9IGVsc2UgewoJCQkJaWYgKCBzdWJzdHIoZW1baV0sMiwzKSA9PSAibHQ7IiAmJiBzdWJzdHIoZW1baV0sbGVuZ3RoKGVtW2ldKS0zLDMpID09ICJndDsiICkgewoJCQkJCW1haWxhZGRyPXN1YnN0cihlbVtpXSw1LGxlbmd0aChlbVtpXSktOSk7CgkJCQkJcHJpbnRmKCI8QSBIUkVGPVwibWFpbHRvOiVzXCI+Jmx0OyVzJmd0OzwvQT4lcyAiLG1haWxhZGRyLG1haWxhZGRyLHN1YnN0cihlbVtpXSxsZW5ndGgoZW1baV0pLDEpKTsKCQkJCX0gZWxzZSB7CgkJCQkJcHJpbnRmKCI8QSBIUkVGPVwibWFpbHRvOiVzXCI+JXM8L0E+ICIsZW1baV0sZW1baV0pOwoJCQkJfQoJCQl9CgkJfSBlbHNlIHsKCQkJCXByaW50ZigiJXMgIixlbVtpXSk7CgkJfQoJfQoJI3ByaW50ICIqKiogIiBOUiAiICIgRklMRU5BTUUgIiAtIHBvc3NpYmxlIG1haWwgcmVmIjsKCXByaW50ZigiXG4iKTsKCW5leHQ7Cgl9CiMKIyBsaW5lIGNvbnRhaW5zIGh0dHAgLyBmdHAgcmVmZXJlbmNlCiMKJDAgfiAvaHR0cDpcL1wvLyB8fCAkMCB+IC9mdHA6XC9cLy8gewoJZ3N1YigiVVJMOiIsIiIpOwoJZ3N1YigiJmx0OyIsIiIpOwoJZ3N1YigiJmd0OyIsIiIpOwoJZ3N1YigiXFwoIiwiIik7Cglnc3ViKCJcXCkiLCIiKTsKCW5lbWFpbD1zcGxpdCgkMCxlbSwiICIpOwoJZm9yICggaT0xOyBpIDw9IG5lbWFpbDsgaSsrICkgewoJCWlmICggc3Vic3RyKGVtW2ldLDEsNSkgPT0gImh0dHA6IiB8fAoJICAgICAJc3Vic3RyKGVtW2ldLDEsNCkgPT0gImZ0cDoiICkgewoJCQlpZiAoIHN1YnN0cihlbVtpXSxsZW5ndGgoZW1baV0pLDEpICE9ICIuIiApIHsKCQkJCXByaW50ZigiCTxBIEhSRUY9XCIlc1wiPiVzPC9BPiIsZW1baV0sZW1baV0pOwoJCQl9IGVsc2UgewoJCQkJZW1baV09c3Vic3RyKGVtW2ldLDEsbGVuZ3RoKGVtW2ldKS0xKTsKCQkJCXByaW50ZigiCTxBIEhSRUY9XCIlc1wiPiVzPC9BPi4iLGVtW2ldLGVtW2ldKTsKCQkJfQoJCX0gZWxzZSB7CgkJcHJpbnRmKCIgJXMiLGVtW2ldKTsKCQl9Cgl9CgkjcHJpbnQgIioqKiAiIE5SICIgIiBGSUxFTkFNRSAiIC0gcG9zc2libGUgaHR0cCByZWYiOwoJcHJpbnRmKCJcbiIpOwoJbmV4dDsKCX0KIwojIHNvbWUgbGluZXMgY29udGFpbnMganVzdCBvbmUgImFsbW9zdCByZWd1bGFyIiAiKiIuLi4KIwpuc3RhciA9PSAyICB7Cgl0aGlzPXNbMV07CglwdXRfdGhpcygpOwoJcHJpbnRmKCIqIik7Cgl0aGlzPXNbMl07CglwdXRfdGhpcygpOwoJcHJpbnRmKCJcbiIpOwoJbmV4dDsKCX0KIwojIHJlZ3VsYXIgbGluZQojCgl7IG50YWJzID0gc3BsaXQoJDAsdGIsIgkiKTsKCWZvciAoIGk9MTsgaSA8IG50YWJzIDsgaSsrKSB7CgkJdGhpcz10YltpXTsKCQlwdXRfdGhpcygpOwoJCXByaW50ZigiCSIpOwoJCX0KCXRoaXM9dGJbbnRhYnNdOwoJcHV0X3RoaXMoKTsKCXByaW50ZigiXG4iKTsKCX0KCgphc2NpaWFydCA9PSAieWVzIiAgJiYgJDAgfiAvXCstXCstLS8gIFwKCSYmICQwIH4gInNjcm9sbGJhciIgeyBhc2NpaWFydCA9ICJubyI7IH0KCkVORCB7Cgl0b3BiYWNrKCk7CglwcmludCAiPC9QUkU+XG48L0JPRFk+XG5cblxuPC9IVE1MPiI7IH0KCiMKIyBhcyBtYWluIHdlIGtlZXAgaW5kZXgudHh0IChieSBkZWZhdWx0KQojCmZ1bmN0aW9uIHRvcGJhY2sgKCkgewoJaWYgKCBGSUxFTkFNRSAhPSAidGFncyIgKSB7CglpZiAoIEZJTEVOQU1FICE9ICJoZWxwLnR4dCIgKSB7CglwcmludGYoIjxBIEhSRUY9XCIjdG9wXCI+dG9wPC9BPiAtICIpOwoJcHJpbnRmKCI8QSBIUkVGPVwiaW5kZXguaHRtbFwiPm1haW4gaGVscCBmaWxlPC9BPlxuIik7Cgl9IGVsc2UgewoJcHJpbnRmKCI8QSBIUkVGPVwiI3RvcFwiPnRvcDwvQT5cbiIpOwoJfQoJfQp9CgpmdW5jdGlvbiBmaW5kX3RhZzEoKSB7CglpZiAoIHBbaV0gPT0gIiIgKSB7IHJldHVybjsgfQoJaWYgKCB0YWdrZXlbcFtpXV0gPT0gInllcyIgKSB7CgkJd2hpY2g9dGFncmVmW3BbaV1dOwoJCXB1dF9ocmVmKCk7CgkJcmV0dXJuOwoJfQoJIyBpZiBub3QgZm91bmQsIHRoZW4gd2UgaGF2ZSBhIHByb2JsZW0KCXByaW50ICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgID4+ImVycm9ycy5sb2ciOwoJcHJpbnQgRklMRU5BTUUgIiwgbGluZSAiIE5SICIsIHBvaW50ZXI6ID4+IiBwW2ldICI8PCIgPj4iZXJyb3JzLmxvZyI7CglwcmludCAkMCA+PiJlcnJvcnMubG9nIjsKCXdoaWNoPSJpbnRyby5odG1sIjsKCXB1dF9ocmVmKCk7Cn0KCmZ1bmN0aW9uIHNlZV90YWcoKSB7CiMgYWQtaG9jIGNvZGU6CmlmICggYXRhZyA9PSAiXCItLSIgfHwgYXRhZyA9PSAiLS1cIiIgKSB7IHJldHVybjsgfQppZl9hbHJlYWR5KCk7CmlmICggYWxyZWFkeSA9PSAieWVzIiApIHsKCXByaW50ZigiJXMiLGF3b3JkKTsKCXJldHVybjsKCX0KYWxsb3dfb25lX2NoYXI9Im5vIjsKZmluZF90YWcyKCk7CmlmICggZG9uZSA9PSAieWVzIiApIHsgcmV0dXJuOyB9CnJpZ2h0Y2hhcj1zdWJzdHIoYXRhZyxsZW5ndGgoYXRhZyksMSk7CmlmICggICAgcmlnaHRjaGFyID09ICIuIiBcCiAgICAgfHwgcmlnaHRjaGFyID09ICIsIiBcCiAgICAgfHwgcmlnaHRjaGFyID09ICI6IiBcCiAgICAgfHwgcmlnaHRjaGFyID09ICI7IiBcCiAgICAgfHwgcmlnaHRjaGFyID09ICIhIiBcCiAgICAgfHwgcmlnaHRjaGFyID09ICI/IiBcCiAgICAgfHwgcmlnaHRjaGFyID09ICIpIiApIHsKCWF0YWc9c3Vic3RyKGF0YWcsMSxsZW5ndGgoYXRhZyktMSk7CglpZl9hbHJlYWR5KCk7CglpZiAoIGFscmVhZHkgPT0gInllcyIgKSB7CgkJcHJpbnRmKCIlcyIsYXdvcmQpOwoJCXJldHVybjsKCX0KCWZpbmRfdGFnMigpOwoJaWYgKCBkb25lID09ICJ5ZXMiICkgeyBwcmludGYoIiVzIixyaWdodGNoYXIpO3JldHVybjsgfQoJbGVmdGNoYXI9c3Vic3RyKGF0YWcsMSwxKTsKCWxhc3RidXQxPXN1YnN0cihhdGFnLGxlbmd0aChhdGFnKSwxKTsKCWlmICggICAgbGVmdGNoYXIgPT0gIiciICYmIGxhc3RidXQxID09ICInIiAgKSB7CgkJYWxsb3dfb25lX2NoYXI9InllcyI7CgkJYXRhZz1zdWJzdHIoYXRhZywyLGxlbmd0aChhdGFnKS0yKTsKCQlpZl9hbHJlYWR5KCk7CgkJaWYgKCBhbHJlYWR5ID09ICJ5ZXMiICkgewoJCQlwcmludGYoIiVzIixhd29yZCk7CgkJCXJldHVybjsKCQl9CgkJcHJpbnRmKCIlcyIsbGVmdGNoYXIpOwoJCWF3b3JkPXN1YnN0cihhdGFnLDEsbGVuZ3RoKGF0YWcpKSIibGFzdGJ1dDEiInJpZ2h0Y2hhcjsKCQlmaW5kX3RhZzIoKTsKCQlpZiAoIGRvbmUgPT0gInllcyIgKSB7IHByaW50ZigiJXMlcyIsbGFzdGJ1dDEscmlnaHRjaGFyKTtyZXR1cm47IH0KCQl9Cgl9CmF0YWc9YXdvcmQ7CmxlZnRjaGFyPXN1YnN0cihhdGFnLDEsMSk7CmlmICggICAgbGVmdGNoYXIgPT0gIiciICYmIHJpZ2h0Y2hhciA9PSAiJyIgICkgewoJYWxsb3dfb25lX2NoYXI9InllcyI7CglhdGFnPXN1YnN0cihhdGFnLDIsbGVuZ3RoKGF0YWcpLTIpOwoJaWYgICggYXRhZyA9PSAiPCIgKSB7IHByaW50ZigiIHwlc3wlc3wgIixhdGFnLHBbMl0pOyB9CglpZl9hbHJlYWR5KCk7CglpZiAoIGFscmVhZHkgPT0gInllcyIgKSB7CgkJcHJpbnRmKCIlcyIsYXdvcmQpOwoJCXJldHVybjsKCQl9CglwcmludGYoIiVzIixsZWZ0Y2hhcik7CglmaW5kX3RhZzIoKTsKCWlmICggZG9uZSA9PSAieWVzIiApIHsgcHJpbnRmKCIlcyIscmlnaHRjaGFyKTtyZXR1cm47IH0KCXByaW50ZigiJXMlcyIsYXRhZyxyaWdodGNoYXIpOwoJcmV0dXJuOwoJfQpsYXN0Mj1zdWJzdHIoYXRhZyxsZW5ndGgoYXRhZyktMSwyKTsKZmlyc3QyPXN1YnN0cihhdGFnLDEsMik7CmlmICggICAgZmlyc3QyID09ICIoJyIgJiYgbGFzdDIgPT0gIicpIiAgKSB7CglhbGxvd19vbmVfY2hhcj0ieWVzIjsKCWF0YWc9c3Vic3RyKGF0YWcsMyxsZW5ndGgoYXRhZyktNCk7CglpZl9hbHJlYWR5KCk7CglpZiAoIGFscmVhZHkgPT0gInllcyIgKSB7CgkJcHJpbnRmKCIlcyIsYXdvcmQpOwoJCXJldHVybjsKCQl9CglwcmludGYoIiVzIixmaXJzdDIpOwoJZmluZF90YWcyKCk7CglpZiAoIGRvbmUgPT0gInllcyIgKSB7IHByaW50ZigiJXMiLGxhc3QyKTtyZXR1cm47IH0KCXByaW50ZigiJXMlcyIsYXRhZyxsYXN0Mik7CglyZXR1cm47Cgl9CmlmICggbGFzdDIgPT0gIi4pIiApIHsKCWF0YWc9c3Vic3RyKGF0YWcsMSxsZW5ndGgoYXRhZyktMik7CglpZl9hbHJlYWR5KCk7CglpZiAoIGFscmVhZHkgPT0gInllcyIgKSB7CgkJcHJpbnRmKCIlcyIsYXdvcmQpOwoJCXJldHVybjsKCQl9CglmaW5kX3RhZzIoKTsKCWlmICggZG9uZSA9PSAieWVzIiApIHsgcHJpbnRmKCIlcyIsbGFzdDIpO3JldHVybjsgfQoJcHJpbnRmKCIlcyVzIixhdGFnLGxhc3QyKTsKCXJldHVybjsKCX0KaWYgKCBsYXN0MiA9PSAiKS4iICkgewoJYXRhZz1zdWJzdHIoYXRhZywxLGxlbmd0aChhdGFnKS0yKTsKCWZpbmRfdGFnMigpOwoJaWZfYWxyZWFkeSgpOwoJaWYgKCBhbHJlYWR5ID09ICJ5ZXMiICkgewoJCXByaW50ZigiJXMiLGF3b3JkKTsKCQlyZXR1cm47CgkJfQoJaWYgKCBkb25lID09ICJ5ZXMiICkgeyBwcmludGYoIiVzIixsYXN0Mik7cmV0dXJuOyB9CglwcmludGYoIiVzJXMiLGF0YWcsbGFzdDIpOwoJcmV0dXJuOwoJfQpmaXJzdDY9c3Vic3RyKGF0YWcsMSw2KTsKbGFzdDY9c3Vic3RyKGF0YWcsbGVuZ3RoKGF0YWcpLTUsNik7CmlmICggbGFzdDYgPT0gYXRhZyApIHsKCXByaW50ZigiJXMiLGF3b3JkKTsKCXJldHVybjsKCX0KbGFzdDZvZjc9c3Vic3RyKGF0YWcsbGVuZ3RoKGF0YWcpLTYsNik7CmlmICggZmlyc3Q2ID09ICImcXVvdDsiICYmIGxhc3Q2b2Y3ID09ICImcXVvdDsiICYmIGxlbmd0aChhdGFnKSA+IDEyICkgewoJYWxsb3dfb25lX2NoYXI9InllcyI7CglhdGFnPXN1YnN0cihhdGFnLDcsbGVuZ3RoKGF0YWcpLTEzKTsKCWlmX2FscmVhZHkoKTsKCWlmICggYWxyZWFkeSA9PSAieWVzIiApIHsKCQlwcmludGYoIiVzIixhd29yZCk7CgkJcmV0dXJuOwoJCX0KCXByaW50ZigiJXMiLGZpcnN0Nik7CglmaW5kX3RhZzIoKTsKCWlmICggZG9uZSA9PSAieWVzIiApIHsgcHJpbnRmKCImcXVvdDslcyIscmlnaHRjaGFyKTsgcmV0dXJuOyB9CglwcmludGYoIiVzJnF1b3Q7JXMiLGF0YWcscmlnaHRjaGFyKTsKCXJldHVybjsKCX0KaWYgKCBmaXJzdDYgPT0gIiZxdW90OyIgJiYgbGFzdDYgIT0gIiZxdW90OyIgKSB7CglhbGxvd19vbmVfY2hhcj0ieWVzIjsKCWF0YWc9c3Vic3RyKGF0YWcsNyxsZW5ndGgoYXRhZyktNik7CglpZiAoIGF0YWcgPT0gIlsiICkgeyBwcmludGYoIiZxdW90OyVzIixhdGFnKTsgcmV0dXJuOyB9CglpZiAoIGF0YWcgPT0gIi4iICkgeyBwcmludGYoIiZxdW90OyVzIixhdGFnKTsgcmV0dXJuOyB9CglpZiAoIGF0YWcgPT0gIjoiICkgeyBwcmludGYoIiZxdW90OyVzIixhdGFnKTsgcmV0dXJuOyB9CglpZiAoIGF0YWcgPT0gImEiICkgeyBwcmludGYoIiZxdW90OyVzIixhdGFnKTsgcmV0dXJuOyB9CglpZiAoIGF0YWcgPT0gIkEiICkgeyBwcmludGYoIiZxdW90OyVzIixhdGFnKTsgcmV0dXJuOyB9CglpZiAoIGF0YWcgPT0gImciICkgeyBwcmludGYoIiZxdW90OyVzIixhdGFnKTsgcmV0dXJuOyB9CglpZl9hbHJlYWR5KCk7CglpZiAoIGFscmVhZHkgPT0gInllcyIgKSB7CgkJcHJpbnRmKCImcXVvdDslcyIsYXRhZyk7CgkJcmV0dXJuOwoJCX0KCXByaW50ZigiJXMiLGZpcnN0Nik7CglmaW5kX3RhZzIoKTsKCWlmICggZG9uZSA9PSAieWVzIiApIHsgcmV0dXJuOyB9CglwcmludGYoIiVzIixhdGFnKTsKCXJldHVybjsKCX0KaWYgKCBsYXN0NiA9PSAiJnF1b3Q7IiAmJiBmaXJzdDYgPT0gIiZxdW90OyIgKSB7CglhbGxvd19vbmVfY2hhcj0ieWVzIjsKCWF0YWc9c3Vic3RyKGF0YWcsNyxsZW5ndGgoYXRhZyktMTIpOwoJaWZfYWxyZWFkeSgpOwoJaWYgKCBhbHJlYWR5ID09ICJ5ZXMiICkgewoJCXByaW50ZigiJXMiLGF3b3JkKTsKCQlyZXR1cm47CgkJfQoJcHJpbnRmKCIlcyIsZmlyc3Q2KTsKCWZpbmRfdGFnMigpOwoJaWYgKCBkb25lID09ICJ5ZXMiICkgeyBwcmludGYoIiVzIixsYXN0Nik7cmV0dXJuOyB9CglwcmludGYoIiVzJXMiLGF0YWcsbGFzdDYpOwoJcmV0dXJuOwoJfQpsYXN0Nm9mNz1zdWJzdHIoYXRhZyxsZW5ndGgoYXRhZyktNiw2KTsKaWYgKCBsYXN0Nm9mNyA9PSAiJnF1b3Q7IiAmJiBmaXJzdDYgPT0gIiZxdW90OyIgKSB7CglhbGxvd19vbmVfY2hhcj0ieWVzIjsKCWF0YWc9c3Vic3RyKGF0YWcsNyxsZW5ndGgoYXRhZyktMTMpOwoJI3ByaW50ZigiXG5hdGFnPSVzLGF3b3JkPSVzXG4iLGF0YWcsYXdvcmQpOwoJaWZfYWxyZWFkeSgpOwoJaWYgKCBhbHJlYWR5ID09ICJ5ZXMiICkgewoJCXByaW50ZigiJXMiLGF3b3JkKTsKCQlyZXR1cm47CgkJfQoJcHJpbnRmKCIlcyIsZmlyc3Q2KTsKCWZpbmRfdGFnMigpOwoJaWYgKCBkb25lID09ICJ5ZXMiICkgeyBwcmludGYoIiVzJXMiLGxhc3Q2b2Y3LHJpZ2h0Y2hhcik7cmV0dXJuOyB9CglwcmludGYoIiVzJXMlcyIsYXRhZyxsYXN0Nm9mNyxyaWdodGNoYXIpOwoJcmV0dXJuOwoJfQpwcmludGYoIiVzIixhd29yZCk7Cn0KCmZ1bmN0aW9uIGZpbmRfdGFnMigpIHsKCWRvbmU9Im5vIjsKCSMgbm8gYmxhbmtzIHByZXNlbnQgaW4gYSB0YWcuLi4KCW50YWdzPXNwbGl0KGF0YWcsYmxhdGEsIlsgCV0iKTsKCWlmICggbnRhZ3MgPiAxICkgeyByZXR1cm47IH0KCWlmIAkoICggYWxsb3dfb25lX2NoYXIgPT0gIm5vIiApICYmIFwKCQkgICggaW5kZXgoIiEjJCUmJygpKywtLi8wOjs9P0BBQ0lOWFxcW1xcXV5fYGF0XFx7XFx9fiIsYXRhZykgIT0wICkgKSB7CgkJcmV0dXJuOwoJfQoJaWYgKCBza2lwX3dvcmRbYXRhZ10gPT0gInllcyIgKSB7IHJldHVybjsgfQoJaWYgKCB3YXNzZXQgPT0gInllcyIgJiYgbGluZXNldCA9PSBOUiApIHsKCXdhc3NldD0ibm8iOwoJc2VlX29wdCgpOwoJaWYgKCBkb25lX29wdCA9PSAieWVzIiApIHtyZXR1cm47fQoJfQoJaWYgKCB3YXNzZXQgPT0gInllcyIgJiYgbGluZXNldCAhPSBOUiApIHsKCXdhc3NldD0ibm8iOwoJfQoJaWYgKCBhdGFnID09ICI6c2V0IiApIHsKCXdhc3NldD0ieWVzIjsKCWxpbmVzZXQ9TlI7Cgl9CglpZiAoIHRhZ2tleVthdGFnXSA9PSAieWVzIiApIHsKCQl3aGljaD10YWdyZWZbYXRhZ107CgkJcHV0X2hyZWYyKCk7CgkJZG9uZT0ieWVzIjsKCX0KfQoKZnVuY3Rpb24gZmluZF90YWczKCkgewoJZG9uZT0ibm8iOwoJIyBubyBibGFua3MgcHJlc2VudCBpbiBhIHRhZy4uLgoJbnRhZ3M9c3BsaXQoYnRhZyxibGF0YSwiWyAJXSIpOwoJaWYgKCBudGFncyA+IDEgKSB7IHJldHVybjsgfQoJaWYgCSggKCBhbGxvd19vbmVfY2hhciA9PSAibm8iICkgJiYgXAoJCSAgKCBpbmRleCgiISMkJSYnKCkrLC0uLzA6Oz0/QEFDSU5YXFxbXFxdXl9gYXRcXHtcXH1+IixidGFnKSAhPTAgKSApIHsKCSAgCXJldHVybjsKCX0KCWlmICggc2tpcF93b3JkW2J0YWddID09ICJ5ZXMiICkgeyByZXR1cm47IH0KCWlmICggdGFna2V5W2J0YWddID09ICJ5ZXMiICkgewoJCXdoaWNoPXRhZ3JlZltidGFnXTsKCQlwdXRfaHJlZjMoKTsKCQlkb25lPSJ5ZXMiOwoJfQp9CgpmdW5jdGlvbiBwdXRfaHJlZigpIHsKCWlmICggcFtpXSA9PSAiIiApIHsgcmV0dXJuOyB9CglpZiAoIHdoaWNoID09IEZJTEVOQU1FICkgewoJCXByaW50ZigifDxBIEhSRUY9XCIjJXNcIj4lczwvQT58IixwW2ldLHBbaV0pOwoJCX0KCQllbHNlIHsKCQluej1zcGxpdCh3aGljaCx6eiwiLiIpOwoJCWlmICggenpbMl0gPT0gInR4dCIgfHwgenpbMV0gPT0gInRhZ3MiICkgewoJCXByaW50ZigifDxBIEhSRUY9XCIlcy5odG1sIyVzXCI+JXM8L0E+fCIsenpbMV0scFtpXSxwW2ldKTsKCQl9CgkJZWxzZSB7CgkJcHJpbnRmKCJ8PEEgSFJFRj1cImludHJvLmh0bWwjJXNcIj4lczwvQT58IixwW2ldLHBbaV0pOwoJCX0KCX0KfQoKZnVuY3Rpb24gcHV0X2hyZWYyKCkgewoJaWYgKCBhdGFnID09ICIiICkgeyByZXR1cm47IH0KCWlmICggd2hpY2ggPT0gRklMRU5BTUUgKSB7CgkJcHJpbnRmKCI8QSBIUkVGPVwiIyVzXCI+JXM8L0E+IixhdGFnLGF0YWcpOwoJCX0KCQllbHNlIHsKCQluej1zcGxpdCh3aGljaCx6eiwiLiIpOwoJCWlmICggenpbMl0gPT0gInR4dCIgfHwgenpbMV0gPT0gInRhZ3MiICkgewoJCXByaW50ZigiPEEgSFJFRj1cIiVzLmh0bWwjJXNcIj4lczwvQT4iLHp6WzFdLGF0YWcsYXRhZyk7CgkJfQoJCWVsc2UgewoJCXByaW50ZigiPEEgSFJFRj1cImludHJvLmh0bWwjJXNcIj4lczwvQT4iLGF0YWcsYXRhZyk7CgkJfQoJfQp9CgpmdW5jdGlvbiBwdXRfaHJlZjMoKSB7CglpZiAoIGJ0YWcgPT0gIiIgKSB7IHJldHVybjsgfQoJaWYgKCB3aGljaCA9PSBGSUxFTkFNRSApIHsKCQlwcmludGYoIjxBIEhSRUY9XCIjJXNcIj4lczwvQT4iLGJ0YWcsYnRhZzIpOwoJCX0KCQllbHNlIHsKCQluej1zcGxpdCh3aGljaCx6eiwiLiIpOwoJCWlmICggenpbMl0gPT0gInR4dCIgfHwgenpbMV0gPT0gInRhZ3MiICkgewoJCXByaW50ZigiPEEgSFJFRj1cIiVzLmh0bWwjJXNcIj4lczwvQT4iLHp6WzFdLGJ0YWcsYnRhZzIpOwoJCX0KCQllbHNlIHsKCQlwcmludGYoIjxBIEhSRUY9XCJpbnRyby5odG1sIyVzXCI+JXM8L0E+IixidGFnLGJ0YWcyKTsKCQl9Cgl9Cn0KCmZ1bmN0aW9uIHB1dF90aGlzKCkgewoJbnRhYj1zcGxpdCh0aGlzLHRhLCIJIik7Cglmb3IgKCBudGE9MSA7IG50YSA8PSBudGFiIDsgbnRhKysgKSB7CgkJYXRhPXRhW250YV07CgkJbGF0YT1sZW5ndGgoYXRhKTsKCQlhd29yZD0iIjsKCQlmb3IgKCBpYXRhPTEgOyBpYXRhIDw9bGF0YSA7IGlhdGErKyApIHsKCQkJYWNoYXI9c3Vic3RyKGF0YSxpYXRhLDEpOwoJCQlpZiAoIGFjaGFyICE9ICIgIiApIHsgYXdvcmQ9YXdvcmQiImFjaGFyOyB9CgkJCWVsc2UgewoJCQkJaWYgKCBhd29yZCAhPSAiIiApIHsgYXRhZz1hd29yZDsKCQkJCQlzZWVfdGFnKCk7CgkJCQkJYXdvcmQ9IiI7CgkJCQkJcHJpbnRmKCIgIik7IH0KCQkJCWVsc2UJewoJCQkJCXByaW50ZigiICIpOwoJCQkJCX0KCQkJfQoJCX0KCQlpZiAoIGF3b3JkICE9ICIiICkgeyBhdGFnPWF3b3JkOwoJCQkJCXNlZV90YWcoKTsKCQkJCQl9CgkJaWYgKCBudGEgIT0gbnRhYiApIHsgcHJpbnRmKCIJIik7IH0KCX0KfQoKZnVuY3Rpb24gaWZfYWxyZWFkeSgpIHsKCWFscmVhZHk9Im5vIjsKCWlmICAoIG5waXBlIDwgMiApIHsgcmV0dXJuOyB9CglpZiAgKCBhdGFnID09ICI6YXUiICYmIHBbMl0gPT0gIjphdXRvY21kIiApIHsgYWxyZWFkeT0ieWVzIjtyZXR1cm47IH0KCWZvciAoIG5wcD0yIDsgbnBwIDw9IG5waXBlIDsgbnBwPW5wcCsyICkgewoJCWlmIAkoICAoICAoaW5kZXgocFtucHBdLGF0YWcpKSAhPSAwIFwKCQkJICAgICAgJiYgbGVuZ3RoKHBbbnBwXSkgPiBsZW5ndGgoYXRhZykgXAoJCQkgICAgICAmJiBsZW5ndGgoYXRhZykgPj0gMSAgXAoJCQkgICAgKSBcCgkJCSAgICB8fCAocFtucHBdID09IGF0YWcpIFwKCQkJKSB7CgkJIyBwcmludGYoInA9fCVzfCx0YWc9fCVzfCAiLHBbbnBwXSxhdGFnKTsKCQlhbHJlYWR5PSJ5ZXMiOyByZXR1cm47IH0KCX0KfQoKZnVuY3Rpb24gc2VlX29wdCgpIHsKCWRvbmVfb3B0PSJubyI7CglzdGFnPWF0YWc7CgluZmllbGRzID0gc3BsaXQoYXRhZyx0YWUsIj0iKTsKCWlmICggbmZpZWxkcyA+IDEgKSAgewoJCWJ0YWc9IicidGFlWzFdIiciOwoJCWJ0YWcyPXRhZVsxXTsKCSAgICBmaW5kX3RhZzMoKTsKCQlpZiAoZG9uZSA9PSAieWVzIikgewoJCQlmb3IgKCBudGFlPTIgOyBudGFlIDw9IG5maWVsZHMgOyBudGFlKysgKSB7CgkJCQlwcmludGYoIj0lcyIsdGFlW250YWVdKTsKCQkJfQoJCQlhdGFnPXN0YWc7CgkJCWRvbmVfb3B0PSJ5ZXMiOwoJCQlyZXR1cm47CgkJfQoJCWJ0YWc9dGFlWzFdOwoJCWJ0YWcyPXRhZVsxXTsKCSAgICBmaW5kX3RhZzMoKTsKCQlpZiAoIGRvbmU9PSJ5ZXMiICkgewoJCQlmb3IgKCBudGFlPTIgOyBudGFlIDw9IG5maWVsZHMgOyBudGFlKysgKSB7CgkJCQlwcmludGYoIj0lcyIsdGFlW250YWVdKTsKCQkJfQoJCQlhdGFnPXN0YWc7CgkJCWRvbmVfb3B0PSJ5ZXMiOwoJCQlyZXR1cm47CgkJfQoJfQoJbmZpZWxkcyA9IHNwbGl0KGF0YWcsdGFlLCImcXVvdDsiKTsKCWlmICggbmZpZWxkcyA+IDEgKSAgewoJCWJ0YWc9IicidGFlWzFdIiciOwoJCWJ0YWcyPXRhZVsxXTsKCSAgIAlmaW5kX3RhZzMoKTsKCQlpZiAoZG9uZSA9PSAieWVzIikgewoJCQlwcmludGYoIiZxdW90OyIpOwoJCQlhdGFnPXN0YWc7CgkJCWRvbmVfb3B0PSJ5ZXMiOwoJCQlyZXR1cm47CgkJfQoJCWJ0YWc9dGFlWzFdOwoJCWJ0YWcyPXRhZVsxXTsKCSAgICBmaW5kX3RhZzMoKTsKCQlpZiAoZG9uZSA9PSAieWVzIikgewoJCQlwcmludGYoIiZxdW90OyIpOwoJCQlhdGFnPXN0YWc7CgkJCWRvbmVfb3B0PSJ5ZXMiOwoJCQlyZXR1cm47CgkJfQoJfQoJYnRhZz0iJyJ0YWVbMV0iJyI7CglidGFnMj10YWVbMV07CglmaW5kX3RhZzMoKTsKCWlmIChkb25lID09ICJ5ZXMiKSB7CgkJYXRhZz1zdGFnOwoJCWRvbmVfb3B0PSJ5ZXMiOwoJCXJldHVybjsKCX0KCWJ0YWc9dGFlWzFdOwoJYnRhZzI9dGFlWzFdOwoJZmluZF90YWczKCk7CglpZiAoZG9uZSA9PSAieWVzIikgewoJCWF0YWc9c3RhZzsKCQlkb25lX29wdD0ieWVzIjsKCQlyZXR1cm47Cgl9CglhdGFnPXN0YWc7Cn0K