﻿{"id":45,"date":"2026-10-04T17:44:15","date_gmt":"2026-10-04T17:44:15","guid":{"rendered":"https:\/\/catventures.lol\/?page_id=45"},"modified":"2026-10-04T18:47:40","modified_gmt":"2026-10-04T18:47:40","slug":"my-treat","status":"publish","type":"page","link":"https:\/\/catventures.lol\/?page_id=45","title":{"rendered":"My Treat"},"content":{"rendered":"<style>\n#app, #app * { box-sizing: border-box; }\n#app {\n  height: calc(100dvh - 7.5rem);\n  min-height: 480px;\n  width: 100vw;\n  max-width: 100vw;\n  margin-left: calc(50% - 50vw);\n  display: flex;\n  flex-direction: column;\n  background: #24170f;\n  color: #3a2718;\n  font-family: \"Trebuchet MS\", \"Segoe UI\", sans-serif;\n}\n#stage {\n  position: relative;\n  flex: 1;\n  min-height: 0;\n}\ncanvas {\n  width: 100%;\n  height: 100%;\n  display: block;\n  background: #f3ddc4;\n  touch-action: none;\n}\n#overlay {\n  position: absolute;\n  inset: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: rgba(36, 23, 15, 0.48);\n  padding: 16px;\n}\n#overlay[hidden] { display: none !important; }\n.card {\n  width: min(460px, 100%);\n  background: #fffaf2;\n  border-radius: 22px;\n  padding: 16px 22px 20px;\n  box-shadow: 0 18px 50px rgba(40, 20, 8, 0.35);\n  text-align: center;\n}\n.card[hidden] { display: none !important; }\n.card h1 {\n  font-family: Georgia, \"Palatino Linotype\", serif;\n  font-size: 46px;\n  line-height: 1;\n  margin: 0 0 10px;\n  color: #6b3a1f;\n}\n.howto, .controls {\n  margin: 0 0 10px;\n  line-height: 1.45;\n  font-size: 16px;\n}\n.controls { color: #6d5340; font-size: 14px; }\nbutton.go {\n  margin-top: 6px;\n  background: #e07a32;\n  color: #fffaf2;\n  border: 0;\n  border-radius: 999px;\n  padding: 12px 32px;\n  font: 700 18px\/1 \"Trebuchet MS\", \"Segoe UI\", sans-serif;\n  cursor: pointer;\n}\nbutton.go:hover { background: #c86422; }\nbutton.go:focus-visible { outline: 3px solid #6b3a1f; outline-offset: 2px; }\n.hero-cat {\n  width: 132px;\n  height: 150px;\n  object-fit: contain;\n  filter: drop-shadow(0 8px 10px rgba(80, 40, 10, 0.25));\n}\n#pads {\n  display: grid;\n  grid-template-columns: 1fr 1fr 1.25fr;\n  gap: 8px;\n  padding: 8px 10px calc(10px + env(safe-area-inset-bottom));\n  background: #2a1b12;\n}\n#pads[hidden] { display: none !important; }\n#pads button {\n  height: 64px;\n  border: 0;\n  border-radius: 16px;\n  background: #f0d7b4;\n  color: #3a2718;\n  font: 700 18px\/1 \"Trebuchet MS\", \"Segoe UI\", sans-serif;\n  touch-action: none;\n}\n#pads button:active { background: #e07a32; color: #fffaf2; }\n<\/style>\n<div id=\"app\">\n<div id=\"stage\">\n    <canvas id=\"game\" width=\"960\" height=\"540\"><\/canvas><\/p>\n<div id=\"overlay\">\n<div class=\"card\" id=\"start-card\">\n        <img decoding=\"async\" class=\"hero-cat\" src=\"https:\/\/catventures.lol\/wp-content\/uploads\/2026\/10\/cat.png\" alt=\"\"><\/p>\n<h1>My Treat<\/h1>\n<p class=\"howto\">Find the duck. Jump the door and the shelf, knock the treat spinner down, then jump on it. Treats fly out and the other cats run in to eat. That clears the level. Pick up hot sauce packets, sushi toys, and chicken bucket toys. Your collection carries to the next room.<\/p>\n<p class=\"controls\">Arrows or WASD to move. Space, W, or Up to jump. Sun beams put the cat to sleep, so hop over them.<\/p>\n<p>        <button type=\"button\" class=\"go\" id=\"start-btn\">Play<\/button>\n      <\/div>\n<div class=\"card\" id=\"win-card\" hidden>\n        <img decoding=\"async\" class=\"hero-cat\" src=\"https:\/\/catventures.lol\/wp-content\/uploads\/2026\/10\/cat.png\" alt=\"\"><\/p>\n<h1>All gone<\/h1>\n<p class=\"howto\">The cats finished every level.<\/p>\n<p>        <button type=\"button\" class=\"go\" id=\"restart-btn\">Play again<\/button>\n      <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div id=\"pads\" hidden>\n    <button type=\"button\" id=\"pad-left\" tabindex=\"-1\" aria-label=\"Move left\">Left<\/button><br \/>\n    <button type=\"button\" id=\"pad-right\" tabindex=\"-1\" aria-label=\"Move right\">Right<\/button><br \/>\n    <button type=\"button\" id=\"pad-jump\" tabindex=\"-1\" aria-label=\"Jump\">Jump<\/button>\n  <\/div>\n<\/div>\n<p><script>\n(function () {\n  var el = document.createElement(\"script\");\n  el.text = atob(\"LyogTXkgVHJlYXQgdjQuIFBob3RvLXBhcnQgY2F0IG1vZGVscy4gKi8KKGZ1bmN0aW9uICgpIHsKICBjb25zdCBWSUVXX1cgPSA5NjA7CiAgY29uc3QgVklFV19IID0gNTQwOwogIGNvbnN0IEZMT09SX1kgPSA0Nzg7CiAgY29uc3QgR1JBViA9IDE4NTA7CiAgY29uc3QgSlVNUF9WID0gLTc2MDsKICBjb25zdCBNQVhfU1BFRUQgPSAzMDA7CiAgY29uc3QgQUNDRUwgPSAyNjAwOwogIGNvbnN0IENPWU9URSA9IDAuMTI7CiAgY29uc3QgQlVGRkVSID0gMC4xNDsKICBjb25zdCBQVyA9IDQyOwogIGNvbnN0IFBIID0gMzY7CiAgY29uc3QgU0xFRVBfTUFYID0gMi40NTsKICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2FtZSIpOwogIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3ZlcmxheSIpOwogIGNvbnN0IHN0YXJ0Q2FyZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdGFydC1jYXJkIik7CiAgY29uc3Qgd2luQ2FyZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3aW4tY2FyZCIpOwogIGNvbnN0IHBhZHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFkcyIpOwoKICBjb25zdCBwaG90b1NyYyA9IHsKICAgIGdyZXk6ICJodHRwczovL2NhdHZlbnR1cmVzLmxvbC93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8xMC9jYXQucG5nIiwKICAgIHN0b3J5OiAiaHR0cHM6Ly9jYXR2ZW50dXJlcy5sb2wvd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDkvc3RvcnkxLWltZzEucG5nIiwKICAgIGhlcm86ICJodHRwczovL2NhdHZlbnR1cmVzLmxvbC93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wOS9Ib21lcGFnZS1IZXJvLUlsbHVzdHJhdGlvbi5wbmciLAogICAgb3JhbmdlOiAiaHR0cHM6Ly9jYXR2ZW50dXJlcy5sb2wvd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDkvb3JhbmdlLnBuZyIKICB9OwogIGNvbnN0IHBob3RvcyA9IHt9OwogIGNvbnN0IHBhcnRDYW52YXMgPSB7fTsKICAvLyBzb3VyY2UgcmVjdGFuZ2xlczogaW1hZ2Uga2V5LCBzeCwgc3ksIHN3LCBzaCwgbWFzay4gQ3JvcHBlZCBmcm9tIHRoZSBsaXZlIHBob3Rvcy4KICBjb25zdCBQQVJUUyA9IHsKICAgIGdoZWFkOiBbImdyZXkiLCAxOCwgMjQsIDI1MCwgMjMwLCAiZmx1ZmYiXSwKICAgIGdib2R5OiBbImdyZXkiLCA3OCwgMzEyLCAxODAsIDE0NSwgImZsdWZmIl0sCiAgICBnbGVnOiBbImdyZXkiLCAxNjYsIDQ1MiwgNDYsIDc4LCAiZmx1ZmYiXSwKICAgIGd0YWlsOiBbImdyZXkiLCAzMDgsIDI5MiwgOTYsIDExMiwgImZsdWZmIl0sCiAgICBvaGVhZDogWyJvcmFuZ2UiLCAxOTAsIDE4MCwgMzYwLCAzNDAsICJvcmFuZ2UiXSwKICAgIG9ib2R5OiBbInN0b3J5IiwgNTgwLCA0NDgsIDEwMCwgODAsICJvcmFuZ2UiXSwKICAgIG9sZWc6IFsic3RvcnkiLCA4MDUsIDYxOCwgNDgsIDUyLCAib3JhbmdlIl0sCiAgICBvdGFpbDogWyJzdG9yeSIsIDUzMCwgMzEyLCA3MCwgMTIwLCAib3JhbmdlIl0sCiAgICBiaGVhZDogWyJoZXJvIiwgNzg1LCAzMjUsIDIwMCwgMTkwLCAiaGF0Il0sCiAgICBiYm9keTogWyJoZXJvIiwgNzg1LCA1MjUsIDE0MCwgMTIwLCAiZGFyayJdLAogICAgYmxlZzogWyJoZXJvIiwgODg4LCA2NDgsIDUyLCAxMDgsICJkYXJrIl0sCiAgICBidGFpbDogWyJoZXJvIiwgODAwLCA1NDUsIDcwLCA2MCwgImRhcmsiXQogIH07CgogIGZ1bmN0aW9uIGtlZXBQaXhlbChtb2RlLCByLCBnLCBiKSB7CiAgICBpZiAobW9kZSA9PT0gImZsdWZmIikgewogICAgICBjb25zdCBza3kgPSBiID4gciArIDE4ICYmIGIgPiBnICsgNSAmJiBiID4gOTA7CiAgICAgIGNvbnN0IGxlYWYgPSBnID4gciArIDEyICYmIGcgPiA3MCAmJiBiID4gNDA7CiAgICAgIHJldHVybiAhc2t5ICYmICFsZWFmOwogICAgfQogICAgaWYgKG1vZGUgPT09ICJvcmFuZ2UiKSB7CiAgICAgIGNvbnN0IGZ1ciA9IHIgPiAxNTUgJiYgciA+IGcgKyAyMiAmJiByID4gYiArIDQwOwogICAgICBjb25zdCB3aGl0ZSA9IHIgPiAyMDUgJiYgZyA+IDE4MCAmJiBiID4gMTU1ICYmIE1hdGguYWJzKHIgLSBnKSA8IDQyOwogICAgICBjb25zdCBleWUgPSByID4gMTcwICYmIGcgPiAxNDUgJiYgYiA+IDMwICYmIGcgPiBiICsgMTIgJiYgciA+IGIgKyAxMiAmJiBiIDwgMjIwOwogICAgICByZXR1cm4gZnVyIHx8IHdoaXRlIHx8IGV5ZTsKICAgIH0KICAgIGlmIChtb2RlID09PSAiZGFyayIgfHwgbW9kZSA9PT0gImhhdCIpIHsKICAgICAgY29uc3QgZGFyayA9IHIgPCA4MiAmJiBnIDwgODIgJiYgYiA8IDk4OwogICAgICBjb25zdCB3aGl0ZSA9IHIgPiAyMDUgJiYgZyA+IDE4OCAmJiBiID4gMTcyOwogICAgICBjb25zdCByZWQgPSByID4gMTQwICYmIHIgPiBnICsgNDggJiYgciA+IGIgKyA0OCAmJiBnIDwgMTA1OwogICAgICBjb25zdCBicm93biA9IG1vZGUgPT09ICJoYXQiICYmIHIgPiA3MCAmJiByIDwgMjAwICYmIGcgPiAzMCAmJiBnIDwgMTUwICYmIGIgPCAxMDAgJiYgciA+IGcgKyA4ICYmIHIgPiBiICsgMTg7CiAgICAgIHJldHVybiBkYXJrIHx8IHdoaXRlIHx8IHJlZCB8fCBicm93bjsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgZnVuY3Rpb24gYnVpbGRQYXJ0cygpIHsKICAgIE9iamVjdC5rZXlzKFBBUlRTKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7CiAgICAgIGNvbnN0IHNwZWMgPSBQQVJUU1tuYW1lXTsKICAgICAgY29uc3QgaW1nID0gcGhvdG9zW3NwZWNbMF1dOwogICAgICBpZiAoIWltZyB8fCAhaW1nLm5hdHVyYWxXaWR0aCkgcmV0dXJuOwogICAgICBjb25zdCBzeCA9IHNwZWNbMV07CiAgICAgIGNvbnN0IHN5ID0gc3BlY1syXTsKICAgICAgY29uc3Qgc3cgPSBzcGVjWzNdOwogICAgICBjb25zdCBzaCA9IHNwZWNbNF07CiAgICAgIGNvbnN0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKICAgICAgYy53aWR0aCA9IHN3OwogICAgICBjLmhlaWdodCA9IHNoOwogICAgICBjb25zdCBnID0gYy5nZXRDb250ZXh0KCIyZCIpOwogICAgICBnLmRyYXdJbWFnZShpbWcsIHN4LCBzeSwgc3csIHNoLCAwLCAwLCBzdywgc2gpOwogICAgICBjb25zdCBpbWFnZURhdGEgPSBnLmdldEltYWdlRGF0YSgwLCAwLCBzdywgc2gpOwogICAgICBjb25zdCBweCA9IGltYWdlRGF0YS5kYXRhOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHB4Lmxlbmd0aDsgaSArPSA0KSB7CiAgICAgICAgaWYgKCFrZWVwUGl4ZWwoc3BlY1s1XSwgcHhbaV0sIHB4W2kgKyAxXSwgcHhbaSArIDJdKSkgcHhbaSArIDNdID0gMDsKICAgICAgfQogICAgICBnLnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApOwogICAgICBnLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICJkZXN0aW5hdGlvbi1pbiI7CiAgICAgIGcuZmlsbFN0eWxlID0gIiNmZmZmZmYiOwogICAgICBnLmJlZ2luUGF0aCgpOwogICAgICBnLmVsbGlwc2Uoc3cgLyAyLCBzaCAvIDIsIE1hdGgubWF4KDEsIHN3IC8gMiAtIDEpLCBNYXRoLm1heCgxLCBzaCAvIDIgLSAxKSwgMCwgMCwgTWF0aC5QSSAqIDIpOwogICAgICBnLmZpbGwoKTsKICAgICAgcGFydENhbnZhc1tuYW1lXSA9IGM7CiAgICB9KTsKICB9CgogIGxldCBwaG90b3NMb2FkZWQgPSAwOwogIFsiZ3JleSIsICJzdG9yeSIsICJoZXJvIiwgIm9yYW5nZSJdLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7CiAgICBmdW5jdGlvbiBkb25lKCkgewogICAgICBwaG90b3NMb2FkZWQgKz0gMTsKICAgICAgaWYgKHBob3Rvc0xvYWRlZCA9PT0gNCkgYnVpbGRQYXJ0cygpOwogICAgfQogICAgaW1nLm9ubG9hZCA9IGRvbmU7CiAgICBpbWcub25lcnJvciA9IGRvbmU7CiAgICBpbWcuc3JjID0gcGhvdG9TcmNba2V5XTsKICAgIHBob3Rvc1trZXldID0gaW1nOwogIH0pOwoKICBjb25zdCBMRVZFTFMgPSBbCiAgICB7CiAgICAgIG5hbWU6ICJUaGUgTGl2aW5nIFJvb20iLAogICAgICB3aWR0aDogMjEwMCwKICAgICAgc3Bhd246IDE3MCwKICAgICAgd2FsbFRvcDogIiNmN2U0YzgiLAogICAgICB3YWxsQm90OiAiI2Q1ZTZmMiIsCiAgICAgIGZsb29yOiAiI2M0ODk1NSIsCiAgICAgIHdhaW5zY290OiAiI2YzZDdiNCIsCiAgICAgIGR1Y2s6IHsgeDogMjUwLCB5OiAzOTAsIHc6IDE2MCwgaDogOTIsIGF4OiA0MzAsIGF5OiA0NDYsIHNwb3Q6ICJjaGFpciIgfSwKICAgICAgcGxhdGZvcm1zOiBbCiAgICAgICAgeyB4OiA1MjAsIHk6IDM1OCwgdzogMTYwLCBoOiAxNiwga2luZDogImRvb3IiIH0sCiAgICAgICAgeyB4OiA3NDUsIHk6IDI0OCwgdzogMjkwLCBoOiAxNiwga2luZDogInNoZWxmIiB9LAogICAgICAgIHsgeDogMTEwMCwgeTogMzUwLCB3OiAyNTAsIGg6IDE2LCBraW5kOiAid2luZG93IiB9LAogICAgICAgIHsgeDogMTUwMCwgeTogMzkyLCB3OiAyMTAsIGg6IDE0LCBraW5kOiAidGFibGUiIH0KICAgICAgXSwKICAgICAgc29saWRzOiBbCiAgICAgICAgeyB4OiAyNzAsIHk6IDQyNCwgdzogMTI4LCBoOiA1NCwga2luZDogImFybWNoYWlyIiB9CiAgICAgIF0sCiAgICAgIHJ1Z3M6IFt7IHg6IDQwLCB3OiAyODAgfSwgeyB4OiAxMDAwLCB3OiA0MjAgfV0sCiAgICAgIGJlYW1zOiBbeyB4OiAxMjIwLCB3OiAxMTAgfV0sCiAgICAgIHBpY2t1cHM6IFsKICAgICAgICB7IHR5cGU6ICJob3RzYXVjZSIsIHg6IDk4MCwgeTogNDQ2IH0sCiAgICAgICAgeyB0eXBlOiAic3VzaGkiLCB4OiAxNTgwLCB5OiAzNjAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICBuYW1lOiAiVGhlIFN1bm55IEhhbGwiLAogICAgICB3aWR0aDogMjIwMCwKICAgICAgc3Bhd246IDExMCwKICAgICAgd2FsbFRvcDogIiNlN2VlZjYiLAogICAgICB3YWxsQm90OiAiI2Y2ZTdjZiIsCiAgICAgIGZsb29yOiAiI2I5ODM1OCIsCiAgICAgIHdhaW5zY290OiAiI2VmZTBjYyIsCiAgICAgIGR1Y2s6IHsgeDogMTkwLCB5OiAzMDAsIHc6IDI0MCwgaDogNjQsIGF4OiAzMTAsIGF5OiAzMzIsIHNwb3Q6ICJ3aW5kb3ciIH0sCiAgICAgIHBsYXRmb3JtczogWwogICAgICAgIHsgeDogMTcwLCB5OiAzNTAsIHc6IDI4MCwgaDogMTYsIGtpbmQ6ICJ3aW5kb3ciIH0sCiAgICAgICAgeyB4OiA2NDAsIHk6IDM1NiwgdzogMTYwLCBoOiAxNiwga2luZDogImRvb3IiIH0sCiAgICAgICAgeyB4OiA4NzAsIHk6IDI0NiwgdzogMjgwLCBoOiAxNiwga2luZDogInNoZWxmIiB9LAogICAgICAgIHsgeDogMTMyMCwgeTogMzYwLCB3OiAyMjAsIGg6IDE2LCBraW5kOiAid2luZG93IiB9LAogICAgICAgIHsgeDogMTcwMCwgeTogNDAwLCB3OiAxODAsIGg6IDE0LCBraW5kOiAidGFibGUiIH0KICAgICAgXSwKICAgICAgc29saWRzOiBbCiAgICAgICAgeyB4OiAxMjgwLCB5OiA0MjYsIHc6IDE1MCwgaDogNTIsIGtpbmQ6ICJiZW5jaCIgfQogICAgICBdLAogICAgICBydWdzOiBbeyB4OiA1NjAsIHc6IDcwMCB9XSwKICAgICAgYmVhbXM6IFt7IHg6IDQ5MCwgdzogMTAwIH0sIHsgeDogMTEwMCwgdzogMTIwIH0sIHsgeDogMTU2MCwgdzogOTAgfV0sCiAgICAgIHBpY2t1cHM6IFsKICAgICAgICB7IHR5cGU6ICJjaGlja2VuIiwgeDogOTgwLCB5OiA0NDYgfSwKICAgICAgICB7IHR5cGU6ICJob3RzYXVjZSIsIHg6IDE3NjAsIHk6IDM2OCB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJUaGUgU3R1ZHkiLAogICAgICB3aWR0aDogMjMwMCwKICAgICAgc3Bhd246IDgwLAogICAgICB3YWxsVG9wOiAiI2YzZGNjNCIsCiAgICAgIHdhbGxCb3Q6ICIjZTdkM2I0IiwKICAgICAgZmxvb3I6ICIjYTg2ZTQzIiwKICAgICAgd2FpbnNjb3Q6ICIjZWRkOWI4IiwKICAgICAgZHVjazogeyB4OiAxMzAsIHk6IDQwOCwgdzogMjAwLCBoOiA3NCwgYXg6IDIyMCwgYXk6IDQ1Miwgc3BvdDogInRhYmxlIiB9LAogICAgICBwbGF0Zm9ybXM6IFsKICAgICAgICB7IHg6IDExMCwgeTogMzg2LCB3OiAyNTAsIGg6IDE0LCBraW5kOiAidGFibGUiIH0sCiAgICAgICAgeyB4OiA1NjAsIHk6IDM0OCwgdzogMTYwLCBoOiAxNiwga2luZDogImRvb3IiIH0sCiAgICAgICAgeyB4OiA3OTAsIHk6IDIzOCwgdzogMjgwLCBoOiAxNiwga2luZDogInNoZWxmIiB9LAogICAgICAgIHsgeDogMTI0MCwgeTogMzUwLCB3OiAyMzAsIGg6IDE2LCBraW5kOiAid2luZG93IiB9LAogICAgICAgIHsgeDogMTY0MCwgeTogMzkwLCB3OiAyMDAsIGg6IDE0LCBraW5kOiAiYm9va3MiIH0KICAgICAgXSwKICAgICAgc29saWRzOiBbCiAgICAgICAgeyB4OiA0MzAsIHk6IDQxOCwgdzogOTYsIGg6IDYwLCBraW5kOiAiY2hhaXIiIH0KICAgICAgXSwKICAgICAgcnVnczogW3sgeDogODAsIHc6IDM0MCB9LCB7IHg6IDE1MDAsIHc6IDM2MCB9XSwKICAgICAgYmVhbXM6IFt7IHg6IDEwODAsIHc6IDEwMCB9XSwKICAgICAgcGlja3VwczogWwogICAgICAgIHsgdHlwZTogInN1c2hpIiwgeDogMTcyMCwgeTogMzU4IH0sCiAgICAgICAgeyB0eXBlOiAiY2hpY2tlbiIsIHg6IDk4MCwgeTogNDQ2IH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgbmFtZTogIlRoZSBLaXRjaGVuIiwKICAgICAgd2lkdGg6IDIzNTAsCiAgICAgIHNwYXduOiA3MCwKICAgICAgd2FsbFRvcDogIiNmNmVmZTQiLAogICAgICB3YWxsQm90OiAiI2U3ZDhjNCIsCiAgICAgIGZsb29yOiAiI2M0YTA3YSIsCiAgICAgIHdhaW5zY290OiAiI2YzZTZkNCIsCiAgICAgIGR1Y2s6IHsgeDogMTQwLCB5OiA0MTAsIHc6IDExMCwgaDogNjgsIGF4OiAxOTAsIGF5OiA0NDgsIHNwb3Q6ICJmcmlkZ2UiIH0sCiAgICAgIHBsYXRmb3JtczogWwogICAgICAgIHsgeDogNTAwLCB5OiAzNjAsIHc6IDIxMCwgaDogMTQsIGtpbmQ6ICJjb3VudGVyIiB9LAogICAgICAgIHsgeDogODAwLCB5OiAzMzAsIHc6IDE1MCwgaDogMTYsIGtpbmQ6ICJkb29yIiB9LAogICAgICAgIHsgeDogMTA0MCwgeTogMjE0LCB3OiAyODAsIGg6IDE2LCBraW5kOiAic2hlbGYiIH0sCiAgICAgICAgeyB4OiAxNDYwLCB5OiAzNTIsIHc6IDIzMCwgaDogMTYsIGtpbmQ6ICJ3aW5kb3ciIH0sCiAgICAgICAgeyB4OiAxODYwLCB5OiAzOTYsIHc6IDE4MCwgaDogMTQsIGtpbmQ6ICJ0YWJsZSIgfQogICAgICBdLAogICAgICBzb2xpZHM6IFsKICAgICAgICB7IHg6IDI1MCwgeTogMzkyLCB3OiAxMTgsIGg6IDg2LCBraW5kOiAiZnJpZGdlIiB9CiAgICAgIF0sCiAgICAgIHJ1Z3M6IFt7IHg6IDQwLCB3OiAyMDAgfSwgeyB4OiAxNTAwLCB3OiAzMjAgfV0sCiAgICAgIGJlYW1zOiBbeyB4OiAxMjgwLCB3OiAxMTAgfV0sCiAgICAgIHBpY2t1cHM6IFsKICAgICAgICB7IHR5cGU6ICJob3RzYXVjZSIsIHg6IDU2MCwgeTogMzI4IH0sCiAgICAgICAgeyB0eXBlOiAic3VzaGkiLCB4OiAxNjgwLCB5OiA0NDYgfSwKICAgICAgICB7IHR5cGU6ICJjaGlja2VuIiwgeDogMTkyMCwgeTogMzY0IH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgbmFtZTogIlRoZSBCZWRyb29tIiwKICAgICAgd2lkdGg6IDI0NTAsCiAgICAgIHNwYXduOiA4MCwKICAgICAgd2FsbFRvcDogIiNlZmU0ZjIiLAogICAgICB3YWxsQm90OiAiI2Y2ZTZkOCIsCiAgICAgIGZsb29yOiAiI2E5Nzg1OCIsCiAgICAgIHdhaW5zY290OiAiI2YwZGRkMCIsCiAgICAgIGR1Y2s6IHsgeDogMTg2MCwgeTogNDIwLCB3OiAxNDAsIGg6IDU4LCBheDogMTk0MCwgYXk6IDQ1MCwgc3BvdDogImJlZCIgfSwKICAgICAgcGxhdGZvcm1zOiBbCiAgICAgICAgeyB4OiAxODAsIHk6IDM4OCwgdzogMTUwLCBoOiAxNCwga2luZDogInRhYmxlIiB9LAogICAgICAgIHsgeDogNDYwLCB5OiAzMzgsIHc6IDE1NSwgaDogMTYsIGtpbmQ6ICJkb29yIiB9LAogICAgICAgIHsgeDogNzIwLCB5OiAyMjAsIHc6IDI3MCwgaDogMTYsIGtpbmQ6ICJzaGVsZiIgfSwKICAgICAgICB7IHg6IDExMjAsIHk6IDM0OCwgdzogMjIwLCBoOiAxNiwga2luZDogIndpbmRvdyIgfSwKICAgICAgICB7IHg6IDE0ODAsIHk6IDM4NiwgdzogMjAwLCBoOiAxNCwga2luZDogImJvb2tzIiB9CiAgICAgIF0sCiAgICAgIHNvbGlkczogWwogICAgICAgIHsgeDogMjAyMCwgeTogNDE2LCB3OiAzMDAsIGg6IDYyLCBraW5kOiAiYmVkIiB9CiAgICAgIF0sCiAgICAgIHJ1Z3M6IFt7IHg6IDcwLCB3OiAyNjAgfSwgeyB4OiAxNjgwLCB3OiAyODAgfV0sCiAgICAgIGJlYW1zOiBbeyB4OiA5ODAsIHc6IDkwIH0sIHsgeDogMTcyMCwgdzogMTEwIH1dLAogICAgICBwaWNrdXBzOiBbCiAgICAgICAgeyB0eXBlOiAic3VzaGkiLCB4OiAxMzIwLCB5OiA0NDYgfSwKICAgICAgICB7IHR5cGU6ICJjaGlja2VuIiwgeDogMTU2MCwgeTogMzU0IH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgbmFtZTogIlRoZSBTdW5yb29tIiwKICAgICAgd2lkdGg6IDI1NTAsCiAgICAgIHNwYXduOiA5MCwKICAgICAgd2FsbFRvcDogIiNlN2Y0ZWEiLAogICAgICB3YWxsQm90OiAiI2ZmZjFkMiIsCiAgICAgIGZsb29yOiAiI2QyYjQ4YSIsCiAgICAgIHdhaW5zY290OiAiI2Y3ZjNlNCIsCiAgICAgIGR1Y2s6IHsgeDogMjE2MCwgeTogNDAwLCB3OiAxMjAsIGg6IDc4LCBheDogMjIyMCwgYXk6IDQ0Miwgc3BvdDogInBsYW50IiB9LAogICAgICBwbGF0Zm9ybXM6IFsKICAgICAgICB7IHg6IDIwMCwgeTogMzc2LCB3OiAxNzAsIGg6IDE0LCBraW5kOiAidGFibGUiIH0sCiAgICAgICAgeyB4OiA1MDAsIHk6IDMzNiwgdzogMTUwLCBoOiAxNiwga2luZDogImRvb3IiIH0sCiAgICAgICAgeyB4OiA3NjAsIHk6IDIxNiwgdzogMjcwLCBoOiAxNiwga2luZDogInNoZWxmIiB9LAogICAgICAgIHsgeDogMTE2MCwgeTogMzQwLCB3OiAyNDAsIGg6IDE2LCBraW5kOiAid2luZG93IiB9LAogICAgICAgIHsgeDogMTU2MCwgeTogMzg4LCB3OiAxNzAsIGg6IDE0LCBraW5kOiAidGFibGUiIH0sCiAgICAgICAgeyB4OiAxODYwLCB5OiAzMjgsIHc6IDE4MCwgaDogMTYsIGtpbmQ6ICJ3aW5kb3ciIH0KICAgICAgXSwKICAgICAgc29saWRzOiBbCiAgICAgICAgeyB4OiAyMzAwLCB5OiA0MDQsIHc6IDEwMCwgaDogNzQsIGtpbmQ6ICJwbGFudCIgfQogICAgICBdLAogICAgICBydWdzOiBbeyB4OiA4MCwgdzogMjIwIH0sIHsgeDogMTIwMCwgdzogMjYwIH1dLAogICAgICBiZWFtczogW3sgeDogNDIwLCB3OiA3MCB9LCB7IHg6IDEwNDAsIHc6IDEwMCB9LCB7IHg6IDE0NjAsIHc6IDkwIH0sIHsgeDogMjA2MCwgdzogODAgfV0sCiAgICAgIHBpY2t1cHM6IFsKICAgICAgICB7IHR5cGU6ICJob3RzYXVjZSIsIHg6IDkwMCwgeTogNDQ2IH0sCiAgICAgICAgeyB0eXBlOiAiY2hpY2tlbiIsIHg6IDE2MjAsIHk6IDM1NiB9LAogICAgICAgIHsgdHlwZTogInN1c2hpIiwgeDogMTc0MCwgeTogNDQ2IH0KICAgICAgXQogICAgfQogIF07CgogIGNvbnN0IGhlbGQgPSB7IGxlZnQ6IGZhbHNlLCByaWdodDogZmFsc2UsIGp1bXA6IGZhbHNlIH07CiAgbGV0IGp1bXBRdWV1ZWQgPSBmYWxzZTsKICBsZXQgbW9kZSA9ICJzdGFydCI7CiAgbGV0IGxldmVsSW5kZXggPSAwOwogIGxldCBsZXZlbCA9IExFVkVMU1swXTsKICBsZXQgcGxhdGZvcm1zID0gW107CiAgbGV0IHNvbGlkcyA9IFtdOwogIGxldCBjYW1YID0gMDsKICBsZXQgYmVhdCA9ICJzZWVrIjsKICBsZXQgZHVja0ZvdW5kID0gZmFsc2U7CiAgbGV0IHNwaW5uZXIgPSBudWxsOwogIGxldCB0cmVhdHMgPSBbXTsKICBsZXQgZ3Vlc3RzID0gW107CiAgbGV0IHBhcnRpY2xlcyA9IFtdOwogIGxldCBmZWFzdFRpbWUgPSAwOwogIGxldCBjbGVhclRpbWUgPSAwOwogIGxldCBmb3VuZEZsYXNoID0gMDsKICBsZXQgbGV2ZWxGbGFzaCA9IDA7CiAgbGV0IGNsb2NrID0gMDsKICBsZXQgY2FuQ3V0ID0gZmFsc2U7CiAgbGV0IGNveW90ZSA9IENPWU9URTsKICBsZXQganVtcEJ1ZmZlciA9IDA7CiAgbGV0IG9uR3JvdW5kID0gZmFsc2U7CiAgbGV0IGdyb3VuZFJlZiA9IG51bGw7CiAgbGV0IGZhY2luZyA9IDE7CiAgbGV0IHJ1blBoYXNlID0gMDsKICBsZXQgYXVkaW9DdHggPSBudWxsOwogIGxldCBhc2xlZXAgPSAwOwogIGxldCB3YWtlR3JhY2UgPSAwOwogIGxldCBzcXVhc2ggPSAwOwogIGxldCBzcGl0ID0gMDsKICBsZXQgc25vcmUgPSAwOwogIGxldCBwaWNrdXBzID0gW107CiAgbGV0IHBvcHVwID0gbnVsbDsKICBjb25zdCBiYWcgPSB7IGhvdHNhdWNlOiAwLCBzdXNoaTogMCwgY2hpY2tlbjogMCB9OwogIGNvbnN0IElURU1fTkFNRVMgPSB7CiAgICBob3RzYXVjZTogIkhvdCBzYXVjZSBwYWNrZXQiLAogICAgc3VzaGk6ICJMaXR0bGUgY2F0IHRveSBzdXNoaSIsCiAgICBjaGlja2VuOiAiTGl0dGxlIGNhdCB0b3kgY2hpY2tlbiBpbiBhIGJ1Y2tldCIKICB9OwoKICBjb25zdCBwbGF5ZXIgPSB7IHg6IDQ4LCB5OiBGTE9PUl9ZIC0gUEgsIHc6IFBXLCBoOiBQSCwgdng6IDAsIHZ5OiAwIH07CgogIGZ1bmN0aW9uIGNsYW1wKHYsIGEsIGIpIHsgcmV0dXJuIE1hdGgubWF4KGEsIE1hdGgubWluKGIsIHYpKTsgfQoKICBmdW5jdGlvbiBvdmVybGFwKGEsIGIpIHsKICAgIHJldHVybiBhLnggPCBiLnggKyBiLncgJiYgYS54ICsgYS53ID4gYi54ICYmIGEueSA8IGIueSArIGIuaCAmJiBhLnkgKyBhLmggPiBiLnk7CiAgfQoKICBmdW5jdGlvbiBiZWVwKGZyZXEsIGR1ciwgdHlwZSwgZ2FpbikgewogICAgaWYgKCFhdWRpb0N0eCkgcmV0dXJuOwogICAgY29uc3QgbyA9IGF1ZGlvQ3R4LmNyZWF0ZU9zY2lsbGF0b3IoKTsKICAgIGNvbnN0IGcgPSBhdWRpb0N0eC5jcmVhdGVHYWluKCk7CiAgICBvLnR5cGUgPSB0eXBlIHx8ICJzaW5lIjsKICAgIG8uZnJlcXVlbmN5LnZhbHVlID0gZnJlcTsKICAgIGcuZ2Fpbi52YWx1ZSA9IGdhaW4gfHwgMC4wNDsKICAgIG8uY29ubmVjdChnKTsKICAgIGcuY29ubmVjdChhdWRpb0N0eC5kZXN0aW5hdGlvbik7CiAgICBvLnN0YXJ0KCk7CiAgICBnLmdhaW4uZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSgwLjAwMDEsIGF1ZGlvQ3R4LmN1cnJlbnRUaW1lICsgZHVyKTsKICAgIG8uc3RvcChhdWRpb0N0eC5jdXJyZW50VGltZSArIGR1cik7CiAgfQoKICBmdW5jdGlvbiB1bmxvY2tBdWRpbygpIHsKICAgIGlmICghYXVkaW9DdHgpIHsKICAgICAgY29uc3QgQUMgPSB3aW5kb3cuQXVkaW9Db250ZXh0IHx8IHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQ7CiAgICAgIGlmIChBQykgYXVkaW9DdHggPSBuZXcgQUMoKTsKICAgIH0KICAgIGlmIChhdWRpb0N0eCAmJiBhdWRpb0N0eC5zdGF0ZSA9PT0gInN1c3BlbmRlZCIpIGF1ZGlvQ3R4LnJlc3VtZSgpOwogIH0KCiAgZnVuY3Rpb24gcHVmZih4LCB5LCBjb2xvciwgbikgewogICAgY29uc3QgY291bnQgPSBuIHx8IDY7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgcGFydGljbGVzLnB1c2goewogICAgICAgIHg6IHgsCiAgICAgICAgeTogeSwKICAgICAgICB2eDogKE1hdGgucmFuZG9tKCkgLSAwLjUpICogMTgwLAogICAgICAgIHZ5OiAtNTAgLSBNYXRoLnJhbmRvbSgpICogMTQwLAogICAgICAgIGxpZmU6IDAuMzUgKyBNYXRoLnJhbmRvbSgpICogMC4zNSwKICAgICAgICBhZ2U6IDAsCiAgICAgICAgY29sb3I6IGNvbG9yIHx8ICIjZTdjNDhhIiwKICAgICAgICByOiAyICsgTWF0aC5yYW5kb20oKSAqIDMKICAgICAgfSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBpblN1bigpIHsKICAgIGlmIChncm91bmRSZWYgIT09ICJmbG9vciIpIHJldHVybiBmYWxzZTsKICAgIGNvbnN0IGJlYW1zID0gbGV2ZWwuYmVhbXMgfHwgW107CiAgICBjb25zdCBjeCA9IHBsYXllci54ICsgcGxheWVyLncgKiAwLjU7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJlYW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IGIgPSBiZWFtc1tpXTsKICAgICAgaWYgKGN4ID4gYi54ICYmIGN4IDwgYi54ICsgYi53KSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGZ1bmN0aW9uIHN0YXJ0TGV2ZWwoaW5kZXgpIHsKICAgIGxldmVsSW5kZXggPSBpbmRleDsKICAgIGxldmVsID0gTEVWRUxTW2luZGV4XTsKICAgIHBsYXRmb3JtcyA9IGxldmVsLnBsYXRmb3Jtcy5tYXAoZnVuY3Rpb24gKHApIHsgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHApOyB9KTsKICAgIHNvbGlkcyA9IGxldmVsLnNvbGlkcy5tYXAoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHMpOyB9KTsKICAgIHBsYXllci54ID0gbGV2ZWwuc3Bhd247CiAgICBwbGF5ZXIueSA9IEZMT09SX1kgLSBQSDsKICAgIHBsYXllci52eCA9IDA7CiAgICBwbGF5ZXIudnkgPSAwOwogICAgZmFjaW5nID0gMTsKICAgIG9uR3JvdW5kID0gZmFsc2U7CiAgICBncm91bmRSZWYgPSBudWxsOwogICAgY295b3RlID0gQ09ZT1RFOwogICAganVtcEJ1ZmZlciA9IDA7CiAgICBjYW5DdXQgPSBmYWxzZTsKICAgIGR1Y2tGb3VuZCA9IGZhbHNlOwogICAgYmVhdCA9ICJzZWVrIjsKICAgIHRyZWF0cyA9IFtdOwogICAgZ3Vlc3RzID0gW107CiAgICBwYXJ0aWNsZXMgPSBbXTsKICAgIGZlYXN0VGltZSA9IDA7CiAgICBjbGVhclRpbWUgPSAwOwogICAgZm91bmRGbGFzaCA9IDA7CiAgICBsZXZlbEZsYXNoID0gMS43OwogICAgY2FtWCA9IDA7CiAgICBhc2xlZXAgPSAwOwogICAgd2FrZUdyYWNlID0gMC4zNTsKICAgIHNxdWFzaCA9IDA7CiAgICBzcGl0ID0gMDsKICAgIHNub3JlID0gMDsKICAgIHJ1blBoYXNlID0gMDsKICAgIHBpY2t1cHMgPSAobGV2ZWwucGlja3VwcyB8fCBbXSkubWFwKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgIHJldHVybiB7IHR5cGU6IGl0ZW0udHlwZSwgeDogaXRlbS54LCB5OiBpdGVtLnksIHc6IDM2LCBoOiAzMiwgZ290OiBmYWxzZSB9OwogICAgfSk7CiAgICBjb25zdCBzaGVsZiA9IHBsYXRmb3Jtcy5maW5kKGZ1bmN0aW9uIChwKSB7IHJldHVybiBwLmtpbmQgPT09ICJzaGVsZiI7IH0pOwogICAgc3Bpbm5lciA9IHsKICAgICAgeDogc2hlbGYueCArIHNoZWxmLncgLSA4OCwKICAgICAgeTogc2hlbGYueSAtIDYyLAogICAgICB3OiA2NiwKICAgICAgaDogNjIsCiAgICAgIHZ5OiAwLAogICAgICBzaGVsZlk6IHNoZWxmLnkKICAgIH07CiAgfQoKICBmdW5jdGlvbiBiZWdpbkZlYXN0KCkgewogICAgaWYgKGJlYXQgIT09ICJzdW1tb24iKSByZXR1cm47CiAgICBiZWF0ID0gImZlYXN0IjsKICAgIGZlYXN0VGltZSA9IDA7CiAgICBzcGl0ID0gMC41NTsKICAgIGJlZXAoNjYwLCAwLjEyLCAidHJpYW5nbGUiLCAwLjA1KTsKICAgIGJlZXAoODgwLCAwLjE4LCAidHJpYW5nbGUiLCAwLjA0KTsKICAgIGNvbnN0IGJhc2UgPSBzcGlubmVyLnggKyBzcGlubmVyLncgLyAyOwogICAgY29uc3Qgb3JpZ2luWSA9IHNwaW5uZXIueSArIDY7CiAgICB0cmVhdHMgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7CiAgICAgIGNvbnN0IGRpciA9IGkgLSAzLjU7CiAgICAgIHRyZWF0cy5wdXNoKHsKICAgICAgICB4OiBiYXNlLAogICAgICAgIHk6IG9yaWdpblksCiAgICAgICAgdng6IGRpciAqIDE1MCArIChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIDQwLAogICAgICAgIHZ5OiAtNDYwIC0gTWF0aC5yYW5kb20oKSAqIDE2MCwKICAgICAgICBsYW5kZWQ6IGZhbHNlLAogICAgICAgIGVhdGVuOiBmYWxzZSwKICAgICAgICBib2I6IGkKICAgICAgfSk7CiAgICB9CiAgICBwdWZmKGJhc2UsIG9yaWdpblksICIjZjJkNDhhIiwgMTQpOwogICAgY29uc3QgZmFyID0gTWF0aC5tYXgobGV2ZWwud2lkdGgsIFZJRVdfVyk7CiAgICBndWVzdHMgPSBbCiAgICAgIHsgeDogLTcwLCBmYWNpbmc6IDEsIHRpbnQ6IDEsIGhvcDogMCB9LAogICAgICB7IHg6IGZhciArIDMwLCBmYWNpbmc6IC0xLCB0aW50OiAyLCBob3A6IDAuNiB9LAogICAgICB7IHg6IC0xOTAsIGZhY2luZzogMSwgdGludDogMCwgaG9wOiAxLjEgfQogICAgXTsKICB9CgogIGZ1bmN0aW9uIGZpbmlzaElmRWF0ZW4oKSB7CiAgICBpZiAoYmVhdCAhPT0gImZlYXN0IikgcmV0dXJuOwogICAgbGV0IGFsbCA9IHRydWU7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRyZWF0cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoIXRyZWF0c1tpXS5lYXRlbikgYWxsID0gZmFsc2U7CiAgICB9CiAgICBpZiAoYWxsICYmIHRyZWF0cy5sZW5ndGgpIHsKICAgICAgYmVhdCA9ICJjbGVhciI7CiAgICAgIGNsZWFyVGltZSA9IDA7CiAgICAgIGJlZXAoNTIwLCAwLjEyLCAic2luZSIsIDAuMDUpOwogICAgICBiZWVwKDc4MCwgMC4yLCAic2luZSIsIDAuMDUpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gbGFuZCh5LCByZWYpIHsKICAgIGNvbnN0IGltcGFjdCA9IHBsYXllci52eTsKICAgIHBsYXllci55ID0geSAtIFBIOwogICAgcGxheWVyLnZ5ID0gMDsKICAgIG9uR3JvdW5kID0gdHJ1ZTsKICAgIGdyb3VuZFJlZiA9IHJlZjsKICAgIGlmIChpbXBhY3QgPiAyNDApIHNxdWFzaCA9IDAuMjY7CiAgICBpZiAocmVmID09PSBzcGlubmVyICYmIGJlYXQgPT09ICJzdW1tb24iKSBiZWdpbkZlYXN0KCk7CiAgfQoKICBmdW5jdGlvbiB1cGRhdGUoZHQpIHsKICAgIGNsb2NrICs9IGR0OwogICAgaWYgKGZvdW5kRmxhc2ggPiAwKSBmb3VuZEZsYXNoIC09IGR0OwogICAgaWYgKGxldmVsRmxhc2ggPiAwKSBsZXZlbEZsYXNoIC09IGR0OwogICAgaWYgKHNxdWFzaCA+IDApIHNxdWFzaCA9IE1hdGgubWF4KDAsIHNxdWFzaCAtIGR0ICogMS4zNSk7CiAgICBpZiAoc3BpdCA+IDApIHsKICAgICAgc3BpdCAtPSBkdDsKICAgICAgaWYgKHNwaW5uZXIpIHB1ZmYoc3Bpbm5lci54ICsgc3Bpbm5lci53IC8gMiwgc3Bpbm5lci55LCAiI2UzOWE1NSIsIDEpOwogICAgfQogICAgaWYgKHdha2VHcmFjZSA+IDApIHdha2VHcmFjZSAtPSBkdDsKICAgIHBhcnRpY2xlcy5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7CiAgICAgIHAuYWdlICs9IGR0OwogICAgICBwLnggKz0gcC52eCAqIGR0OwogICAgICBwLnkgKz0gcC52eSAqIGR0OwogICAgICBwLnZ5ICs9IDQwMCAqIGR0OwogICAgfSk7CiAgICBwYXJ0aWNsZXMgPSBwYXJ0aWNsZXMuZmlsdGVyKGZ1bmN0aW9uIChwKSB7IHJldHVybiBwLmFnZSA8IHAubGlmZTsgfSk7CgogICAgaWYgKG1vZGUgIT09ICJwbGF5IikgewogICAgICBjb25zdCB0YXJnZXQgPSBjbGFtcChwbGF5ZXIueCArIFBXIC8gMiAtIFZJRVdfVyAqIDAuMzgsIDAsIE1hdGgubWF4KDAsIGxldmVsLndpZHRoIC0gVklFV19XKSk7CiAgICAgIGNhbVggKz0gKHRhcmdldCAtIGNhbVgpICogTWF0aC5taW4oMSwgZHQgKiAzKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGNvbnN0IG5hcHBpbmcgPSBhc2xlZXAgPiAwOwogICAgaWYgKG5hcHBpbmcpIHsKICAgICAgYXNsZWVwIC09IGR0OwogICAgICBwbGF5ZXIudnggPSAwOwogICAgICBqdW1wQnVmZmVyID0gMDsKICAgICAgc25vcmUgLT0gZHQ7CiAgICAgIGlmIChzbm9yZSA8PSAwKSB7CiAgICAgICAgc25vcmUgPSAwLjU1OwogICAgICAgIGJlZXAoMTYwICsgTWF0aC5yYW5kb20oKSAqIDMwLCAwLjEyLCAic2luZSIsIDAuMDMpOwogICAgICB9CiAgICAgIGlmIChhc2xlZXAgPD0gMCkgewogICAgICAgIGFzbGVlcCA9IDA7CiAgICAgICAgd2FrZUdyYWNlID0gMC41NTsKICAgICAgICBzcXVhc2ggPSAwLjE4OwogICAgICAgIGJlZXAoNDIwLCAwLjA4LCAidHJpYW5nbGUiLCAwLjA0KTsKICAgICAgfQogICAgfQoKICAgIGlmIChqdW1wUXVldWVkICYmICFuYXBwaW5nKSB7CiAgICAgIGp1bXBCdWZmZXIgPSBCVUZGRVI7CiAgICAgIGp1bXBRdWV1ZWQgPSBmYWxzZTsKICAgIH0gZWxzZSB7CiAgICAgIGp1bXBRdWV1ZWQgPSBmYWxzZTsKICAgICAganVtcEJ1ZmZlciAtPSBkdDsKICAgIH0KCiAgICBjb25zdCBheGlzID0gbmFwcGluZyA\/IDAgOiAoaGVsZC5yaWdodCA\/IDEgOiAwKSAtIChoZWxkLmxlZnQgPyAxIDogMCk7CiAgICBjb25zdCBhY2NlbCA9IG9uR3JvdW5kID8gQUNDRUwgOiBBQ0NFTCAqIDAuNzI7CiAgICBpZiAoYXhpcyAhPT0gMCkgewogICAgICBwbGF5ZXIudnggKz0gYXhpcyAqIGFjY2VsICogZHQ7CiAgICAgIGZhY2luZyA9IGF4aXM7CiAgICB9IGVsc2UgewogICAgICBjb25zdCBmciA9IChvbkdyb3VuZCA\/IDIyMDAgOiA1MDApICogZHQ7CiAgICAgIGlmIChNYXRoLmFicyhwbGF5ZXIudngpIDw9IGZyKSBwbGF5ZXIudnggPSAwOwogICAgICBlbHNlIHBsYXllci52eCAtPSBNYXRoLnNpZ24ocGxheWVyLnZ4KSAqIGZyOwogICAgfQogICAgcGxheWVyLnZ4ID0gY2xhbXAocGxheWVyLnZ4LCAtTUFYX1NQRUVELCBNQVhfU1BFRUQpOwogICAgaWYgKG9uR3JvdW5kICYmIE1hdGguYWJzKHBsYXllci52eCkgPiA0MCAmJiAhbmFwcGluZykgcnVuUGhhc2UgKz0gZHQgKiAxNDsKCiAgICBwbGF5ZXIueCArPSBwbGF5ZXIudnggKiBkdDsKICAgIHNvbGlkcy5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7CiAgICAgIGlmICghb3ZlcmxhcChwbGF5ZXIsIHMpKSByZXR1cm47CiAgICAgIGlmIChwbGF5ZXIudnggPiAwKSBwbGF5ZXIueCA9IHMueCAtIFBXOwogICAgICBlbHNlIGlmIChwbGF5ZXIudnggPCAwKSBwbGF5ZXIueCA9IHMueCArIHMudzsKICAgICAgZWxzZSB7CiAgICAgICAgY29uc3QgcGVuTCA9IHBsYXllci54ICsgUFcgLSBzLng7CiAgICAgICAgY29uc3QgcGVuUiA9IHMueCArIHMudyAtIHBsYXllci54OwogICAgICAgIHBsYXllci54ICs9IHBlbkwgPCBwZW5SID8gLXBlbkwgOiBwZW5SOwogICAgICB9CiAgICAgIHBsYXllci52eCA9IDA7CiAgICB9KTsKICAgIHBsYXllci54ID0gY2xhbXAocGxheWVyLngsIDAsIGxldmVsLndpZHRoIC0gUFcpOwoKICAgIGlmICghbmFwcGluZykgewogICAgICBwbGF5ZXIudnkgKz0gR1JBViAqIGR0OwogICAgICBpZiAocGxheWVyLnZ5ID4gOTgwKSBwbGF5ZXIudnkgPSA5ODA7CiAgICB9CiAgICBjb25zdCBwcmV2WSA9IHBsYXllci55OwogICAgcGxheWVyLnkgKz0gcGxheWVyLnZ5ICogZHQ7CiAgICBvbkdyb3VuZCA9IGZhbHNlOwogICAgZ3JvdW5kUmVmID0gbnVsbDsKCiAgICBpZiAocGxheWVyLnZ5ID49IDApIHsKICAgICAgc29saWRzLmZvckVhY2goZnVuY3Rpb24gKHMpIHsKICAgICAgICBjb25zdCBwcmV2RmVldCA9IHByZXZZICsgUEg7CiAgICAgICAgY29uc3QgZmVldCA9IHBsYXllci55ICsgUEg7CiAgICAgICAgY29uc3QgeEhpdCA9IHBsYXllci54ICsgUFcgPiBzLnggKyAyICYmIHBsYXllci54IDwgcy54ICsgcy53IC0gMjsKICAgICAgICBpZiAoeEhpdCAmJiBwcmV2RmVldCA8PSBzLnkgKyA0ICYmIGZlZXQgPj0gcy55KSBsYW5kKHMueSwgcyk7CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgc29saWRzLmZvckVhY2goZnVuY3Rpb24gKHMpIHsKICAgICAgICBpZiAoIW92ZXJsYXAocGxheWVyLCBzKSkgcmV0dXJuOwogICAgICAgIGlmIChwcmV2WSA+PSBzLnkgKyBzLmggLSAyKSB7CiAgICAgICAgICBwbGF5ZXIueSA9IHMueSArIHMuaDsKICAgICAgICAgIHBsYXllci52eSA9IDA7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KCiAgICBjb25zdCB0b3BzID0gcGxhdGZvcm1zLnNsaWNlKCk7CiAgICBpZiAoYmVhdCA9PT0gInN1bW1vbiIgfHwgYmVhdCA9PT0gImZlYXN0IiB8fCBiZWF0ID09PSAiY2xlYXIiKSB0b3BzLnB1c2goc3Bpbm5lcik7CiAgICBpZiAocGxheWVyLnZ5ID49IDApIHsKICAgICAgdG9wcy5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7CiAgICAgICAgY29uc3QgcHJldkZlZXQgPSBwcmV2WSArIFBIOwogICAgICAgIGNvbnN0IGZlZXQgPSBwbGF5ZXIueSArIFBIOwogICAgICAgIGNvbnN0IHhIaXQgPSBwbGF5ZXIueCArIFBXID4gcC54ICsgNiAmJiBwbGF5ZXIueCA8IHAueCArIHAudyAtIDY7CiAgICAgICAgaWYgKHhIaXQgJiYgcHJldkZlZXQgPD0gcC55ICsgNSAmJiBmZWV0ID49IHAueSkgbGFuZChwLnksIHApOwogICAgICB9KTsKICAgIH0KICAgIGlmIChwbGF5ZXIueSArIFBIID49IEZMT09SX1kpIGxhbmQoRkxPT1JfWSwgImZsb29yIik7CgogICAgaWYgKCFuYXBwaW5nICYmIGp1bXBCdWZmZXIgPiAwICYmIChvbkdyb3VuZCB8fCBjb3lvdGUgPiAwKSkgewogICAgICBwbGF5ZXIudnkgPSBKVU1QX1Y7CiAgICAgIG9uR3JvdW5kID0gZmFsc2U7CiAgICAgIGdyb3VuZFJlZiA9IG51bGw7CiAgICAgIGNveW90ZSA9IDA7CiAgICAgIGp1bXBCdWZmZXIgPSAwOwogICAgICBjYW5DdXQgPSB0cnVlOwogICAgICBiZWVwKDU0MCwgMC4wNywgInNxdWFyZSIsIDAuMDMpOwogICAgfQogICAgaWYgKGNhbkN1dCAmJiAhaGVsZC5qdW1wICYmIHBsYXllci52eSA8IDApIHsKICAgICAgcGxheWVyLnZ5ICo9IDAuNDY7CiAgICAgIGNhbkN1dCA9IGZhbHNlOwogICAgfQogICAgaWYgKG9uR3JvdW5kKSB7CiAgICAgIGNveW90ZSA9IENPWU9URTsKICAgICAgY2FuQ3V0ID0gZmFsc2U7CiAgICB9IGVsc2UgewogICAgICBjb3lvdGUgLT0gZHQ7CiAgICB9CgogICAgaWYgKCFuYXBwaW5nICYmIHdha2VHcmFjZSA8PSAwICYmIG9uR3JvdW5kICYmIGJlYXQgIT09ICJjbGVhciIgJiYgaW5TdW4oKSkgewogICAgICBhc2xlZXAgPSBTTEVFUF9NQVg7CiAgICAgIHBsYXllci52eCA9IDA7CiAgICAgIHBsYXllci52eSA9IDA7CiAgICAgIHNub3JlID0gMC4xNTsKICAgICAgc3F1YXNoID0gMC4yOwogICAgICBwdWZmKHBsYXllci54ICsgUFcgLyAyLCBwbGF5ZXIueSArIFBILCAiI2Y2ZTdiMiIsIDgpOwogICAgICBiZWVwKDIyMCwgMC4xNiwgInNpbmUiLCAwLjA0KTsKICAgIH0KCiAgICBpZiAoIWR1Y2tGb3VuZCAmJiBvdmVybGFwKHBsYXllciwgbGV2ZWwuZHVjaykpIHsKICAgICAgZHVja0ZvdW5kID0gdHJ1ZTsKICAgICAgYmVhdCA9ICJjbGltYiI7CiAgICAgIGZvdW5kRmxhc2ggPSAxLjY7CiAgICAgIGJlZXAoNDIwLCAwLjA4LCAic3F1YXJlIiwgMC4wNCk7CiAgICAgIGJlZXAoNjQwLCAwLjEyLCAic3F1YXJlIiwgMC4wNCk7CiAgICAgIHB1ZmYobGV2ZWwuZHVjay5heCwgbGV2ZWwuZHVjay5heSwgIiNmNmQ3NmEiKTsKICAgIH0KCiAgICBpZiAoYmVhdCA9PT0gImNsaW1iIiAmJiBvdmVybGFwKHBsYXllciwgc3Bpbm5lcikpIHsKICAgICAgYmVhdCA9ICJmYWxsIjsKICAgICAgc3Bpbm5lci52eSA9IDgwOwogICAgICBiZWVwKDE4MCwgMC4xNCwgInNhd3Rvb3RoIiwgMC4wNCk7CiAgICAgIHB1ZmYoc3Bpbm5lci54ICsgc3Bpbm5lci53IC8gMiwgc3Bpbm5lci55LCAiI2YwYzM2YSIpOwogICAgfQoKICAgIGlmIChiZWF0ID09PSAiZmFsbCIpIHsKICAgICAgc3Bpbm5lci52eSArPSBHUkFWICogZHQ7CiAgICAgIGNvbnN0IHByZXYgPSBzcGlubmVyLnk7CiAgICAgIHNwaW5uZXIueSArPSBzcGlubmVyLnZ5ICogZHQ7CiAgICAgIGxldCBzdXJmYWNlID0gRkxPT1JfWTsKICAgICAgcGxhdGZvcm1zLmZvckVhY2goZnVuY3Rpb24gKHApIHsKICAgICAgICBpZiAocC5raW5kID09PSAic2hlbGYiICYmIHByZXYgPCBzcGlubmVyLnNoZWxmWSArIDgpIHJldHVybjsKICAgICAgICBjb25zdCB4SGl0ID0gc3Bpbm5lci54ICsgc3Bpbm5lci53ID4gcC54ICsgOCAmJiBzcGlubmVyLnggPCBwLnggKyBwLncgLSA4OwogICAgICAgIGlmICgheEhpdCB8fCBzcGlubmVyLnZ5IDwgMCkgcmV0dXJuOwogICAgICAgIGlmIChwcmV2ICsgc3Bpbm5lci5oIDw9IHAueSArIDQgJiYgc3Bpbm5lci55ICsgc3Bpbm5lci5oID49IHAueSkgc3VyZmFjZSA9IE1hdGgubWluKHN1cmZhY2UsIHAueSk7CiAgICAgIH0pOwogICAgICBpZiAoc3Bpbm5lci55ICsgc3Bpbm5lci5oID49IHN1cmZhY2UpIHsKICAgICAgICBzcGlubmVyLncgPSA5MjsKICAgICAgICBzcGlubmVyLmggPSAyODsKICAgICAgICBzcGlubmVyLnggLT0gMTM7CiAgICAgICAgc3Bpbm5lci55ID0gc3VyZmFjZSAtIHNwaW5uZXIuaDsKICAgICAgICBzcGlubmVyLnZ5ID0gMDsKICAgICAgICBiZWF0ID0gInN1bW1vbiI7CiAgICAgICAgcHVmZihzcGlubmVyLnggKyBzcGlubmVyLncgLyAyLCBzdXJmYWNlLCAiI2UwYjM2YSIpOwogICAgICAgIGJlZXAoMTQwLCAwLjEsICJ0cmlhbmdsZSIsIDAuMDUpOwogICAgICB9CiAgICB9CgogICAgaWYgKGJlYXQgPT09ICJmZWFzdCIpIHsKICAgICAgZmVhc3RUaW1lICs9IGR0OwogICAgICB0cmVhdHMuZm9yRWFjaChmdW5jdGlvbiAodCkgewogICAgICAgIGlmICh0LmVhdGVuIHx8IHQubGFuZGVkKSByZXR1cm47CiAgICAgICAgdC52eSArPSBHUkFWICogZHQ7CiAgICAgICAgdC54ICs9IHQudnggKiBkdDsKICAgICAgICB0LnkgKz0gdC52eSAqIGR0OwogICAgICAgIHQueCA9IGNsYW1wKHQueCwgMjAsIGxldmVsLndpZHRoIC0gMjApOwogICAgICAgIGlmICh0LnkgPj0gRkxPT1JfWSAtIDYpIHsKICAgICAgICAgIHQueSA9IEZMT09SX1kgLSA2OwogICAgICAgICAgdC52eSA9IDA7CiAgICAgICAgICB0LnZ4ICo9IDAuMjsKICAgICAgICAgIHQubGFuZGVkID0gdHJ1ZTsKICAgICAgICAgIHB1ZmYodC54LCB0LnksICIjZjJkNDhhIiwgMyk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgZ3Vlc3RzLmZvckVhY2goZnVuY3Rpb24gKGcpIHsKICAgICAgICBsZXQgYmVzdCA9IG51bGw7CiAgICAgICAgbGV0IGJlc3REID0gMWU5OwogICAgICAgIHRyZWF0cy5mb3JFYWNoKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICBpZiAodC5lYXRlbikgcmV0dXJuOwogICAgICAgICAgY29uc3QgZCA9IE1hdGguYWJzKHQueCAtIChnLnggKyAxOCkpOwogICAgICAgICAgaWYgKGQgPCBiZXN0RCkgeyBiZXN0RCA9IGQ7IGJlc3QgPSB0OyB9CiAgICAgICAgfSk7CiAgICAgICAgaWYgKCFiZXN0KSByZXR1cm47CiAgICAgICAgY29uc3QgZGlyID0gTWF0aC5zaWduKGJlc3QueCAtIChnLnggKyAxOCkpOwogICAgICAgIGlmIChkaXIpIGcuZmFjaW5nID0gZGlyOwogICAgICAgIGcueCArPSAoZGlyIHx8IDApICogMjUwICogZHQ7CiAgICAgICAgZy5ob3AgKz0gZHQgKiAxMjsKICAgICAgICBpZiAoYmVzdC5sYW5kZWQgJiYgYmVzdEQgPCAzNikgewogICAgICAgICAgYmVzdC5lYXRlbiA9IHRydWU7CiAgICAgICAgICBwdWZmKGJlc3QueCwgYmVzdC55LCAiI2UzOWE1NSIsIDUpOwogICAgICAgICAgYmVlcCg3MjAgKyBNYXRoLnJhbmRvbSgpICogMTgwLCAwLjA2LCAic2luZSIsIDAuMDMpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGlmIChmZWFzdFRpbWUgPiAxMykgewogICAgICAgIHRyZWF0cy5mb3JFYWNoKGZ1bmN0aW9uICh0KSB7IHQuZWF0ZW4gPSB0cnVlOyB9KTsKICAgICAgfQogICAgICBmaW5pc2hJZkVhdGVuKCk7CiAgICB9CgogICAgcGlja3Vwcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgIGlmIChpdGVtLmdvdCkgcmV0dXJuOwogICAgICBpZiAoIW92ZXJsYXAocGxheWVyLCBpdGVtKSkgcmV0dXJuOwogICAgICBpdGVtLmdvdCA9IHRydWU7CiAgICAgIGJhZ1tpdGVtLnR5cGVdICs9IDE7CiAgICAgIHBvcHVwID0geyB0eXBlOiBpdGVtLnR5cGUsIGFnZTogMCB9OwogICAgICBwdWZmKGl0ZW0ueCArIGl0ZW0udyAvIDIsIGl0ZW0ueSArIGl0ZW0uaCAvIDIsICIjZmZlMjdhIiwgMTApOwogICAgICBiZWVwKDg4MCwgMC4wOCwgInRyaWFuZ2xlIiwgMC4wNSk7CiAgICAgIGJlZXAoMTE4MCwgMC4xMiwgInNpbmUiLCAwLjA0KTsKICAgIH0pOwogICAgaWYgKHBvcHVwKSB7CiAgICAgIHBvcHVwLmFnZSArPSBkdDsKICAgICAgaWYgKHBvcHVwLmFnZSA+IDEuNykgcG9wdXAgPSBudWxsOwogICAgfQoKICAgIGlmIChiZWF0ID09PSAiY2xlYXIiKSB7CiAgICAgIGNsZWFyVGltZSArPSBkdDsKICAgICAgaWYgKGNsZWFyVGltZSA+IDIuMTUpIHsKICAgICAgICBpZiAobGV2ZWxJbmRleCA8IExFVkVMUy5sZW5ndGggLSAxKSBzdGFydExldmVsKGxldmVsSW5kZXggKyAxKTsKICAgICAgICBlbHNlIHNob3dXaW4oKTsKICAgICAgfQogICAgfQoKICAgIGNvbnN0IHRhcmdldCA9IGNsYW1wKHBsYXllci54ICsgUFcgLyAyIC0gVklFV19XICogMC40LCAwLCBNYXRoLm1heCgwLCBsZXZlbC53aWR0aCAtIFZJRVdfVykpOwogICAgY2FtWCArPSAodGFyZ2V0IC0gY2FtWCkgKiBNYXRoLm1pbigxLCBkdCAqIDUpOwogIH0KCiAgZnVuY3Rpb24gc2hvd1dpbigpIHsKICAgIG1vZGUgPSAid2luIjsKICAgIHBhZHMuaGlkZGVuID0gdHJ1ZTsKICAgIHN0YXJ0Q2FyZC5oaWRkZW4gPSB0cnVlOwogICAgd2luQ2FyZC5oaWRkZW4gPSBmYWxzZTsKICAgIG92ZXJsYXkuaGlkZGVuID0gZmFsc2U7CiAgfQoKICBmdW5jdGlvbiByb3VuZFJlY3QoeCwgeSwgdywgaCwgcikgewogICAgY29uc3QgcnIgPSBNYXRoLm1pbihyLCB3IC8gMiwgaCAvIDIpOwogICAgY3R4LmJlZ2luUGF0aCgpOwogICAgY3R4Lm1vdmVUbyh4ICsgcnIsIHkpOwogICAgY3R4LmFyY1RvKHggKyB3LCB5LCB4ICsgdywgeSArIGgsIHJyKTsKICAgIGN0eC5hcmNUbyh4ICsgdywgeSArIGgsIHgsIHkgKyBoLCBycik7CiAgICBjdHguYXJjVG8oeCwgeSArIGgsIHgsIHksIHJyKTsKICAgIGN0eC5hcmNUbyh4LCB5LCB4ICsgdywgeSwgcnIpOwogICAgY3R4LmNsb3NlUGF0aCgpOwogIH0KCiAgZnVuY3Rpb24gYmxpdFBhcnQobmFtZSwgeCwgeSwgdywgaCkgewogICAgY29uc3QgYyA9IHBhcnRDYW52YXNbbmFtZV07CiAgICBpZiAoIWMpIHJldHVybiBmYWxzZTsKICAgIGN0eC5kcmF3SW1hZ2UoYywgeCwgeSwgdywgaCk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGZ1bmN0aW9uIHN3aW5nUGFydChuYW1lLCB4LCB5LCBhbmcsIHcsIGgpIHsKICAgIGNvbnN0IGMgPSBwYXJ0Q2FudmFzW25hbWVdOwogICAgaWYgKCFjKSByZXR1cm47CiAgICBjdHguc2F2ZSgpOwogICAgY3R4LnRyYW5zbGF0ZSh4LCB5KTsKICAgIGN0eC5yb3RhdGUoYW5nKTsKICAgIGN0eC5kcmF3SW1hZ2UoYywgLXcgLyAyLCAwLCB3LCBoKTsKICAgIGN0eC5yZXN0b3JlKCk7CiAgfQoKICBmdW5jdGlvbiBtb2RlbFBhcnRzKGtpbmQpIHsKICAgIGlmIChraW5kID09PSAibyIpIHJldHVybiBbIm9oZWFkIiwgIm9ib2R5IiwgIm9sZWciLCAib3RhaWwiXTsKICAgIGlmIChraW5kID09PSAiYiIpIHJldHVybiBbImJoZWFkIiwgImJib2R5IiwgImJsZWciLCAiYnRhaWwiXTsKICAgIHJldHVybiBbImdoZWFkIiwgImdib2R5IiwgImdsZWciLCAiZ3RhaWwiXTsKICB9CgogIGZ1bmN0aW9uIGRyYXdGYWxsYmFja0NhdChmYWNlLCBib2IsIHNxdWFzaEFtdCwgZmxvcCkgewogICAgY3R4LnNhdmUoKTsKICAgIGlmIChmYWNlIDwgMCkgY3R4LnNjYWxlKC0xLCAxKTsKICAgIGlmIChmbG9wKSBjdHgucm90YXRlKC0xLjE1ICogZmxvcCk7CiAgICBjb25zdCBzcSA9IHNxdWFzaEFtdCB8fCAwOwogICAgY3R4LnNjYWxlKDEgKyBzcSAqIDAuNDUsIDEgLSBzcSAqIDAuMyk7CiAgICBjdHguZmlsbFN0eWxlID0gIiNkOWQzY2MiOwogICAgY3R4LmJlZ2luUGF0aCgpOwogICAgY3R4LmVsbGlwc2UoLTgsIC00NiArIChib2IgfHwgMCksIDQwLCAyOCwgMCwgMCwgTWF0aC5QSSAqIDIpOwogICAgY3R4LmZpbGwoKTsKICAgIGN0eC5iZWdpblBhdGgoKTsKICAgIGN0eC5lbGxpcHNlKDI0LCAtMTIwLCA1MiwgNDgsIDAsIDAsIE1hdGguUEkgKiAyKTsKICAgIGN0eC5maWxsKCk7CiAgICBjdHgucmVzdG9yZSgpOwogIH0KCiAgZnVuY3Rpb24gZHJhd01vZGVsKGtpbmQsIGZvb3RYLCBmb290WSwgZmFjZSwgc3RhdGUsIHBoYXNlLCBzcXVhc2hBbXQpIHsKICAgIGNvbnN0IHNldCA9IG1vZGVsUGFydHMoa2luZCk7CiAgICBjdHguc2F2ZSgpOwogICAgY3R4LnRyYW5zbGF0ZShmb290WCwgZm9vdFkpOwogICAgaWYgKGZhY2UgPCAwKSBjdHguc2NhbGUoLTEsIDEpOwogICAgaWYgKCFwYXJ0Q2FudmFzW3NldFswXV0gfHwgIXBhcnRDYW52YXNbc2V0WzFdXSkgewogICAgICBjb25zdCBmbG9wID0gc3RhdGUgPT09ICJuYXAiID8gMSA6IDA7CiAgICAgIGRyYXdGYWxsYmFja0NhdCgxLCAwLCBzcXVhc2hBbXQsIGZsb3ApOwogICAgICBjdHgucmVzdG9yZSgpOwogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBzcSA9IHNxdWFzaEFtdCB8fCAwOwogICAgaWYgKHN0YXRlID09PSAibmFwIikgewogICAgICBjb25zdCBiciA9IDEgKyBNYXRoLnNpbihjbG9jayAqIDEuNCkgKiAwLjA0OwogICAgICBzd2luZ1BhcnQoc2V0WzNdLCAtODIsIC0yOCwgMC40ICsgTWF0aC5zaW4oY2xvY2sgKiAxLjMpICogMC4xNCwgNjgsIDM4KTsKICAgICAgYmxpdFBhcnQoc2V0WzJdLCAtMzQsIC0xNCwgMzYsIDE0KTsKICAgICAgYmxpdFBhcnQoc2V0WzJdLCA4LCAtMTIsIDM0LCAxNCk7CiAgICAgIGN0eC5zYXZlKCk7CiAgICAgIGN0eC50cmFuc2xhdGUoLTgsIC0yNik7CiAgICAgIGN0eC5zY2FsZShiciwgMSk7CiAgICAgIGJsaXRQYXJ0KHNldFsxXSwgLTU0LCAtMTgsIDExOCwgMzgpOwogICAgICBjdHgucmVzdG9yZSgpOwogICAgICBjdHguc2F2ZSgpOwogICAgICBjdHgudHJhbnNsYXRlKDU4LCAtNDYpOwogICAgICBjdHgucm90YXRlKC0wLjQpOwogICAgICBibGl0UGFydChzZXRbMF0sIC01NCwgLTUwLCAxMTIsIDEwNCk7CiAgICAgIGN0eC5yZXN0b3JlKCk7CiAgICAgIGN0eC5yZXN0b3JlKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGxldCBib2IgPSAwOwogICAgbGV0IGxlZ0EgPSAwOwogICAgbGV0IHRhaWxBID0gMDsKICAgIGxldCBoZWFkQiA9IDA7CiAgICBsZXQgYnJlYXRoZSA9IDA7CiAgICBpZiAoc3RhdGUgPT09ICJ3YWxrIikgewogICAgICBib2IgPSBNYXRoLnNpbihwaGFzZSAqIDIpICogNjsKICAgICAgbGVnQSA9IE1hdGguc2luKHBoYXNlKSAqIDAuNzI7CiAgICAgIHRhaWxBID0gTWF0aC5zaW4ocGhhc2UpICogMC41OwogICAgICBoZWFkQiA9IE1hdGguc2luKHBoYXNlICogMikgKiA1OwogICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gImFpciIpIHsKICAgICAgYm9iID0gLTQ7CiAgICAgIGxlZ0EgPSAwLjU1OwogICAgICB0YWlsQSA9IC0wLjQyOwogICAgfSBlbHNlIHsKICAgICAgYm9iID0gTWF0aC5zaW4oY2xvY2sgKiAyICsgcGhhc2UpICogMS42OwogICAgICB0YWlsQSA9IE1hdGguc2luKGNsb2NrICogMS41ICsgcGhhc2UpICogMC4yMjsKICAgICAgaGVhZEIgPSBNYXRoLnNpbihjbG9jayAqIDIgKyBwaGFzZSkgKiAyOwogICAgICBicmVhdGhlID0gTWF0aC5zaW4oY2xvY2sgKiAyICsgcGhhc2UpICogMC4wNDU7CiAgICB9CiAgICBjdHgudHJhbnNsYXRlKDAsIGJvYik7CiAgICBjdHguc2NhbGUoMSArIHNxICogMC40LCAxIC0gc3EgKiAwLjI4KTsKICAgIHN3aW5nUGFydChzZXRbM10sIC03NiwgLTU0LCAtMC41ICsgdGFpbEEsIDY0LCA0Nik7CiAgICBzd2luZ1BhcnQoc2V0WzJdLCAtMzIsIC0zMCwgMC4yOCArIGxlZ0EsIDIwLCA0MCk7CiAgICBzd2luZ1BhcnQoc2V0WzJdLCAtMTYsIC0zMCwgMC4yOCAtIGxlZ0EsIDIwLCA0MCk7CiAgICBjdHguc2F2ZSgpOwogICAgY3R4LnRyYW5zbGF0ZSgtMTQsIC01MCk7CiAgICBjdHguc2NhbGUoMSwgMSArIGJyZWF0aGUpOwogICAgYmxpdFBhcnQoc2V0WzFdLCAtNTQsIC0yOCwgMTA4LCA1Nik7CiAgICBjdHgucmVzdG9yZSgpOwogICAgc3dpbmdQYXJ0KHNldFsyXSwgMTIsIC0zMiwgLTAuMTYgLSBsZWdBLCAyMCwgNDIpOwogICAgc3dpbmdQYXJ0KHNldFsyXSwgMjgsIC0zMiwgLTAuMTYgKyBsZWdBLCAyMCwgNDIpOwogICAgYmxpdFBhcnQoc2V0WzBdLCAtNCwgLTE3NiArIGhlYWRCLCAxNDYsIDEzNCk7CiAgICBjdHgucmVzdG9yZSgpOwogIH0KCiAgZnVuY3Rpb24gZHJhd0R1Y2soeCwgeSwgcywgdGlsdCkgewogICAgY3R4LnNhdmUoKTsKICAgIGN0eC50cmFuc2xhdGUoeCwgeSk7CiAgICBjdHgucm90YXRlKHRpbHQgfHwgMCk7CiAgICBjdHguZmlsbFN0eWxlID0gIiNmM2NjNGUiOwogICAgY3R4LmJlZ2luUGF0aCgpOwogICAgY3R4LmVsbGlwc2UoMCwgMCwgMTYgKiBzLCAxMiAqIHMsIDAsIDAsIE1hdGguUEkgKiAyKTsKICAgIGN0eC5maWxsKCk7CiAgICBjdHguYmVnaW5QYXRoKCk7CiAgICBjdHguYXJjKDEyICogcywgLTkgKiBzLCA4ICogcywgMCwgTWF0aC5QSSAqIDIpOwogICAgY3R4LmZpbGwoKTsKICAgIGN0eC5maWxsU3R5bGUgPSAiI2UwN2EyZiI7CiAgICBjdHguYmVnaW5QYXRoKCk7CiAgICBjdHgubW92ZVRvKDE4ICogcywgLTEwICogcyk7CiAgICBjdHgubGluZVRvKDI4ICogcywgLTcgKiBzKTsKICAgIGN0eC5saW5lVG8oMTggKiBzLCAtNCAqIHMpOwogICAgY3R4LmZpbGwoKTsKICAgIGN0eC5maWxsU3R5bGUgPSAiIzJjMjQxYyI7CiAgICBjdHguYmVnaW5QYXRoKCk7CiAgICBjdHguYXJjKDE0ICogcywgLTExICogcywgMS41ICogcywgMCwgTWF0aC5QSSAqIDIpOwogICAgY3R4LmZpbGwoKTsKICAgIGN0eC5maWxsU3R5bGUgPSAiI2UwN2EyZiI7CiAgICBjdHguYmVnaW5QYXRoKCk7CiAgICBjdHguZWxsaXBzZSgtMiAqIHMsIDEwICogcywgNyAqIHMsIDMgKiBzLCAwLCAwLCBNYXRoLlBJICogMik7CiAgICBjdHguZmlsbCgpOwogICAgY3R4LnJlc3RvcmUoKTsKICB9CgogIGZ1bmN0aW9uIGRyYXdTcGlubmVyKHgsIHksIHcsIGgsIGZhbGxlbikgewogICAgY3R4LnNhdmUoKTsKICAgIGN0eC50cmFuc2xhdGUoeCArIHcgLyAyLCB5ICsgaCAvIDIpOwogICAgaWYgKCFmYWxsZW4pIGN0eC5yb3RhdGUoY2xvY2sgKiAyLjIpOwogICAgZWxzZSBjdHguc2NhbGUoMSwgMC43Mik7CiAgICBjb25zdCByID0gTWF0aC5taW4odywgaCkgKiAwLjQ2OwogICAgY3R4LmZpbGxTdHlsZSA9ICIjZjZlMmE0IjsKICAgIGN0eC5iZWdpblBhdGgoKTsKICAgIGN0eC5hcmMoMCwgMCwgciwgMCwgTWF0aC5QSSAqIDIpOwogICAgY3R4LmZpbGwoKTsKICAgIGN0eC5zdHJva2VTdHlsZSA9ICIjZTA3YTJmIjsKICAgIGN0eC5saW5lV2lkdGggPSA0OwogICAgY3R4LmJlZ2luUGF0aCgpOwogICAgY3R4LmFyYygwLCAwLCByLCAwLCBNYXRoLlBJICogMik7CiAgICBjdHgubW92ZVRvKC1yLCAwKTsKICAgIGN0eC5saW5lVG8ociwgMCk7CiAgICBjdHgubW92ZVRvKDAsIC1yKTsKICAgIGN0eC5saW5lVG8oMCwgcik7CiAgICBjdHguc3Ryb2tlKCk7CiAgICBjdHguZmlsbFN0eWxlID0gIiNkNDY1NGEiOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHsKICAgICAgY29uc3QgYSA9IGkgLyA2ICogTWF0aC5QSSAqIDIgKyAwLjQ7CiAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgY3R4LmFyYyhNYXRoLmNvcyhhKSAqIHIgKiAwLjYyLCBNYXRoLnNpbihhKSAqIHIgKiAwLjYyLCAzLjIsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgY3R4LmZpbGwoKTsKICAgIH0KICAgIGN0eC5yZXN0b3JlKCk7CiAgICBpZiAoZmFsbGVuKSBkcmF3RHVjayh4ICsgdyAqIDAuNSwgeSAtIDYgKyBNYXRoLnNpbihjbG9jayAqIDgpICogMS41LCAxLjA1LCBNYXRoLnNpbihjbG9jayAqIDYpICogMC4wOCk7CiAgfQoKICBmdW5jdGlvbiBkcmF3RG9vcihwKSB7CiAgICBjb25zdCB4ID0gcC54LCB5ID0gcC55LCB3ID0gcC53OwogICAgY3R4LmZpbGxTdHlsZSA9ICIjNmQ0OTMyIjsKICAgIGN0eC5maWxsUmVjdCh4IC0gOCwgeSArIDE0LCAxNCwgRkxPT1JfWSAtICh5ICsgMTQpKTsKICAgIGN0eC5maWxsUmVjdCh4ICsgdyAtIDYsIHkgKyAxNCwgMTQsIEZMT09SX1kgLSAoeSArIDE0KSk7CiAgICBjdHguZmlsbFN0eWxlID0gIiNkMDg5NGUiOwogICAgY3R4LmZpbGxSZWN0KHggKyA2LCB5ICsgMTgsIHcgLSAxMiwgRkxPT1JfWSAtICh5ICsgMTgpKTsKICAgIGN0eC5maWxsU3R5bGUgPSAiI2I4NzQzZCI7CiAgICBjdHguZmlsbFJlY3QoeCArIDE2LCB5ICsgMzYsIHcgLSAzMiwgNTQpOwogICAgY3R4LmZpbGxSZWN0KHggKyAxNiwgeSArIDEwNCwgdyAtIDMyLCA2Mik7CiAgICBjdHguZmlsbFN0eWxlID0gIiNmMGQ3OGEiOwogICAgY3R4LmJlZ2luUGF0aCgpOwogICAgY3R4LmFyYyh4ICsgdyAtIDI0LCB5ICsgMTIwLCA1LCAwLCBNYXRoLlBJICogMik7CiAgICBjdHguZmlsbCgpOwogICAgY3R4LmZpbGxTdHlsZSA9ICIjNWMzYjI4IjsKICAgIGN0eC5maWxsUmVjdCh4IC0gMTgsIHksIHcgKyAzNiwgMTYpOwogICAgY3R4LmZpbGxTdHlsZSA9ICIjZTZjNDhhIjsKICAgIGN0eC5maWxsUmVjdCh4IC0gMTgsIHksIHcgKyAzNiwgNSk7CiAgfQoKICBmdW5jdGlvbiBkcmF3U2hlbGYocCkgewogICAgY3R4LmZpbGxTdHlsZSA9ICIjOGQ2MjQ0IjsKICAgIFtbMTgsIDM2XSwgW3AudyAtIDQ4LCAzNl1dLmZvckVhY2goZnVuY3Rpb24gKGIpIHsKICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICBjdHgubW92ZVRvKHAueCArIGJbMF0sIHAueSArIDEyKTsKICAgICAgY3R4LmxpbmVUbyhwLnggKyBiWzBdICsgMTYsIHAueSArIDEyKTsKICAgICAgY3R4LmxpbmVUbyhwLnggKyBiWzBdICsgMTAsIHAueSArIDEyICsgYlsxXSk7CiAgICAgIGN0eC5saW5lVG8ocC54ICsgYlswXSArIDQsIHAueSArIDEyICsgYlsxXSk7CiAgICAgIGN0eC5maWxsKCk7CiAgICB9KTsKICAgIGN0eC5maWxsU3R5bGUgPSAiI2VmZDBhMiI7CiAgICBjdHguZmlsbFJlY3QocC54LCBwLnksIHAudywgMTQpOwogICAgY3R4LmZpbGxTdHlsZSA9ICIjYzQ5OTYyIjsKICAgIGN0eC5maWxsUmVjdChwLngsIHAueSArIDEyLCBwLncsIDUpOwogICAgY29uc3QgY29sb3JzID0gWyIjYzQ1YzRjIiwgIiMzYzZkOGMiLCAiI2UwYjE1YSIsICIjNmQ4ZjU2IiwgIiM3YTViODYiXTsKICAgIGxldCBieCA9IHAueCArIDEyOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHsKICAgICAgY29uc3QgYmggPSAyNiArIChpICUgMykgKiA2OwogICAgICBjdHguZmlsbFN0eWxlID0gY29sb3JzW2ldOwogICAgICBjdHguZmlsbFJlY3QoYngsIHAueSAtIGJoLCAxMywgYmgpOwogICAgICBieCArPSAxNjsKICAgIH0KICAgIGN0eC5maWxsU3R5bGUgPSAiIzZkOGY1NiI7CiAgICBjdHguYmVnaW5QYXRoKCk7CiAgICBjdHguZWxsaXBzZShwLnggKyAxMTgsIHAueSAtIDE2LCAxNiwgMTIsIDAsIDAsIE1hdGguUEkgKiAyKTsKICAgIGN0eC5maWxsKCk7CiAgICBjdHguZmlsbFN0eWxlID0gIiNjNDdiNDUiOwogICAgY3R4LmZpbGxSZWN0KHAueCArIDExMiwgcC55IC0gOCwgMTIsIDgpOwogIH0KCiAgZnVuY3Rpb24gZHJhd1dpbmRvdyhwLCB3b2JibGUpIHsKICAgIGNvbnN0IHRvcCA9IHAueSAtIDE3MDsKICAgIGN0eC5maWxsU3R5bGUgPSAiI2Y2ZjBlNiI7CiAgICBjdHguZmlsbFJlY3QocC54IC0gMTAsIHRvcCwgcC53ICsgMjAsIHAueSAtIHRvcCk7CiAgICBjb25zdCBnbGFzcyA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCgwLCB0b3AsIDAsIHAueSk7CiAgICBnbGFzcy5hZGRDb2xvclN0b3AoMCwgIiM4ZWM4ZTYiKTsKICAgIGdsYXNzLmFkZENvbG9yU3RvcCgxLCAiI2Q1ZWZiOCIpOwogICAgY3R4LmZpbGxTdHlsZSA9IGdsYXNzOwogICAgY3R4LmZpbGxSZWN0KHAueCwgdG9wICsgMTIsIHAudywgcC55IC0gdG9wIC0gMjApOwogICAgY3R4LnN0cm9rZVN0eWxlID0gInJnYmEoMjU1LDI1MCwyNDIsMC44NSkiOwogICAgY3R4LmxpbmVXaWR0aCA9IDQ7CiAgICBjdHguYmVnaW5QYXRoKCk7CiAgICBjdHgubW92ZVRvKHAueCArIHAudyAvIDIsIHRvcCArIDEyKTsKICAgIGN0eC5saW5lVG8ocC54ICsgcC53IC8gMiwgcC55IC0gOCk7CiAgICBjdHgubW92ZVRvKHAueCwgdG9wICsgKHAueSAtIHRvcCkgLyAyKTsKICAgIGN0eC5saW5lVG8ocC54ICsgcC53LCB0b3AgKyAocC55IC0gdG9wKSAvIDIpOwogICAgY3R4LnN0cm9rZSgpOwogICAgY29uc3Qgc3dheSA9IHdvYmJsZSA\/IE1hdGguc2luKGNsb2NrICogNSkgKiA1IDogTWF0aC5zaW4oY2xvY2sgKiAwLjgpICogMjsKICAgIGN0eC5maWxsU3R5bGUgPSAiIzNlNmM5OCI7CiAgICBjdHguZmlsbFJlY3QocC54IC0gMjAgKyBzd2F5LCB0b3AsIDI0LCBwLnkgLSB0b3AgLSA2KTsKICAgIGN0eC5maWxsUmVjdChwLnggKyBwLncgLSA0IC0gc3dheSwgdG9wLCAyNCwgcC55IC0gdG9wIC0gNik7CiAgICBjdHguZmlsbFN0eWxlID0gIiNmNGVjZGYiOwogICAgY3R4LmZpbGxSZWN0KHAueCAtIDE2LCBwLnksIHAudyArIDMyLCAxNik7CiAgICBjdHguZmlsbFN0eWxlID0gIiNkZGNiYjAiOwogICAgY3R4LmZpbGxSZWN0KHAueCAtIDE2LCBwLnkgKyAxMiwgcC53ICsgMzIsIDUpOwogIH0KCiAgZnVuY3Rpb24gZHJhd1RhYmxlKHAsIHdvYmJsZSkgewogICAgY3R4LmZpbGxTdHlsZSA9ICIjOGQ1YTM0IjsKICAgIGN0eC5maWxsUmVjdChwLnggKyAxNiwgcC55ICsgMTIsIDEyLCBGTE9PUl9ZIC0gcC55IC0gMTIpOwogICAgY3R4LmZpbGxSZWN0KHAueCArIHAudyAtIDI4LCBwLnkgKyAxMiwgMTIsIEZMT09SX1kgLSBwLnkgLSAxMik7CiAgICBjdHguZmlsbFN0eWxlID0gIiNjNDg5NTUiOwogICAgY3R4LmZpbGxSZWN0KHAueCwgcC55LCBwLncsIDE0KTsKICAgIGN0eC5maWxsU3R5bGUgPSAiI2E4NzQ0NCI7CiAgICBjdHguZmlsbFJlY3QocC54LCBwLnkgKyAxMiwgcC53LCA0KTsKICAgIGNvbnN0IGNsb3RoID0gd29iYmxlID8gTWF0aC5zaW4oY2xvY2sgKiA2KSAqIDQgOiAwOwogICAgY3R4LmZpbGxTdHlsZSA9ICIjYzQ1NTRjIjsKICAgIGN0eC5maWxsUmVjdChwLnggKyAxOCwgcC55IC0gNCwgcC53IC0gNzAsIDgpOwogICAgY3R4LmJlZ2luUGF0aCgpOwogICAgY3R4Lm1vdmVUbyhwLnggKyAxOCwgcC55ICsgNCk7CiAgICBjdHgubGluZVRvKHAueCArIDM0ICsgY2xvdGgsIHAueSArIDI4KTsKICAgIGN0eC5saW5lVG8ocC54ICsgNTIsIHAueSArIDQpOwogICAgY3R4LmZpbGwoKTsKICAgIGN0eC5maWxsU3R5bGUgPSAiI2Y3ZjRlZSI7CiAgICBjdHguZmlsbFJlY3QocC54ICsgcC53IC0gNTgsIHAueSAtIDE2LCAyMiwgMTYpOwogICAgY3R4LmZpbGxTdHlsZSA9ICIjZTdlMmRhIjsKICAgIGN0eC5maWxsUmVjdChwLnggKyBwLncgLSA2MiwgcC55IC0gMjAsIDMwLCA2KTsKICB9CgogIGZ1bmN0aW9uIGRyYXdCb29rcyhwKSB7CiAgICBjdHguZmlsbFN0eWxlID0gIiM2YjRhMzIiOwogICAgY3R4LmZpbGxSZWN0KHAueCAtIDYsIHAueSArIDE0LCBwLncgKyAxMiwgRkxPT1JfWSAtIHAueSAtIDE0KTsKICAgIGNvbnN0IGNvbG9ycyA9IFsiIzljNGIzYyIsICIjZDJhMjRhIiwgIiMzNTVmNzgiLCAiIzZkOGY1NiIsICIjN2E1ODcyIiwgIiNjNDZhM2EiXTsKICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IDM7IHJvdysrKSB7CiAgICAgIGxldCBieCA9IHAueCArIDg7CiAgICAgIGNvbnN0IGJ5ID0gcC55ICsgMjggKyByb3cgKiAyODsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA4OyBpKyspIHsKICAgICAgICBjdHguZmlsbFN0eWxlID0gY29sb3JzWyhpICsgcm93KSAlIGNvbG9ycy5sZW5ndGhdOwogICAgICAgIGN0eC5maWxsUmVjdChieCwgYnksIDE2LCAyNCk7CiAgICAgICAgYnggKz0gMTg7CiAgICAgIH0KICAgIH0KICAgIGN0eC5maWxsU3R5bGUgPSAiI2U2Yzg5YSI7CiAgICBjdHguZmlsbFJlY3QocC54IC0gMTAsIHAueSwgcC53ICsgMjAsIDE0KTsKICAgIGN0eC5maWxsU3R5bGUgPSAiI2I4ODk1OCI7CiAgICBjdHguZmlsbFJlY3QocC54IC0gMTAsIHAueSArIDEyLCBwLncgKyAyMCwgNCk7CiAgfQoKICBmdW5jdGlvbiBkcmF3Q291bnRlcihwKSB7CiAgICBjdHguZmlsbFN0eWxlID0gIiNkN2M4YjQiOwogICAgY3R4LmZpbGxSZWN0KHAueCArIDgsIHAueSArIDE2LCAxMiwgRkxPT1JfWSAtIHAueSAtIDE2KTsKICAgIGN0eC5maWxsUmVjdChwLnggKyBwLncgLSAyMCwgcC55ICsgMTYsIDEyLCBGTE9PUl9ZIC0gcC55IC0gMTYpOwogICAgY3R4LmZpbGxTdHlsZSA9ICIjZWZlNmRhIjsKICAgIGN0eC5maWxsUmVjdChwLngsIHAueSArIDE0LCBwLncsIEZMT09SX1kgLSBwLnkgLSAxNCk7CiAgICBjdHguZmlsbFN0eWxlID0gIiNmN2Y0ZWUiOwogICAgY3R4LmZpbGxSZWN0KHAueCAtIDQsIHAueSwgcC53ICsgOCwgMTYpOwogICAgY3R4LmZpbGxTdHlsZSA9ICIjYzliNTlhIjsKICAgIGN0eC5maWxsUmVjdChwLnggLSA0LCBwLnkgKyAxMywgcC53ICsgOCwgNCk7CiAgICBjdHguZmlsbFN0eWxlID0gIiNjNDVjNGMiOwogICAgY3R4LmJlZ2luUGF0aCgpOwogICAgY3R4LmVsbGlwc2UocC54ICsgNDgsIHAueSAtIDgsIDE2LCAxMSwgMCwgMCwgTWF0aC5QSSAqIDIpOwogICAgY3R4LmZpbGwoKTsKICAgIGN0eC5maWxsU3R5bGUgPSAiI2YyZDQ4YSI7CiAgICBjdHguYmVnaW5QYXRoKCk7CiAgICBjdHguZWxsaXBzZShwLnggKyAxMTAsIHAueSAtIDYsIDE4LCA4LCAwLCAwLCBNYXRoLlBJICogMik7CiAgICBjdHguZmlsbCgpOwogICAgY3R4LmZpbGxTdHlsZSA9ICIjNmQ4ZjU2IjsKICAgIGN0eC5iZWdpblBhdGgoKTsKICAgIGN0eC5lbGxpcHNlKHAueCArIHAudyAtIDM2LCBwLnkgLSAxNCwgMTQsIDEyLCAwLCAwLCBNYXRoLlBJICogMik7CiAgICBjdHguZmlsbCgpOwogIH0KCiAgZnVuY3Rpb24gZHJhd1NvbGlkKHMpIHsKICAgIGNvbnN0IHNwb3QgPSBsZXZlbC5kdWNrLnNwb3Q7CiAgICBjb25zdCB3b2JibGVBcm0gPSAhZHVja0ZvdW5kICYmIHNwb3QgPT09ICJjaGFpciIgJiYgcy5raW5kID09PSAiYXJtY2hhaXIiID8gTWF0aC5zaW4oY2xvY2sgKiA0KSAqIDMgOiAwOwogICAgY29uc3Qgd29iYmxlRnJpZGdlID0gIWR1Y2tGb3VuZCAmJiBzcG90ID09PSAiZnJpZGdlIiAmJiBzLmtpbmQgPT09ICJmcmlkZ2UiID8gTWF0aC5zaW4oY2xvY2sgKiA1KSAqIDIgOiAwOwogICAgY29uc3Qgd29iYmxlQmVkID0gIWR1Y2tGb3VuZCAmJiBzcG90ID09PSAiYmVkIiAmJiBzLmtpbmQgPT09ICJiZWQiID8gTWF0aC5zaW4oY2xvY2sgKiA0KSAqIDIgOiAwOwogICAgY29uc3Qgd29iYmxlUGxhbnQgPSAhZHVja0ZvdW5kICYmIHNwb3QgPT09ICJwbGFudCIgJiYgcy5raW5kID09PSAicGxhbnQiID8gTWF0aC5zaW4oY2xvY2sgKiAzKSAqIDMgOiAwOwogICAgaWYgKHMua2luZCA9PT0gImFybWNoYWlyIikgewogICAgICBjdHguZmlsbFN0eWxlID0gIiMzZjZmNGMiOwogICAgICByb3VuZFJlY3Qocy54IC0gOCwgcy55IC0gMzYgKyB3b2JibGVBcm0sIHMudyArIDE2LCA0MCwgMTYpOwogICAgICBjdHguZmlsbCgpOwogICAgICBjdHguZmlsbFN0eWxlID0gIiM0ZTg2NjAiOwogICAgICByb3VuZFJlY3Qocy54LCBzLnksIHMudywgcy5oLCAxMCk7CiAgICAgIGN0eC5maWxsKCk7CiAgICAgIGN0eC5maWxsU3R5bGUgPSAiI2M0NTU0YyI7CiAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgY3R4LmVsbGlwc2Uocy54ICsgMzYsIHMueSArIDEwLCAxNiwgMTIsIDAsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgY3R4LmZpbGwoKTsKICAgICAgY3R4LmZpbGxTdHlsZSA9ICIjM2M2ZDhjIjsKICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICBjdHguZWxsaXBzZShzLnggKyA3OCwgcy55ICsgMTIsIDE4LCAxMiwgMCwgMCwgTWF0aC5QSSAqIDIpOwogICAgICBjdHguZmlsbCgpOwogICAgfSBlbHNlIGlmIChzLmtpbmQgPT09ICJiZW5jaCIpIHsKICAgICAgY3R4LmZpbGxTdHlsZSA9ICIjOGQ1ZTNjIjsKICAgICAgY3R4LmZpbGxSZWN0KHMueCArIDEwLCBzLnkgKyBzLmggLSA4LCAxMCwgOCk7CiAgICAgIGN0eC5maWxsUmVjdChzLnggKyBzLncgLSAyMCwgcy55ICsgcy5oIC0gOCwgMTAsIDgpOwogICAgICBjdHguZmlsbFN0eWxlID0gIiNjNDg5NTUiOwogICAgICByb3VuZFJlY3Qocy54LCBzLnksIHMudywgMTgsIDYpOwogICAgICBjdHguZmlsbCgpOwogICAgICBjdHguZmlsbFN0eWxlID0gIiM2ZDhmNTYiOwogICAgICBjdHguZmlsbFJlY3Qocy54ICsgMTYsIHMueSAtIDgsIHMudyAtIDMyLCAxMCk7CiAgICB9IGVsc2UgaWYgKHMua2luZCA9PT0gImNoYWlyIikgewogICAgICBjdHguZmlsbFN0eWxlID0gIiM3YTUzNDAiOwogICAgICBjdHguZmlsbFJlY3Qocy54ICsgOCwgcy55IC0gMzQsIDEwLCA0MCk7CiAgICAgIGN0eC5maWxsUmVjdChzLnggKyBzLncgLSAxOCwgcy55IC0gMzQsIDEwLCA0MCk7CiAgICAgIGN0eC5maWxsUmVjdChzLnggKyA4LCBzLnkgLSAzNCwgcy53IC0gMTYsIDgpOwogICAgICBjdHguZmlsbFN0eWxlID0gIiNjNDg5NTUiOwogICAgICBjdHguZmlsbFJlY3Qocy54LCBzLnksIHMudywgMTQpOwogICAgICBjdHguZmlsbFN0eWxlID0gIiM2YjQ2MzIiOwogICAgICBjdHguZmlsbFJlY3Qocy54ICsgOCwgcy55ICsgMTQsIDgsIHMuaCAtIDE0KTsKICAgICAgY3R4LmZpbGxSZWN0KHMueCArIHMudyAtIDE2LCBzLnkgKyAxNCwgOCwgcy5oIC0gMTQpOwogICAgfSBlbHNlIGlmIChzLmtpbmQgPT09ICJmcmlkZ2UiKSB7CiAgICAgIGN0eC5maWxsU3R5bGUgPSAiI2U3ZWVmMiI7CiAgICAgIHJvdW5kUmVjdChzLngsIHMueSAtIDggKyB3b2JibGVGcmlkZ2UsIHMudywgcy5oICsgOCwgOCk7CiAgICAgIGN0eC5maWxsKCk7CiAgICAgIGN0eC5maWxsU3R5bGUgPSAiI2M1ZDJkOCI7CiAgICAgIGN0eC5maWxsUmVjdChzLnggKyA4LCBzLnkgKyBzLmggKiAwLjQyLCBzLncgLSAxNiwgNCk7CiAgICAgIGN0eC5maWxsU3R5bGUgPSAiIzhhYTBhYSI7CiAgICAgIGN0eC5maWxsUmVjdChzLnggKyBzLncgLSAxOCwgcy55ICsgOCwgNSwgMTgpOwogICAgICBjdHguZmlsbFJlY3Qocy54ICsgcy53IC0gMTgsIHMueSArIHMuaCAqIDAuNTUsIDUsIDE2KTsKICAgIH0gZWxzZSBpZiAocy5raW5kID09PSAiYmVkIikgewogICAgICBjdHguZmlsbFN0eWxlID0gIiM3YTUzNDAiOwogICAgICBjdHguZmlsbFJlY3Qocy54LCBzLnkgKyAxNiwgcy53LCBzLmggLSAxMCk7CiAgICAgIGN0eC5maWxsU3R5bGUgPSAiI2Y3ZjRlZSI7CiAgICAgIHJvdW5kUmVjdChzLnggKyA4LCBzLnkgLSA2ICsgd29iYmxlQmVkLCBzLncgLSA3MCwgMjYsIDgpOwogICAgICBjdHguZmlsbCgpOwogICAgICBjdHguZmlsbFN0eWxlID0gIiM2ZDhmYmYiOwogICAgICBjdHguZmlsbFJlY3Qocy54ICsgNzAsIHMueSAtIDIgKyB3b2JibGVCZWQsIHMudyAtIDg2LCAyMik7CiAgICAgIGN0eC5maWxsU3R5bGUgPSAiI2ZmZmFmMiI7CiAgICAgIHJvdW5kUmVjdChzLnggKyAxNiwgcy55IC0gMTYgKyB3b2JibGVCZWQsIDQyLCAyNCwgOCk7CiAgICAgIGN0eC5maWxsKCk7CiAgICAgIGN0eC5maWxsU3R5bGUgPSAiI2Q3YzRhZSI7CiAgICAgIGN0eC5maWxsUmVjdChzLnggKyA0LCBzLnkgKyBzLmggLSAxNCwgMTAsIDE0KTsKICAgICAgY3R4LmZpbGxSZWN0KHMueCArIHMudyAtIDE2LCBzLnkgKyBzLmggLSAxNCwgMTAsIDE0KTsKICAgIH0gZWxzZSBpZiAocy5raW5kID09PSAicGxhbnQiKSB7CiAgICAgIGN0eC5maWxsU3R5bGUgPSAiI2M0N2I0NSI7CiAgICAgIGN0eC5maWxsUmVjdChzLnggKyAxNiwgcy55ICsgMjQsIHMudyAtIDMyLCBzLmggLSAyNCk7CiAgICAgIGN0eC5maWxsU3R5bGUgPSAiI2E4NmIzYyI7CiAgICAgIGN0eC5maWxsUmVjdChzLnggKyA4LCBzLnkgKyAxOCwgcy53IC0gMTYsIDEyKTsKICAgICAgY3R4LmZpbGxTdHlsZSA9ICIjM2U2YzQ0IjsKICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICBjdHguZWxsaXBzZShzLnggKyBzLncgLyAyLCBzLnkgKyA4ICsgd29iYmxlUGxhbnQsIHMudyAqIDAuNjIsIDI2LCAwLCAwLCBNYXRoLlBJICogMik7CiAgICAgIGN0eC5maWxsKCk7CiAgICAgIGN0eC5maWxsU3R5bGUgPSAiIzVmOGY1NSI7CiAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgY3R4LmVsbGlwc2Uocy54ICsgMTgsIHMueSAtIDggKyB3b2JibGVQbGFudCwgMTYsIDI0LCAtMC41LCAwLCBNYXRoLlBJICogMik7CiAgICAgIGN0eC5maWxsKCk7CiAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgY3R4LmVsbGlwc2Uocy54ICsgcy53IC0gMTYsIHMueSAtIDQgKyB3b2JibGVQbGFudCwgMTYsIDIyLCAwLjQsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgY3R4LmZpbGwoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGRyYXdCZWFtcygpIHsKICAgIGNvbnN0IGJlYW1zID0gbGV2ZWwuYmVhbXMgfHwgW107CiAgICBiZWFtcy5mb3JFYWNoKGZ1bmN0aW9uIChiKSB7CiAgICAgIGNvbnN0IHN3YXkgPSBNYXRoLnNpbihjbG9jayAqIDAuNiArIGIueCAqIDAuMDEpICogMTI7CiAgICAgIGNvbnN0IGcgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQoMCwgMjAsIDAsIEZMT09SX1kpOwogICAgICBnLmFkZENvbG9yU3RvcCgwLCAicmdiYSgyNTUsIDI0NCwgMjAwLCAwLjA4KSIpOwogICAgICBnLmFkZENvbG9yU3RvcCgwLjM1LCAicmdiYSgyNTUsIDIxNCwgMTEwLCAwLjIyKSIpOwogICAgICBnLmFkZENvbG9yU3RvcCgxLCAicmdiYSgyNTUsIDE4NiwgNzAsIDAuNDApIik7CiAgICAgIGN0eC5maWxsU3R5bGUgPSBnOwogICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgIGN0eC5tb3ZlVG8oYi54ICsgc3dheSAqIDAuMywgMjQpOwogICAgICBjdHgubGluZVRvKGIueCArIGIudyArIHN3YXkgKiAwLjMsIDI0KTsKICAgICAgY3R4LmxpbmVUbyhiLnggKyBiLncgKyAxNiArIHN3YXksIEZMT09SX1kpOwogICAgICBjdHgubGluZVRvKGIueCAtIDEyICsgc3dheSwgRkxPT1JfWSk7CiAgICAgIGN0eC5jbG9zZVBhdGgoKTsKICAgICAgY3R4LmZpbGwoKTsKICAgICAgY3R4LmZpbGxTdHlsZSA9ICJyZ2JhKDI1NSwgMjIwLCAxNDAsIDAuNSkiOwogICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgIGN0eC5lbGxpcHNlKGIueCArIGIudyAvIDIgKyBzd2F5LCBGTE9PUl9ZIC0gMiwgYi53ICogMC41NSwgMTEsIDAsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgY3R4LmZpbGwoKTsKICAgICAgY3R4LmZpbGxTdHlsZSA9ICJyZ2JhKDI1NSwgMjU1LCAyNDUsIDAuODUpIjsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHsKICAgICAgICBjb25zdCBzcGFuID0gRkxPT1JfWSAtIDgwOwogICAgICAgIGNvbnN0IG15ID0gNTAgKyAoKGNsb2NrICogMzYgKyBpICogNzAgKyBiLngpICUgc3Bhbik7CiAgICAgICAgY3R4LmZpbGxSZWN0KGIueCArIDggKyBpICogKGIudyAvIDQpICsgc3dheSAqIDAuNCwgbXksIDMsIDMpOwogICAgICB9CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGRyYXdIb3RTYXVjZShjeCwgY3ksIHNjKSB7CiAgICBjdHguc2F2ZSgpOwogICAgY3R4LnRyYW5zbGF0ZShjeCwgY3kpOwogICAgY3R4LnNjYWxlKHNjLCBzYyk7CiAgICBjdHguZmlsbFN0eWxlID0gIiNlMjNiMmYiOwogICAgcm91bmRSZWN0KC0xNCwgLTE2LCAyOCwgMzQsIDUpOwogICAgY3R4LmZpbGwoKTsKICAgIGN0eC5maWxsU3R5bGUgPSAiI2ZmZDU2YSI7CiAgICBjdHguZmlsbFJlY3QoLTE0LCAtMiwgMjgsIDExKTsKICAgIGN0eC5maWxsU3R5bGUgPSAiI2YyYzE0ZSI7CiAgICByb3VuZFJlY3QoLTgsIC0yMiwgMTYsIDgsIDMpOwogICAgY3R4LmZpbGwoKTsKICAgIGN0eC5maWxsU3R5bGUgPSAiI2ZmOGExZSI7CiAgICBjdHguYmVnaW5QYXRoKCk7CiAgICBjdHgubW92ZVRvKDAsIC04KTsKICAgIGN0eC5xdWFkcmF0aWNDdXJ2ZVRvKDcsIDAsIDAsIDgpOwogICAgY3R4LnF1YWRyYXRpY0N1cnZlVG8oLTcsIDAsIDAsIC04KTsKICAgIGN0eC5maWxsKCk7CiAgICBjdHguZmlsbFN0eWxlID0gIiNmZmY2ZWEiOwogICAgY3R4LmZpbGxSZWN0KC04LCAtMjAsIDUsIDMpOwogICAgY3R4LnJlc3RvcmUoKTsKICB9CgogIGZ1bmN0aW9uIGRyYXdTdXNoaShjeCwgY3ksIHNjKSB7CiAgICBjdHguc2F2ZSgpOwogICAgY3R4LnRyYW5zbGF0ZShjeCwgY3kpOwogICAgY3R4LnNjYWxlKHNjLCBzYyk7CiAgICBjdHguZmlsbFN0eWxlID0gIiNmZmY2ZWEiOwogICAgcm91bmRSZWN0KC0xNiwgLTQsIDMyLCAxOCwgNyk7CiAgICBjdHguZmlsbCgpOwogICAgY3R4LmZpbGxTdHlsZSA9ICIjMjQzNjJlIjsKICAgIGN0eC5maWxsUmVjdCgtMTYsIDIsIDMyLCA2KTsKICAgIGN0eC5maWxsU3R5bGUgPSAiI2ZmOGI2YSI7CiAgICByb3VuZFJlY3QoLTE0LCAtMTQsIDI4LCAxMiwgNik7CiAgICBjdHguZmlsbCgpOwogICAgY3R4LmZpbGxTdHlsZSA9ICIjM2EyNDE4IjsKICAgIGN0eC5iZWdpblBhdGgoKTsKICAgIGN0eC5hcmMoLTYsIC05LCAxLjUsIDAsIE1hdGguUEkgKiAyKTsKICAgIGN0eC5hcmMoNSwgLTksIDEuNSwgMCwgTWF0aC5QSSAqIDIpOwogICAgY3R4LmZpbGwoKTsKICAgIGN0eC5maWxsU3R5bGUgPSAiI2ZmZiI7CiAgICBjdHguZmlsbFJlY3QoLTEsIC02LCA2LCAyKTsKICAgIGN0eC5yZXN0b3JlKCk7CiAgfQoKICBmdW5jdGlvbiBkcmF3Q2hpY2tlbkJ1Y2tldChjeCwgY3ksIHNjKSB7CiAgICBjdHguc2F2ZSgpOwogICAgY3R4LnRyYW5zbGF0ZShjeCwgY3kpOwogICAgY3R4LnNjYWxlKHNjLCBzYyk7CiAgICBjdHguZmlsbFN0eWxlID0gIiNlMjNiMmYiOwogICAgY3R4LmJlZ2luUGF0aCgpOwogICAgY3R4Lm1vdmVUbygtMTYsIC02KTsKICAgIGN0eC5saW5lVG8oMTYsIC02KTsKICAgIGN0eC5saW5lVG8oMTIsIDE2KTsKICAgIGN0eC5saW5lVG8oLTEyLCAxNik7CiAgICBjdHguY2xvc2VQYXRoKCk7CiAgICBjdHguZmlsbCgpOwogICAgY3R4LmZpbGxTdHlsZSA9ICIjZmZmNmVhIjsKICAgIGN0eC5maWxsUmVjdCgtMTUsIC0xLCAzMCwgNCk7CiAgICBjdHguZmlsbFJlY3QoLTE0LCA3LCAyOCwgNCk7CiAgICBjdHguZmlsbFN0eWxlID0gIiNjNDJlMjQiOwogICAgcm91bmRSZWN0KC0xOCwgLTEyLCAzNiwgNywgMyk7CiAgICBjdHguZmlsbCgpOwogICAgY3R4LnN0cm9rZVN0eWxlID0gIiNmMmMxNGUiOwogICAgY3R4LmxpbmVXaWR0aCA9IDI7CiAgICBjdHguYmVnaW5QYXRoKCk7CiAgICBjdHguYXJjKDAsIC0xNCwgOCwgTWF0aC5QSSwgMCk7CiAgICBjdHguc3Ryb2tlKCk7CiAgICBjdHguZmlsbFN0eWxlID0gIiNmMGI0MjkiOwogICAgY3R4LmJlZ2luUGF0aCgpOwogICAgY3R4LmVsbGlwc2UoMiwgLTE2LCA4LCA2LCAwLjIsIDAsIE1hdGguUEkgKiAyKTsKICAgIGN0eC5maWxsKCk7CiAgICBjdHguZmlsbFN0eWxlID0gIiNlMzlhMjAiOwogICAgY3R4LmZpbGxSZWN0KC0xLCAtMTIsIDQsIDgpOwogICAgY3R4LmZpbGxTdHlsZSA9ICIjZmZmNmVhIjsKICAgIGN0eC5iZWdpblBhdGgoKTsKICAgIGN0eC5hcmMoNSwgLTE3LCAxLjMsIDAsIE1hdGguUEkgKiAyKTsKICAgIGN0eC5maWxsKCk7CiAgICBjdHgucmVzdG9yZSgpOwogIH0KCiAgZnVuY3Rpb24gZHJhd0l0ZW1HcmFwaGljKHR5cGUsIGN4LCBjeSwgc2MpIHsKICAgIGlmICh0eXBlID09PSAiaG90c2F1Y2UiKSBkcmF3SG90U2F1Y2UoY3gsIGN5LCBzYyk7CiAgICBlbHNlIGlmICh0eXBlID09PSAic3VzaGkiKSBkcmF3U3VzaGkoY3gsIGN5LCBzYyk7CiAgICBlbHNlIGRyYXdDaGlja2VuQnVja2V0KGN4LCBjeSwgc2MpOwogIH0KCiAgZnVuY3Rpb24gZHJhd1BpY2t1cHMoKSB7CiAgICBwaWNrdXBzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgaWYgKGl0ZW0uZ290KSByZXR1cm47CiAgICAgIGNvbnN0IGJvYiA9IE1hdGguc2luKGNsb2NrICogMyArIGl0ZW0ueCAqIDAuMDIpICogMzsKICAgICAgY29uc3QgY3ggPSBpdGVtLnggKyBpdGVtLncgLyAyOwogICAgICBjb25zdCBjeSA9IGl0ZW0ueSArIGl0ZW0uaCAvIDIgKyBib2I7CiAgICAgIGN0eC5maWxsU3R5bGUgPSAicmdiYSg2MCw0MCwyMCwwLjE4KSI7CiAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgY3R4LmVsbGlwc2UoY3gsIGl0ZW0ueSArIGl0ZW0uaCArIDEsIDE0LCA0LCAwLCAwLCBNYXRoLlBJICogMik7CiAgICAgIGN0eC5maWxsKCk7CiAgICAgIGRyYXdJdGVtR3JhcGhpYyhpdGVtLnR5cGUsIGN4LCBjeSwgMSk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGRyYXdSb29tKCkgewogICAgY29uc3Qgd2FsbCA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCgwLCAwLCAwLCBGTE9PUl9ZKTsKICAgIHdhbGwuYWRkQ29sb3JTdG9wKDAsIGxldmVsLndhbGxUb3ApOwogICAgd2FsbC5hZGRDb2xvclN0b3AoMSwgbGV2ZWwud2FsbEJvdCk7CiAgICBjdHguZmlsbFN0eWxlID0gd2FsbDsKICAgIGN0eC5maWxsUmVjdCgwLCAwLCBsZXZlbC53aWR0aCwgRkxPT1JfWSk7CiAgICBjdHguZmlsbFN0eWxlID0gbGV2ZWwud2FpbnNjb3Q7CiAgICBjdHguZmlsbFJlY3QoMCwgMzAwLCBsZXZlbC53aWR0aCwgRkxPT1JfWSAtIDMwMCk7CiAgICBjdHguZmlsbFN0eWxlID0gInJnYmEoMTIwLCA4MCwgNDAsIDAuMTgpIjsKICAgIGN0eC5maWxsUmVjdCgwLCAyOTYsIGxldmVsLndpZHRoLCA1KTsKICAgIGN0eC5maWxsU3R5bGUgPSAiI2Y3ZjFlNiI7CiAgICBjdHguZmlsbFJlY3QoMCwgRkxPT1JfWSAtIDEyLCBsZXZlbC53aWR0aCwgMTIpOwoKICAgIGN0eC5maWxsU3R5bGUgPSBsZXZlbC5mbG9vcjsKICAgIGN0eC5maWxsUmVjdCgwLCBGTE9PUl9ZLCBsZXZlbC53aWR0aCwgVklFV19IIC0gRkxPT1JfWSk7CiAgICBjdHguZmlsbFN0eWxlID0gInJnYmEoODAsIDQyLCAxNiwgMC4xNikiOwogICAgZm9yIChsZXQgeCA9IDA7IHggPCBsZXZlbC53aWR0aDsgeCArPSA0NikgY3R4LmZpbGxSZWN0KHgsIEZMT09SX1ksIDIsIFZJRVdfSCAtIEZMT09SX1kpOwoKICAgIGxldmVsLnJ1Z3MuZm9yRWFjaChmdW5jdGlvbiAocikgewogICAgICBjdHguZmlsbFN0eWxlID0gInJnYmEoMTc2LCA3MiwgNTgsIDAuODUpIjsKICAgICAgcm91bmRSZWN0KHIueCwgRkxPT1JfWSAtIDgsIHIudywgMjIsIDgpOwogICAgICBjdHguZmlsbCgpOwogICAgICBjdHguZmlsbFN0eWxlID0gInJnYmEoMjQwLCAyMTQsIDE3MCwgMC4zNSkiOwogICAgICBjdHguZmlsbFJlY3Qoci54ICsgMTAsIEZMT09SX1kgLSAyLCByLncgLSAyMCwgNCk7CiAgICB9KTsKCiAgICBmb3IgKGxldCB4ID0gODA7IHggPCBsZXZlbC53aWR0aDsgeCArPSAzNDApIHsKICAgICAgY3R4LmZpbGxTdHlsZSA9ICIjZjdmMWU2IjsKICAgICAgY3R4LmZpbGxSZWN0KHgsIDc4LCA3MCwgNTQpOwogICAgICBjdHguZmlsbFN0eWxlID0gIiM3ZWEwYjgiOwogICAgICBjdHguZmlsbFJlY3QoeCArIDYsIDg0LCA1OCwgNDIpOwogICAgICBjdHguc3Ryb2tlU3R5bGUgPSAiI2M0YTU3NCI7CiAgICAgIGN0eC5saW5lV2lkdGggPSA0OwogICAgICBjdHguc3Ryb2tlUmVjdCh4LCA3OCwgNzAsIDU0KTsKICAgIH0KCiAgICBjb25zdCBkdWNrV2luID0gbGV2ZWwuZHVjay5zcG90ID09PSAid2luZG93IjsKICAgIHBsYXRmb3Jtcy5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7CiAgICAgIGlmIChwLmtpbmQgPT09ICJ3aW5kb3ciKSBkcmF3V2luZG93KHAsIGR1Y2tXaW4gJiYgIWR1Y2tGb3VuZCAmJiBwLnggPCA1MDApOwogICAgICBlbHNlIGlmIChwLmtpbmQgPT09ICJkb29yIikgZHJhd0Rvb3IocCk7CiAgICAgIGVsc2UgaWYgKHAua2luZCA9PT0gInNoZWxmIikgZHJhd1NoZWxmKHApOwogICAgICBlbHNlIGlmIChwLmtpbmQgPT09ICJ0YWJsZSIpIGRyYXdUYWJsZShwLCBsZXZlbC5kdWNrLnNwb3QgPT09ICJ0YWJsZSIgJiYgIWR1Y2tGb3VuZCk7CiAgICAgIGVsc2UgaWYgKHAua2luZCA9PT0gImJvb2tzIikgZHJhd0Jvb2tzKHApOwogICAgICBlbHNlIGlmIChwLmtpbmQgPT09ICJjb3VudGVyIikgZHJhd0NvdW50ZXIocCk7CiAgICB9KTsKICAgIHNvbGlkcy5mb3JFYWNoKGRyYXdTb2xpZCk7CiAgICBkcmF3QmVhbXMoKTsKICAgIGRyYXdQaWNrdXBzKCk7CgogICAgY3R4LmZpbGxTdHlsZSA9ICIjNWY4ZjU1IjsKICAgIHBsYXRmb3Jtcy5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7CiAgICAgIGlmIChwLmtpbmQgIT09ICJ3aW5kb3ciKSByZXR1cm47CiAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgY3R4LmVsbGlwc2UocC54ICsgMjgsIHAueSAtIDEwLCAxNCwgMTAsIDAsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgY3R4LmZpbGwoKTsKICAgICAgY3R4LmZpbGxTdHlsZSA9ICIjYzQ3YjQ1IjsKICAgICAgY3R4LmZpbGxSZWN0KHAueCArIDIyLCBwLnkgLSA2LCAxMiwgOCk7CiAgICAgIGN0eC5maWxsU3R5bGUgPSAiIzVmOGY1NSI7CiAgICB9KTsKCiAgICBpZiAoZHVja0ZvdW5kKSB7CiAgICAgIGNvbnN0IGJvYiA9IE1hdGguc2luKGNsb2NrICogMykgKiAyOwogICAgICBkcmF3RHVjayhsZXZlbC5kdWNrLmF4LCBsZXZlbC5kdWNrLmF5ICsgYm9iLCAxLjE1LCBNYXRoLnNpbihjbG9jayAqIDIpICogMC4wOCk7CiAgICB9CgogICAgaWYgKGR1Y2tGb3VuZCAmJiBzcGlubmVyKSB7CiAgICAgIGN0eC5maWxsU3R5bGUgPSAicmdiYSg4MCwgNTAsIDIwLCAwLjE4KSI7CiAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgY3R4LmVsbGlwc2Uoc3Bpbm5lci54ICsgc3Bpbm5lci53IC8gMiwgc3Bpbm5lci55ICsgc3Bpbm5lci5oICsgMiwgc3Bpbm5lci53ICogMC40LCA2LCAwLCAwLCBNYXRoLlBJICogMik7CiAgICAgIGN0eC5maWxsKCk7CiAgICAgIGRyYXdTcGlubmVyKHNwaW5uZXIueCwgc3Bpbm5lci55LCBzcGlubmVyLncsIHNwaW5uZXIuaCwgYmVhdCA9PT0gInN1bW1vbiIgfHwgYmVhdCA9PT0gImZlYXN0IiB8fCBiZWF0ID09PSAiY2xlYXIiKTsKICAgIH0KCiAgICB0cmVhdHMuZm9yRWFjaChmdW5jdGlvbiAodCkgewogICAgICBpZiAodC5lYXRlbikgcmV0dXJuOwogICAgICBjb25zdCB5ID0gdC5sYW5kZWQgPyB0LnkgKyBNYXRoLnNpbihjbG9jayAqIDQgKyB0LmJvYikgKiAyIDogdC55OwogICAgICBjb25zdCBzcGluID0gdC5sYW5kZWQgPyAwIDogY2xvY2sgKiA4ICsgdC5ib2I7CiAgICAgIGN0eC5zYXZlKCk7CiAgICAgIGN0eC50cmFuc2xhdGUodC54LCB5KTsKICAgICAgY3R4LnJvdGF0ZShzcGluKTsKICAgICAgY3R4LmZpbGxTdHlsZSA9ICIjZTM5YTU1IjsKICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICBjdHguZWxsaXBzZSgwLCAwLCA4LCA1LCAwLCAwLCBNYXRoLlBJICogMik7CiAgICAgIGN0eC5maWxsKCk7CiAgICAgIGN0eC5maWxsU3R5bGUgPSAiI2YyZDJhNCI7CiAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgY3R4LmFyYygtMiwgLTEsIDIsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgY3R4LmZpbGwoKTsKICAgICAgY3R4LnJlc3RvcmUoKTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gZHJhd0FjdG9ycygpIHsKICAgIGd1ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uIChnKSB7CiAgICAgIGNvbnN0IHJ1bm5pbmcgPSBiZWF0ID09PSAiZmVhc3QiOwogICAgICBjb25zdCBraW5kID0gZy50aW50ID09PSAxID8gIm8iIDogZy50aW50ID09PSAyID8gImIiIDogImciOwogICAgICBjdHguZmlsbFN0eWxlID0gInJnYmEoNjAsNDAsMjAsMC4xOCkiOwogICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgIGN0eC5lbGxpcHNlKGcueCArIDE4LCBGTE9PUl9ZICsgMiwgMzQsIDcsIDAsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgY3R4LmZpbGwoKTsKICAgICAgZHJhd01vZGVsKGtpbmQsIGcueCArIDE4LCBGTE9PUl9ZLCBnLmZhY2luZywgcnVubmluZyA\/ICJ3YWxrIiA6ICJpZGxlIiwgZy5ob3AsIDApOwogICAgfSk7CgogICAgY29uc3QgbmFwcGluZyA9IGFzbGVlcCA+IDA7CiAgICBjb25zdCBydW5uaW5nID0gb25Hcm91bmQgJiYgTWF0aC5hYnMocGxheWVyLnZ4KSA+IDQwICYmICFuYXBwaW5nOwogICAgY29uc3Qgc3EgPSBzcXVhc2ggKyAocnVubmluZyA\/IE1hdGguYWJzKE1hdGguc2luKHJ1blBoYXNlKSkgKiAwLjEgOiAwKTsKICAgIGxldCBjYXRTdGF0ZSA9ICJpZGxlIjsKICAgIGlmIChuYXBwaW5nKSBjYXRTdGF0ZSA9ICJuYXAiOwogICAgZWxzZSBpZiAoIW9uR3JvdW5kKSBjYXRTdGF0ZSA9ICJhaXIiOwogICAgZWxzZSBpZiAocnVubmluZykgY2F0U3RhdGUgPSAid2FsayI7CiAgICBjdHguZmlsbFN0eWxlID0gInJnYmEoNjAsNDAsMjAsMC4yKSI7CiAgICBjdHguYmVnaW5QYXRoKCk7CiAgICBjb25zdCBzaGFkb3dXID0gbmFwcGluZyA\/IDcwIDogMzY7CiAgICBjdHguZWxsaXBzZShwbGF5ZXIueCArIFBXIC8gMiwgcGxheWVyLnkgKyBQSCwgc2hhZG93VywgNiwgMCwgMCwgTWF0aC5QSSAqIDIpOwogICAgY3R4LmZpbGwoKTsKICAgIGRyYXdNb2RlbCgiZyIsIHBsYXllci54ICsgUFcgLyAyLCBwbGF5ZXIueSArIFBILCBmYWNpbmcsIGNhdFN0YXRlLCBydW5QaGFzZSwgbmFwcGluZyA\/IDAgOiBzcSk7CgogICAgaWYgKG5hcHBpbmcpIHsKICAgICAgY29uc3QgbiA9IDEgKyAoTWF0aC5mbG9vcihjbG9jayAqIDMpICUgMyk7CiAgICAgIGxldCB3b3JkID0gInoiOwogICAgICBpZiAobiA9PT0gMikgd29yZCA9ICJ6WiI7CiAgICAgIGlmIChuID09PSAzKSB3b3JkID0gInpaeiI7CiAgICAgIGN0eC5maWxsU3R5bGUgPSAiIzVjNDYzNiI7CiAgICAgIGN0eC5mb250ID0gIjcwMCAyMnB4IFRyZWJ1Y2hldCBNUywgU2Vnb2UgVUksIHNhbnMtc2VyaWYiOwogICAgICBjdHguZmlsbFRleHQod29yZCwgcGxheWVyLnggKyBQVyArIDE2LCBwbGF5ZXIueSAtIDI0IC0gTWF0aC5zaW4oY2xvY2sgKiAzKSAqIDYpOwogICAgfQoKICAgIHBhcnRpY2xlcy5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7CiAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IDEgLSBwLmFnZSAvIHAubGlmZTsKICAgICAgY3R4LmZpbGxTdHlsZSA9IHAuY29sb3I7CiAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgY3R4LmFyYyhwLngsIHAueSwgcC5yIHx8IDMsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgY3R4LmZpbGwoKTsKICAgICAgY3R4Lmdsb2JhbEFscGhhID0gMTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gb2JqZWN0aXZlKCkgewogICAgaWYgKGFzbGVlcCA+IDApIHJldHVybiAiU3VuYmVhbSBuYXAuIFRoZSBjYXQgd2lsbCBnZXQgYmFjayB1cC4iOwogICAgaWYgKGJlYXQgPT09ICJzZWVrIikgcmV0dXJuICJUaGUgZHVjayBpcyBoaWRpbmcgaW4gdGhpcyByb29tLiI7CiAgICBpZiAoYmVhdCA9PT0gImNsaW1iIikgcmV0dXJuICJLbm9jayB0aGUgdHJlYXQgc3Bpbm5lciBvZmYgdGhlIHNoZWxmLiI7CiAgICBpZiAoYmVhdCA9PT0gImZhbGwiKSByZXR1cm4gIkRvd24gaXQgZ29lcy4iOwogICAgaWYgKGJlYXQgPT09ICJzdW1tb24iKSByZXR1cm4gIkp1bXAgb24gdGhlIGR1Y2sgc3Bpbm5lci4gSXQgc3BpdHMgdHJlYXRzLiI7CiAgICBpZiAoYmVhdCA9PT0gImZlYXN0IikgcmV0dXJuICJUcmVhdHMgYXJlIG91dC4gVGhlIGNhdHMgYXJlIHJ1bm5pbmcgaW4uIjsKICAgIHJldHVybiBsZXZlbEluZGV4IDwgTEVWRUxTLmxlbmd0aCAtIDEgPyAiVHJlYXRzIGdvbmUuIE5leHQgbGV2ZWwuIiA6ICJUaGUgY2F0cyBmaW5pc2hlZCB0aGUgdHJlYXRzLiI7CiAgfQoKICBmdW5jdGlvbiB0eXBlc0ZvdW5kKCkgewogICAgbGV0IG4gPSAwOwogICAgaWYgKGJhZy5ob3RzYXVjZSkgbiArPSAxOwogICAgaWYgKGJhZy5zdXNoaSkgbiArPSAxOwogICAgaWYgKGJhZy5jaGlja2VuKSBuICs9IDE7CiAgICByZXR1cm4gbjsKICB9CgogIGZ1bmN0aW9uIGRyYXdCYWcoKSB7CiAgICBjb25zdCB4ID0gNzA4OwogICAgY3R4LmZpbGxTdHlsZSA9ICJyZ2JhKDI1NSwgMjUwLCAyNDIsIDAuOTQpIjsKICAgIHJvdW5kUmVjdCh4LCAxNCwgMjM2LCA2NCwgMTQpOwogICAgY3R4LmZpbGwoKTsKICAgIGN0eC5maWxsU3R5bGUgPSAiI2M4NjQyMiI7CiAgICBjdHguZm9udCA9ICI3MDAgMTRweCBUcmVidWNoZXQgTVMsIFNlZ29lIFVJLCBzYW5zLXNlcmlmIjsKICAgIGN0eC5maWxsVGV4dCh0eXBlc0ZvdW5kKCkgKyAiLzMgdHlwZXMiLCB4ICsgMTIsIDM0KTsKICAgIGNvbnN0IHJvdyA9IFsKICAgICAgWyJob3RzYXVjZSIsIGJhZy5ob3RzYXVjZSwgMTE4XSwKICAgICAgWyJzdXNoaSIsIGJhZy5zdXNoaSwgMTY4XSwKICAgICAgWyJjaGlja2VuIiwgYmFnLmNoaWNrZW4sIDIxNF0KICAgIF07CiAgICByb3cuZm9yRWFjaChmdW5jdGlvbiAoZW50cnkpIHsKICAgICAgZHJhd0l0ZW1HcmFwaGljKGVudHJ5WzBdLCB4ICsgZW50cnlbMl0sIDM2LCAwLjQ2KTsKICAgICAgY3R4LmZpbGxTdHlsZSA9ICIjNWM0NjM2IjsKICAgICAgY3R4LmZvbnQgPSAiNzAwIDEzcHggVHJlYnVjaGV0IE1TLCBTZWdvZSBVSSwgc2Fucy1zZXJpZiI7CiAgICAgIGN0eC50ZXh0QWxpZ24gPSAibGVmdCI7CiAgICAgIGN0eC5maWxsVGV4dChTdHJpbmcoZW50cnlbMV0pLCB4ICsgZW50cnlbMl0gKyAxMiwgNTgpOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBkcmF3UG9wdXAoKSB7CiAgICBpZiAoIXBvcHVwKSByZXR1cm47CiAgICBjb25zdCBsaWZlID0gMS43OwogICAgY29uc3QgYWdlID0gcG9wdXAuYWdlOwogICAgbGV0IGFscGhhID0gMTsKICAgIGlmIChhZ2UgPCAwLjEyKSBhbHBoYSA9IGFnZSAvIDAuMTI7CiAgICBlbHNlIGlmIChhZ2UgPiBsaWZlIC0gMC40NSkgYWxwaGEgPSBNYXRoLm1heCgwLCAobGlmZSAtIGFnZSkgLyAwLjQ1KTsKICAgIGNvbnN0IHJpc2UgPSBNYXRoLm1pbigxNCwgYWdlICogMzYpOwogICAgY3R4LnNhdmUoKTsKICAgIGN0eC5nbG9iYWxBbHBoYSA9IGFscGhhOwogICAgY29uc3QgeSA9IDIxNCAtIHJpc2U7CiAgICBjdHguZmlsbFN0eWxlID0gInJnYmEoMjU1LCAyNTAsIDI0MiwgMC45NikiOwogICAgcm91bmRSZWN0KFZJRVdfVyAvIDIgLSAyMTAsIHksIDQyMCwgMTI4LCAxOCk7CiAgICBjdHguZmlsbCgpOwogICAgZHJhd0l0ZW1HcmFwaGljKHBvcHVwLnR5cGUsIFZJRVdfVyAvIDIsIHkgKyA0OCwgMS44NSk7CiAgICBjdHguZmlsbFN0eWxlID0gIiM2YjNhMWYiOwogICAgY3R4LmZvbnQgPSAiNzAwIDE2cHggVHJlYnVjaGV0IE1TLCBTZWdvZSBVSSwgc2Fucy1zZXJpZiI7CiAgICBjdHgudGV4dEFsaWduID0gImNlbnRlciI7CiAgICBjdHguZmlsbFRleHQoSVRFTV9OQU1FU1twb3B1cC50eXBlXSwgVklFV19XIC8gMiwgeSArIDEwOCk7CiAgICBjdHgudGV4dEFsaWduID0gImxlZnQiOwogICAgY3R4LnJlc3RvcmUoKTsKICB9CgogIGZ1bmN0aW9uIGRyYXdIdWQoKSB7CiAgICBjdHguZmlsbFN0eWxlID0gInJnYmEoMjU1LCAyNTAsIDI0MiwgMC45NCkiOwogICAgcm91bmRSZWN0KDE2LCAxNCwgNTIwLCA2NCwgMTQpOwogICAgY3R4LmZpbGwoKTsKICAgIGN0eC5maWxsU3R5bGUgPSAiI2M4NjQyMiI7CiAgICBjdHguZm9udCA9ICI3MDAgMjJweCBUcmVidWNoZXQgTVMsIFNlZ29lIFVJLCBzYW5zLXNlcmlmIjsKICAgIGNvbnN0IGxhYmVsID0gIkxldmVsICIgKyAobGV2ZWxJbmRleCArIDEpOwogICAgY3R4LmZpbGxUZXh0KGxhYmVsLCAzMCwgNDApOwogICAgY29uc3QgbHcgPSBjdHgubWVhc3VyZVRleHQobGFiZWwpLndpZHRoOwogICAgY3R4LmZpbGxTdHlsZSA9ICIjNmIzYTFmIjsKICAgIGN0eC5mb250ID0gIjcwMCAxNnB4IFRyZWJ1Y2hldCBNUywgU2Vnb2UgVUksIHNhbnMtc2VyaWYiOwogICAgY3R4LmZpbGxUZXh0KGxldmVsLm5hbWUsIDQwICsgbHcsIDM5KTsKICAgIGN0eC5mb250ID0gIjE1cHggVHJlYnVjaGV0IE1TLCBTZWdvZSBVSSwgc2Fucy1zZXJpZiI7CiAgICBjdHguZmlsbFN0eWxlID0gIiM1YzQ2MzYiOwogICAgY3R4LmZpbGxUZXh0KG9iamVjdGl2ZSgpLCAzMCwgNjIpOwogICAgZHJhd0JhZygpOwogICAgZHJhd1BvcHVwKCk7CiAgICBpZiAoZm91bmRGbGFzaCA+IDApIHsKICAgICAgY3R4LmZpbGxTdHlsZSA9ICJyZ2JhKDI1NSwgMjUwLCAyNDIsIDAuOTQpIjsKICAgICAgcm91bmRSZWN0KFZJRVdfVyAvIDIgLSAxMzAsIDkyLCAyNjAsIDM2LCAxMik7CiAgICAgIGN0eC5maWxsKCk7CiAgICAgIGN0eC5maWxsU3R5bGUgPSAiI2M4NjQyMiI7CiAgICAgIGN0eC5mb250ID0gIjcwMCAxNnB4IFRyZWJ1Y2hldCBNUywgU2Vnb2UgVUksIHNhbnMtc2VyaWYiOwogICAgICBjdHgudGV4dEFsaWduID0gImNlbnRlciI7CiAgICAgIGN0eC5maWxsVGV4dCgiWW91IGZvdW5kIHRoZSBkdWNrISIsIFZJRVdfVyAvIDIsIDExNik7CiAgICAgIGN0eC50ZXh0QWxpZ24gPSAibGVmdCI7CiAgICB9CiAgICBpZiAobGV2ZWxGbGFzaCA+IDAuMTUgJiYgbW9kZSA9PT0gInBsYXkiKSB7CiAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IE1hdGgubWluKDEsIGxldmVsRmxhc2gpOwogICAgICBjdHguZmlsbFN0eWxlID0gInJnYmEoMjU1LCAyNTAsIDI0MiwgMC45NCkiOwogICAgICByb3VuZFJlY3QoVklFV19XIC8gMiAtIDE1MCwgMTUwLCAzMDAsIDY0LCAxNik7CiAgICAgIGN0eC5maWxsKCk7CiAgICAgIGN0eC5maWxsU3R5bGUgPSAiI2M4NjQyMiI7CiAgICAgIGN0eC5mb250ID0gIjcwMCAzMnB4IFRyZWJ1Y2hldCBNUywgU2Vnb2UgVUksIHNhbnMtc2VyaWYiOwogICAgICBjdHgudGV4dEFsaWduID0gImNlbnRlciI7CiAgICAgIGN0eC5maWxsVGV4dCgiTGV2ZWwgIiArIChsZXZlbEluZGV4ICsgMSksIFZJRVdfVyAvIDIsIDE5Mik7CiAgICAgIGN0eC50ZXh0QWxpZ24gPSAibGVmdCI7CiAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IDE7CiAgICB9CiAgfQoKICBmdW5jdGlvbiByZXNpemUoKSB7CiAgICBjb25zdCByZWN0ID0gY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgY29uc3QgZHByID0gTWF0aC5taW4od2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSwgMik7CiAgICBjb25zdCB3ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChyZWN0LndpZHRoICogZHByKSk7CiAgICBjb25zdCBoID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChyZWN0LmhlaWdodCAqIGRwcikpOwogICAgaWYgKGNhbnZhcy53aWR0aCAhPT0gdyB8fCBjYW52YXMuaGVpZ2h0ICE9PSBoKSB7CiAgICAgIGNhbnZhcy53aWR0aCA9IHc7CiAgICAgIGNhbnZhcy5oZWlnaHQgPSBoOwogICAgfQogIH0KCiAgZnVuY3Rpb24gZnJhbWUobm93KSB7CiAgICBjb25zdCB0ID0gbm93ICogMC4wMDE7CiAgICBjb25zdCBkdCA9IE1hdGgubWluKDAuMDMzLCBNYXRoLm1heCgwLCB0IC0gKGZyYW1lLnByZXYgfHwgdCkpKTsKICAgIGZyYW1lLnByZXYgPSB0OwogICAgcmVzaXplKCk7CiAgICB1cGRhdGUoZHQpOwoKICAgIGN0eC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7CiAgICBjdHguZmlsbFN0eWxlID0gIiMyNDE3MGYiOwogICAgY3R4LmZpbGxSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7CiAgICBjb25zdCBzY2FsZSA9IE1hdGgubWluKGNhbnZhcy53aWR0aCAvIFZJRVdfVywgY2FudmFzLmhlaWdodCAvIFZJRVdfSCk7CiAgICBjb25zdCBveCA9IChjYW52YXMud2lkdGggLSBWSUVXX1cgKiBzY2FsZSkgLyAyOwogICAgY29uc3Qgb3kgPSAoY2FudmFzLmhlaWdodCAtIFZJRVdfSCAqIHNjYWxlKSAvIDI7CiAgICBjdHguc2V0VHJhbnNmb3JtKHNjYWxlLCAwLCAwLCBzY2FsZSwgb3ggLSBjYW1YICogc2NhbGUsIG95KTsKICAgIGRyYXdSb29tKCk7CiAgICBkcmF3QWN0b3JzKCk7CiAgICBjdHguc2V0VHJhbnNmb3JtKHNjYWxlLCAwLCAwLCBzY2FsZSwgb3gsIG95KTsKICAgIGlmIChtb2RlID09PSAicGxheSIgfHwgbW9kZSA9PT0gIndpbiIpIGRyYXdIdWQoKTsKICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmcmFtZSk7CiAgfQoKICBmdW5jdGlvbiBzZXRIZWxkKG5hbWUsIGRvd24pIHsKICAgIGlmIChtb2RlICE9PSAicGxheSIpIHJldHVybjsKICAgIGlmIChuYW1lID09PSAianVtcCIpIHsKICAgICAgaWYgKGRvd24gJiYgIWhlbGQuanVtcCkganVtcFF1ZXVlZCA9IHRydWU7CiAgICAgIGhlbGQuanVtcCA9IGRvd247CiAgICB9IGVsc2UgewogICAgICBoZWxkW25hbWVdID0gZG93bjsKICAgIH0KICB9CgogIGNvbnN0IGtleU1hcCA9IHsKICAgIEFycm93TGVmdDogImxlZnQiLCBBcnJvd1JpZ2h0OiAicmlnaHQiLCBBcnJvd1VwOiAianVtcCIsCiAgICBLZXlBOiAibGVmdCIsIEtleUQ6ICJyaWdodCIsIEtleVc6ICJqdW1wIiwgU3BhY2U6ICJqdW1wIgogIH07CiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCBmdW5jdGlvbiAoZSkgewogICAgY29uc3QgbmFtZSA9IGtleU1hcFtlLmNvZGVdOwogICAgaWYgKCFuYW1lKSByZXR1cm47CiAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICBpZiAoZS5yZXBlYXQpIHJldHVybjsKICAgIHNldEhlbGQobmFtZSwgdHJ1ZSk7CiAgfSk7CiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIiwgZnVuY3Rpb24gKGUpIHsKICAgIGNvbnN0IG5hbWUgPSBrZXlNYXBbZS5jb2RlXTsKICAgIGlmICghbmFtZSkgcmV0dXJuOwogICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgaWYgKG5hbWUgPT09ICJqdW1wIikgaGVsZC5qdW1wID0gZmFsc2U7CiAgICBlbHNlIGhlbGRbbmFtZV0gPSBmYWxzZTsKICB9KTsKICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsIGZ1bmN0aW9uICgpIHsKICAgIGhlbGQubGVmdCA9IGhlbGQucmlnaHQgPSBoZWxkLmp1bXAgPSBmYWxzZTsKICB9KTsKCiAgZnVuY3Rpb24gYmluZFBhZChpZCwgbmFtZSkgewogICAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwogICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBidG4uc2V0UG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpOwogICAgICBzZXRIZWxkKG5hbWUsIHRydWUpOwogICAgfSk7CiAgICBmdW5jdGlvbiByZWxlYXNlKCkgeyBzZXRIZWxkKG5hbWUsIGZhbHNlKTsgfQogICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsIHJlbGVhc2UpOwogICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLCByZWxlYXNlKTsKICB9CiAgYmluZFBhZCgicGFkLWxlZnQiLCAibGVmdCIpOwogIGJpbmRQYWQoInBhZC1yaWdodCIsICJyaWdodCIpOwogIGJpbmRQYWQoInBhZC1qdW1wIiwgImp1bXAiKTsKCiAgZnVuY3Rpb24gYmVnaW5QbGF5KCkgewogICAgdW5sb2NrQXVkaW8oKTsKICAgIGJhZy5ob3RzYXVjZSA9IDA7CiAgICBiYWcuc3VzaGkgPSAwOwogICAgYmFnLmNoaWNrZW4gPSAwOwogICAgcG9wdXAgPSBudWxsOwogICAgc3RhcnRMZXZlbCgwKTsKICAgIG1vZGUgPSAicGxheSI7CiAgICBvdmVybGF5LmhpZGRlbiA9IHRydWU7CiAgICBwYWRzLmhpZGRlbiA9IGZhbHNlOwogICAgYmVlcCg1MDAsIDAuMDgsICJ0cmlhbmdsZSIsIDAuMDQpOwogIH0KICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3RhcnQtYnRuIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBiZWdpblBsYXkpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN0YXJ0LWJ0biIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYmVnaW5QbGF5KTsKCiAgc3RhcnRMZXZlbCgwKTsKICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnJhbWUpOwp9KSgpOwo=\");\n  document.body.appendChild(el);\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>My Treat Find the duck. Jump the door and the shelf, knock the treat spinner down, then jump on it. Treats fly out and the other cats run in to eat. That clears the level. Pick up hot sauce packets, sushi toys, and chicken bucket toys. Your collection carries to the next room. Arrows or [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-45","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/catventures.lol\/index.php?rest_route=\/wp\/v2\/pages\/45","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/catventures.lol\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/catventures.lol\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/catventures.lol\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/catventures.lol\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=45"}],"version-history":[{"count":5,"href":"https:\/\/catventures.lol\/index.php?rest_route=\/wp\/v2\/pages\/45\/revisions"}],"predecessor-version":[{"id":56,"href":"https:\/\/catventures.lol\/index.php?rest_route=\/wp\/v2\/pages\/45\/revisions\/56"}],"wp:attachment":[{"href":"https:\/\/catventures.lol\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=45"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}