QkVHSU4gICB7CgkjIHNvbWUgaW5pdGlhbGl6YXRpb24gdmFyaWFibGVzCglhc2NpaWFydD0ibm8iOwoJd2Fzc2V0PSJubyI7CglsaW5lc2V0PTA7CglzYW1wbGU9Im5vIjsKCXdoaWxlICggZ2V0bGluZSB0aSA8InRhZ3MucmVmIiA+IDAgKSB7CgkJbmY9c3BsaXQodGksdGFnLCIJIik7CgkJdGFna2V5W3RhZ1sxXV09InllcyI7dGFncmVmW3RhZ1sxXV09dGFnWzJdOwoJfQoJc2tpcF93b3JkWyJhbmQiXT0ieWVzIjsKCXNraXBfd29yZFsiYmFja3NwYWNlIl09InllcyI7Cglza2lwX3dvcmRbImJlZXAiXT0ieWVzIjsKCXNraXBfd29yZFsiYnVncyJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJkYSJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJlbmQiXT0ieWVzIjsKCXNraXBfd29yZFsiZnRwIl09InllcyI7Cglza2lwX3dvcmRbImdvIl09InllcyI7Cglza2lwX3dvcmRbImhlbHAiXT0ieWVzIjsKCXNraXBfd29yZFsiaG9tZSJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJuZXdzIl09InllcyI7Cglza2lwX3dvcmRbImluZGV4Il09InllcyI7Cglza2lwX3dvcmRbImluc2VydCJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJpbnRvIl09InllcyI7Cglza2lwX3dvcmRbInB1dCJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJyZWZlcmVuY2UiXT0ieWVzIjsKCXNraXBfd29yZFsic2VjdGlvbiJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJzcGFjZSJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJzdGFydGluZyJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJ0b2dnbGUiXT0ieWVzIjsKCXNraXBfd29yZFsidmFyaW91cyJdPSJ5ZXMiOwoJc2tpcF93b3JkWyJ2ZXJzaW9uIl09InllcyI7Cglza2lwX3dvcmRbImlzIl09InllcyI7Cn0KIwojIHByb3RlY3Qgc3BlY2lhbCBjaGFycwojCi9bPjwm4V0vIHtnc3ViKC8mLywiXFwmYW1wOyIpO2dzdWIoLz4vLCJcXCZndDsiKTtnc3ViKC88LywiXFwmbHQ7Iik7Z3N1Yigi4SIsIlxcJmFhY3V0ZTsiKTt9CiMKIyBlbmQgb2Ygc2FtcGxlIGxpbmVzIGJ5IG5vbi1ibGFuayBpbiBmaXJzdCBjb2x1bW4KIwpzYW1wbGUgPT0gInllcyIgJiYgc3Vic3RyKCQwLDEsNCkgPT0gIiZsdDsiIHsgc2FtcGxlID0gIm5vIjsgZ3N1YigvXiZsdDsvLCAiICIpOyB9CnNhbXBsZSA9PSAieWVzIiAmJiBzdWJzdHIoJDAsMSwxKSAhPSAiICIgJiYgc3Vic3RyKCQwLDEsMSkgIT0gIgkiICYmIGxlbmd0aCgkMCkgPiAwIHsgc2FtcGxlID0gIm5vIiB9CiMKIyBzYW1wbGUgbGluZXMgcHJpbnRlZCBib2xkIHVubGVzcyBlbXB0eS4uLgojCnNhbXBsZSA9PSAieWVzIiAmJiAkMCA9PSIiIHsgcHJpbnQgIiI7IG5leHQ7IH0Kc2FtcGxlID09ICJ5ZXMiICYmICQwICE9IiIgeyBwcmludCAiPEI+IiAkMCAiPC9CPiI7IG5leHQ7IH0KIwojIHN0YXJ0IG9mIHNhbXBsZSBsaW5lcyBpbiBuZXh0IGxpbmUKIwokMCA9PSAiJmd0OyIgeyBzYW1wbGUgPSAieWVzIjsgcHJpbnQgIiI7IG5leHQ7IH0Kc3Vic3RyKCQwLGxlbmd0aCgkMCktNCw1KSA9PSAiICZndDsiIHsgc2FtcGxlID0gInllcyI7IGdzdWIoLyAmZ3Q7JC8sICIiKTsgfQojCiMgaGVhZGVyIGxpbmVzIHByaW50ZWQgYm9sZCwgY29sb3JlZAojCnN1YnN0cigkMCxsZW5ndGgoJDApLDEpID09ICJ+IiB7IHByaW50ICI8Qj48Rk9OVCBDT0xPUj1cIlBVUlBMRVwiPiIgc3Vic3RyKCQwLDEsbGVuZ3RoKCQwKS0xKSAiPC9GT05UPjwvQj4iOyBuZXh0OyB9CiMKI2FkIGhvYyBjb2RlCiMKL14iXHwmIC8ge2dzdWIoL1x8LywiXFwmIzEyNDsiKTsgfQovID0gYiAvIHtnc3ViKC8gYiAvLCIgXFwmIzk4OyAiKTsgfQojCiMgb25lIGxldHRlciB0YWcKIwovWyAJXVwqLlwqWyAJXS8ge2dzdWIoL1wqLywiWldXWiIpOyB9CiMKIyBpc29sYXRlZCAiKiIKIwovWyAJXVwqWyAJXS8ge2dzdWIoLyBcKiAvLCIgXFwmIzQyOyAiKTsKCQkgICAgZ3N1YigvIFwqCS8sIiBcXCYjNDI7CSIpOwoJCSAgICBnc3ViKC8JXCogLywiCVxcJiM0MjsgIik7CgkJICAgIGdzdWIoLwlcKgkvLCIJXFwmIzQyOwkiKTsgfQojCiMgdGFnIHN0YXJ0CiMKL1sgCV1cKlteIAldLwl7Z3N1YigvIFwqLywiIFpXV1oiKTtnc3ViKC8JXCovLCIJWldXWiIpO30KL15cKlteIAldLyAJIHtnc3ViKC9eXCovLCJaV1daIik7fQojCiMgdGFnIGVuZAojCi9bXiAJXVwqJC8gCSB7Z3N1YigvXCokLywiWldXWiIpO30KL1teIFwvCV1cKlsgCV0vICB7Z3N1YigvXCovLCJaV1daIik7fQojCiMgaXNvbGF0ZWQgInwiCiMKL1sgCV1cfFsgCV0vIHtnc3ViKC8gXHwgLywiIFxcJiMxMjQ7ICIpOwoJCSAgICBnc3ViKC8gXHwJLywiIFxcJiMxMjQ7CSIpOwoJCSAgICBnc3ViKC8JXHwgLywiCVxcJiMxMjQ7ICIpOwoJCSAgICBnc3ViKC8JXHwJLywiCVxcJiMxMjQ7CSIpOyB9Ci8nXHwnLyB7IGdzdWIoLydcfCcvLCInXFwmIzEyNDsnIik7IH0KL1xeVlx8LyB7Z3N1YigvXF5WXHwvLCJeVlxcJiMxMjQ7Iik7fQovIFxcXHwJLyB7Z3N1YigvXHwvLCJcXCYjMTI0OyIpO30KIwojIG9uZSBsZXR0ZXIgcGlwZXMgYW5kICJ8fCIgZmFsc2UgcGlwZSAoZGlncmFwaHMpCiMKL1sgCV1cfC5cfFsgCV0vICYmIGFzY2lpYXJ0ID09ICJubyIge2dzdWIoL1x8LywiWVhYWSIpOyB9Ci9eXHwuXHxbIAldLyB7Z3N1YigvXHwvLCJZWFhZIik7IH0KL1x8XHwvIHtnc3ViKC9cfFx8LywiXFwmIzEyNDtcXCYjMTI0OyIpOyB9Ci9ec2hlbGxwaXBlLyB7Z3N1YigvXHwvLCJcXCYjMTI0OyIpOyB9CiMKIyBwaXBlIHN0YXJ0CiMKL1sgCV1cfFteIAldLyAmJiBhc2NpaWFydCA9PSAibm8iCXtnc3ViKC8gXHwvLCIgWVhYWSIpOwoJCQlnc3ViKC8JXHwvLCIJWVhYWSIpO30KL15cfFteIAldLyAJIHtnc3ViKC9eXHwvLCJZWFhZIik7fQojCiMgcGlwZSBlbmQKIwovW14gCV1cfCQvICYmIGFzY2lpYXJ0ID09ICJubyIge2dzdWIoL1x8JC8sIllYWFkiKTt9Ci9bXiAJXVx8W3MgLC4pOwldLyAmJiBhc2NpaWFydCA9PSAibm8iIHtnc3ViKC9cfC8sIllYWFkiKTt9Ci9bXiAJXVx8XS8gJiYgYXNjaWlhcnQgPT0gIm5vIiB7Z3N1YigvXHwvLCJZWFhZIik7fQojCiMgdmFyaW91cwojCi8nIi8gCXtnc3ViKC8nIi8sIlxcJiMzOTtcXCYjMzQ7JyIpO30KLyIvCXtnc3ViKC8iLywiXFwmcXVvdDsiKTt9Ci8lLwl7Z3N1YigvJS8sIlxcJiMzNzsiKTt9CgpOUiA9PSAxIHsgbmY9c3BsaXQoRklMRU5BTUUsZiwiLiIpCglwcmludCAiPEhUTUw+IjsKCglwcmludCAiPEhFQUQ+IgoJaWYgKCBGSUxFTkFNRSA9PSAibWJ5dGUudHh0IiApIHsKCSAgICAjIG5lZWRzIHV0Zi04IGFzIHVzZXMgbWFueSBsYW5ndWFnZXMKCSAgICBwcmludCAiPE1FVEEgSFRUUC1FUVVJVj1cIkNvbnRlbnQtdHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLThcIj4iOwoJfSBlbHNlIHsKCSAgICAjIGNvbW1vbiBjYXNlIC0gTGF0aW4xCgkgICAgcHJpbnQgIjxNRVRBIEhUVFAtRVFVSVY9XCJDb250ZW50LXR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTFcIj4iOwoJfQoJcHJpbnQgIjxUSVRMRT5WaW0gZG9jdW1lbnRhdGlvbjogIiBmWzFdICI8L1RJVExFPiI7CglwcmludCAiPC9IRUFEPiI7CgoJcHJpbnQgIjxCT0RZIEJHQ09MT1I9XCIjZmZmZmZmXCI+IjsKCXByaW50ICI8SDE+VmltIGRvY3VtZW50YXRpb246ICIgZlsxXSAiPC9IMT4iOwoJcHJpbnQgIjxBIE5BTUU9XCJ0b3BcIj48L0E+IjsKCWlmICggRklMRU5BTUUgIT0gImhlbHAudHh0IiApIHsKCSAgcHJpbnQgIjxBIEhSRUY9XCJpbmRleC5odG1sXCI+bWFpbiBoZWxwIGZpbGU8L0E+XG4iOwoJfQoJcHJpbnQgIjxIUj4iOwoJcHJpbnQgIjxQUkU+IjsKCWZpbGVuYW1lPWZbMV0iLmh0bWwiOwp9CgojIHNldCB0byBhIGxvdyB2YWx1ZSB0byB0ZXN0IGZvciBmZXcgbGluZXMgb2YgdGV4dAojIE5SID09IDk5OTk5IHsgZXhpdDsgfQoKIyBpZ25vcmUgdW5kZXJsaW5lcyBhbmQgdGFncwpzdWJzdHIoJDAsMSw1KSA9PSAiIHZpbToiIHsgbmV4dDsgfQpzdWJzdHIoJDAsMSw0KSA9PSAidmltOiIgeyBuZXh0OyB9CiMga2VlcCBqdXN0IHdob2xlIGxpbmVzIG9mICItIiwgIj0iCnN1YnN0cigkMCwxLDMpID09ICI9PT0iICYmIHN1YnN0cigkMCw3NSwxKSAhPSAiPSIgeyBuZXh0OyB9CnN1YnN0cigkMCwxLDMpID09ICItLS0iICYmIHN1YnN0cigkMCw3NSwxKSAhPSAiLSIgeyBuZXh0OyB9Cgp7Cgluc3RhciA9IHNwbGl0KCQwLHMsIlpXV1oiKTsKCWZvciAoIGk9MiA7IGkgPD0gbnN0YXIgOyBpPWkrMiApIHsKCQluYmxhPXNwbGl0KHNbaV0sYmxhdGEsIlsgCV0iKTsKCQlpZiAoIG5ibGEgPiAxICkgewoJCQlnc3ViKCJaV1daIiwiKiIpOwoJCQluc3RhciA9IHNwbGl0KCQwLHMsIlpXV1oiKTsKCQl9Cgl9CglucGlwZSA9IHNwbGl0KCQwLHAsIllYWFkiKTsKCWZvciAoIGk9MiA7IGkgPD0gbnBpcGUgOyBpPWkrMiApIHsKCQluYmxhPXNwbGl0KHBbaV0sYmxhdGEsIlsgCV0iKTsKCQlpZiAoIG5ibGEgPiAxICkgewoJCQlnc3ViKCJZWFhZIiwifCIpOwoJCQludGFicyA9IHNwbGl0KCQwLHAsIllYWFkiKTsKCQl9Cgl9Cn0KCgpGSUxFTkFNRSA9PSAiZ3VpLnR4dCIgJiYgYXNjaWlhcnQgPT0gIm5vIiAgXAoJICAmJiAkMCB+IC9cKy0tLS0vICYmICQwIH4gLy0tLS1cKy8gewoJYXNjaWlhcnQ9ICJ5ZXMiOwoJYXNjaWljbnQ9MDsKCX0KCkZJTEVOQU1FID09ICJxdW90ZXMudHh0IiAmJiBhc2NpaWFydCA9PSAibm8iIFwKCSAgJiYgJDAgfiAvSW4gc3VtbWFyeTovIHsKCWFzY2lpYXJ0PSAieWVzIjsKCWFzY2lpY250PTA7Cgl9CgpGSUxFTkFNRSA9PSAidXNyXzIwLnR4dCIgJiYgYXNjaWlhcnQgPT0gIm5vIiBcCgkgICYmICQwIH4gL2FuIGVtcHR5IGxpbmUgYXQgdGhlIGVuZDovIHsKCWFzY2lpYXJ0PSAieWVzIjsKCWFzY2lpY250PTA7Cgl9Cgphc2NpaWFydCA9PSAieWVzIiAmJiAkMD09IiIgeyBhc2NpaWNudCsrOyB9Cgphc2NpaWFydCA9PSAieWVzIiAmJiBhc2NpaWNudCA9PSAyIHsgYXNjaWlhcnQgPSAibm8iOyB9Cgphc2NpaWFydCA9PSAieWVzIiB7IG5waXBlID0gMTsgfQojCXsgcHJpbnQgTlIgIiA8PT4gIiBhc2NpaWFydDsgfQoKIwojIGxpbmUgY29udGFpbnMgICIqIgojCm5zdGFyID4gMiAmJiBucGlwZSA8IDMgewoJcHJpbnRmKCJcbiIpOwoJZm9yICggaT0xOyBpIDw9IG5zdGFyIDsgaT1pKzIgKSB7CgkJdGhpcz1zW2ldOwoJCXB1dF90aGlzKCk7CgkJaWk9aSsxOwoJCW5ibGEgPSBzcGxpdChzW2lpXSxibGF0YSwiICIpOwoJCWlmICggaWkgPD0gbnN0YXIgKSB7CgkJCWlmICggbmJsYSA9PSAxICYmIHN1YnN0cihzW2lpXSxsZW5ndGgoc1tpaV0pLDEpICE9ICIgIiApIHsKCQkJcHJpbnRmKCIqPEEgTkFNRT1cIiVzXCI+PC9BPiIsc1tpaV0pOwoJCQkJcHJpbnRmKCI8Qj4lczwvQj4qIixzW2lpXSk7CgkJCX0gZWxzZSB7CgkJCXByaW50ZigiKiVzKiIsc1tpaV0pOwoJCQl9CgkJfQoJfQoJcHJpbnRmKCJcbiIpOwoJbmV4dDsKCX0KIwojIGxpbmUgY29udGFpbnMgInwiCiMKbnBpcGUgPiAyICYmIG5zdGFyIDwgMyB7CglpZiAgKCBucGlwZSUyID09IDAgKSB7CgkJZm9yICggaT0xOyBpIDwgbnBpcGUgOyBpKysgKSB7CgkJCWdzdWIoIlpXV1oiLCIqIixwW2ldKTsKCQkJcHJpbnRmKCIlc3wiLHBbaV0pOwoJCX0KCQlwcmludGYoIiVzXG4iLHBbbnBpcGVdKTsKCQluZXh0OwoJCX0KCWZvciAoIGk9MTsgaSA8PSBucGlwZSA7IGkrKyApCgkJewoJCWlmICggaSAlIDIgPT0gMSApIHsKCQkJZ3N1YigiWldXWiIsIioiLHBbaV0pOwoJCQl0aGlzPXBbaV07CgkJCXB1dF90aGlzKCk7CgkJCX0KCQkJZWxzZSB7CgkJCW5mbj1zcGxpdChwW2ldLGYsIi4iKTsKCQkJaWYgKCBuZm4gPT0gMSB8fCBmWzJdID09ICIiIHx8IGZbMV0gPT0gIiIgfHwgbGVuZ3RoKGZbMl0pIDwgMyApIHsKCQkJCWZpbmRfdGFnMSgpOwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJaWYgKCBmWzFdID09ICJpbmRleCIgKSB7CgkJcHJpbnRmICJ8PEEgSFJFRj1cInZpbWluZGV4Lmh0bWxcIj4iIHBbaV0gIjwvQT58IjsKCQkJCQl9IGVsc2UgewoJCQkJCQlpZiAoIGZbMV0gPT0gImhlbHAiICkgewoJCXByaW50ZiAifDxBIEhSRUY9XCJpbmRleC5odG1sXCI+IiBwW2ldICI8L0E+fCI7CgkJCQkJCX0gZWxzZSB7CgkJcHJpbnRmICJ8PEEgSFJFRj1cIiIgZlsxXSAiLmh0bWxcIj4iIHBbaV0gIjwvQT58IjsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCQlwcmludGYoIlxuIik7CgkJbmV4dDsKCX0KIwojIGxpbmUgY29udGFpbnMgYm90aCAifCIgYW5kICIqIgojCm5waXBlID4gMiAmJiBuc3RhciA+IDIgewoJcHJpbnRmKCJcbiIpOwoJZm9yICggaj0xOyBqIDw9IG5zdGFyIDsgaj1qKzIgKSB7CgkJbnBpcGUgPSBzcGxpdChzW2pdLHAsIllYWFkiKTsKCQlpZiAoIG5waXBlID4gMSApIHsKCQkJZm9yICggbnA9MTsgbnA8PW5waXBlOyBucD1ucCsyICkgewoJCQkJdGhpcz1wW25wXTsKCQkJCXB1dF90aGlzKCk7CgkJCQlpPW5wKzE7ZmluZF90YWcxKCk7CgkJCX0KCQl9IGVsc2UgewoJCQl0aGlzPXNbal07CgkJCXB1dF90aGlzKCk7CgkJfQoJCWpqPWorMTsKCQluYmxhID0gc3BsaXQoc1tqal0sYmxhdGEsIiAiKTsKCQlpZiAoIGpqIDw9IG5zdGFyICYmIG5ibGEgPT0gMSAmJiBzW2pqXSAhPSAiIiApIHsKCQlwcmludGYoIio8QSBOQU1FPVwiJXNcIj48L0E+IixzW2pqXSk7CgkJCXByaW50ZigiPEI+JXM8L0I+KiIsc1tqal0pOwoJCX0gZWxzZSB7CgkJCWlmICggc1tqal0gIT0gIiIgKSB7CgkJCXByaW50ZigiKiVzKiIsc1tqal0pOwoJCQl9CgkJfQoJfQoJcHJpbnRmKCJcbiIpOwoJbmV4dDsKCX0KIwojIGxpbmUgY29udGFpbnMgZS1tYWlsIGFkZHJlc3Mgam9obi5kb2VAc29tZS5wbGFjZS5lZHUKIwokMCB+IC9ALyAmJiAkMCB+IC9bYS16QS1aMC05XUBbYS16XS8gXAoJewoJbmVtYWlsPXNwbGl0KCQwLGVtLCIgIik7CglpZiAoIHN1YnN0cigkMCwxLDEpID09ICIJIiApIHsgcHJpbnRmKCIJIik7IH0KCWZvciAoIGk9MTsgaSA8PSBuZW1haWw7IGkrKyApIHsKCQlpZiAoIGVtW2ldIH4gL0AvICkgewoJCQlpZiAoIHN1YnN0cihlbVtpXSwyLDMpID09ICJsdDsiICYmIHN1YnN0cihlbVtpXSxsZW5ndGgoZW1baV0pLTIsMykgPT0gImd0OyIgKSB7CgkJCQltYWlsYWRkcj1zdWJzdHIoZW1baV0sNSxsZW5ndGgoZW1baV0pLTgpOwoJCQkJcHJpbnRmKCI8QSBIUkVGPVwibWFpbHRvOiVzXCI+Jmx0OyVzJmd0OzwvQT4gIixtYWlsYWRkcixtYWlsYWRkcik7CgkJCX0gZWxzZSB7CgkJCQlpZiAoIHN1YnN0cihlbVtpXSwyLDMpID09ICJsdDsiICYmIHN1YnN0cihlbVtpXSxsZW5ndGgoZW1baV0pLTMsMykgPT0gImd0OyIgKSB7CgkJCQkJbWFpbGFkZHI9c3Vic3RyKGVtW2ldLDUsbGVuZ3RoKGVtW2ldKS05KTsKCQkJCQlwcmludGYoIjxBIEhSRUY9XCJtYWlsdG86JXNcIj4mbHQ7JXMmZ3Q7PC9BPiVzICIsbWFpbGFkZHIsbWFpbGFkZHIsc3Vic3RyKGVtW2ldLGxlbmd0aChlbVtpXSksMSkpOwoJCQkJfSBlbHNlIHsKCQkJCQlwcmludGYoIjxBIEhSRUY9XCJtYWlsdG86JXNcIj4lczwvQT4gIixlbVtpXSxlbVtpXSk7CgkJCQl9CgkJCX0KCQl9IGVsc2UgewoJCQkJcHJpbnRmKCIlcyAiLGVtW2ldKTsKCQl9Cgl9CgkjcHJpbnQgIioqKiAiIE5SICIgIiBGSUxFTkFNRSAiIC0gcG9zc2libGUgbWFpbCByZWYiOwoJcHJpbnRmKCJcbiIpOwoJbmV4dDsKCX0KIwojIGxpbmUgY29udGFpbnMgaHR0cCAvIGZ0cCByZWZlcmVuY2UKIwokMCB+IC9odHRwOlwvXC8vIHx8ICQwIH4gL2Z0cDpcL1wvLyB7Cglnc3ViKCJVUkw6IiwiIik7Cglnc3ViKCImbHQ7IiwiIik7Cglnc3ViKCImZ3Q7IiwiIik7Cglnc3ViKCJcXCgiLCIiKTsKCWdzdWIoIlxcKSIsIiIpOwoJbmVtYWlsPXNwbGl0KCQwLGVtLCIgIik7Cglmb3IgKCBpPTE7IGkgPD0gbmVtYWlsOyBpKysgKSB7CgkJaWYgKCBzdWJzdHIoZW1baV0sMSw1KSA9PSAiaHR0cDoiIHx8CgkgICAgIAlzdWJzdHIoZW1baV0sMSw0KSA9PSAiZnRwOiIgKSB7CgkJCWlmICggc3Vic3RyKGVtW2ldLGxlbmd0aChlbVtpXSksMSkgIT0gIi4iICkgewoJCQkJcHJpbnRmKCIJPEEgSFJFRj1cIiVzXCI+JXM8L0E+IixlbVtpXSxlbVtpXSk7CgkJCX0gZWxzZSB7CgkJCQllbVtpXT1zdWJzdHIoZW1baV0sMSxsZW5ndGgoZW1baV0pLTEpOwoJCQkJcHJpbnRmKCIJPEEgSFJFRj1cIiVzXCI+JXM8L0E+LiIsZW1baV0sZW1baV0pOwoJCQl9CgkJfSBlbHNlIHsKCQlwcmludGYoIiAlcyIsZW1baV0pOwoJCX0KCX0KCSNwcmludCAiKioqICIgTlIgIiAiIEZJTEVOQU1FICIgLSBwb3NzaWJsZSBodHRwIHJlZiI7CglwcmludGYoIlxuIik7CgluZXh0OwoJfQojCiMgc29tZSBsaW5lcyBjb250YWlucyBqdXN0IG9uZSAiYWxtb3N0IHJlZ3VsYXIiICIqIi4uLgojCm5zdGFyID09IDIgIHsKCXRoaXM9c1sxXTsKCXB1dF90aGlzKCk7CglwcmludGYoIioiKTsKCXRoaXM9c1syXTsKCXB1dF90aGlzKCk7CglwcmludGYoIlxuIik7CgluZXh0OwoJfQojCiMgcmVndWxhciBsaW5lCiMKCXsgbnRhYnMgPSBzcGxpdCgkMCx0YiwiCSIpOwoJZm9yICggaT0xOyBpIDwgbnRhYnMgOyBpKyspIHsKCQl0aGlzPXRiW2ldOwoJCXB1dF90aGlzKCk7CgkJcHJpbnRmKCIJIik7CgkJfQoJdGhpcz10YltudGFic107CglwdXRfdGhpcygpOwoJcHJpbnRmKCJcbiIpOwoJfQoKCmFzY2lpYXJ0ID09ICJ5ZXMiICAmJiAkMCB+IC9cKy1cKy0tLyAgXAoJJiYgJDAgfiAic2Nyb2xsYmFyIiB7IGFzY2lpYXJ0ID0gIm5vIjsgfQoKRU5EIHsKCXRvcGJhY2soKTsKCXByaW50ICI8L1BSRT5cbjwvQk9EWT5cblxuXG48L0hUTUw+IjsgfQoKIwojIGFzIG1haW4gd2Uga2VlcCBpbmRleC50eHQgKGJ5IGRlZmF1bHQpCiMKZnVuY3Rpb24gdG9wYmFjayAoKSB7CglpZiAoIEZJTEVOQU1FICE9ICJ0YWdzIiApIHsKCWlmICggRklMRU5BTUUgIT0gImhlbHAudHh0IiApIHsKCXByaW50ZigiPEEgSFJFRj1cIiN0b3BcIj50b3A8L0E+IC0gIik7CglwcmludGYoIjxBIEhSRUY9XCJpbmRleC5odG1sXCI+bWFpbiBoZWxwIGZpbGU8L0E+XG4iKTsKCX0gZWxzZSB7CglwcmludGYoIjxBIEhSRUY9XCIjdG9wXCI+dG9wPC9BPlxuIik7Cgl9Cgl9Cn0KCmZ1bmN0aW9uIGZpbmRfdGFnMSgpIHsKCWlmICggcFtpXSA9PSAiIiApIHsgcmV0dXJuOyB9CglpZiAoIHRhZ2tleVtwW2ldXSA9PSAieWVzIiApIHsKCQl3aGljaD10YWdyZWZbcFtpXV07CgkJcHV0X2hyZWYoKTsKCQlyZXR1cm47Cgl9CgkjIGlmIG5vdCBmb3VuZCwgdGhlbiB3ZSBoYXZlIGEgcHJvYmxlbQoJcHJpbnQgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiAgPj4iZXJyb3JzLmxvZyI7CglwcmludCBGSUxFTkFNRSAiLCBsaW5lICIgTlIgIiwgcG9pbnRlcjogPj4iIHBbaV0gIjw8IiA+PiJlcnJvcnMubG9nIjsKCXByaW50ICQwID4+ImVycm9ycy5sb2ciOwoJd2hpY2g9ImludHJvLmh0bWwiOwoJcHV0X2hyZWYoKTsKfQoKZnVuY3Rpb24gc2VlX3RhZygpIHsKIyBhZC1ob2MgY29kZToKaWYgKCBhdGFnID09ICJcIi0tIiB8fCBhdGFnID09ICItLVwiIiApIHsgcmV0dXJuOyB9CmlmX2FscmVhZHkoKTsKaWYgKCBhbHJlYWR5ID09ICJ5ZXMiICkgewoJcHJpbnRmKCIlcyIsYXdvcmQpOwoJcmV0dXJuOwoJfQphbGxvd19vbmVfY2hhcj0ibm8iOwpmaW5kX3RhZzIoKTsKaWYgKCBkb25lID09ICJ5ZXMiICkgeyByZXR1cm47IH0KcmlnaHRjaGFyPXN1YnN0cihhdGFnLGxlbmd0aChhdGFnKSwxKTsKaWYgKCAgICByaWdodGNoYXIgPT0gIi4iIFwKICAgICB8fCByaWdodGNoYXIgPT0gIiwiIFwKICAgICB8fCByaWdodGNoYXIgPT0gIjoiIFwKICAgICB8fCByaWdodGNoYXIgPT0gIjsiIFwKICAgICB8fCByaWdodGNoYXIgPT0gIiEiIFwKICAgICB8fCByaWdodGNoYXIgPT0gIj8iIFwKICAgICB8fCByaWdodGNoYXIgPT0gIikiICkgewoJYXRhZz1zdWJzdHIoYXRhZywxLGxlbmd0aChhdGFnKS0xKTsKCWlmX2FscmVhZHkoKTsKCWlmICggYWxyZWFkeSA9PSAieWVzIiApIHsKCQlwcmludGYoIiVzIixhd29yZCk7CgkJcmV0dXJuOwoJfQoJZmluZF90YWcyKCk7CglpZiAoIGRvbmUgPT0gInllcyIgKSB7IHByaW50ZigiJXMiLHJpZ2h0Y2hhcik7cmV0dXJuOyB9CglsZWZ0Y2hhcj1zdWJzdHIoYXRhZywxLDEpOwoJbGFzdGJ1dDE9c3Vic3RyKGF0YWcsbGVuZ3RoKGF0YWcpLDEpOwoJaWYgKCAgICBsZWZ0Y2hhciA9PSAiJyIgJiYgbGFzdGJ1dDEgPT0gIiciICApIHsKCQlhbGxvd19vbmVfY2hhcj0ieWVzIjsKCQlhdGFnPXN1YnN0cihhdGFnLDIsbGVuZ3RoKGF0YWcpLTIpOwoJCWlmX2FscmVhZHkoKTsKCQlpZiAoIGFscmVhZHkgPT0gInllcyIgKSB7CgkJCXByaW50ZigiJXMiLGF3b3JkKTsKCQkJcmV0dXJuOwoJCX0KCQlwcmludGYoIiVzIixsZWZ0Y2hhcik7CgkJYXdvcmQ9c3Vic3RyKGF0YWcsMSxsZW5ndGgoYXRhZykpIiJsYXN0YnV0MSIicmlnaHRjaGFyOwoJCWZpbmRfdGFnMigpOwoJCWlmICggZG9uZSA9PSAieWVzIiApIHsgcHJpbnRmKCIlcyVzIixsYXN0YnV0MSxyaWdodGNoYXIpO3JldHVybjsgfQoJCX0KCX0KYXRhZz1hd29yZDsKbGVmdGNoYXI9c3Vic3RyKGF0YWcsMSwxKTsKaWYgKCAgICBsZWZ0Y2hhciA9PSAiJyIgJiYgcmlnaHRjaGFyID09ICInIiAgKSB7CglhbGxvd19vbmVfY2hhcj0ieWVzIjsKCWF0YWc9c3Vic3RyKGF0YWcsMixsZW5ndGgoYXRhZyktMik7CglpZiAgKCBhdGFnID09ICI8IiApIHsgcHJpbnRmKCIgfCVzfCVzfCAiLGF0YWcscFsyXSk7IH0KCWlmX2FscmVhZHkoKTsKCWlmICggYWxyZWFkeSA9PSAieWVzIiApIHsKCQlwcmludGYoIiVzIixhd29yZCk7CgkJcmV0dXJuOwoJCX0KCXByaW50ZigiJXMiLGxlZnRjaGFyKTsKCWZpbmRfdGFnMigpOwoJaWYgKCBkb25lID09ICJ5ZXMiICkgeyBwcmludGYoIiVzIixyaWdodGNoYXIpO3JldHVybjsgfQoJcHJpbnRmKCIlcyVzIixhdGFnLHJpZ2h0Y2hhcik7CglyZXR1cm47Cgl9Cmxhc3QyPXN1YnN0cihhdGFnLGxlbmd0aChhdGFnKS0xLDIpOwpmaXJzdDI9c3Vic3RyKGF0YWcsMSwyKTsKaWYgKCAgICBmaXJzdDIgPT0gIignIiAmJiBsYXN0MiA9PSAiJykiICApIHsKCWFsbG93X29uZV9jaGFyPSJ5ZXMiOwoJYXRhZz1zdWJzdHIoYXRhZywzLGxlbmd0aChhdGFnKS00KTsKCWlmX2FscmVhZHkoKTsKCWlmICggYWxyZWFkeSA9PSAieWVzIiApIHsKCQlwcmludGYoIiVzIixhd29yZCk7CgkJcmV0dXJuOwoJCX0KCXByaW50ZigiJXMiLGZpcnN0Mik7CglmaW5kX3RhZzIoKTsKCWlmICggZG9uZSA9PSAieWVzIiApIHsgcHJpbnRmKCIlcyIsbGFzdDIpO3JldHVybjsgfQoJcHJpbnRmKCIlcyVzIixhdGFnLGxhc3QyKTsKCXJldHVybjsKCX0KaWYgKCBsYXN0MiA9PSAiLikiICkgewoJYXRhZz1zdWJzdHIoYXRhZywxLGxlbmd0aChhdGFnKS0yKTsKCWlmX2FscmVhZHkoKTsKCWlmICggYWxyZWFkeSA9PSAieWVzIiApIHsKCQlwcmludGYoIiVzIixhd29yZCk7CgkJcmV0dXJuOwoJCX0KCWZpbmRfdGFnMigpOwoJaWYgKCBkb25lID09ICJ5ZXMiICkgeyBwcmludGYoIiVzIixsYXN0Mik7cmV0dXJuOyB9CglwcmludGYoIiVzJXMiLGF0YWcsbGFzdDIpOwoJcmV0dXJuOwoJfQppZiAoIGxhc3QyID09ICIpLiIgKSB7CglhdGFnPXN1YnN0cihhdGFnLDEsbGVuZ3RoKGF0YWcpLTIpOwoJZmluZF90YWcyKCk7CglpZl9hbHJlYWR5KCk7CglpZiAoIGFscmVhZHkgPT0gInllcyIgKSB7CgkJcHJpbnRmKCIlcyIsYXdvcmQpOwoJCXJldHVybjsKCQl9CglpZiAoIGRvbmUgPT0gInllcyIgKSB7IHByaW50ZigiJXMiLGxhc3QyKTtyZXR1cm47IH0KCXByaW50ZigiJXMlcyIsYXRhZyxsYXN0Mik7CglyZXR1cm47Cgl9CmZpcnN0Nj1zdWJzdHIoYXRhZywxLDYpOwpsYXN0Nj1zdWJzdHIoYXRhZyxsZW5ndGgoYXRhZyktNSw2KTsKaWYgKCBsYXN0NiA9PSBhdGFnICkgewoJcHJpbnRmKCIlcyIsYXdvcmQpOwoJcmV0dXJuOwoJfQpsYXN0Nm9mNz1zdWJzdHIoYXRhZyxsZW5ndGgoYXRhZyktNiw2KTsKaWYgKCBmaXJzdDYgPT0gIiZxdW90OyIgJiYgbGFzdDZvZjcgPT0gIiZxdW90OyIgJiYgbGVuZ3RoKGF0YWcpID4gMTIgKSB7CglhbGxvd19vbmVfY2hhcj0ieWVzIjsKCWF0YWc9c3Vic3RyKGF0YWcsNyxsZW5ndGgoYXRhZyktMTMpOwoJaWZfYWxyZWFkeSgpOwoJaWYgKCBhbHJlYWR5ID09ICJ5ZXMiICkgewoJCXByaW50ZigiJXMiLGF3b3JkKTsKCQlyZXR1cm47CgkJfQoJcHJpbnRmKCIlcyIsZmlyc3Q2KTsKCWZpbmRfdGFnMigpOwoJaWYgKCBkb25lID09ICJ5ZXMiICkgeyBwcmludGYoIiZxdW90OyVzIixyaWdodGNoYXIpOyByZXR1cm47IH0KCXByaW50ZigiJXMmcXVvdDslcyIsYXRhZyxyaWdodGNoYXIpOwoJcmV0dXJuOwoJfQppZiAoIGZpcnN0NiA9PSAiJnF1b3Q7IiAmJiBsYXN0NiAhPSAiJnF1b3Q7IiApIHsKCWFsbG93X29uZV9jaGFyPSJ5ZXMiOwoJYXRhZz1zdWJzdHIoYXRhZyw3LGxlbmd0aChhdGFnKS02KTsKCWlmICggYXRhZyA9PSAiWyIgKSB7IHByaW50ZigiJnF1b3Q7JXMiLGF0YWcpOyByZXR1cm47IH0KCWlmICggYXRhZyA9PSAiLiIgKSB7IHByaW50ZigiJnF1b3Q7JXMiLGF0YWcpOyByZXR1cm47IH0KCWlmICggYXRhZyA9PSAiOiIgKSB7IHByaW50ZigiJnF1b3Q7JXMiLGF0YWcpOyByZXR1cm47IH0KCWlmICggYXRhZyA9PSAiYSIgKSB7IHByaW50ZigiJnF1b3Q7JXMiLGF0YWcpOyByZXR1cm47IH0KCWlmICggYXRhZyA9PSAiQSIgKSB7IHByaW50ZigiJnF1b3Q7JXMiLGF0YWcpOyByZXR1cm47IH0KCWlmICggYXRhZyA9PSAiZyIgKSB7IHByaW50ZigiJnF1b3Q7JXMiLGF0YWcpOyByZXR1cm47IH0KCWlmX2FscmVhZHkoKTsKCWlmICggYWxyZWFkeSA9PSAieWVzIiApIHsKCQlwcmludGYoIiZxdW90OyVzIixhdGFnKTsKCQlyZXR1cm47CgkJfQoJcHJpbnRmKCIlcyIsZmlyc3Q2KTsKCWZpbmRfdGFnMigpOwoJaWYgKCBkb25lID09ICJ5ZXMiICkgeyByZXR1cm47IH0KCXByaW50ZigiJXMiLGF0YWcpOwoJcmV0dXJuOwoJfQppZiAoIGxhc3Q2ID09ICImcXVvdDsiICYmIGZpcnN0NiA9PSAiJnF1b3Q7IiApIHsKCWFsbG93X29uZV9jaGFyPSJ5ZXMiOwoJYXRhZz1zdWJzdHIoYXRhZyw3LGxlbmd0aChhdGFnKS0xMik7CglpZl9hbHJlYWR5KCk7CglpZiAoIGFscmVhZHkgPT0gInllcyIgKSB7CgkJcHJpbnRmKCIlcyIsYXdvcmQpOwoJCXJldHVybjsKCQl9CglwcmludGYoIiVzIixmaXJzdDYpOwoJZmluZF90YWcyKCk7CglpZiAoIGRvbmUgPT0gInllcyIgKSB7IHByaW50ZigiJXMiLGxhc3Q2KTtyZXR1cm47IH0KCXByaW50ZigiJXMlcyIsYXRhZyxsYXN0Nik7CglyZXR1cm47Cgl9Cmxhc3Q2b2Y3PXN1YnN0cihhdGFnLGxlbmd0aChhdGFnKS02LDYpOwppZiAoIGxhc3Q2b2Y3ID09ICImcXVvdDsiICYmIGZpcnN0NiA9PSAiJnF1b3Q7IiApIHsKCWFsbG93X29uZV9jaGFyPSJ5ZXMiOwoJYXRhZz1zdWJzdHIoYXRhZyw3LGxlbmd0aChhdGFnKS0xMyk7CgkjcHJpbnRmKCJcbmF0YWc9JXMsYXdvcmQ9JXNcbiIsYXRhZyxhd29yZCk7CglpZl9hbHJlYWR5KCk7CglpZiAoIGFscmVhZHkgPT0gInllcyIgKSB7CgkJcHJpbnRmKCIlcyIsYXdvcmQpOwoJCXJldHVybjsKCQl9CglwcmludGYoIiVzIixmaXJzdDYpOwoJZmluZF90YWcyKCk7CglpZiAoIGRvbmUgPT0gInllcyIgKSB7IHByaW50ZigiJXMlcyIsbGFzdDZvZjcscmlnaHRjaGFyKTtyZXR1cm47IH0KCXByaW50ZigiJXMlcyVzIixhdGFnLGxhc3Q2b2Y3LHJpZ2h0Y2hhcik7CglyZXR1cm47Cgl9CnByaW50ZigiJXMiLGF3b3JkKTsKfQoKZnVuY3Rpb24gZmluZF90YWcyKCkgewoJZG9uZT0ibm8iOwoJIyBubyBibGFua3MgcHJlc2VudCBpbiBhIHRhZy4uLgoJbnRhZ3M9c3BsaXQoYXRhZyxibGF0YSwiWyAJXSIpOwoJaWYgKCBudGFncyA+IDEgKSB7IHJldHVybjsgfQoJaWYgCSggKCBhbGxvd19vbmVfY2hhciA9PSAibm8iICkgJiYgXAoJCSAgKCBpbmRleCgiISMkJSYnKCkrLC0uLzA6Oz0/QEFDSU5YXFxbXFxdXl9gYXRcXHtcXH1+IixhdGFnKSAhPTAgKSApIHsKCQlyZXR1cm47Cgl9CglpZiAoIHNraXBfd29yZFthdGFnXSA9PSAieWVzIiApIHsgcmV0dXJuOyB9CglpZiAoIHdhc3NldCA9PSAieWVzIiAmJiBsaW5lc2V0ID09IE5SICkgewoJd2Fzc2V0PSJubyI7CglzZWVfb3B0KCk7CglpZiAoIGRvbmVfb3B0ID09ICJ5ZXMiICkge3JldHVybjt9Cgl9CglpZiAoIHdhc3NldCA9PSAieWVzIiAmJiBsaW5lc2V0ICE9IE5SICkgewoJd2Fzc2V0PSJubyI7Cgl9CglpZiAoIGF0YWcgPT0gIjpzZXQiICkgewoJd2Fzc2V0PSJ5ZXMiOwoJbGluZXNldD1OUjsKCX0KCWlmICggdGFna2V5W2F0YWddID09ICJ5ZXMiICkgewoJCXdoaWNoPXRhZ3JlZlthdGFnXTsKCQlwdXRfaHJlZjIoKTsKCQlkb25lPSJ5ZXMiOwoJfQp9CgpmdW5jdGlvbiBmaW5kX3RhZzMoKSB7Cglkb25lPSJubyI7CgkjIG5vIGJsYW5rcyBwcmVzZW50IGluIGEgdGFnLi4uCgludGFncz1zcGxpdChidGFnLGJsYXRhLCJbIAldIik7CglpZiAoIG50YWdzID4gMSApIHsgcmV0dXJuOyB9CglpZiAJKCAoIGFsbG93X29uZV9jaGFyID09ICJubyIgKSAmJiBcCgkJICAoIGluZGV4KCIhIyQlJicoKSssLS4vMDo7PT9AQUNJTlhcXFtcXF1eX2BhdFxce1xcfX4iLGJ0YWcpICE9MCApICkgewoJICAJcmV0dXJuOwoJfQoJaWYgKCBza2lwX3dvcmRbYnRhZ10gPT0gInllcyIgKSB7IHJldHVybjsgfQoJaWYgKCB0YWdrZXlbYnRhZ10gPT0gInllcyIgKSB7CgkJd2hpY2g9dGFncmVmW2J0YWddOwoJCXB1dF9ocmVmMygpOwoJCWRvbmU9InllcyI7Cgl9Cn0KCmZ1bmN0aW9uIHB1dF9ocmVmKCkgewoJaWYgKCBwW2ldID09ICIiICkgeyByZXR1cm47IH0KCWlmICggd2hpY2ggPT0gRklMRU5BTUUgKSB7CgkJcHJpbnRmKCJ8PEEgSFJFRj1cIiMlc1wiPiVzPC9BPnwiLHBbaV0scFtpXSk7CgkJfQoJCWVsc2UgewoJCW56PXNwbGl0KHdoaWNoLHp6LCIuIik7CgkJaWYgKCB6elsyXSA9PSAidHh0IiB8fCB6elsxXSA9PSAidGFncyIgKSB7CgkJcHJpbnRmKCJ8PEEgSFJFRj1cIiVzLmh0bWwjJXNcIj4lczwvQT58Iix6elsxXSxwW2ldLHBbaV0pOwoJCX0KCQllbHNlIHsKCQlwcmludGYoInw8QSBIUkVGPVwiaW50cm8uaHRtbCMlc1wiPiVzPC9BPnwiLHBbaV0scFtpXSk7CgkJfQoJfQp9CgpmdW5jdGlvbiBwdXRfaHJlZjIoKSB7CglpZiAoIGF0YWcgPT0gIiIgKSB7IHJldHVybjsgfQoJaWYgKCB3aGljaCA9PSBGSUxFTkFNRSApIHsKCQlwcmludGYoIjxBIEhSRUY9XCIjJXNcIj4lczwvQT4iLGF0YWcsYXRhZyk7CgkJfQoJCWVsc2UgewoJCW56PXNwbGl0KHdoaWNoLHp6LCIuIik7CgkJaWYgKCB6elsyXSA9PSAidHh0IiB8fCB6elsxXSA9PSAidGFncyIgKSB7CgkJcHJpbnRmKCI8QSBIUkVGPVwiJXMuaHRtbCMlc1wiPiVzPC9BPiIsenpbMV0sYXRhZyxhdGFnKTsKCQl9CgkJZWxzZSB7CgkJcHJpbnRmKCI8QSBIUkVGPVwiaW50cm8uaHRtbCMlc1wiPiVzPC9BPiIsYXRhZyxhdGFnKTsKCQl9Cgl9Cn0KCmZ1bmN0aW9uIHB1dF9ocmVmMygpIHsKCWlmICggYnRhZyA9PSAiIiApIHsgcmV0dXJuOyB9CglpZiAoIHdoaWNoID09IEZJTEVOQU1FICkgewoJCXByaW50ZigiPEEgSFJFRj1cIiMlc1wiPiVzPC9BPiIsYnRhZyxidGFnMik7CgkJfQoJCWVsc2UgewoJCW56PXNwbGl0KHdoaWNoLHp6LCIuIik7CgkJaWYgKCB6elsyXSA9PSAidHh0IiB8fCB6elsxXSA9PSAidGFncyIgKSB7CgkJcHJpbnRmKCI8QSBIUkVGPVwiJXMuaHRtbCMlc1wiPiVzPC9BPiIsenpbMV0sYnRhZyxidGFnMik7CgkJfQoJCWVsc2UgewoJCXByaW50ZigiPEEgSFJFRj1cImludHJvLmh0bWwjJXNcIj4lczwvQT4iLGJ0YWcsYnRhZzIpOwoJCX0KCX0KfQoKZnVuY3Rpb24gcHV0X3RoaXMoKSB7CgludGFiPXNwbGl0KHRoaXMsdGEsIgkiKTsKCWZvciAoIG50YT0xIDsgbnRhIDw9IG50YWIgOyBudGErKyApIHsKCQlhdGE9dGFbbnRhXTsKCQlsYXRhPWxlbmd0aChhdGEpOwoJCWF3b3JkPSIiOwoJCWZvciAoIGlhdGE9MSA7IGlhdGEgPD1sYXRhIDsgaWF0YSsrICkgewoJCQlhY2hhcj1zdWJzdHIoYXRhLGlhdGEsMSk7CgkJCWlmICggYWNoYXIgIT0gIiAiICkgeyBhd29yZD1hd29yZCIiYWNoYXI7IH0KCQkJZWxzZSB7CgkJCQlpZiAoIGF3b3JkICE9ICIiICkgeyBhdGFnPWF3b3JkOwoJCQkJCXNlZV90YWcoKTsKCQkJCQlhd29yZD0iIjsKCQkJCQlwcmludGYoIiAiKTsgfQoJCQkJZWxzZQl7CgkJCQkJcHJpbnRmKCIgIik7CgkJCQkJfQoJCQl9CgkJfQoJCWlmICggYXdvcmQgIT0gIiIgKSB7IGF0YWc9YXdvcmQ7CgkJCQkJc2VlX3RhZygpOwoJCQkJCX0KCQlpZiAoIG50YSAhPSBudGFiICkgeyBwcmludGYoIgkiKTsgfQoJfQp9CgpmdW5jdGlvbiBpZl9hbHJlYWR5KCkgewoJYWxyZWFkeT0ibm8iOwoJaWYgICggbnBpcGUgPCAyICkgeyByZXR1cm47IH0KCWlmICAoIGF0YWcgPT0gIjphdSIgJiYgcFsyXSA9PSAiOmF1dG9jbWQiICkgeyBhbHJlYWR5PSJ5ZXMiO3JldHVybjsgfQoJZm9yICggbnBwPTIgOyBucHAgPD0gbnBpcGUgOyBucHA9bnBwKzIgKSB7CgkJaWYgCSggICggIChpbmRleChwW25wcF0sYXRhZykpICE9IDAgXAoJCQkgICAgICAmJiBsZW5ndGgocFtucHBdKSA+IGxlbmd0aChhdGFnKSBcCgkJCSAgICAgICYmIGxlbmd0aChhdGFnKSA+PSAxICBcCgkJCSAgICApIFwKCQkJICAgIHx8IChwW25wcF0gPT0gYXRhZykgXAoJCQkpIHsKCQkjIHByaW50ZigicD18JXN8LHRhZz18JXN8ICIscFtucHBdLGF0YWcpOwoJCWFscmVhZHk9InllcyI7IHJldHVybjsgfQoJfQp9CgpmdW5jdGlvbiBzZWVfb3B0KCkgewoJZG9uZV9vcHQ9Im5vIjsKCXN0YWc9YXRhZzsKCW5maWVsZHMgPSBzcGxpdChhdGFnLHRhZSwiPSIpOwoJaWYgKCBuZmllbGRzID4gMSApICB7CgkJYnRhZz0iJyJ0YWVbMV0iJyI7CgkJYnRhZzI9dGFlWzFdOwoJICAgIGZpbmRfdGFnMygpOwoJCWlmIChkb25lID09ICJ5ZXMiKSB7CgkJCWZvciAoIG50YWU9MiA7IG50YWUgPD0gbmZpZWxkcyA7IG50YWUrKyApIHsKCQkJCXByaW50ZigiPSVzIix0YWVbbnRhZV0pOwoJCQl9CgkJCWF0YWc9c3RhZzsKCQkJZG9uZV9vcHQ9InllcyI7CgkJCXJldHVybjsKCQl9CgkJYnRhZz10YWVbMV07CgkJYnRhZzI9dGFlWzFdOwoJICAgIGZpbmRfdGFnMygpOwoJCWlmICggZG9uZT09InllcyIgKSB7CgkJCWZvciAoIG50YWU9MiA7IG50YWUgPD0gbmZpZWxkcyA7IG50YWUrKyApIHsKCQkJCXByaW50ZigiPSVzIix0YWVbbnRhZV0pOwoJCQl9CgkJCWF0YWc9c3RhZzsKCQkJZG9uZV9vcHQ9InllcyI7CgkJCXJldHVybjsKCQl9Cgl9CgluZmllbGRzID0gc3BsaXQoYXRhZyx0YWUsIiZxdW90OyIpOwoJaWYgKCBuZmllbGRzID4gMSApICB7CgkJYnRhZz0iJyJ0YWVbMV0iJyI7CgkJYnRhZzI9dGFlWzFdOwoJICAgCWZpbmRfdGFnMygpOwoJCWlmIChkb25lID09ICJ5ZXMiKSB7CgkJCXByaW50ZigiJnF1b3Q7Iik7CgkJCWF0YWc9c3RhZzsKCQkJZG9uZV9vcHQ9InllcyI7CgkJCXJldHVybjsKCQl9CgkJYnRhZz10YWVbMV07CgkJYnRhZzI9dGFlWzFdOwoJICAgIGZpbmRfdGFnMygpOwoJCWlmIChkb25lID09ICJ5ZXMiKSB7CgkJCXByaW50ZigiJnF1b3Q7Iik7CgkJCWF0YWc9c3RhZzsKCQkJZG9uZV9vcHQ9InllcyI7CgkJCXJldHVybjsKCQl9Cgl9CglidGFnPSInInRhZVsxXSInIjsKCWJ0YWcyPXRhZVsxXTsKCWZpbmRfdGFnMygpOwoJaWYgKGRvbmUgPT0gInllcyIpIHsKCQlhdGFnPXN0YWc7CgkJZG9uZV9vcHQ9InllcyI7CgkJcmV0dXJuOwoJfQoJYnRhZz10YWVbMV07CglidGFnMj10YWVbMV07CglmaW5kX3RhZzMoKTsKCWlmIChkb25lID09ICJ5ZXMiKSB7CgkJYXRhZz1zdGFnOwoJCWRvbmVfb3B0PSJ5ZXMiOwoJCXJldHVybjsKCX0KCWF0YWc9c3RhZzsKfQo=