Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@鲨鱼.cy@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi6bKo6bG8LmN5IiwiYXV0aG9yIjoiY3km54uX5rWp5ZWKIiwidXJsIjoiaGlrZXI6Ly9lbXB0eSMjIiwidmVyc2lvbiI6MCwiY29sX3R5cGUiOiJtb3ZpZV8zIiwiY2xhc3NfbmFtZSI6IiIsInR5cGUiOiJ2aWRlbyIsImNsYXNzX3VybCI6IiIsImFyZWFfbmFtZSI6IiIsImFyZWFfdXJsIjoiIiwic29ydF9uYW1lIjoiIiwieWVhcl9uYW1lIjoiIiwic29ydF91cmwiOiIiLCJ5ZWFyX3VybCI6IiIsImZpbmRfcnVsZSI6ImpzOiQucmVxdWlyZShcImhvbWVcIik7Iiwic2VhcmNoX3VybCI6Imhpa2VyOi8vZW1wdHk/a2V5PSoqJnBhZ2U9ZnlwYWdlIiwiZ3JvdXAiOiLnroDlvbEiLCJzZWFyY2hGaW5kIjoianM6XG52YXIgZCA9IFtdO1xubGV0IHNlYXdvcmQgPSBnZXRQYXJhbSgna2V5Jyk7XG5sZXQgZG9tYWluID0gSlNPTi5wYXJzZShyZXF1ZXN0KGdldE15VmFyKCdzZXR0aW5nRmlsZScpKSkuZG9tYWluO1xuc2VhcmNoXzM2MCA9IGRvbWFpbiArICcvc2VhcmNoLnBocD93ZD0nICsgc2Vhd29yZCArICcmdHlwZT0zNjAnO1xuc2VhcmNoX2JvenkgPSBkb21haW4gKyAnL3NlYXJjaC5waHA/d2Q9JyArIHNlYXdvcmQgKyAnJnR5cGU9Ym96eSc7XG5cbi8vIDM2MFxuZC5wdXNoKHtcbiAgICB0aXRsZTogXCLmlbDmja7mnaXmupDvvJozNjAg4oaTXCIsXG4gICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXG59KTtcbmh0bWwgPSBmZXRjaChzZWFyY2hfMzYwKTtcbmxpc3QgPSBwZGZhKGh0bWwsICcuYW0tbGlzdCYmbGknKTtcbmZvciAodmFyIGkgaW4gbGlzdCkge1xuICAgIHBpYyA9IHBkZmgobGlzdFtpXSwgJy5hbS1saXN0LXRodW1iJiZpbWcmJmRhdGEtb3JpZ2luYWwnKSArIFwiQFJlZmVyZXI9XCI7XG4gICAgdGl0bGUgPSBwZGZoKGxpc3RbaV0sICcuYW0tbGlzdC1pdGVtLWhkJiZhJiZUZXh0Jyk7XG4gICAgdXJsID0gcGRmaChsaXN0W2ldLCAnYSYmaHJlZicpICsgXCIjaW1tZXJzaXZlVGhlbWUjXCI7XG4gICAgZC5wdXNoKHtcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICBpbWc6IHBpYyxcbiAgICAgICAgZGVzYzogcGRmaChsaXN0W2ldLCAnLmFtLXRleHQtZGFuZ2VyJiZUZXh0JyksXG4gICAgICAgIGNvbnRlbnQ6IHBkZmgobGlzdFtpXSwgJy5hbS1saXN0LWl0ZW0tdGV4dCYmVGV4dCcpLFxuICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvZXJqaT9ydWxlPemyqOmxvC5jeScsXG4gICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgICBpbWc6IHBpYyxcbiAgICAgICAgICAgIHVybDogdXJsXG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIGJvenlcbmQucHVzaCh7XG4gICAgdGl0bGU6IFwi5pWw5o2u5p2l5rqQ77yaYm96eSDihpNcIixcbiAgICB1cmw6ICdoaWtlcjovL2VtcHR5Jyxcbn0pO1xuaHRtbCA9IGZldGNoKHNlYXJjaF9ib3p5KTtcbmxpc3QgPSBwZGZhKGh0bWwsICcuYW0tbGlzdCYmbGknKTtcbmZvciAodmFyIGkgaW4gbGlzdCkge1xuICAgIHBpYyA9IHBkZmgobGlzdFtpXSwgJy5hbS1saXN0LXRodW1iJiZpbWcmJmRhdGEtb3JpZ2luYWwnKSArIFwiQFJlZmVyZXI9XCI7XG4gICAgdGl0bGUgPSBwZGZoKGxpc3RbaV0sICcuYW0tbGlzdC1pdGVtLWhkJiZhJiZUZXh0Jyk7XG4gICAgdXJsID0gcGRmaChsaXN0W2ldLCAnYSYmaHJlZicpICsgXCIjaW1tZXJzaXZlVGhlbWUjXCI7XG4gICAgZC5wdXNoKHtcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICBpbWc6IHBpYyxcbiAgICAgICAgZGVzYzogcGRmaChsaXN0W2ldLCAnLmFtLXRleHQtZGFuZ2VyJiZUZXh0JyksXG4gICAgICAgIGNvbnRlbnQ6IHBkZmgobGlzdFtpXSwgJy5hbS1saXN0LWl0ZW0tdGV4dCYmVGV4dCcpLFxuICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvZXJqaT9ydWxlPemyqOmxvC5jeScsXG4gICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgICBpbWc6IHBpYyxcbiAgICAgICAgICAgIHVybDogdXJsXG4gICAgICAgIH1cbiAgICB9KTtcbn1cbnNldFJlc3VsdChkKTtcbiIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6ImpzOlxuY29uc3QgdXJsID0gJ2h0dHBzOi8vd3d3LmlrYW4uY2x1Yi8nO1xuY29uc3Qgc2V0dGluZ0ZpbGUgPSAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS/psqjpsbwvc2V0dGluZ3MuanNvbic7XG5wdXRNeVZhcignc2V0dGluZ0ZpbGUnLCBzZXR0aW5nRmlsZSk7XG4vLyDliJ3lp4vljJblr7vmsYLlj6/nlKjln5/lkI1cbmNvbnN0IGluaXREb21haW4gPSAoKSA9PiB7XG4gICAgdG9hc3QoJ+WIneWni+WMluWfn+WQjS4uLicpO1xuICAgIHNldHRpbmdDb250ZW50ID0ge1xuICAgICAgICBkb21haW46ICcnLFxuICAgICAgICBzZWFyY2hIaXN0b3J5OiBbJ+aaguaXoOaQnOe0ouiusOW9lSzov5jkuI3lv6vmkJzwn5iSJ11cbiAgICB9O1xuICAgIGNvbnN0IGh0bWxDb250ZW50ID0gZmV0Y2godXJsKTtcbiAgICBjb25zdCBkb21haW5SZWdleCA9IC9odHRwczpcXC9cXC9bYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfS9nO1xuICAgIGNvbnN0IGRvbWFpbnMgPSBodG1sQ29udGVudC5tYXRjaChkb21haW5SZWdleCk7XG4gICAgLy8g6L6T5Ye65o+Q5Y+W5Yiw55qE5Z+f5ZCNXG4gICAgaWYgKGRvbWFpbnMgJiYgZG9tYWlucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGxvZygn5Y+v55So5Z+f5ZCN5YiX6KGoOiAnICsgZG9tYWlucy5qb2luKCcsICcpKTtcbiAgICAgICAgLy8g6YGN5Y6G5bm26aqM6K+B6L+e6YCa5oCnXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9tYWlucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZG9tYWluID0gZG9tYWluc1tpXTtcbiAgICAgICAgICAgIC8vIOWPkei1t+e9kee7nOivt+axglxuICAgICAgICAgICAgbGV0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShmZXRjaChkb21haW4sIHsgd2l0aFN0YXR1c0NvZGU6IHRydWUgfSkpO1xuICAgICAgICAgICAgLy8gbG9nKEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlKSk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA9PT0gMjAwICYmIHJlc3BvbnNlLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddLmluY2x1ZGVzKCd0ZXh0L2h0bWwnKSkge1xuICAgICAgICAgICAgICAgIGxvZyhkb21haW4gKyAnIOi/numAmuS4lOWPr+eUqCcpO1xuICAgICAgICAgICAgICAgIHNldHRpbmdDb250ZW50LmRvbWFpbiA9IGRvbWFpbjtcbiAgICAgICAgICAgICAgICBzYXZlRmlsZShzZXR0aW5nRmlsZSwgSlNPTi5zdHJpbmdpZnkoc2V0dGluZ0NvbnRlbnQpKTtcbiAgICAgICAgICAgICAgICAvLyDlrZjlgqjojrflj5bliLDnmoTnvZHnq5npppbpobXmupDnoIHkv6Hmga9cbiAgICAgICAgICAgICAgICBwdXRNeVZhcignaW5kZXhDb2RlJywgcmVzcG9uc2UuYm9keSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxvZyhkb21haW4gKyAn5LiN5Y+v55SoJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB0b2FzdCgn5pyq5om+5Yiw5Y+v55So5Z+f5ZCNJyk7XG4gICAgfVxufVxudHJ5IHtcbiAgICBpZiAoIWZpbGVFeGlzdChzZXR0aW5nRmlsZSkpIHtcbiAgICAgICAgaW5pdERvbWFpbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBkb21haW4gPSBKU09OLnBhcnNlKHJlcXVlc3Qoc2V0dGluZ0ZpbGUpKS5kb21haW47XG4gICAgICAgIGxvZygn5b2T5YmN5Z+f5ZCN77yaJyArIGRvbWFpbilcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShmZXRjaChkb21haW4sIHsgd2l0aFN0YXR1c0NvZGU6IHRydWUgfSkpO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA9PT0gMjAwICYmIHJlc3BvbnNlLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddLmluY2x1ZGVzKCd0ZXh0L2h0bWwnKSkge1xuICAgICAgICAgICAgcHV0TXlWYXIoJ2luZGV4Q29kZScsIHJlc3BvbnNlLmJvZHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9hc3QoJ+Wfn+WQjeWkseaViC4uLicpXG4gICAgICAgICAgICBpbml0RG9tYWluKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0gY2F0Y2ggKGUpIHtcbiAgICBsb2coZS5tZXNzYWdlKTtcbn1cbiIsInBhZ2VzIjoiW3tcIm5hbWVcIjpcImhvbWVcIixcInBhdGhcIjpcImhvbWVcIixcInJ1bGVcIjpcImpzOlxcbmxldCBkID0gW107XFxudHJ5IHtcXG4gICAgaW5kZXhIdG1sID0gZ2V0TXlWYXIoJ2luZGV4Q29kZScsICcnKTtcXG4gICAgLy8gbG9nKGluZGV4SHRtbCk7XFxuICAgIHRvcEJhciA9IHBkZmEoaW5kZXhIdG1sLCAnLmFtLXRvcGJhci1uYXYmJmxpJyk7XFxuICAgIGxldCBzZXR0aW5nQ29udGVudCA9IEpTT04ucGFyc2UocmVxdWVzdChnZXRNeVZhcignc2V0dGluZ0ZpbGUnKSkpO1xcbiAgICBsZXQgZG9tYWluID0gc2V0dGluZ0NvbnRlbnQuZG9tYWluO1xcbiAgICBsZXQgc2VhcmNoSGlzdG9yeSA9IHNldHRpbmdDb250ZW50LnNlYXJjaEhpc3Rvcnk7XFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9wQmFyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICB0aXRsZSA9IHBkZmgodG9wQmFyW2ldLCAnYSYmVGV4dCcpO1xcbiAgICAgICAgdXJsID0gZG9tYWluICsgcGRmaCh0b3BCYXJbaV0sICdhJiZocmVmJyk7XFxuICAgICAgICAvLyBsb2codXJsKTtcXG4gICAgICAgIGlmICh0aXRsZS5tYXRjaCgv6aaW6aG1LykpIGNvbnRpbnVlO1xcbiAgICAgICAgaWYgKHRpdGxlLm1hdGNoKC/luK7liqkvKSkgYnJlYWs7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvbW92aWVTaG93P3J1bGU96bKo6bG8LmN5JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHVybDogdXJsICsgJz9wYWdlPWZ5cGFnZSdcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICB9XFxuICAgIGxiID0gcGRmYShpbmRleEh0bWwsICcuYW0tc2xpZGVzJiZsaScpLm1hcCgodCkgPT4ge1xcbiAgICAgICAgdGl0bGUgPSBwZGZoKHQsICdiJiZUZXh0Jyk7XFxuICAgICAgICBpbWcgPSAnaHR0cHM6JyArIHBkZmgodCwgJ2ltZyYmc3JjJyk7XFxuICAgICAgICB1cmxBcnIgPSBwZGZoKHQsICdhJiZocmVmJykuc3BsaXQoJy4nKVswXS5zcGxpdCgnLycpO1xcbiAgICAgICAgdXJsU3RyaW5nID0gYCZ0eXBlPSR7dXJsQXJyWzFdfSZpZD0ke3VybEFyclsyXX0mI2ltbWVyc2l2ZVRoZW1lI2A7XFxuICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICB1cmw6IHVybFN0cmluZ1xcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICB2YXIgY2ZnID0ge1xcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL2Vyamk/cnVsZT3psqjpsbwuY3l7dXJsfSdcXG4gICAgfVxcbiAgICB2YXIgbyA9IHt9O1xcbiAgICAkLnJlcXVpcmUoJ3hVSScpLnNob3coZCwgbGIsIGNmZywgbyk7XFxuICAgIC8vIOaQnOe0ouahhlxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICB2YXIgc2Vhd29yZCA9IGdldE15VmFyKCdrZXl3b3JkJywgJycpO1xcbiAgICAgICAgICAgIGlmIChzZWF3b3JkID09ICcnKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/or7fovpPlhaXmkJzntKLlhbPplK7lrZfvvIEnXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCBzZXR0aW5nRmlsZSA9IGdldE15VmFyKCdzZXR0aW5nRmlsZScsICcnKTtcXG4gICAgICAgICAgICBsZXQgc2V0dGluZ0NvbnRlbnQgPSBKU09OLnBhcnNlKHJlYWRGaWxlKHNldHRpbmdGaWxlKSk7XFxuICAgICAgICAgICAgaWYgKHNldHRpbmdDb250ZW50LnNlYXJjaEhpc3RvcnkubGVuZ3RoIDwgMTApIHtcXG4gICAgICAgICAgICAgICAgc2V0dGluZ0NvbnRlbnQuc2VhcmNoSGlzdG9yeS51bnNoaWZ0KGlucHV0KTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBzZXR0aW5nQ29udGVudC5zZWFyY2hIaXN0b3J5LnBvcCgpO1xcbiAgICAgICAgICAgICAgICBzZXR0aW5nQ29udGVudC5zZWFyY2hIaXN0b3J5LnVuc2hpZnQoaW5wdXQpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBzYXZlRmlsZShzZXR0aW5nRmlsZSwgSlNPTi5zdHJpbmdpZnkoc2V0dGluZ0NvbnRlbnQpKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vc2VhcmNoP3M9JyArIHNlYXdvcmQgKyAnJnJ1bGU96bKo6bG8LmN5JztcXG4gICAgICAgIH0pLFxcbiAgICAgICAgdGl0bGU6IFxcXCLmkJzntKJcXFwiLFxcbiAgICAgICAgZGVzYzogJ+aQnOe0oue7k+aenOi3r+e6v+abtOWFqOmdouWWlPCfmLknLFxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImtleXdvcmRcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgfSlcXG4gICAgLy8g5pCc57Si5Y6G5Y+yXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnTxzdHJvbmc+8J+TneaQnOe0ouWOhuWPsjo8L3N0cm9uZz5cXFwiLmJpZygpLFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgIH0pO1xcblxcbiAgICBzZWFyY2hIaXN0b3J5LmZvckVhY2gociA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiByLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vc2VhcmNoP3M9JyArIHIgKyAnJnJ1bGU96bKo6bG8LmN5JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICB9KVxcbiAgICB9KVxcblxcbiAgICAvLyDpmaLnur/ng63mmKBcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHVybDogXFxcInRvYXN0Oi8v54K55ZWl54K55ZWlXFxcIixcXG4gICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdPHN0cm9uZz7wn5Sl6Zmi57q/54Ot5pigOjwvc3Ryb25nPlxcXCIuYmlnKCksXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nXFxuICAgIH0pXFxuICAgIHJ5ID0gcGRmYShpbmRleEh0bWwsICcuYW0tcGFuZWwtYmQmJmEnKTtcXG4gICAgcnkuZm9yRWFjaChyID0+IHtcXG4gICAgICAgIHRpdGxlID0gcGRmaChyLCAnYSYmVGV4dCcpO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL2Vyamk/cnVsZT3psqjpsbwuY3knLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgLy8gaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIHVybDogcGRmaChyLCAnYSYmaHJlZicpICsgJyNpbW1lcnNpdmVUaGVtZSMnXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJ1xcbiAgICAgICAgfSk7XFxuICAgIH0pO1xcblxcbiAgICAvLyDliIbnsbtcXG4gICAgbGlzdCA9IHBkZmEoaW5kZXhIdG1sLCAnYm9keSYmLmFtLXRodW1ibmFpbHMnKTtcXG4gICAgaDIgPSBwZGZhKGluZGV4SHRtbCwgJ2JvZHkmJmgyW2NsYXNzPWFtLXRpdGxlYmFyLXRpdGxlXScpO1xcbiAgICBoMkluZm8gPSBwZGZhKGluZGV4SHRtbCwgJ2JvZHkmJm5hdltjbGFzcz1hbS10aXRsZWJhci1uYXZdJyk7XFxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgdXJsID0gcGRmaChoMkluZm9baSAtIDFdLCAnYSYmaHJlZicpO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChoMltpXSwgJ2gyJiZUZXh0JyksXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9pbWcxLnR1Y2FuZy5jYy9hcGkvaW1hZ2Uvc2hvdy8wZTM2YzJhMzcxM2Y1YzdjMmM3MTRkNDA4M2I2MTEwNScsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL21vdmllU2hvdz9ydWxlPemyqOmxvC5jeScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHVybDogdXJsICsgJz9wYWdlPWZ5cGFnZSdcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIHBhcnQgPSBwZGZhKGxpc3RbaV0sICd1bCYmbGknKTtcXG4gICAgICAgIC8vIGxvZyhwYXJ0KVxcbiAgICAgICAgcGFydC5mb3JFYWNoKHQgPT4ge1xcbiAgICAgICAgICAgIHRpdGxlID0gcGRmaCh0LCAnLm1vdmllLW5hbWUmJlRleHQnKTtcXG4gICAgICAgICAgICBpbWcgPSBwZGZoKHQsICdpbWcmJmRhdGEtb3JpZ2luYWwnKTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaCh0LCAnLm1vdmllLW5hbWUmJlRleHQnKSxcXG4gICAgICAgICAgICAgICAgaW1nOiBwZGZoKHQsICdpbWcmJmRhdGEtb3JpZ2luYWwnKSxcXG4gICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL2Vyamk/cnVsZT3psqjpsbwuY3knLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHBkZmgodCwgJ2EmJmhyZWYnKSArICcjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzNfbWFycXVlZSdcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0pO1xcbiAgICB9XFxufSBjYXRjaCAoZSkge1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbn1cXG5zZXRSZXN1bHQoZCk7XFxuXCJ9LHtcIm5hbWVcIjpcIuS6jOe6p+mhtemdolwiLFwicGF0aFwiOlwiZXJqaVwiLFwicnVsZVwiOlwianM6XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgY2xlYXJNeVZhcigndGFiTmFtZScpO1xcbiAgICBjbGVhck15VmFyKCdzaHNvcnQnKTtcXG4gICAgY2xlYXJNeVZhcignbGFzdFRhYicpO1xcbn0pKVxcbnZhciBkID0gW107XFxudmFyIGxhenkgPSAkLnJlcXVpcmUoXFxcImxhenlcXFwiKTtcXG5pZiAoIU1ZX1BBUkFNUy51cmwpIHtcXG4gICAgLy8g6L2u5pKt5Zu+54K55Ye7XFxuICAgIGxldCBkb21haW4gPSBKU09OLnBhcnNlKHJlcXVlc3QoZ2V0TXlWYXIoJ3NldHRpbmdGaWxlJykpKS5kb21haW47XFxuICAgIHZhciBjdXJyZW50VXJsID0gZG9tYWluICsgJy9wbGF5LycgKyBnZXRQYXJhbSgndHlwZScpICsgJy8nICsgZ2V0UGFyYW0oJ2lkJykgKyAnLmh0bWwnO1xcbn0gZWxzZSB7XFxuICAgIHZhciBjdXJyZW50VXJsID0gTVlfUEFSQU1TLnVybDtcXG59XFxubG9nKCflvZPliY3pk77mjqXvvJonK2N1cnJlbnRVcmwpO1xcbi8vIGh0dHBzOi8vd3d3LmRhbm11ZHkuY29tL3BsYXkvY3RpZC9PVVBrYVo3a05ZN3ZEai5odG1sXFxudmFyIGh0bWxDb2RlID0gZmV0Y2goY3VycmVudFVybCk7XFxuLy8gbG9nKGh0bWxDb2RlKTtcXG5pZiAoTVlfUEFSQU1TLmltZykge1xcbiAgICB2YXIgcGljID0gTVlfUEFSQU1TLmltZ1xcbn0gZWxzZSB7XFxuICAgIGl0ZW1JbmZvID0gcGRmaChodG1sQ29kZSwgJ2JvZHkmJnNjcmlwdCYmSHRtbCcpO1xcbiAgICBjb25zdCB2aWRlb0luZm9SZWdleCA9IC92aWRlb0luZm9cXFxccyo9XFxcXHMqXFxcXHsoW1xcXFxzXFxcXFNdKj8pXFxcXH0vO1xcbiAgICBjb25zdCB2aWRlb0luZm9NYXRjaCA9IGl0ZW1JbmZvLm1hdGNoKHZpZGVvSW5mb1JlZ2V4KVswXTtcXG4gICAgZXZhbCh2aWRlb0luZm9NYXRjaCk7XFxuICAgIHZhciBwaWMgPSB2aWRlb0luZm8uaW1hZ2U7XFxufVxcbi8vIOeugOS7i+OAgea8lOWRmOOAgeWwgemdouetiVxcbnZhciB0aXRsZSA9IE1ZX1BBUkFNUy50aXRsZTtcXG52YXIgZGVzYyA9IHBkZmgoaHRtbENvZGUsICdtZXRhW25hbWU9ZGVzY3JpcHRpb25dJiZjb250ZW50Jyk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IHRpdGxlLFxcbiAgICBkZXNjOiBkZXNjLFxcbiAgICBpbWc6IHBpYyArICdAUmVmZXJlcj0nLFxcbiAgICB1cmw6ICdoaWtlcjovL3BhZ2Uvc2V0dGluZz9ydWxlPWRt55uS5a2QI25vSGlzdG9yeSMnLFxcbiAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljX2JsdXInXFxufSk7XFxuLy8g57q/6Lev6YCJ6ZuGXFxuLy8gbG9nKHBkZmEoaHRtbENvZGUsICdib2R5JiYuYW0tbmF2LXRhYnMmJmxpJykpO1xcbnRhZ0ZsYWcgPSBwZGZhKGh0bWxDb2RlLCAnYm9keSYmLmFtLW5hdi10YWJzJiZsaScpLmxlbmd0aDtcXG5zd2l0Y2ggKHRhZ0ZsYWcpIHtcXG4gICAgY2FzZSAwOlxcbiAgICAgICAgLy8g57q/6Lev5LiL5peg5YiG6ZuGLeeUteW9seKAlOKAlOWPr+iDveWNoemhv+WvvOiHtOeahOivr+WIpO+8jOS4jeeuoeS6hlxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxzdHJvbmc+4piR77iP55S15b2x5Zyo57q/PC9zdHJvbmc+Jy5iaWcoKSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJ1xcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcGRmYShodG1sQ29kZSwgJ2JvZHkmJi5idG4tcGxheS1zb3VyY2UnKS5mb3JFYWNoKHIgPT4ge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKHIsICdidXR0b24mJlRleHQnKSxcXG4gICAgICAgICAgICAgICAgdXJsOiBwZGZoKHIsICdidXR0b24mJmRhdGEtdXJsJykgKyBsYXp5LFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgICBicmVhaztcXG4gICAgZGVmYXVsdDpcXG4gICAgICAgIC8vIOe6v+i3r+S4i+acieWIhumbhi3nlLXop4bliafjgIHliqjmvKvjgIHnu7zoibpcXG4gICAgICAgIHRhYkluZm8gPSBwZGZhKGh0bWxDb2RlLCAnYm9keSYmLmFtLW5hdi10YWJzJiZsaScpLm1hcCh0ID0+IHtcXG4gICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICBpZDogcGRmaCh0LCAnYSYmaHJlZicpLFxcbiAgICAgICAgICAgICAgICBuYW1lOiBwZGZoKHQsICdhJiZUZXh0JyksXFxuICAgICAgICAgICAgICAgIGxpbms6IGN1cnJlbnRVcmwsXFxuICAgICAgICAgICAgICAgIGRhdGE6IFtdXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICB0YWJJbmZvLmZvckVhY2godCA9PiB7XFxuICAgICAgICAgICAgdGFiSWQgPSB0LmlkO1xcbiAgICAgICAgICAgIC8vIOWkmue6v+i3r+OAkOe9kemhteWPr+iDveWHuueOsOivu+WPluS4rS4uLuOAkVxcbiAgICAgICAgICAgIHBhcnQgPSBwZGZhKGh0bWxDb2RlLCBgJHt0YWJJZH0mJmJ1dHRvbmApO1xcbiAgICAgICAgICAgIC8vIGxvZyhwYXJ0KTtcXG4gICAgICAgICAgICBpZiAocGFydC5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgICAgICAgICBsb2coJ+W9k+WJjee6v+i3r+iOt+WPluaVsOaNruWksei0pS4uLicpXFxuICAgICAgICAgICAgICAgIHBhcnQgPSBwZGZhKGh0bWxDb2RlLCBgYm9keSYmJHt0YWJJZH1gKVsxXTtcXG4gICAgICAgICAgICAgICAgcGFydCA9IHBkZmEocGFydCwgJ2RpdiYmYnV0dG9uJyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChnZXRNeVZhcignc2hzb3J0JywgJzEnKSA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgcGFydC5mb3JFYWNoKHIgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgdC5kYXRhLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKHIsICdidXR0b24mJlRleHQnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHBkZmgociwgJ2J1dHRvbiYmZGF0YS11cmwnKVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBwYXJ0LmZvckVhY2gociA9PiB7XFxuICAgICAgICAgICAgICAgICAgICB0LmRhdGEudW5zaGlmdCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgociwgJ2J1dHRvbiYmVGV4dCcpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogcGRmaChyLCAnYnV0dG9uJiZkYXRhLXVybCcpXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgc2VsZWN0VGFiID0gZ2V0TXlWYXIoJ3RhYk5hbWUnLCB0YWJJbmZvWzBdLm5hbWUpO1xcbiAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ3RhYkluZm8nLCB0YWJJbmZvKTtcXG4gICAgICAgIC8vIOe6v+i3r+WIl+ihqFxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogKGdldE15VmFyKCdzaHNvcnQnKSA9PSAnMScpID8gJ+KAnOKAnOKAneKAnTxiPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjogI0ZGMDAwMFxcXCI+6YCG5bqPPC9zcGFuPjwvYj4nIDogJ+KAnOKAnOKAneKAnTxiPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjogIzFhYWQxOVxcXCI+5q2j5bqPPC9zcGFuPjwvYj4nLFxcbiAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChzZWxlY3RUYWIpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3Noc29ydCcsIGdldE15VmFyKCdzaHNvcnQnLCAnMScpID09ICcxJyA/ICcwJyA6ICcxJyk7XFxuICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oJ3NoYXl2X3NvcnQnLCB7IHRpdGxlOiAoZ2V0TXlWYXIoJ3Noc29ydCcpID09ICcxJykgPyAn4oCc4oCc4oCd4oCdPGI+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiAjRkYwMDAwXFxcIj7pgIbluo88L3NwYW4+PC9iPicgOiAn4oCc4oCc4oCd4oCdPGI+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiAjMWFhZDE5XFxcIj7mraPluo88L3NwYW4+PC9iPicgfSk7XFxuICAgICAgICAgICAgICAgIC8vIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHRhYkluZm8gPSBzdG9yYWdlMC5nZXRNeVZhcigndGFiSW5mbycpO1xcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoJ3NoYXl2X2l0ZW0nKTtcXG4gICAgICAgICAgICAgICAgLy8g5pu05paw5pWw5o2uXFxuICAgICAgICAgICAgICAgIHRvVXBkYXRhID0gW107XFxuICAgICAgICAgICAgICAgIHZhciBsYXp5ID0gJC5yZXF1aXJlKFxcXCJsYXp5XFxcIik7XFxuICAgICAgICAgICAgICAgIHRhYkluZm8uZm9yRWFjaCh0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHQuZGF0YS5yZXZlcnNlKCk7XFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCd0YWJJbmZvJywgdGFiSW5mbyk7XFxuICAgICAgICAgICAgICAgIHRhYkRldGFpbD10YWJJbmZvLmZpbmQodCA9PiB0Lm5hbWUgPT09IGdldE15VmFyKCd0YWJOYW1lJywgc2VsZWN0VGFiKSk7XFxuICAgICAgICAgICAgICAgIGxpbms9dGFiRGV0YWlsLmxpbms7XFxuICAgICAgICAgICAgICAgIHRhYklkPXRhYkRldGFpbC5pZC5zbGljZSgxKTtcXG4gICAgICAgICAgICAgICAgdGFiRGF0YT10YWJEZXRhaWwuZGF0YTtcXG4gICAgICAgICAgICAgICAgaWYodGFiRGF0YS5sZW5ndGg9PTApe1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKCfnur/ot6/mlbDmja7nvLrlpLEs5q2j5Zyo6YCa6L+H5o6l5Y+j5Y+R6YCB6K+35rGCLi4uJyk7XFxuICAgICAgICAgICAgICAgICAgICB0YWJEYXRhPSQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2Z1bnNcXFwiKS5nZXRMaXN0cyhsaW5rLCB0YWJJZCk7XFxuICAgICAgICAgICAgICAgICAgICBpZihnZXRNeVZhcignc2hzb3J0JykgPT0gJzEnKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJEYXRhLnJldmVyc2UoKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB0YWJEYXRhLmZvckVhY2gociA9PiB7XFxuICAgICAgICAgICAgICAgICAgICB0b1VwZGF0YS5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogci50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHIudXJsICsgbGF6eSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM6ICdzaGF5dl9pdGVtJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKCdhZnRlcl9mbGFnJywgdG9VcGRhdGEpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5YiH5o2i5o6S5bqP5oiQ5YqfJ1xcbiAgICAgICAgICAgIH0sIHNlbGVjdFRhYiksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbicsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6ICdzaGF5dl9zb3J0J1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgICAgICB2YXIgaW5kZXggPSAxO1xcbiAgICAgICAgdGFiSW5mby5mb3JFYWNoKHQgPT4ge1xcbiAgICAgICAgICAgIHRhYkluZGV4ID0gJ3RhYl8nICsgaW5kZXg7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHQubmFtZSA9PT0gc2VsZWN0VGFiID8gYOKAnOKAnOKAneKAnTxzdHJvbmc+4piR77iPJHt0Lm5hbWV9PC9zdHJvbmc+YC5iaWcoKSA6IHQubmFtZSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0YWJOYW1lLCB0YWJJbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3RhYk5hbWUnLCB0YWJOYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAvLyDpgInmi6nlvZPliY1cXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0odGFiSW5kZXgsIHsgdGl0bGU6IGDigJzigJzigJ3igJ08c3Ryb25nPuKYke+4jyR7dGFiTmFtZX08L3N0cm9uZz5gLmJpZygpIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgLy8g5Y+W5raI5LiK5LiA5Liq6YCJ5oupXFxuICAgICAgICAgICAgICAgICAgICBsYXN0VGFiID0gZmluZEl0ZW0oZ2V0TXlWYXIoJ2xhc3RUYWInLCAndGFiXzEnKSk7XFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKGxhc3RUYWIuZXh0cmEuaWQsIHsgdGl0bGU6IGxhc3RUYWIuZXh0cmEudGl0bGUgfSk7XFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoJ3NoYXl2X2l0ZW0nKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vIOabtOaWsOaVsOaNrlxcbiAgICAgICAgICAgICAgICAgICAgdG9VcGRhdGEgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBsYXp5ID0gJC5yZXF1aXJlKFxcXCJsYXp5XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICB0YWJJbmZvID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ3RhYkluZm8nKTtcXG4gICAgICAgICAgICAgICAgICAgIHRhYkRldGFpbD10YWJJbmZvLmZpbmQodCA9PiB0Lm5hbWUgPT09IGdldE15VmFyKCd0YWJOYW1lJywgdGFiTmFtZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgbGluaz10YWJEZXRhaWwubGluaztcXG4gICAgICAgICAgICAgICAgICAgIHRhYklkPXRhYkRldGFpbC5pZC5zbGljZSgxKTtcXG4gICAgICAgICAgICAgICAgICAgIHRhYkRhdGE9dGFiRGV0YWlsLmRhdGE7XFxuICAgICAgICAgICAgICAgICAgICBpZih0YWJEYXRhLmxlbmd0aD09MCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCfnur/ot6/mlbDmja7nvLrlpLEs5q2j5Zyo6YCa6L+H5o6l5Y+j5Y+R6YCB6K+35rGCLi4uJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiRGF0YT0kLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9mdW5zXFxcIikuZ2V0TGlzdHMobGluaywgdGFiSWQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGdldE15VmFyKCdzaHNvcnQnKSA9PSAnMCcpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJEYXRhLnJldmVyc2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB0YWJEYXRhLmZvckVhY2gociA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9VcGRhdGEucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiByLnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHIudXJsICsgbGF6eSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM6ICdzaGF5dl9pdGVtJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGFkZEl0ZW1BZnRlcignYWZ0ZXJfZmxhZycsIHRvVXBkYXRhKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vIOS/neWtmOW9k+WJjVRhYueahOe6v+i3r1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2xhc3RUYWInLCB0YWJJbmRleCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5YiH5o2i57q/6Lev77yaJyArIHRhYk5hbWU7XFxuICAgICAgICAgICAgICAgIH0sIHQubmFtZSwgdGFiSW5kZXgpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiB0YWJJbmRleCxcXG4gICAgICAgICAgICAgICAgICAgIC8vIGNsczonc2hheXZfaXRlbScsXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdC5uYW1lXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBpbmRleCsrO1xcbiAgICAgICAgfSlcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfmm7TlpJrotYTmupDwn5SN77iPJyxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL3NlYXJjaD9zPScrdGl0bGUsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbidcXG4gICAgICAgIH0se1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZScsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6ICdhZnRlcl9mbGFnJ1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgICAgICAvLyDmlbDmja7lsZXnpLpcXG4gICAgICAgIHRhYkluZm8uZmluZCh0ID0+IHQubmFtZSA9PT0gc2VsZWN0VGFiKS5kYXRhLmZvckVhY2gociA9PiB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHIudGl0bGUsXFxuICAgICAgICAgICAgICAgIHVybDogci51cmwgKyBsYXp5LFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGNsczogJ3NoYXl2X2l0ZW0nXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgYnJlYWs7XFxufVxcbi8vIOaOqOiNkCjnrpfkuoblkKcpXFxuLy8gZC5wdXNoKHtcXG4vLyAgICAgdGl0bGU6IFxcXCLnm7jlhbPmjqjojZBcXFwiLFxcbi8vICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4vLyAgICAgaW1nOiBcXFwiaHR0cDovLzEyMy41Ni4xMDUuMTQ1L3R1Ymlhby9tb3JlLzg0LnBuZ1xcXCIsXFxuLy8gICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIlxcbi8vIH0pXFxuLy8gbGlrZS50LmZvckVhY2goKHgsIGkpID0+IHtcXG4vLyAgICAgZC5wdXNoKHtcXG4vLyAgICAgICAgIHRpdGxlOiB4LFxcbi8vICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2RldGFpbCNpbW1lcnNpdmVUaGVtZSMjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIixcXG4vLyAgICAgICAgIGltZzogQWltZyhkaXIsIGxpa2UudVtpXSksXFxuLy8gICAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzNcXFwiLFxcbi8vICAgICAgICAgZXh0cmE6IHtcXG4vLyAgICAgICAgICAgICB0aWQ6IGxpa2UudVtpXSxcXG4vLyAgICAgICAgICAgICB0eTogZGlyLFxcbi8vICAgICAgICAgICAgIHBhZ2VUaXRsZTogeFxcbi8vICAgICAgICAgfVxcbi8vICAgICB9KVxcbi8vIH0pXFxuc2V0UmVzdWx0KGQpO1xcblwifSx7XCJuYW1lXCI6XCJwYWtvXCIsXCJwYXRoXCI6XCJwYWtvXCIsXCJydWxlXCI6XCJqczpcXG4hIGZ1bmN0aW9uKHQpIHtcXG4gICAgaWYgKFxcXCJvYmplY3RcXFwiID09IHR5cGVvZiBleHBvcnRzICYmIFxcXCJ1bmRlZmluZWRcXFwiICE9IHR5cGVvZiBtb2R1bGUpIG1vZHVsZS5leHBvcnRzID0gdCgpO1xcbiAgICBlbHNlIGlmIChcXFwiZnVuY3Rpb25cXFwiID09IHR5cGVvZiBkZWZpbmUgJiYgZGVmaW5lLmFtZCkgZGVmaW5lKFtdLCB0KTtcXG4gICAgZWxzZSB7XFxuICAgICAgICAoXFxcInVuZGVmaW5lZFxcXCIgIT0gdHlwZW9mIHdpbmRvdyA/IHdpbmRvdyA6IFxcXCJ1bmRlZmluZWRcXFwiICE9IHR5cGVvZiBnbG9iYWwgPyBnbG9iYWwgOiBcXFwidW5kZWZpbmVkXFxcIiAhPSB0eXBlb2Ygc2VsZiA/IHNlbGYgOiB0aGlzKS5wYWtvID0gdCgpXFxuICAgIH1cXG59KGZ1bmN0aW9uKCkge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gcihzLCBvLCBsKSB7XFxuICAgICAgICBmdW5jdGlvbiBoKGUsIHQpIHtcXG4gICAgICAgICAgICBpZiAoIW9bZV0pIHtcXG4gICAgICAgICAgICAgICAgaWYgKCFzW2VdKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IFxcXCJmdW5jdGlvblxcXCIgPT0gdHlwZW9mIHJlcXVpcmUgJiYgcmVxdWlyZTtcXG4gICAgICAgICAgICAgICAgICAgIGlmICghdCAmJiBhKSByZXR1cm4gYShlLCAhMCk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoZCkgcmV0dXJuIGQoZSwgITApO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSBuZXcgRXJyb3IoXFxcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXFxcIiArIGUgKyBcXFwiJ1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgaS5jb2RlID0gXFxcIk1PRFVMRV9OT1RfRk9VTkRcXFwiLCBpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIG4gPSBvW2VdID0ge1xcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0czoge31cXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgc1tlXVswXS5jYWxsKG4uZXhwb3J0cywgZnVuY3Rpb24odCkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGgoc1tlXVsxXVt0XSB8fCB0KVxcbiAgICAgICAgICAgICAgICB9LCBuLCBuLmV4cG9ydHMsIHIsIHMsIG8sIGwpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBvW2VdLmV4cG9ydHNcXG4gICAgICAgIH1cXG4gICAgICAgIGZvciAodmFyIGQgPSBcXFwiZnVuY3Rpb25cXFwiID09IHR5cGVvZiByZXF1aXJlICYmIHJlcXVpcmUsIHQgPSAwOyB0IDwgbC5sZW5ndGg7IHQrKykgaChsW3RdKTtcXG4gICAgICAgIHJldHVybiBoXFxuICAgIH0oe1xcbiAgICAgICAgMTogW2Z1bmN0aW9uKHQsIGUsIGEpIHtcXG4gICAgICAgICAgICBcXFwidXNlIHN0cmljdFxcXCI7XFxuICAgICAgICAgICAgdmFyIHMgPSB0KFxcXCIuL3psaWIvZGVmbGF0ZVxcXCIpLFxcbiAgICAgICAgICAgICAgICBvID0gdChcXFwiLi91dGlscy9jb21tb25cXFwiKSxcXG4gICAgICAgICAgICAgICAgbCA9IHQoXFxcIi4vdXRpbHMvc3RyaW5nc1xcXCIpLFxcbiAgICAgICAgICAgICAgICBuID0gdChcXFwiLi96bGliL21lc3NhZ2VzXFxcIiksXFxuICAgICAgICAgICAgICAgIHIgPSB0KFxcXCIuL3psaWIvenN0cmVhbVxcXCIpLFxcbiAgICAgICAgICAgICAgICBoID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxcXG4gICAgICAgICAgICAgICAgZCA9IDAsXFxuICAgICAgICAgICAgICAgIGYgPSAtMSxcXG4gICAgICAgICAgICAgICAgXyA9IDAsXFxuICAgICAgICAgICAgICAgIHUgPSA4O1xcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIGModCkge1xcbiAgICAgICAgICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgYykpIHJldHVybiBuZXcgYyh0KTtcXG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gby5hc3NpZ24oe1xcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IGYsXFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IHUsXFxuICAgICAgICAgICAgICAgICAgICBjaHVua1NpemU6IDE2Mzg0LFxcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Qml0czogMTUsXFxuICAgICAgICAgICAgICAgICAgICBtZW1MZXZlbDogOCxcXG4gICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiBfLFxcbiAgICAgICAgICAgICAgICAgICAgdG86IFxcXCJcXFwiXFxuICAgICAgICAgICAgICAgIH0sIHQgfHwge30pO1xcbiAgICAgICAgICAgICAgICB2YXIgZSA9IHRoaXMub3B0aW9ucztcXG4gICAgICAgICAgICAgICAgZS5yYXcgJiYgMCA8IGUud2luZG93Qml0cyA/IGUud2luZG93Qml0cyA9IC1lLndpbmRvd0JpdHMgOiBlLmd6aXAgJiYgMCA8IGUud2luZG93Qml0cyAmJiBlLndpbmRvd0JpdHMgPCAxNiAmJiAoZS53aW5kb3dCaXRzICs9IDE2KSwgdGhpcy5lcnIgPSAwLCB0aGlzLm1zZyA9IFxcXCJcXFwiLCB0aGlzLmVuZGVkID0gITEsIHRoaXMuY2h1bmtzID0gW10sIHRoaXMuc3RybSA9IG5ldyByLCB0aGlzLnN0cm0uYXZhaWxfb3V0ID0gMDtcXG4gICAgICAgICAgICAgICAgdmFyIGEgPSBzLmRlZmxhdGVJbml0Mih0aGlzLnN0cm0sIGUubGV2ZWwsIGUubWV0aG9kLCBlLndpbmRvd0JpdHMsIGUubWVtTGV2ZWwsIGUuc3RyYXRlZ3kpO1xcbiAgICAgICAgICAgICAgICBpZiAoYSAhPT0gZCkgdGhyb3cgbmV3IEVycm9yKG5bYV0pO1xcbiAgICAgICAgICAgICAgICBpZiAoZS5oZWFkZXIgJiYgcy5kZWZsYXRlU2V0SGVhZGVyKHRoaXMuc3RybSwgZS5oZWFkZXIpLCBlLmRpY3Rpb25hcnkpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSBcXFwic3RyaW5nXFxcIiA9PSB0eXBlb2YgZS5kaWN0aW9uYXJ5ID8gbC5zdHJpbmcyYnVmKGUuZGljdGlvbmFyeSkgOiBcXFwiW29iamVjdCBBcnJheUJ1ZmZlcl1cXFwiID09PSBoLmNhbGwoZS5kaWN0aW9uYXJ5KSA/IG5ldyBVaW50OEFycmF5KGUuZGljdGlvbmFyeSkgOiBlLmRpY3Rpb25hcnksIChhID0gcy5kZWZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sIGkpKSAhPT0gZCkgdGhyb3cgbmV3IEVycm9yKG5bYV0pO1xcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGljdF9zZXQgPSAhMFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIGkodCwgZSkge1xcbiAgICAgICAgICAgICAgICB2YXIgYSA9IG5ldyBjKGUpO1xcbiAgICAgICAgICAgICAgICBpZiAoYS5wdXNoKHQsICEwKSwgYS5lcnIpIHRocm93IGEubXNnIHx8IG5bYS5lcnJdO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5yZXN1bHRcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgYy5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uKHQsIGUpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGEsIGksIG4gPSB0aGlzLnN0cm0sXFxuICAgICAgICAgICAgICAgICAgICByID0gdGhpcy5vcHRpb25zLmNodW5rU2l6ZTtcXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZW5kZWQpIHJldHVybiAhMTtcXG4gICAgICAgICAgICAgICAgaSA9IGUgPT09IH5+ZSA/IGUgOiAhMCA9PT0gZSA/IDQgOiAwLCBcXFwic3RyaW5nXFxcIiA9PSB0eXBlb2YgdCA/IG4uaW5wdXQgPSBsLnN0cmluZzJidWYodCkgOiBcXFwiW29iamVjdCBBcnJheUJ1ZmZlcl1cXFwiID09PSBoLmNhbGwodCkgPyBuLmlucHV0ID0gbmV3IFVpbnQ4QXJyYXkodCkgOiBuLmlucHV0ID0gdCwgbi5uZXh0X2luID0gMCwgbi5hdmFpbF9pbiA9IG4uaW5wdXQubGVuZ3RoO1xcbiAgICAgICAgICAgICAgICBkbyB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gbi5hdmFpbF9vdXQgJiYgKG4ub3V0cHV0ID0gbmV3IG8uQnVmOChyKSwgbi5uZXh0X291dCA9IDAsIG4uYXZhaWxfb3V0ID0gciksIDEgIT09IChhID0gcy5kZWZsYXRlKG4sIGkpKSAmJiBhICE9PSBkKSByZXR1cm4gdGhpcy5vbkVuZChhKSwgISh0aGlzLmVuZGVkID0gITApO1xcbiAgICAgICAgICAgICAgICAgICAgMCAhPT0gbi5hdmFpbF9vdXQgJiYgKDAgIT09IG4uYXZhaWxfaW4gfHwgNCAhPT0gaSAmJiAyICE9PSBpKSB8fCAoXFxcInN0cmluZ1xcXCIgPT09IHRoaXMub3B0aW9ucy50byA/IHRoaXMub25EYXRhKGwuYnVmMmJpbnN0cmluZyhvLnNocmlua0J1ZihuLm91dHB1dCwgbi5uZXh0X291dCkpKSA6IHRoaXMub25EYXRhKG8uc2hyaW5rQnVmKG4ub3V0cHV0LCBuLm5leHRfb3V0KSkpXFxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKCgwIDwgbi5hdmFpbF9pbiB8fCAwID09PSBuLmF2YWlsX291dCkgJiYgMSAhPT0gYSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiA0ID09PSBpID8gKGEgPSBzLmRlZmxhdGVFbmQodGhpcy5zdHJtKSwgdGhpcy5vbkVuZChhKSwgdGhpcy5lbmRlZCA9ICEwLCBhID09PSBkKSA6IDIgIT09IGkgfHwgKHRoaXMub25FbmQoZCksICEobi5hdmFpbF9vdXQgPSAwKSlcXG4gICAgICAgICAgICB9LCBjLnByb3RvdHlwZS5vbkRhdGEgPSBmdW5jdGlvbih0KSB7XFxuICAgICAgICAgICAgICAgIHRoaXMuY2h1bmtzLnB1c2godClcXG4gICAgICAgICAgICB9LCBjLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHQpIHtcXG4gICAgICAgICAgICAgICAgdCA9PT0gZCAmJiAoXFxcInN0cmluZ1xcXCIgPT09IHRoaXMub3B0aW9ucy50byA/IHRoaXMucmVzdWx0ID0gdGhpcy5jaHVua3Muam9pbihcXFwiXFxcIikgOiB0aGlzLnJlc3VsdCA9IG8uZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLCB0aGlzLmNodW5rcyA9IFtdLCB0aGlzLmVyciA9IHQsIHRoaXMubXNnID0gdGhpcy5zdHJtLm1zZ1xcbiAgICAgICAgICAgIH0sIGEuRGVmbGF0ZSA9IGMsIGEuZGVmbGF0ZSA9IGksIGEuZGVmbGF0ZVJhdyA9IGZ1bmN0aW9uKHQsIGUpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIChlID0gZSB8fCB7fSkucmF3ID0gITAsIGkodCwgZSlcXG4gICAgICAgICAgICB9LCBhLmd6aXAgPSBmdW5jdGlvbih0LCBlKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAoZSA9IGUgfHwge30pLmd6aXAgPSAhMCwgaSh0LCBlKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICBcXFwiLi91dGlscy9jb21tb25cXFwiOiAzLFxcbiAgICAgICAgICAgIFxcXCIuL3V0aWxzL3N0cmluZ3NcXFwiOiA0LFxcbiAgICAgICAgICAgIFxcXCIuL3psaWIvZGVmbGF0ZVxcXCI6IDgsXFxuICAgICAgICAgICAgXFxcIi4vemxpYi9tZXNzYWdlc1xcXCI6IDEzLFxcbiAgICAgICAgICAgIFxcXCIuL3psaWIvenN0cmVhbVxcXCI6IDE1XFxuICAgICAgICB9XSxcXG4gICAgICAgIDI6IFtmdW5jdGlvbih0LCBlLCBhKSB7XFxuICAgICAgICAgICAgXFxcInVzZSBzdHJpY3RcXFwiO1xcbiAgICAgICAgICAgIHZhciBmID0gdChcXFwiLi96bGliL2luZmxhdGVcXFwiKSxcXG4gICAgICAgICAgICAgICAgXyA9IHQoXFxcIi4vdXRpbHMvY29tbW9uXFxcIiksXFxuICAgICAgICAgICAgICAgIHUgPSB0KFxcXCIuL3V0aWxzL3N0cmluZ3NcXFwiKSxcXG4gICAgICAgICAgICAgICAgYyA9IHQoXFxcIi4vemxpYi9jb25zdGFudHNcXFwiKSxcXG4gICAgICAgICAgICAgICAgaSA9IHQoXFxcIi4vemxpYi9tZXNzYWdlc1xcXCIpLFxcbiAgICAgICAgICAgICAgICBuID0gdChcXFwiLi96bGliL3pzdHJlYW1cXFwiKSxcXG4gICAgICAgICAgICAgICAgciA9IHQoXFxcIi4vemxpYi9nemhlYWRlclxcXCIpLFxcbiAgICAgICAgICAgICAgICBiID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBzKHQpIHtcXG4gICAgICAgICAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIHMpKSByZXR1cm4gbmV3IHModCk7XFxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IF8uYXNzaWduKHtcXG4gICAgICAgICAgICAgICAgICAgIGNodW5rU2l6ZTogMTYzODQsXFxuICAgICAgICAgICAgICAgICAgICB3aW5kb3dCaXRzOiAwLFxcbiAgICAgICAgICAgICAgICAgICAgdG86IFxcXCJcXFwiXFxuICAgICAgICAgICAgICAgIH0sIHQgfHwge30pO1xcbiAgICAgICAgICAgICAgICB2YXIgZSA9IHRoaXMub3B0aW9ucztcXG4gICAgICAgICAgICAgICAgZS5yYXcgJiYgMCA8PSBlLndpbmRvd0JpdHMgJiYgZS53aW5kb3dCaXRzIDwgMTYgJiYgKGUud2luZG93Qml0cyA9IC1lLndpbmRvd0JpdHMsIDAgPT09IGUud2luZG93Qml0cyAmJiAoZS53aW5kb3dCaXRzID0gLTE1KSksICEoMCA8PSBlLndpbmRvd0JpdHMgJiYgZS53aW5kb3dCaXRzIDwgMTYpIHx8IHQgJiYgdC53aW5kb3dCaXRzIHx8IChlLndpbmRvd0JpdHMgKz0gMzIpLCAxNSA8IGUud2luZG93Qml0cyAmJiBlLndpbmRvd0JpdHMgPCA0OCAmJiAwID09ICgxNSAmIGUud2luZG93Qml0cykgJiYgKGUud2luZG93Qml0cyB8PSAxNSksIHRoaXMuZXJyID0gMCwgdGhpcy5tc2cgPSBcXFwiXFxcIiwgdGhpcy5lbmRlZCA9ICExLCB0aGlzLmNodW5rcyA9IFtdLCB0aGlzLnN0cm0gPSBuZXcgbiwgdGhpcy5zdHJtLmF2YWlsX291dCA9IDA7XFxuICAgICAgICAgICAgICAgIHZhciBhID0gZi5pbmZsYXRlSW5pdDIodGhpcy5zdHJtLCBlLndpbmRvd0JpdHMpO1xcbiAgICAgICAgICAgICAgICBpZiAoYSAhPT0gYy5aX09LKSB0aHJvdyBuZXcgRXJyb3IoaVthXSk7XFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhlYWRlciA9IG5ldyByLCBmLmluZmxhdGVHZXRIZWFkZXIodGhpcy5zdHJtLCB0aGlzLmhlYWRlciksIGUuZGljdGlvbmFyeSAmJiAoXFxcInN0cmluZ1xcXCIgPT0gdHlwZW9mIGUuZGljdGlvbmFyeSA/IGUuZGljdGlvbmFyeSA9IHUuc3RyaW5nMmJ1ZihlLmRpY3Rpb25hcnkpIDogXFxcIltvYmplY3QgQXJyYXlCdWZmZXJdXFxcIiA9PT0gYi5jYWxsKGUuZGljdGlvbmFyeSkgJiYgKGUuZGljdGlvbmFyeSA9IG5ldyBVaW50OEFycmF5KGUuZGljdGlvbmFyeSkpLCBlLnJhdyAmJiAoYSA9IGYuaW5mbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLCBlLmRpY3Rpb25hcnkpKSAhPT0gYy5aX09LKSkgdGhyb3cgbmV3IEVycm9yKGlbYV0pXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIG8odCwgZSkge1xcbiAgICAgICAgICAgICAgICB2YXIgYSA9IG5ldyBzKGUpO1xcbiAgICAgICAgICAgICAgICBpZiAoYS5wdXNoKHQsICEwKSwgYS5lcnIpIHRocm93IGEubXNnIHx8IGlbYS5lcnJdO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5yZXN1bHRcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcy5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uKHQsIGUpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGEsIGksIG4sIHIsIHMsIG8gPSB0aGlzLnN0cm0sXFxuICAgICAgICAgICAgICAgICAgICBsID0gdGhpcy5vcHRpb25zLmNodW5rU2l6ZSxcXG4gICAgICAgICAgICAgICAgICAgIGggPSB0aGlzLm9wdGlvbnMuZGljdGlvbmFyeSxcXG4gICAgICAgICAgICAgICAgICAgIGQgPSAhMTtcXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZW5kZWQpIHJldHVybiAhMTtcXG4gICAgICAgICAgICAgICAgaSA9IGUgPT09IH5+ZSA/IGUgOiAhMCA9PT0gZSA/IGMuWl9GSU5JU0ggOiBjLlpfTk9fRkxVU0gsIFxcXCJzdHJpbmdcXFwiID09IHR5cGVvZiB0ID8gby5pbnB1dCA9IHUuYmluc3RyaW5nMmJ1Zih0KSA6IFxcXCJbb2JqZWN0IEFycmF5QnVmZmVyXVxcXCIgPT09IGIuY2FsbCh0KSA/IG8uaW5wdXQgPSBuZXcgVWludDhBcnJheSh0KSA6IG8uaW5wdXQgPSB0LCBvLm5leHRfaW4gPSAwLCBvLmF2YWlsX2luID0gby5pbnB1dC5sZW5ndGg7XFxuICAgICAgICAgICAgICAgIGRvIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBvLmF2YWlsX291dCAmJiAoby5vdXRwdXQgPSBuZXcgXy5CdWY4KGwpLCBvLm5leHRfb3V0ID0gMCwgby5hdmFpbF9vdXQgPSBsKSwgKGEgPSBmLmluZmxhdGUobywgYy5aX05PX0ZMVVNIKSkgPT09IGMuWl9ORUVEX0RJQ1QgJiYgaCAmJiAoYSA9IGYuaW5mbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLCBoKSksIGEgPT09IGMuWl9CVUZfRVJST1IgJiYgITAgPT09IGQgJiYgKGEgPSBjLlpfT0ssIGQgPSAhMSksIGEgIT09IGMuWl9TVFJFQU1fRU5EICYmIGEgIT09IGMuWl9PSykgcmV0dXJuIHRoaXMub25FbmQoYSksICEodGhpcy5lbmRlZCA9ICEwKTtcXG4gICAgICAgICAgICAgICAgICAgIG8ubmV4dF9vdXQgJiYgKDAgIT09IG8uYXZhaWxfb3V0ICYmIGEgIT09IGMuWl9TVFJFQU1fRU5EICYmICgwICE9PSBvLmF2YWlsX2luIHx8IGkgIT09IGMuWl9GSU5JU0ggJiYgaSAhPT0gYy5aX1NZTkNfRkxVU0gpIHx8IChcXFwic3RyaW5nXFxcIiA9PT0gdGhpcy5vcHRpb25zLnRvID8gKG4gPSB1LnV0Zjhib3JkZXIoby5vdXRwdXQsIG8ubmV4dF9vdXQpLCByID0gby5uZXh0X291dCAtIG4sIHMgPSB1LmJ1ZjJzdHJpbmcoby5vdXRwdXQsIG4pLCBvLm5leHRfb3V0ID0gciwgby5hdmFpbF9vdXQgPSBsIC0gciwgciAmJiBfLmFycmF5U2V0KG8ub3V0cHV0LCBvLm91dHB1dCwgbiwgciwgMCksIHRoaXMub25EYXRhKHMpKSA6IHRoaXMub25EYXRhKF8uc2hyaW5rQnVmKG8ub3V0cHV0LCBvLm5leHRfb3V0KSkpKSwgMCA9PT0gby5hdmFpbF9pbiAmJiAwID09PSBvLmF2YWlsX291dCAmJiAoZCA9ICEwKVxcbiAgICAgICAgICAgICAgICB9IHdoaWxlICgoMCA8IG8uYXZhaWxfaW4gfHwgMCA9PT0gby5hdmFpbF9vdXQpICYmIGEgIT09IGMuWl9TVFJFQU1fRU5EKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgPT09IGMuWl9TVFJFQU1fRU5EICYmIChpID0gYy5aX0ZJTklTSCksIGkgPT09IGMuWl9GSU5JU0ggPyAoYSA9IGYuaW5mbGF0ZUVuZCh0aGlzLnN0cm0pLCB0aGlzLm9uRW5kKGEpLCB0aGlzLmVuZGVkID0gITAsIGEgPT09IGMuWl9PSykgOiBpICE9PSBjLlpfU1lOQ19GTFVTSCB8fCAodGhpcy5vbkVuZChjLlpfT0spLCAhKG8uYXZhaWxfb3V0ID0gMCkpXFxuICAgICAgICAgICAgfSwgcy5wcm90b3R5cGUub25EYXRhID0gZnVuY3Rpb24odCkge1xcbiAgICAgICAgICAgICAgICB0aGlzLmNodW5rcy5wdXNoKHQpXFxuICAgICAgICAgICAgfSwgcy5wcm90b3R5cGUub25FbmQgPSBmdW5jdGlvbih0KSB7XFxuICAgICAgICAgICAgICAgIHQgPT09IGMuWl9PSyAmJiAoXFxcInN0cmluZ1xcXCIgPT09IHRoaXMub3B0aW9ucy50byA/IHRoaXMucmVzdWx0ID0gdGhpcy5jaHVua3Muam9pbihcXFwiXFxcIikgOiB0aGlzLnJlc3VsdCA9IF8uZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLCB0aGlzLmNodW5rcyA9IFtdLCB0aGlzLmVyciA9IHQsIHRoaXMubXNnID0gdGhpcy5zdHJtLm1zZ1xcbiAgICAgICAgICAgIH0sIGEuSW5mbGF0ZSA9IHMsIGEuaW5mbGF0ZSA9IG8sIGEuaW5mbGF0ZVJhdyA9IGZ1bmN0aW9uKHQsIGUpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIChlID0gZSB8fCB7fSkucmF3ID0gITAsIG8odCwgZSlcXG4gICAgICAgICAgICB9LCBhLnVuZ3ppcCA9IG9cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICBcXFwiLi91dGlscy9jb21tb25cXFwiOiAzLFxcbiAgICAgICAgICAgIFxcXCIuL3V0aWxzL3N0cmluZ3NcXFwiOiA0LFxcbiAgICAgICAgICAgIFxcXCIuL3psaWIvY29uc3RhbnRzXFxcIjogNixcXG4gICAgICAgICAgICBcXFwiLi96bGliL2d6aGVhZGVyXFxcIjogOSxcXG4gICAgICAgICAgICBcXFwiLi96bGliL2luZmxhdGVcXFwiOiAxMSxcXG4gICAgICAgICAgICBcXFwiLi96bGliL21lc3NhZ2VzXFxcIjogMTMsXFxuICAgICAgICAgICAgXFxcIi4vemxpYi96c3RyZWFtXFxcIjogMTVcXG4gICAgICAgIH1dLFxcbiAgICAgICAgMzogW2Z1bmN0aW9uKHQsIGUsIGEpIHtcXG4gICAgICAgICAgICBcXFwidXNlIHN0cmljdFxcXCI7XFxuICAgICAgICAgICAgdmFyIGkgPSBcXFwidW5kZWZpbmVkXFxcIiAhPSB0eXBlb2YgVWludDhBcnJheSAmJiBcXFwidW5kZWZpbmVkXFxcIiAhPSB0eXBlb2YgVWludDE2QXJyYXkgJiYgXFxcInVuZGVmaW5lZFxcXCIgIT0gdHlwZW9mIEludDMyQXJyYXk7XFxuICAgICAgICAgICAgYS5hc3NpZ24gPSBmdW5jdGlvbih0KSB7XFxuICAgICAgICAgICAgICAgIGZvciAodmFyIGUsIGEsIGkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOyBpLmxlbmd0aDspIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBuID0gaS5zaGlmdCgpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKG4pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXFxcIm9iamVjdFxcXCIgIT0gdHlwZW9mIG4pIHRocm93IG5ldyBUeXBlRXJyb3IobiArIFxcXCJtdXN0IGJlIG5vbi1vYmplY3RcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciByIGluIG4pIGUgPSBuLCBhID0gciwgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIGEpICYmICh0W3JdID0gbltyXSlcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdFxcbiAgICAgICAgICAgIH0sIGEuc2hyaW5rQnVmID0gZnVuY3Rpb24odCwgZSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdC5sZW5ndGggPT09IGUgPyB0IDogdC5zdWJhcnJheSA/IHQuc3ViYXJyYXkoMCwgZSkgOiAodC5sZW5ndGggPSBlLCB0KVxcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgdmFyIG4gPSB7XFxuICAgICAgICAgICAgICAgICAgICBhcnJheVNldDogZnVuY3Rpb24odCwgZSwgYSwgaSwgbikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnN1YmFycmF5ICYmIHQuc3ViYXJyYXkpIHQuc2V0KGUuc3ViYXJyYXkoYSwgYSArIGkpLCBuKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgaTsgcisrKSB0W24gKyByXSA9IGVbYSArIHJdXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgZmxhdHRlbkNodW5rczogZnVuY3Rpb24odCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlLCBhLCBpLCBuLCByLCBzO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZSA9IGkgPSAwLCBhID0gdC5sZW5ndGg7IGUgPCBhOyBlKyspIGkgKz0gdFtlXS5sZW5ndGg7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzID0gbmV3IFVpbnQ4QXJyYXkoaSksIGUgPSBuID0gMCwgYSA9IHQubGVuZ3RoOyBlIDwgYTsgZSsrKSByID0gdFtlXSwgcy5zZXQociwgbiksIG4gKz0gci5sZW5ndGg7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgciA9IHtcXG4gICAgICAgICAgICAgICAgICAgIGFycmF5U2V0OiBmdW5jdGlvbih0LCBlLCBhLCBpLCBuKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBpOyByKyspIHRbbiArIHJdID0gZVthICsgcl1cXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICBmbGF0dGVuQ2h1bmtzOiBmdW5jdGlvbih0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdLmNvbmNhdC5hcHBseShbXSwgdClcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICBhLnNldFR5cGVkID0gZnVuY3Rpb24odCkge1xcbiAgICAgICAgICAgICAgICB0ID8gKGEuQnVmOCA9IFVpbnQ4QXJyYXksIGEuQnVmMTYgPSBVaW50MTZBcnJheSwgYS5CdWYzMiA9IEludDMyQXJyYXksIGEuYXNzaWduKGEsIG4pKSA6IChhLkJ1ZjggPSBBcnJheSwgYS5CdWYxNiA9IEFycmF5LCBhLkJ1ZjMyID0gQXJyYXksIGEuYXNzaWduKGEsIHIpKVxcbiAgICAgICAgICAgIH0sIGEuc2V0VHlwZWQoaSlcXG4gICAgICAgIH0sIHt9XSxcXG4gICAgICAgIDQ6IFtmdW5jdGlvbih0LCBlLCBhKSB7XFxuICAgICAgICAgICAgXFxcInVzZSBzdHJpY3RcXFwiO1xcbiAgICAgICAgICAgIHZhciBsID0gdChcXFwiLi9jb21tb25cXFwiKSxcXG4gICAgICAgICAgICAgICAgbiA9ICEwLFxcbiAgICAgICAgICAgICAgICByID0gITA7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBbMF0pXFxuICAgICAgICAgICAgfSBjYXRjaCAodCkge1xcbiAgICAgICAgICAgICAgICBuID0gITFcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBuZXcgVWludDhBcnJheSgxKSlcXG4gICAgICAgICAgICB9IGNhdGNoICh0KSB7XFxuICAgICAgICAgICAgICAgIHIgPSAhMVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBmb3IgKHZhciBoID0gbmV3IGwuQnVmOCgyNTYpLCBpID0gMDsgaSA8IDI1NjsgaSsrKSBoW2ldID0gMjUyIDw9IGkgPyA2IDogMjQ4IDw9IGkgPyA1IDogMjQwIDw9IGkgPyA0IDogMjI0IDw9IGkgPyAzIDogMTkyIDw9IGkgPyAyIDogMTtcXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBkKHQsIGUpIHtcXG4gICAgICAgICAgICAgICAgaWYgKGUgPCA2NTUzNCAmJiAodC5zdWJhcnJheSAmJiByIHx8ICF0LnN1YmFycmF5ICYmIG4pKSByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBsLnNocmlua0J1Zih0LCBlKSk7XFxuICAgICAgICAgICAgICAgIGZvciAodmFyIGEgPSBcXFwiXFxcIiwgaSA9IDA7IGkgPCBlOyBpKyspIGEgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaFsyNTRdID0gaFsyNTRdID0gMSwgYS5zdHJpbmcyYnVmID0gZnVuY3Rpb24odCkge1xcbiAgICAgICAgICAgICAgICB2YXIgZSwgYSwgaSwgbiwgciwgcyA9IHQubGVuZ3RoLFxcbiAgICAgICAgICAgICAgICAgICAgbyA9IDA7XFxuICAgICAgICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBzOyBuKyspIDU1Mjk2ID09ICg2NDUxMiAmIChhID0gdC5jaGFyQ29kZUF0KG4pKSkgJiYgbiArIDEgPCBzICYmIDU2MzIwID09ICg2NDUxMiAmIChpID0gdC5jaGFyQ29kZUF0KG4gKyAxKSkpICYmIChhID0gNjU1MzYgKyAoYSAtIDU1Mjk2IDw8IDEwKSArIChpIC0gNTYzMjApLCBuKyspLCBvICs9IGEgPCAxMjggPyAxIDogYSA8IDIwNDggPyAyIDogYSA8IDY1NTM2ID8gMyA6IDQ7XFxuICAgICAgICAgICAgICAgIGZvciAoZSA9IG5ldyBsLkJ1ZjgobyksIG4gPSByID0gMDsgciA8IG87IG4rKykgNTUyOTYgPT0gKDY0NTEyICYgKGEgPSB0LmNoYXJDb2RlQXQobikpKSAmJiBuICsgMSA8IHMgJiYgNTYzMjAgPT0gKDY0NTEyICYgKGkgPSB0LmNoYXJDb2RlQXQobiArIDEpKSkgJiYgKGEgPSA2NTUzNiArIChhIC0gNTUyOTYgPDwgMTApICsgKGkgLSA1NjMyMCksIG4rKyksIGEgPCAxMjggPyBlW3IrK10gPSBhIDogKGEgPCAyMDQ4ID8gZVtyKytdID0gMTkyIHwgYSA+Pj4gNiA6IChhIDwgNjU1MzYgPyBlW3IrK10gPSAyMjQgfCBhID4+PiAxMiA6IChlW3IrK10gPSAyNDAgfCBhID4+PiAxOCwgZVtyKytdID0gMTI4IHwgYSA+Pj4gMTIgJiA2MyksIGVbcisrXSA9IDEyOCB8IGEgPj4+IDYgJiA2MyksIGVbcisrXSA9IDEyOCB8IDYzICYgYSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBlXFxuICAgICAgICAgICAgfSwgYS5idWYyYmluc3RyaW5nID0gZnVuY3Rpb24odCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZCh0LCB0Lmxlbmd0aClcXG4gICAgICAgICAgICB9LCBhLmJpbnN0cmluZzJidWYgPSBmdW5jdGlvbih0KSB7XFxuICAgICAgICAgICAgICAgIGZvciAodmFyIGUgPSBuZXcgbC5CdWY4KHQubGVuZ3RoKSwgYSA9IDAsIGkgPSBlLmxlbmd0aDsgYSA8IGk7IGErKykgZVthXSA9IHQuY2hhckNvZGVBdChhKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVcXG4gICAgICAgICAgICB9LCBhLmJ1ZjJzdHJpbmcgPSBmdW5jdGlvbih0LCBlKSB7XFxuICAgICAgICAgICAgICAgIHZhciBhLCBpLCBuLCByLCBzID0gZSB8fCB0Lmxlbmd0aCxcXG4gICAgICAgICAgICAgICAgICAgIG8gPSBuZXcgQXJyYXkoMiAqIHMpO1xcbiAgICAgICAgICAgICAgICBmb3IgKGEgPSBpID0gMDsgYSA8IHM7KVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKChuID0gdFthKytdKSA8IDEyOCkgb1tpKytdID0gbjtcXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKDQgPCAociA9IGhbbl0pKSBvW2krK10gPSA2NTUzMywgYSArPSByIC0gMTtcXG4gICAgICAgICAgICAgICAgZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKG4gJj0gMiA9PT0gciA/IDMxIDogMyA9PT0gciA/IDE1IDogNzsgMSA8IHIgJiYgYSA8IHM7KSBuID0gbiA8PCA2IHwgNjMgJiB0W2ErK10sIHItLTtcXG4gICAgICAgICAgICAgICAgICAgIDEgPCByID8gb1tpKytdID0gNjU1MzMgOiBuIDwgNjU1MzYgPyBvW2krK10gPSBuIDogKG4gLT0gNjU1MzYsIG9baSsrXSA9IDU1Mjk2IHwgbiA+PiAxMCAmIDEwMjMsIG9baSsrXSA9IDU2MzIwIHwgMTAyMyAmIG4pXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIGQobywgaSlcXG4gICAgICAgICAgICB9LCBhLnV0Zjhib3JkZXIgPSBmdW5jdGlvbih0LCBlKSB7XFxuICAgICAgICAgICAgICAgIHZhciBhO1xcbiAgICAgICAgICAgICAgICBmb3IgKChlID0gZSB8fCB0Lmxlbmd0aCkgPiB0Lmxlbmd0aCAmJiAoZSA9IHQubGVuZ3RoKSwgYSA9IGUgLSAxOyAwIDw9IGEgJiYgMTI4ID09ICgxOTIgJiB0W2FdKTspIGEtLTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgPCAwID8gZSA6IDAgPT09IGEgPyBlIDogYSArIGhbdFthXV0gPiBlID8gYSA6IGVcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgXFxcIi4vY29tbW9uXFxcIjogM1xcbiAgICAgICAgfV0sXFxuICAgICAgICA1OiBbZnVuY3Rpb24odCwgZSwgYSkge1xcbiAgICAgICAgICAgIFxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4gICAgICAgICAgICBlLmV4cG9ydHMgPSBmdW5jdGlvbih0LCBlLCBhLCBpKSB7XFxuICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSA2NTUzNSAmIHQgfCAwLCByID0gdCA+Pj4gMTYgJiA2NTUzNSB8IDAsIHMgPSAwOyAwICE9PSBhOykge1xcbiAgICAgICAgICAgICAgICAgICAgZm9yIChhIC09IHMgPSAyZTMgPCBhID8gMmUzIDogYTsgciA9IHIgKyAobiA9IG4gKyBlW2krK10gfCAwKSB8IDAsIC0tczspO1xcbiAgICAgICAgICAgICAgICAgICAgbiAlPSA2NTUyMSwgciAlPSA2NTUyMVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBuIHwgciA8PCAxNiB8IDBcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCB7fV0sXFxuICAgICAgICA2OiBbZnVuY3Rpb24odCwgZSwgYSkge1xcbiAgICAgICAgICAgIFxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4gICAgICAgICAgICBlLmV4cG9ydHMgPSB7XFxuICAgICAgICAgICAgICAgIFpfTk9fRkxVU0g6IDAsXFxuICAgICAgICAgICAgICAgIFpfUEFSVElBTF9GTFVTSDogMSxcXG4gICAgICAgICAgICAgICAgWl9TWU5DX0ZMVVNIOiAyLFxcbiAgICAgICAgICAgICAgICBaX0ZVTExfRkxVU0g6IDMsXFxuICAgICAgICAgICAgICAgIFpfRklOSVNIOiA0LFxcbiAgICAgICAgICAgICAgICBaX0JMT0NLOiA1LFxcbiAgICAgICAgICAgICAgICBaX1RSRUVTOiA2LFxcbiAgICAgICAgICAgICAgICBaX09LOiAwLFxcbiAgICAgICAgICAgICAgICBaX1NUUkVBTV9FTkQ6IDEsXFxuICAgICAgICAgICAgICAgIFpfTkVFRF9ESUNUOiAyLFxcbiAgICAgICAgICAgICAgICBaX0VSUk5POiAtMSxcXG4gICAgICAgICAgICAgICAgWl9TVFJFQU1fRVJST1I6IC0yLFxcbiAgICAgICAgICAgICAgICBaX0RBVEFfRVJST1I6IC0zLFxcbiAgICAgICAgICAgICAgICBaX0JVRl9FUlJPUjogLTUsXFxuICAgICAgICAgICAgICAgIFpfTk9fQ09NUFJFU1NJT046IDAsXFxuICAgICAgICAgICAgICAgIFpfQkVTVF9TUEVFRDogMSxcXG4gICAgICAgICAgICAgICAgWl9CRVNUX0NPTVBSRVNTSU9OOiA5LFxcbiAgICAgICAgICAgICAgICBaX0RFRkFVTFRfQ09NUFJFU1NJT046IC0xLFxcbiAgICAgICAgICAgICAgICBaX0ZJTFRFUkVEOiAxLFxcbiAgICAgICAgICAgICAgICBaX0hVRkZNQU5fT05MWTogMixcXG4gICAgICAgICAgICAgICAgWl9STEU6IDMsXFxuICAgICAgICAgICAgICAgIFpfRklYRUQ6IDQsXFxuICAgICAgICAgICAgICAgIFpfREVGQVVMVF9TVFJBVEVHWTogMCxcXG4gICAgICAgICAgICAgICAgWl9CSU5BUlk6IDAsXFxuICAgICAgICAgICAgICAgIFpfVEVYVDogMSxcXG4gICAgICAgICAgICAgICAgWl9VTktOT1dOOiAyLFxcbiAgICAgICAgICAgICAgICBaX0RFRkxBVEVEOiA4XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwge31dLFxcbiAgICAgICAgNzogW2Z1bmN0aW9uKHQsIGUsIGEpIHtcXG4gICAgICAgICAgICBcXFwidXNlIHN0cmljdFxcXCI7XFxuICAgICAgICAgICAgdmFyIG8gPSBmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgdCwgZSA9IFtdLCBhID0gMDsgYSA8IDI1NjsgYSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICB0ID0gYTtcXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB0ID0gMSAmIHQgPyAzOTg4MjkyMzg0IF4gdCA+Pj4gMSA6IHQgPj4+IDE7XFxuICAgICAgICAgICAgICAgICAgICBlW2FdID0gdFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBlXFxuICAgICAgICAgICAgfSgpO1xcbiAgICAgICAgICAgIGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHQsIGUsIGEsIGkpIHtcXG4gICAgICAgICAgICAgICAgdmFyIG4gPSBvLFxcbiAgICAgICAgICAgICAgICAgICAgciA9IGkgKyBhO1xcbiAgICAgICAgICAgICAgICB0IF49IC0xO1xcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBzID0gaTsgcyA8IHI7IHMrKykgdCA9IHQgPj4+IDggXiBuWzI1NSAmICh0IF4gZVtzXSldO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gLTEgXiB0XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwge31dLFxcbiAgICAgICAgODogW2Z1bmN0aW9uKHQsIGUsIGEpIHtcXG4gICAgICAgICAgICBcXFwidXNlIHN0cmljdFxcXCI7XFxuICAgICAgICAgICAgdmFyIGwsIF8gPSB0KFxcXCIuLi91dGlscy9jb21tb25cXFwiKSxcXG4gICAgICAgICAgICAgICAgaCA9IHQoXFxcIi4vdHJlZXNcXFwiKSxcXG4gICAgICAgICAgICAgICAgdSA9IHQoXFxcIi4vYWRsZXIzMlxcXCIpLFxcbiAgICAgICAgICAgICAgICBjID0gdChcXFwiLi9jcmMzMlxcXCIpLFxcbiAgICAgICAgICAgICAgICBpID0gdChcXFwiLi9tZXNzYWdlc1xcXCIpLFxcbiAgICAgICAgICAgICAgICBkID0gMCxcXG4gICAgICAgICAgICAgICAgZiA9IDQsXFxuICAgICAgICAgICAgICAgIGIgPSAwLFxcbiAgICAgICAgICAgICAgICBnID0gLTIsXFxuICAgICAgICAgICAgICAgIG0gPSAtMSxcXG4gICAgICAgICAgICAgICAgdyA9IDQsXFxuICAgICAgICAgICAgICAgIG4gPSAyLFxcbiAgICAgICAgICAgICAgICBwID0gOCxcXG4gICAgICAgICAgICAgICAgdiA9IDksXFxuICAgICAgICAgICAgICAgIHIgPSAyODYsXFxuICAgICAgICAgICAgICAgIHMgPSAzMCxcXG4gICAgICAgICAgICAgICAgbyA9IDE5LFxcbiAgICAgICAgICAgICAgICBrID0gMiAqIHIgKyAxLFxcbiAgICAgICAgICAgICAgICB5ID0gMTUsXFxuICAgICAgICAgICAgICAgIHggPSAzLFxcbiAgICAgICAgICAgICAgICB6ID0gMjU4LFxcbiAgICAgICAgICAgICAgICBCID0geiArIHggKyAxLFxcbiAgICAgICAgICAgICAgICBTID0gNDIsXFxuICAgICAgICAgICAgICAgIEUgPSAxMTMsXFxuICAgICAgICAgICAgICAgIEEgPSAxLFxcbiAgICAgICAgICAgICAgICBaID0gMixcXG4gICAgICAgICAgICAgICAgUiA9IDMsXFxuICAgICAgICAgICAgICAgIEMgPSA0O1xcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIE4odCwgZSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdC5tc2cgPSBpW2VdLCBlXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIE8odCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gKHQgPDwgMSkgLSAoNCA8IHQgPyA5IDogMClcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gRCh0KSB7XFxuICAgICAgICAgICAgICAgIGZvciAodmFyIGUgPSB0Lmxlbmd0aDsgMCA8PSAtLWU7KSB0W2VdID0gMFxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBJKHQpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGUgPSB0LnN0YXRlLFxcbiAgICAgICAgICAgICAgICAgICAgYSA9IGUucGVuZGluZztcXG4gICAgICAgICAgICAgICAgYSA+IHQuYXZhaWxfb3V0ICYmIChhID0gdC5hdmFpbF9vdXQpLCAwICE9PSBhICYmIChfLmFycmF5U2V0KHQub3V0cHV0LCBlLnBlbmRpbmdfYnVmLCBlLnBlbmRpbmdfb3V0LCBhLCB0Lm5leHRfb3V0KSwgdC5uZXh0X291dCArPSBhLCBlLnBlbmRpbmdfb3V0ICs9IGEsIHQudG90YWxfb3V0ICs9IGEsIHQuYXZhaWxfb3V0IC09IGEsIGUucGVuZGluZyAtPSBhLCAwID09PSBlLnBlbmRpbmcgJiYgKGUucGVuZGluZ19vdXQgPSAwKSlcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gVSh0LCBlKSB7XFxuICAgICAgICAgICAgICAgIGguX3RyX2ZsdXNoX2Jsb2NrKHQsIDAgPD0gdC5ibG9ja19zdGFydCA/IHQuYmxvY2tfc3RhcnQgOiAtMSwgdC5zdHJzdGFydCAtIHQuYmxvY2tfc3RhcnQsIGUpLCB0LmJsb2NrX3N0YXJ0ID0gdC5zdHJzdGFydCwgSSh0LnN0cm0pXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIFQodCwgZSkge1xcbiAgICAgICAgICAgICAgICB0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXSA9IGVcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gRih0LCBlKSB7XFxuICAgICAgICAgICAgICAgIHQucGVuZGluZ19idWZbdC5wZW5kaW5nKytdID0gZSA+Pj4gOCAmIDI1NSwgdC5wZW5kaW5nX2J1Zlt0LnBlbmRpbmcrK10gPSAyNTUgJiBlXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIEwodCwgZSkge1xcbiAgICAgICAgICAgICAgICB2YXIgYSwgaSwgbiA9IHQubWF4X2NoYWluX2xlbmd0aCxcXG4gICAgICAgICAgICAgICAgICAgIHIgPSB0LnN0cnN0YXJ0LFxcbiAgICAgICAgICAgICAgICAgICAgcyA9IHQucHJldl9sZW5ndGgsXFxuICAgICAgICAgICAgICAgICAgICBvID0gdC5uaWNlX21hdGNoLFxcbiAgICAgICAgICAgICAgICAgICAgbCA9IHQuc3Ryc3RhcnQgPiB0Lndfc2l6ZSAtIEIgPyB0LnN0cnN0YXJ0IC0gKHQud19zaXplIC0gQikgOiAwLFxcbiAgICAgICAgICAgICAgICAgICAgaCA9IHQud2luZG93LFxcbiAgICAgICAgICAgICAgICAgICAgZCA9IHQud19tYXNrLFxcbiAgICAgICAgICAgICAgICAgICAgZiA9IHQucHJldixcXG4gICAgICAgICAgICAgICAgICAgIF8gPSB0LnN0cnN0YXJ0ICsgeixcXG4gICAgICAgICAgICAgICAgICAgIHUgPSBoW3IgKyBzIC0gMV0sXFxuICAgICAgICAgICAgICAgICAgICBjID0gaFtyICsgc107XFxuICAgICAgICAgICAgICAgIHQucHJldl9sZW5ndGggPj0gdC5nb29kX21hdGNoICYmIChuID4+PSAyKSwgbyA+IHQubG9va2FoZWFkICYmIChvID0gdC5sb29rYWhlYWQpO1xcbiAgICAgICAgICAgICAgICBkbyB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoaFsoYSA9IGUpICsgc10gPT09IGMgJiYgaFthICsgcyAtIDFdID09PSB1ICYmIGhbYV0gPT09IGhbcl0gJiYgaFsrK2FdID09PSBoW3IgKyAxXSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHIgKz0gMiwgYSsrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvIHt9IHdoaWxlIChoWysrcl0gPT09IGhbKythXSAmJiBoWysrcl0gPT09IGhbKythXSAmJiBoWysrcl0gPT09IGhbKythXSAmJiBoWysrcl0gPT09IGhbKythXSAmJiBoWysrcl0gPT09IGhbKythXSAmJiBoWysrcl0gPT09IGhbKythXSAmJiBoWysrcl0gPT09IGhbKythXSAmJiBoWysrcl0gPT09IGhbKythXSAmJiByIDwgXyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPSB6IC0gKF8gLSByKSwgciA9IF8gLSB6LCBzIDwgaSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodC5tYXRjaF9zdGFydCA9IGUsIG8gPD0gKHMgPSBpKSkgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBoW3IgKyBzIC0gMV0sIGMgPSBoW3IgKyBzXVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoKGUgPSBmW2UgJiBkXSkgPiBsICYmIDAgIT0gLS1uKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHMgPD0gdC5sb29rYWhlYWQgPyBzIDogdC5sb29rYWhlYWRcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gSCh0KSB7XFxuICAgICAgICAgICAgICAgIHZhciBlLCBhLCBpLCBuLCByLCBzLCBvLCBsLCBoLCBkLCBmID0gdC53X3NpemU7XFxuICAgICAgICAgICAgICAgIGRvIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChuID0gdC53aW5kb3dfc2l6ZSAtIHQubG9va2FoZWFkIC0gdC5zdHJzdGFydCwgdC5zdHJzdGFydCA+PSBmICsgKGYgLSBCKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoXy5hcnJheVNldCh0LndpbmRvdywgdC53aW5kb3csIGYsIGYsIDApLCB0Lm1hdGNoX3N0YXJ0IC09IGYsIHQuc3Ryc3RhcnQgLT0gZiwgdC5ibG9ja19zdGFydCAtPSBmLCBlID0gYSA9IHQuaGFzaF9zaXplOyBpID0gdC5oZWFkWy0tZV0sIHQuaGVhZFtlXSA9IGYgPD0gaSA/IGkgLSBmIDogMCwgLS1hOyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChlID0gYSA9IGY7IGkgPSB0LnByZXZbLS1lXSwgdC5wcmV2W2VdID0gZiA8PSBpID8gaSAtIGYgOiAwLCAtLWE7KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBuICs9IGZcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGlmICgwID09PSB0LnN0cm0uYXZhaWxfaW4pIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHMgPSB0LnN0cm0sIG8gPSB0LndpbmRvdywgbCA9IHQuc3Ryc3RhcnQgKyB0Lmxvb2thaGVhZCwgaCA9IG4sIGQgPSB2b2lkIDAsIGQgPSBzLmF2YWlsX2luLCBoIDwgZCAmJiAoZCA9IGgpLCBhID0gMCA9PT0gZCA/IDAgOiAocy5hdmFpbF9pbiAtPSBkLCBfLmFycmF5U2V0KG8sIHMuaW5wdXQsIHMubmV4dF9pbiwgZCwgbCksIDEgPT09IHMuc3RhdGUud3JhcCA/IHMuYWRsZXIgPSB1KHMuYWRsZXIsIG8sIGQsIGwpIDogMiA9PT0gcy5zdGF0ZS53cmFwICYmIChzLmFkbGVyID0gYyhzLmFkbGVyLCBvLCBkLCBsKSksIHMubmV4dF9pbiArPSBkLCBzLnRvdGFsX2luICs9IGQsIGQpLCB0Lmxvb2thaGVhZCArPSBhLCB0Lmxvb2thaGVhZCArIHQuaW5zZXJ0ID49IHgpXFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChyID0gdC5zdHJzdGFydCAtIHQuaW5zZXJ0LCB0Lmluc19oID0gdC53aW5kb3dbcl0sIHQuaW5zX2ggPSAodC5pbnNfaCA8PCB0Lmhhc2hfc2hpZnQgXiB0LndpbmRvd1tyICsgMV0pICYgdC5oYXNoX21hc2s7IHQuaW5zZXJ0ICYmICh0Lmluc19oID0gKHQuaW5zX2ggPDwgdC5oYXNoX3NoaWZ0IF4gdC53aW5kb3dbciArIHggLSAxXSkgJiB0Lmhhc2hfbWFzaywgdC5wcmV2W3IgJiB0LndfbWFza10gPSB0LmhlYWRbdC5pbnNfaF0sIHQuaGVhZFt0Lmluc19oXSA9IHIsIHIrKywgdC5pbnNlcnQtLSwgISh0Lmxvb2thaGVhZCArIHQuaW5zZXJ0IDwgeCkpOyk7XFxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKHQubG9va2FoZWFkIDwgQiAmJiAwICE9PSB0LnN0cm0uYXZhaWxfaW4pXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIGoodCwgZSkge1xcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhLCBpOzspIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh0Lmxvb2thaGVhZCA8IEIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSCh0KSwgdC5sb29rYWhlYWQgPCBCICYmIGUgPT09IGQpIHJldHVybiBBO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSB0Lmxvb2thaGVhZCkgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGlmIChhID0gMCwgdC5sb29rYWhlYWQgPj0geCAmJiAodC5pbnNfaCA9ICh0Lmluc19oIDw8IHQuaGFzaF9zaGlmdCBeIHQud2luZG93W3Quc3Ryc3RhcnQgKyB4IC0gMV0pICYgdC5oYXNoX21hc2ssIGEgPSB0LnByZXZbdC5zdHJzdGFydCAmIHQud19tYXNrXSA9IHQuaGVhZFt0Lmluc19oXSwgdC5oZWFkW3QuaW5zX2hdID0gdC5zdHJzdGFydCksIDAgIT09IGEgJiYgdC5zdHJzdGFydCAtIGEgPD0gdC53X3NpemUgLSBCICYmICh0Lm1hdGNoX2xlbmd0aCA9IEwodCwgYSkpLCB0Lm1hdGNoX2xlbmd0aCA+PSB4KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0gaC5fdHJfdGFsbHkodCwgdC5zdHJzdGFydCAtIHQubWF0Y2hfc3RhcnQsIHQubWF0Y2hfbGVuZ3RoIC0geCksIHQubG9va2FoZWFkIC09IHQubWF0Y2hfbGVuZ3RoLCB0Lm1hdGNoX2xlbmd0aCA8PSB0Lm1heF9sYXp5X21hdGNoICYmIHQubG9va2FoZWFkID49IHgpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh0Lm1hdGNoX2xlbmd0aC0tOyB0LnN0cnN0YXJ0KyssIHQuaW5zX2ggPSAodC5pbnNfaCA8PCB0Lmhhc2hfc2hpZnQgXiB0LndpbmRvd1t0LnN0cnN0YXJ0ICsgeCAtIDFdKSAmIHQuaGFzaF9tYXNrLCBhID0gdC5wcmV2W3Quc3Ryc3RhcnQgJiB0LndfbWFza10gPSB0LmhlYWRbdC5pbnNfaF0sIHQuaGVhZFt0Lmluc19oXSA9IHQuc3Ryc3RhcnQsIDAgIT0gLS10Lm1hdGNoX2xlbmd0aDspO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnN0cnN0YXJ0KytcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgdC5zdHJzdGFydCArPSB0Lm1hdGNoX2xlbmd0aCwgdC5tYXRjaF9sZW5ndGggPSAwLCB0Lmluc19oID0gdC53aW5kb3dbdC5zdHJzdGFydF0sIHQuaW5zX2ggPSAodC5pbnNfaCA8PCB0Lmhhc2hfc2hpZnQgXiB0LndpbmRvd1t0LnN0cnN0YXJ0ICsgMV0pICYgdC5oYXNoX21hc2s7XFxuICAgICAgICAgICAgICAgICAgICBlbHNlIGkgPSBoLl90cl90YWxseSh0LCAwLCB0LndpbmRvd1t0LnN0cnN0YXJ0XSksIHQubG9va2FoZWFkLS0sIHQuc3Ryc3RhcnQrKztcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpICYmIChVKHQsICExKSwgMCA9PT0gdC5zdHJtLmF2YWlsX291dCkpIHJldHVybiBBXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQuaW5zZXJ0ID0gdC5zdHJzdGFydCA8IHggLSAxID8gdC5zdHJzdGFydCA6IHggLSAxLCBlID09PSBmID8gKFUodCwgITApLCAwID09PSB0LnN0cm0uYXZhaWxfb3V0ID8gUiA6IEMpIDogdC5sYXN0X2xpdCAmJiAoVSh0LCAhMSksIDAgPT09IHQuc3RybS5hdmFpbF9vdXQpID8gQSA6IFpcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gSyh0LCBlKSB7XFxuICAgICAgICAgICAgICAgIGZvciAodmFyIGEsIGksIG47Oykge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQubG9va2FoZWFkIDwgQikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChIKHQpLCB0Lmxvb2thaGVhZCA8IEIgJiYgZSA9PT0gZCkgcmV0dXJuIEE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IHQubG9va2FoZWFkKSBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSAwLCB0Lmxvb2thaGVhZCA+PSB4ICYmICh0Lmluc19oID0gKHQuaW5zX2ggPDwgdC5oYXNoX3NoaWZ0IF4gdC53aW5kb3dbdC5zdHJzdGFydCArIHggLSAxXSkgJiB0Lmhhc2hfbWFzaywgYSA9IHQucHJldlt0LnN0cnN0YXJ0ICYgdC53X21hc2tdID0gdC5oZWFkW3QuaW5zX2hdLCB0LmhlYWRbdC5pbnNfaF0gPSB0LnN0cnN0YXJ0KSwgdC5wcmV2X2xlbmd0aCA9IHQubWF0Y2hfbGVuZ3RoLCB0LnByZXZfbWF0Y2ggPSB0Lm1hdGNoX3N0YXJ0LCB0Lm1hdGNoX2xlbmd0aCA9IHggLSAxLCAwICE9PSBhICYmIHQucHJldl9sZW5ndGggPCB0Lm1heF9sYXp5X21hdGNoICYmIHQuc3Ryc3RhcnQgLSBhIDw9IHQud19zaXplIC0gQiAmJiAodC5tYXRjaF9sZW5ndGggPSBMKHQsIGEpLCB0Lm1hdGNoX2xlbmd0aCA8PSA1ICYmICgxID09PSB0LnN0cmF0ZWd5IHx8IHQubWF0Y2hfbGVuZ3RoID09PSB4ICYmIDQwOTYgPCB0LnN0cnN0YXJ0IC0gdC5tYXRjaF9zdGFydCkgJiYgKHQubWF0Y2hfbGVuZ3RoID0geCAtIDEpKSwgdC5wcmV2X2xlbmd0aCA+PSB4ICYmIHQubWF0Y2hfbGVuZ3RoIDw9IHQucHJldl9sZW5ndGgpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG4gPSB0LnN0cnN0YXJ0ICsgdC5sb29rYWhlYWQgLSB4LCBpID0gaC5fdHJfdGFsbHkodCwgdC5zdHJzdGFydCAtIDEgLSB0LnByZXZfbWF0Y2gsIHQucHJldl9sZW5ndGggLSB4KSwgdC5sb29rYWhlYWQgLT0gdC5wcmV2X2xlbmd0aCAtIDEsIHQucHJldl9sZW5ndGggLT0gMjsgKyt0LnN0cnN0YXJ0IDw9IG4gJiYgKHQuaW5zX2ggPSAodC5pbnNfaCA8PCB0Lmhhc2hfc2hpZnQgXiB0LndpbmRvd1t0LnN0cnN0YXJ0ICsgeCAtIDFdKSAmIHQuaGFzaF9tYXNrLCBhID0gdC5wcmV2W3Quc3Ryc3RhcnQgJiB0LndfbWFza10gPSB0LmhlYWRbdC5pbnNfaF0sIHQuaGVhZFt0Lmluc19oXSA9IHQuc3Ryc3RhcnQpLCAwICE9IC0tdC5wcmV2X2xlbmd0aDspO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0Lm1hdGNoX2F2YWlsYWJsZSA9IDAsIHQubWF0Y2hfbGVuZ3RoID0geCAtIDEsIHQuc3Ryc3RhcnQrKywgaSAmJiAoVSh0LCAhMSksIDAgPT09IHQuc3RybS5hdmFpbF9vdXQpKSByZXR1cm4gQVxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0Lm1hdGNoX2F2YWlsYWJsZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaSA9IGguX3RyX3RhbGx5KHQsIDAsIHQud2luZG93W3Quc3Ryc3RhcnQgLSAxXSkpICYmIFUodCwgITEpLCB0LnN0cnN0YXJ0KyssIHQubG9va2FoZWFkLS0sIDAgPT09IHQuc3RybS5hdmFpbF9vdXQpIHJldHVybiBBXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgdC5tYXRjaF9hdmFpbGFibGUgPSAxLCB0LnN0cnN0YXJ0KyssIHQubG9va2FoZWFkLS1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdC5tYXRjaF9hdmFpbGFibGUgJiYgKGkgPSBoLl90cl90YWxseSh0LCAwLCB0LndpbmRvd1t0LnN0cnN0YXJ0IC0gMV0pLCB0Lm1hdGNoX2F2YWlsYWJsZSA9IDApLCB0Lmluc2VydCA9IHQuc3Ryc3RhcnQgPCB4IC0gMSA/IHQuc3Ryc3RhcnQgOiB4IC0gMSwgZSA9PT0gZiA/IChVKHQsICEwKSwgMCA9PT0gdC5zdHJtLmF2YWlsX291dCA/IFIgOiBDKSA6IHQubGFzdF9saXQgJiYgKFUodCwgITEpLCAwID09PSB0LnN0cm0uYXZhaWxfb3V0KSA/IEEgOiBaXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIE0odCwgZSwgYSwgaSwgbikge1xcbiAgICAgICAgICAgICAgICB0aGlzLmdvb2RfbGVuZ3RoID0gdCwgdGhpcy5tYXhfbGF6eSA9IGUsIHRoaXMubmljZV9sZW5ndGggPSBhLCB0aGlzLm1heF9jaGFpbiA9IGksIHRoaXMuZnVuYyA9IG5cXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gUCgpIHtcXG4gICAgICAgICAgICAgICAgdGhpcy5zdHJtID0gbnVsbCwgdGhpcy5zdGF0dXMgPSAwLCB0aGlzLnBlbmRpbmdfYnVmID0gbnVsbCwgdGhpcy5wZW5kaW5nX2J1Zl9zaXplID0gMCwgdGhpcy5wZW5kaW5nX291dCA9IDAsIHRoaXMucGVuZGluZyA9IDAsIHRoaXMud3JhcCA9IDAsIHRoaXMuZ3poZWFkID0gbnVsbCwgdGhpcy5nemluZGV4ID0gMCwgdGhpcy5tZXRob2QgPSBwLCB0aGlzLmxhc3RfZmx1c2ggPSAtMSwgdGhpcy53X3NpemUgPSAwLCB0aGlzLndfYml0cyA9IDAsIHRoaXMud19tYXNrID0gMCwgdGhpcy53aW5kb3cgPSBudWxsLCB0aGlzLndpbmRvd19zaXplID0gMCwgdGhpcy5wcmV2ID0gbnVsbCwgdGhpcy5oZWFkID0gbnVsbCwgdGhpcy5pbnNfaCA9IDAsIHRoaXMuaGFzaF9zaXplID0gMCwgdGhpcy5oYXNoX2JpdHMgPSAwLCB0aGlzLmhhc2hfbWFzayA9IDAsIHRoaXMuaGFzaF9zaGlmdCA9IDAsIHRoaXMuYmxvY2tfc3RhcnQgPSAwLCB0aGlzLm1hdGNoX2xlbmd0aCA9IDAsIHRoaXMucHJldl9tYXRjaCA9IDAsIHRoaXMubWF0Y2hfYXZhaWxhYmxlID0gMCwgdGhpcy5zdHJzdGFydCA9IDAsIHRoaXMubWF0Y2hfc3RhcnQgPSAwLCB0aGlzLmxvb2thaGVhZCA9IDAsIHRoaXMucHJldl9sZW5ndGggPSAwLCB0aGlzLm1heF9jaGFpbl9sZW5ndGggPSAwLCB0aGlzLm1heF9sYXp5X21hdGNoID0gMCwgdGhpcy5sZXZlbCA9IDAsIHRoaXMuc3RyYXRlZ3kgPSAwLCB0aGlzLmdvb2RfbWF0Y2ggPSAwLCB0aGlzLm5pY2VfbWF0Y2ggPSAwLCB0aGlzLmR5bl9sdHJlZSA9IG5ldyBfLkJ1ZjE2KDIgKiBrKSwgdGhpcy5keW5fZHRyZWUgPSBuZXcgXy5CdWYxNigyICogKDIgKiBzICsgMSkpLCB0aGlzLmJsX3RyZWUgPSBuZXcgXy5CdWYxNigyICogKDIgKiBvICsgMSkpLCBEKHRoaXMuZHluX2x0cmVlKSwgRCh0aGlzLmR5bl9kdHJlZSksIEQodGhpcy5ibF90cmVlKSwgdGhpcy5sX2Rlc2MgPSBudWxsLCB0aGlzLmRfZGVzYyA9IG51bGwsIHRoaXMuYmxfZGVzYyA9IG51bGwsIHRoaXMuYmxfY291bnQgPSBuZXcgXy5CdWYxNih5ICsgMSksIHRoaXMuaGVhcCA9IG5ldyBfLkJ1ZjE2KDIgKiByICsgMSksIEQodGhpcy5oZWFwKSwgdGhpcy5oZWFwX2xlbiA9IDAsIHRoaXMuaGVhcF9tYXggPSAwLCB0aGlzLmRlcHRoID0gbmV3IF8uQnVmMTYoMiAqIHIgKyAxKSwgRCh0aGlzLmRlcHRoKSwgdGhpcy5sX2J1ZiA9IDAsIHRoaXMubGl0X2J1ZnNpemUgPSAwLCB0aGlzLmxhc3RfbGl0ID0gMCwgdGhpcy5kX2J1ZiA9IDAsIHRoaXMub3B0X2xlbiA9IDAsIHRoaXMuc3RhdGljX2xlbiA9IDAsIHRoaXMubWF0Y2hlcyA9IDAsIHRoaXMuaW5zZXJ0ID0gMCwgdGhpcy5iaV9idWYgPSAwLCB0aGlzLmJpX3ZhbGlkID0gMFxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBZKHQpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGU7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0ICYmIHQuc3RhdGUgPyAodC50b3RhbF9pbiA9IHQudG90YWxfb3V0ID0gMCwgdC5kYXRhX3R5cGUgPSBuLCAoZSA9IHQuc3RhdGUpLnBlbmRpbmcgPSAwLCBlLnBlbmRpbmdfb3V0ID0gMCwgZS53cmFwIDwgMCAmJiAoZS53cmFwID0gLWUud3JhcCksIGUuc3RhdHVzID0gZS53cmFwID8gUyA6IEUsIHQuYWRsZXIgPSAyID09PSBlLndyYXAgPyAwIDogMSwgZS5sYXN0X2ZsdXNoID0gZCwgaC5fdHJfaW5pdChlKSwgYikgOiBOKHQsIGcpXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIHEodCkge1xcbiAgICAgICAgICAgICAgICB2YXIgZSwgYSA9IFkodCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBhID09PSBiICYmICgoZSA9IHQuc3RhdGUpLndpbmRvd19zaXplID0gMiAqIGUud19zaXplLCBEKGUuaGVhZCksIGUubWF4X2xhenlfbWF0Y2ggPSBsW2UubGV2ZWxdLm1heF9sYXp5LCBlLmdvb2RfbWF0Y2ggPSBsW2UubGV2ZWxdLmdvb2RfbGVuZ3RoLCBlLm5pY2VfbWF0Y2ggPSBsW2UubGV2ZWxdLm5pY2VfbGVuZ3RoLCBlLm1heF9jaGFpbl9sZW5ndGggPSBsW2UubGV2ZWxdLm1heF9jaGFpbiwgZS5zdHJzdGFydCA9IDAsIGUuYmxvY2tfc3RhcnQgPSAwLCBlLmxvb2thaGVhZCA9IDAsIGUuaW5zZXJ0ID0gMCwgZS5tYXRjaF9sZW5ndGggPSBlLnByZXZfbGVuZ3RoID0geCAtIDEsIGUubWF0Y2hfYXZhaWxhYmxlID0gMCwgZS5pbnNfaCA9IDApLCBhXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIEcodCwgZSwgYSwgaSwgbiwgcikge1xcbiAgICAgICAgICAgICAgICBpZiAoIXQpIHJldHVybiBnO1xcbiAgICAgICAgICAgICAgICB2YXIgcyA9IDE7XFxuICAgICAgICAgICAgICAgIGlmIChlID09PSBtICYmIChlID0gNiksIGkgPCAwID8gKHMgPSAwLCBpID0gLWkpIDogMTUgPCBpICYmIChzID0gMiwgaSAtPSAxNiksIG4gPCAxIHx8IHYgPCBuIHx8IGEgIT09IHAgfHwgaSA8IDggfHwgMTUgPCBpIHx8IGUgPCAwIHx8IDkgPCBlIHx8IHIgPCAwIHx8IHcgPCByKSByZXR1cm4gTih0LCBnKTtcXG4gICAgICAgICAgICAgICAgOCA9PT0gaSAmJiAoaSA9IDkpO1xcbiAgICAgICAgICAgICAgICB2YXIgbyA9IG5ldyBQO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gKHQuc3RhdGUgPSBvKS5zdHJtID0gdCwgby53cmFwID0gcywgby5nemhlYWQgPSBudWxsLCBvLndfYml0cyA9IGksIG8ud19zaXplID0gMSA8PCBvLndfYml0cywgby53X21hc2sgPSBvLndfc2l6ZSAtIDEsIG8uaGFzaF9iaXRzID0gbiArIDcsIG8uaGFzaF9zaXplID0gMSA8PCBvLmhhc2hfYml0cywgby5oYXNoX21hc2sgPSBvLmhhc2hfc2l6ZSAtIDEsIG8uaGFzaF9zaGlmdCA9IH5+KChvLmhhc2hfYml0cyArIHggLSAxKSAvIHgpLCBvLndpbmRvdyA9IG5ldyBfLkJ1ZjgoMiAqIG8ud19zaXplKSwgby5oZWFkID0gbmV3IF8uQnVmMTYoby5oYXNoX3NpemUpLCBvLnByZXYgPSBuZXcgXy5CdWYxNihvLndfc2l6ZSksIG8ubGl0X2J1ZnNpemUgPSAxIDw8IG4gKyA2LCBvLnBlbmRpbmdfYnVmX3NpemUgPSA0ICogby5saXRfYnVmc2l6ZSwgby5wZW5kaW5nX2J1ZiA9IG5ldyBfLkJ1Zjgoby5wZW5kaW5nX2J1Zl9zaXplKSwgby5kX2J1ZiA9IDEgKiBvLmxpdF9idWZzaXplLCBvLmxfYnVmID0gMyAqIG8ubGl0X2J1ZnNpemUsIG8ubGV2ZWwgPSBlLCBvLnN0cmF0ZWd5ID0gciwgby5tZXRob2QgPSBhLCBxKHQpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGwgPSBbbmV3IE0oMCwgMCwgMCwgMCwgZnVuY3Rpb24odCwgZSkge1xcbiAgICAgICAgICAgICAgICB2YXIgYSA9IDY1NTM1O1xcbiAgICAgICAgICAgICAgICBmb3IgKGEgPiB0LnBlbmRpbmdfYnVmX3NpemUgLSA1ICYmIChhID0gdC5wZW5kaW5nX2J1Zl9zaXplIC0gNSk7Oykge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQubG9va2FoZWFkIDw9IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSCh0KSwgMCA9PT0gdC5sb29rYWhlYWQgJiYgZSA9PT0gZCkgcmV0dXJuIEE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IHQubG9va2FoZWFkKSBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgdC5zdHJzdGFydCArPSB0Lmxvb2thaGVhZCwgdC5sb29rYWhlYWQgPSAwO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSB0LmJsb2NrX3N0YXJ0ICsgYTtcXG4gICAgICAgICAgICAgICAgICAgIGlmICgoMCA9PT0gdC5zdHJzdGFydCB8fCB0LnN0cnN0YXJ0ID49IGkpICYmICh0Lmxvb2thaGVhZCA9IHQuc3Ryc3RhcnQgLSBpLCB0LnN0cnN0YXJ0ID0gaSwgVSh0LCAhMSksIDAgPT09IHQuc3RybS5hdmFpbF9vdXQpKSByZXR1cm4gQTtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh0LnN0cnN0YXJ0IC0gdC5ibG9ja19zdGFydCA+PSB0Lndfc2l6ZSAtIEIgJiYgKFUodCwgITEpLCAwID09PSB0LnN0cm0uYXZhaWxfb3V0KSkgcmV0dXJuIEFcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdC5pbnNlcnQgPSAwLCBlID09PSBmID8gKFUodCwgITApLCAwID09PSB0LnN0cm0uYXZhaWxfb3V0ID8gUiA6IEMpIDogKHQuc3Ryc3RhcnQgPiB0LmJsb2NrX3N0YXJ0ICYmIChVKHQsICExKSwgdC5zdHJtLmF2YWlsX291dCksIEEpXFxuICAgICAgICAgICAgfSksIG5ldyBNKDQsIDQsIDgsIDQsIGopLCBuZXcgTSg0LCA1LCAxNiwgOCwgaiksIG5ldyBNKDQsIDYsIDMyLCAzMiwgaiksIG5ldyBNKDQsIDQsIDE2LCAxNiwgSyksIG5ldyBNKDgsIDE2LCAzMiwgMzIsIEspLCBuZXcgTSg4LCAxNiwgMTI4LCAxMjgsIEspLCBuZXcgTSg4LCAzMiwgMTI4LCAyNTYsIEspLCBuZXcgTSgzMiwgMTI4LCAyNTgsIDEwMjQsIEspLCBuZXcgTSgzMiwgMjU4LCAyNTgsIDQwOTYsIEspXSwgYS5kZWZsYXRlSW5pdCA9IGZ1bmN0aW9uKHQsIGUpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEcodCwgZSwgcCwgMTUsIDgsIDApXFxuICAgICAgICAgICAgfSwgYS5kZWZsYXRlSW5pdDIgPSBHLCBhLmRlZmxhdGVSZXNldCA9IHEsIGEuZGVmbGF0ZVJlc2V0S2VlcCA9IFksIGEuZGVmbGF0ZVNldEhlYWRlciA9IGZ1bmN0aW9uKHQsIGUpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQgJiYgdC5zdGF0ZSA/IDIgIT09IHQuc3RhdGUud3JhcCA/IGcgOiAodC5zdGF0ZS5nemhlYWQgPSBlLCBiKSA6IGdcXG4gICAgICAgICAgICB9LCBhLmRlZmxhdGUgPSBmdW5jdGlvbih0LCBlKSB7XFxuICAgICAgICAgICAgICAgIHZhciBhLCBpLCBuLCByO1xcbiAgICAgICAgICAgICAgICBpZiAoIXQgfHwgIXQuc3RhdGUgfHwgNSA8IGUgfHwgZSA8IDApIHJldHVybiB0ID8gTih0LCBnKSA6IGc7XFxuICAgICAgICAgICAgICAgIGlmIChpID0gdC5zdGF0ZSwgIXQub3V0cHV0IHx8ICF0LmlucHV0ICYmIDAgIT09IHQuYXZhaWxfaW4gfHwgNjY2ID09PSBpLnN0YXR1cyAmJiBlICE9PSBmKSByZXR1cm4gTih0LCAwID09PSB0LmF2YWlsX291dCA/IC01IDogZyk7XFxuICAgICAgICAgICAgICAgIGlmIChpLnN0cm0gPSB0LCBhID0gaS5sYXN0X2ZsdXNoLCBpLmxhc3RfZmx1c2ggPSBlLCBpLnN0YXR1cyA9PT0gUylcXG4gICAgICAgICAgICAgICAgICAgIGlmICgyID09PSBpLndyYXApIHQuYWRsZXIgPSAwLCBUKGksIDMxKSwgVChpLCAxMzkpLCBUKGksIDgpLCBpLmd6aGVhZCA/IChUKGksIChpLmd6aGVhZC50ZXh0ID8gMSA6IDApICsgKGkuZ3poZWFkLmhjcmMgPyAyIDogMCkgKyAoaS5nemhlYWQuZXh0cmEgPyA0IDogMCkgKyAoaS5nemhlYWQubmFtZSA/IDggOiAwKSArIChpLmd6aGVhZC5jb21tZW50ID8gMTYgOiAwKSksIFQoaSwgMjU1ICYgaS5nemhlYWQudGltZSksIFQoaSwgaS5nemhlYWQudGltZSA+PiA4ICYgMjU1KSwgVChpLCBpLmd6aGVhZC50aW1lID4+IDE2ICYgMjU1KSwgVChpLCBpLmd6aGVhZC50aW1lID4+IDI0ICYgMjU1KSwgVChpLCA5ID09PSBpLmxldmVsID8gMiA6IDIgPD0gaS5zdHJhdGVneSB8fCBpLmxldmVsIDwgMiA/IDQgOiAwKSwgVChpLCAyNTUgJiBpLmd6aGVhZC5vcyksIGkuZ3poZWFkLmV4dHJhICYmIGkuZ3poZWFkLmV4dHJhLmxlbmd0aCAmJiAoVChpLCAyNTUgJiBpLmd6aGVhZC5leHRyYS5sZW5ndGgpLCBUKGksIGkuZ3poZWFkLmV4dHJhLmxlbmd0aCA+PiA4ICYgMjU1KSksIGkuZ3poZWFkLmhjcmMgJiYgKHQuYWRsZXIgPSBjKHQuYWRsZXIsIGkucGVuZGluZ19idWYsIGkucGVuZGluZywgMCkpLCBpLmd6aW5kZXggPSAwLCBpLnN0YXR1cyA9IDY5KSA6IChUKGksIDApLCBUKGksIDApLCBUKGksIDApLCBUKGksIDApLCBUKGksIDApLCBUKGksIDkgPT09IGkubGV2ZWwgPyAyIDogMiA8PSBpLnN0cmF0ZWd5IHx8IGkubGV2ZWwgPCAyID8gNCA6IDApLCBUKGksIDMpLCBpLnN0YXR1cyA9IEUpO1xcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSBwICsgKGkud19iaXRzIC0gOCA8PCA0KSA8PCA4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHMgfD0gKDIgPD0gaS5zdHJhdGVneSB8fCBpLmxldmVsIDwgMiA/IDAgOiBpLmxldmVsIDwgNiA/IDEgOiA2ID09PSBpLmxldmVsID8gMiA6IDMpIDw8IDYsIDAgIT09IGkuc3Ryc3RhcnQgJiYgKHMgfD0gMzIpLCBzICs9IDMxIC0gcyAlIDMxLCBpLnN0YXR1cyA9IEUsIEYoaSwgcyksIDAgIT09IGkuc3Ryc3RhcnQgJiYgKEYoaSwgdC5hZGxlciA+Pj4gMTYpLCBGKGksIDY1NTM1ICYgdC5hZGxlcikpLCB0LmFkbGVyID0gMVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoNjkgPT09IGkuc3RhdHVzKVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkuZ3poZWFkLmV4dHJhKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gaS5wZW5kaW5nOyBpLmd6aW5kZXggPCAoNjU1MzUgJiBpLmd6aGVhZC5leHRyYS5sZW5ndGgpICYmIChpLnBlbmRpbmcgIT09IGkucGVuZGluZ19idWZfc2l6ZSB8fCAoaS5nemhlYWQuaGNyYyAmJiBpLnBlbmRpbmcgPiBuICYmICh0LmFkbGVyID0gYyh0LmFkbGVyLCBpLnBlbmRpbmdfYnVmLCBpLnBlbmRpbmcgLSBuLCBuKSksIEkodCksIG4gPSBpLnBlbmRpbmcsIGkucGVuZGluZyAhPT0gaS5wZW5kaW5nX2J1Zl9zaXplKSk7KSBUKGksIDI1NSAmIGkuZ3poZWFkLmV4dHJhW2kuZ3ppbmRleF0pLCBpLmd6aW5kZXgrKztcXG4gICAgICAgICAgICAgICAgICAgICAgICBpLmd6aGVhZC5oY3JjICYmIGkucGVuZGluZyA+IG4gJiYgKHQuYWRsZXIgPSBjKHQuYWRsZXIsIGkucGVuZGluZ19idWYsIGkucGVuZGluZyAtIG4sIG4pKSwgaS5nemluZGV4ID09PSBpLmd6aGVhZC5leHRyYS5sZW5ndGggJiYgKGkuZ3ppbmRleCA9IDAsIGkuc3RhdHVzID0gNzMpXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaS5zdGF0dXMgPSA3MztcXG4gICAgICAgICAgICAgICAgaWYgKDczID09PSBpLnN0YXR1cylcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpLmd6aGVhZC5uYW1lKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGkucGVuZGluZztcXG4gICAgICAgICAgICAgICAgICAgICAgICBkbyB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpLnBlbmRpbmcgPT09IGkucGVuZGluZ19idWZfc2l6ZSAmJiAoaS5nemhlYWQuaGNyYyAmJiBpLnBlbmRpbmcgPiBuICYmICh0LmFkbGVyID0gYyh0LmFkbGVyLCBpLnBlbmRpbmdfYnVmLCBpLnBlbmRpbmcgLSBuLCBuKSksIEkodCksIG4gPSBpLnBlbmRpbmcsIGkucGVuZGluZyA9PT0gaS5wZW5kaW5nX2J1Zl9zaXplKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IDE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQoaSwgciA9IGkuZ3ppbmRleCA8IGkuZ3poZWFkLm5hbWUubGVuZ3RoID8gMjU1ICYgaS5nemhlYWQubmFtZS5jaGFyQ29kZUF0KGkuZ3ppbmRleCsrKSA6IDApXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCAhPT0gcik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaS5nemhlYWQuaGNyYyAmJiBpLnBlbmRpbmcgPiBuICYmICh0LmFkbGVyID0gYyh0LmFkbGVyLCBpLnBlbmRpbmdfYnVmLCBpLnBlbmRpbmcgLSBuLCBuKSksIDAgPT09IHIgJiYgKGkuZ3ppbmRleCA9IDAsIGkuc3RhdHVzID0gOTEpXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaS5zdGF0dXMgPSA5MTtcXG4gICAgICAgICAgICAgICAgaWYgKDkxID09PSBpLnN0YXR1cylcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpLmd6aGVhZC5jb21tZW50KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGkucGVuZGluZztcXG4gICAgICAgICAgICAgICAgICAgICAgICBkbyB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpLnBlbmRpbmcgPT09IGkucGVuZGluZ19idWZfc2l6ZSAmJiAoaS5nemhlYWQuaGNyYyAmJiBpLnBlbmRpbmcgPiBuICYmICh0LmFkbGVyID0gYyh0LmFkbGVyLCBpLnBlbmRpbmdfYnVmLCBpLnBlbmRpbmcgLSBuLCBuKSksIEkodCksIG4gPSBpLnBlbmRpbmcsIGkucGVuZGluZyA9PT0gaS5wZW5kaW5nX2J1Zl9zaXplKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IDE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQoaSwgciA9IGkuZ3ppbmRleCA8IGkuZ3poZWFkLmNvbW1lbnQubGVuZ3RoID8gMjU1ICYgaS5nemhlYWQuY29tbWVudC5jaGFyQ29kZUF0KGkuZ3ppbmRleCsrKSA6IDApXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCAhPT0gcik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaS5nemhlYWQuaGNyYyAmJiBpLnBlbmRpbmcgPiBuICYmICh0LmFkbGVyID0gYyh0LmFkbGVyLCBpLnBlbmRpbmdfYnVmLCBpLnBlbmRpbmcgLSBuLCBuKSksIDAgPT09IHIgJiYgKGkuc3RhdHVzID0gMTAzKVxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGkuc3RhdHVzID0gMTAzO1xcbiAgICAgICAgICAgICAgICBpZiAoMTAzID09PSBpLnN0YXR1cyAmJiAoaS5nemhlYWQuaGNyYyA/IChpLnBlbmRpbmcgKyAyID4gaS5wZW5kaW5nX2J1Zl9zaXplICYmIEkodCksIGkucGVuZGluZyArIDIgPD0gaS5wZW5kaW5nX2J1Zl9zaXplICYmIChUKGksIDI1NSAmIHQuYWRsZXIpLCBUKGksIHQuYWRsZXIgPj4gOCAmIDI1NSksIHQuYWRsZXIgPSAwLCBpLnN0YXR1cyA9IEUpKSA6IGkuc3RhdHVzID0gRSksIDAgIT09IGkucGVuZGluZykge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKEkodCksIDAgPT09IHQuYXZhaWxfb3V0KSByZXR1cm4gaS5sYXN0X2ZsdXNoID0gLTEsIGJcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgwID09PSB0LmF2YWlsX2luICYmIE8oZSkgPD0gTyhhKSAmJiBlICE9PSBmKSByZXR1cm4gTih0LCAtNSk7XFxuICAgICAgICAgICAgICAgIGlmICg2NjYgPT09IGkuc3RhdHVzICYmIDAgIT09IHQuYXZhaWxfaW4pIHJldHVybiBOKHQsIC01KTtcXG4gICAgICAgICAgICAgICAgaWYgKDAgIT09IHQuYXZhaWxfaW4gfHwgMCAhPT0gaS5sb29rYWhlYWQgfHwgZSAhPT0gZCAmJiA2NjYgIT09IGkuc3RhdHVzKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IDIgPT09IGkuc3RyYXRlZ3kgPyBmdW5jdGlvbih0LCBlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYTs7KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSB0Lmxvb2thaGVhZCAmJiAoSCh0KSwgMCA9PT0gdC5sb29rYWhlYWQpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSA9PT0gZCkgcmV0dXJuIEE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0Lm1hdGNoX2xlbmd0aCA9IDAsIGEgPSBoLl90cl90YWxseSh0LCAwLCB0LndpbmRvd1t0LnN0cnN0YXJ0XSksIHQubG9va2FoZWFkLS0sIHQuc3Ryc3RhcnQrKywgYSAmJiAoVSh0LCAhMSksIDAgPT09IHQuc3RybS5hdmFpbF9vdXQpKSByZXR1cm4gQVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdC5pbnNlcnQgPSAwLCBlID09PSBmID8gKFUodCwgITApLCAwID09PSB0LnN0cm0uYXZhaWxfb3V0ID8gUiA6IEMpIDogdC5sYXN0X2xpdCAmJiAoVSh0LCAhMSksIDAgPT09IHQuc3RybS5hdmFpbF9vdXQpID8gQSA6IFpcXG4gICAgICAgICAgICAgICAgICAgIH0oaSwgZSkgOiAzID09PSBpLnN0cmF0ZWd5ID8gZnVuY3Rpb24odCwgZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGEsIGksIG4sIHIsIHMgPSB0LndpbmRvdzs7KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0Lmxvb2thaGVhZCA8PSB6KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSCh0KSwgdC5sb29rYWhlYWQgPD0geiAmJiBlID09PSBkKSByZXR1cm4gQTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSB0Lmxvb2thaGVhZCkgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodC5tYXRjaF9sZW5ndGggPSAwLCB0Lmxvb2thaGVhZCA+PSB4ICYmIDAgPCB0LnN0cnN0YXJ0ICYmIChpID0gc1tuID0gdC5zdHJzdGFydCAtIDFdKSA9PT0gc1srK25dICYmIGkgPT09IHNbKytuXSAmJiBpID09PSBzWysrbl0pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSB0LnN0cnN0YXJ0ICsgejtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHt9IHdoaWxlIChpID09PSBzWysrbl0gJiYgaSA9PT0gc1srK25dICYmIGkgPT09IHNbKytuXSAmJiBpID09PSBzWysrbl0gJiYgaSA9PT0gc1srK25dICYmIGkgPT09IHNbKytuXSAmJiBpID09PSBzWysrbl0gJiYgaSA9PT0gc1srK25dICYmIG4gPCByKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQubWF0Y2hfbGVuZ3RoID0geiAtIChyIC0gbiksIHQubWF0Y2hfbGVuZ3RoID4gdC5sb29rYWhlYWQgJiYgKHQubWF0Y2hfbGVuZ3RoID0gdC5sb29rYWhlYWQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQubWF0Y2hfbGVuZ3RoID49IHggPyAoYSA9IGguX3RyX3RhbGx5KHQsIDEsIHQubWF0Y2hfbGVuZ3RoIC0geCksIHQubG9va2FoZWFkIC09IHQubWF0Y2hfbGVuZ3RoLCB0LnN0cnN0YXJ0ICs9IHQubWF0Y2hfbGVuZ3RoLCB0Lm1hdGNoX2xlbmd0aCA9IDApIDogKGEgPSBoLl90cl90YWxseSh0LCAwLCB0LndpbmRvd1t0LnN0cnN0YXJ0XSksIHQubG9va2FoZWFkLS0sIHQuc3Ryc3RhcnQrKyksIGEgJiYgKFUodCwgITEpLCAwID09PSB0LnN0cm0uYXZhaWxfb3V0KSkgcmV0dXJuIEFcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQuaW5zZXJ0ID0gMCwgZSA9PT0gZiA/IChVKHQsICEwKSwgMCA9PT0gdC5zdHJtLmF2YWlsX291dCA/IFIgOiBDKSA6IHQubGFzdF9saXQgJiYgKFUodCwgITEpLCAwID09PSB0LnN0cm0uYXZhaWxfb3V0KSA/IEEgOiBaXFxuICAgICAgICAgICAgICAgICAgICB9KGksIGUpIDogbFtpLmxldmVsXS5mdW5jKGksIGUpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKG8gIT09IFIgJiYgbyAhPT0gQyB8fCAoaS5zdGF0dXMgPSA2NjYpLCBvID09PSBBIHx8IG8gPT09IFIpIHJldHVybiAwID09PSB0LmF2YWlsX291dCAmJiAoaS5sYXN0X2ZsdXNoID0gLTEpLCBiO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKG8gPT09IFogJiYgKDEgPT09IGUgPyBoLl90cl9hbGlnbihpKSA6IDUgIT09IGUgJiYgKGguX3RyX3N0b3JlZF9ibG9jayhpLCAwLCAwLCAhMSksIDMgPT09IGUgJiYgKEQoaS5oZWFkKSwgMCA9PT0gaS5sb29rYWhlYWQgJiYgKGkuc3Ryc3RhcnQgPSAwLCBpLmJsb2NrX3N0YXJ0ID0gMCwgaS5pbnNlcnQgPSAwKSkpLCBJKHQpLCAwID09PSB0LmF2YWlsX291dCkpIHJldHVybiBpLmxhc3RfZmx1c2ggPSAtMSwgYlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBlICE9PSBmID8gYiA6IGkud3JhcCA8PSAwID8gMSA6ICgyID09PSBpLndyYXAgPyAoVChpLCAyNTUgJiB0LmFkbGVyKSwgVChpLCB0LmFkbGVyID4+IDggJiAyNTUpLCBUKGksIHQuYWRsZXIgPj4gMTYgJiAyNTUpLCBUKGksIHQuYWRsZXIgPj4gMjQgJiAyNTUpLCBUKGksIDI1NSAmIHQudG90YWxfaW4pLCBUKGksIHQudG90YWxfaW4gPj4gOCAmIDI1NSksIFQoaSwgdC50b3RhbF9pbiA+PiAxNiAmIDI1NSksIFQoaSwgdC50b3RhbF9pbiA+PiAyNCAmIDI1NSkpIDogKEYoaSwgdC5hZGxlciA+Pj4gMTYpLCBGKGksIDY1NTM1ICYgdC5hZGxlcikpLCBJKHQpLCAwIDwgaS53cmFwICYmIChpLndyYXAgPSAtaS53cmFwKSwgMCAhPT0gaS5wZW5kaW5nID8gYiA6IDEpXFxuICAgICAgICAgICAgfSwgYS5kZWZsYXRlRW5kID0gZnVuY3Rpb24odCkge1xcbiAgICAgICAgICAgICAgICB2YXIgZTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQgJiYgdC5zdGF0ZSA/IChlID0gdC5zdGF0ZS5zdGF0dXMpICE9PSBTICYmIDY5ICE9PSBlICYmIDczICE9PSBlICYmIDkxICE9PSBlICYmIDEwMyAhPT0gZSAmJiBlICE9PSBFICYmIDY2NiAhPT0gZSA/IE4odCwgZykgOiAodC5zdGF0ZSA9IG51bGwsIGUgPT09IEUgPyBOKHQsIC0zKSA6IGIpIDogZ1xcbiAgICAgICAgICAgIH0sIGEuZGVmbGF0ZVNldERpY3Rpb25hcnkgPSBmdW5jdGlvbih0LCBlKSB7XFxuICAgICAgICAgICAgICAgIHZhciBhLCBpLCBuLCByLCBzLCBvLCBsLCBoLCBkID0gZS5sZW5ndGg7XFxuICAgICAgICAgICAgICAgIGlmICghdCB8fCAhdC5zdGF0ZSkgcmV0dXJuIGc7XFxuICAgICAgICAgICAgICAgIGlmICgyID09PSAociA9IChhID0gdC5zdGF0ZSkud3JhcCkgfHwgMSA9PT0gciAmJiBhLnN0YXR1cyAhPT0gUyB8fCBhLmxvb2thaGVhZCkgcmV0dXJuIGc7XFxuICAgICAgICAgICAgICAgIGZvciAoMSA9PT0gciAmJiAodC5hZGxlciA9IHUodC5hZGxlciwgZSwgZCwgMCkpLCBhLndyYXAgPSAwLCBkID49IGEud19zaXplICYmICgwID09PSByICYmIChEKGEuaGVhZCksIGEuc3Ryc3RhcnQgPSAwLCBhLmJsb2NrX3N0YXJ0ID0gMCwgYS5pbnNlcnQgPSAwKSwgaCA9IG5ldyBfLkJ1ZjgoYS53X3NpemUpLCBfLmFycmF5U2V0KGgsIGUsIGQgLSBhLndfc2l6ZSwgYS53X3NpemUsIDApLCBlID0gaCwgZCA9IGEud19zaXplKSwgcyA9IHQuYXZhaWxfaW4sIG8gPSB0Lm5leHRfaW4sIGwgPSB0LmlucHV0LCB0LmF2YWlsX2luID0gZCwgdC5uZXh0X2luID0gMCwgdC5pbnB1dCA9IGUsIEgoYSk7IGEubG9va2FoZWFkID49IHg7KSB7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBhLnN0cnN0YXJ0LCBuID0gYS5sb29rYWhlYWQgLSAoeCAtIDEpOyBhLmluc19oID0gKGEuaW5zX2ggPDwgYS5oYXNoX3NoaWZ0IF4gYS53aW5kb3dbaSArIHggLSAxXSkgJiBhLmhhc2hfbWFzaywgYS5wcmV2W2kgJiBhLndfbWFza10gPSBhLmhlYWRbYS5pbnNfaF0sIGEuaGVhZFthLmluc19oXSA9IGksIGkrKywgLS1uOyk7XFxuICAgICAgICAgICAgICAgICAgICBhLnN0cnN0YXJ0ID0gaSwgYS5sb29rYWhlYWQgPSB4IC0gMSwgSChhKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBhLnN0cnN0YXJ0ICs9IGEubG9va2FoZWFkLCBhLmJsb2NrX3N0YXJ0ID0gYS5zdHJzdGFydCwgYS5pbnNlcnQgPSBhLmxvb2thaGVhZCwgYS5sb29rYWhlYWQgPSAwLCBhLm1hdGNoX2xlbmd0aCA9IGEucHJldl9sZW5ndGggPSB4IC0gMSwgYS5tYXRjaF9hdmFpbGFibGUgPSAwLCB0Lm5leHRfaW4gPSBvLCB0LmlucHV0ID0gbCwgdC5hdmFpbF9pbiA9IHMsIGEud3JhcCA9IHIsIGJcXG4gICAgICAgICAgICB9LCBhLmRlZmxhdGVJbmZvID0gXFxcInBha28gZGVmbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdClcXFwiXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgXFxcIi4uL3V0aWxzL2NvbW1vblxcXCI6IDMsXFxuICAgICAgICAgICAgXFxcIi4vYWRsZXIzMlxcXCI6IDUsXFxuICAgICAgICAgICAgXFxcIi4vY3JjMzJcXFwiOiA3LFxcbiAgICAgICAgICAgIFxcXCIuL21lc3NhZ2VzXFxcIjogMTMsXFxuICAgICAgICAgICAgXFxcIi4vdHJlZXNcXFwiOiAxNFxcbiAgICAgICAgfV0sXFxuICAgICAgICA5OiBbZnVuY3Rpb24odCwgZSwgYSkge1xcbiAgICAgICAgICAgIFxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4gICAgICAgICAgICBlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0ID0gMCwgdGhpcy50aW1lID0gMCwgdGhpcy54ZmxhZ3MgPSAwLCB0aGlzLm9zID0gMCwgdGhpcy5leHRyYSA9IG51bGwsIHRoaXMuZXh0cmFfbGVuID0gMCwgdGhpcy5uYW1lID0gXFxcIlxcXCIsIHRoaXMuY29tbWVudCA9IFxcXCJcXFwiLCB0aGlzLmhjcmMgPSAwLCB0aGlzLmRvbmUgPSAhMVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHt9XSxcXG4gICAgICAgIDEwOiBbZnVuY3Rpb24odCwgZSwgYSkge1xcbiAgICAgICAgICAgIFxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4gICAgICAgICAgICBlLmV4cG9ydHMgPSBmdW5jdGlvbih0LCBlKSB7XFxuICAgICAgICAgICAgICAgIHZhciBhLCBpLCBuLCByLCBzLCBvLCBsLCBoLCBkLCBmLCBfLCB1LCBjLCBiLCBnLCBtLCB3LCBwLCB2LCBrLCB5LCB4LCB6LCBCLCBTO1xcbiAgICAgICAgICAgICAgICBhID0gdC5zdGF0ZSwgaSA9IHQubmV4dF9pbiwgQiA9IHQuaW5wdXQsIG4gPSBpICsgKHQuYXZhaWxfaW4gLSA1KSwgciA9IHQubmV4dF9vdXQsIFMgPSB0Lm91dHB1dCwgcyA9IHIgLSAoZSAtIHQuYXZhaWxfb3V0KSwgbyA9IHIgKyAodC5hdmFpbF9vdXQgLSAyNTcpLCBsID0gYS5kbWF4LCBoID0gYS53c2l6ZSwgZCA9IGEud2hhdmUsIGYgPSBhLnduZXh0LCBfID0gYS53aW5kb3csIHUgPSBhLmhvbGQsIGMgPSBhLmJpdHMsIGIgPSBhLmxlbmNvZGUsIGcgPSBhLmRpc3Rjb2RlLCBtID0gKDEgPDwgYS5sZW5iaXRzKSAtIDEsIHcgPSAoMSA8PCBhLmRpc3RiaXRzKSAtIDE7XFxuICAgICAgICAgICAgICAgIHQ6IGRvIHtcXG4gICAgICAgICAgICAgICAgICAgIGMgPCAxNSAmJiAodSArPSBCW2krK10gPDwgYywgYyArPSA4LCB1ICs9IEJbaSsrXSA8PCBjLCBjICs9IDgpLCBwID0gYlt1ICYgbV07XFxuICAgICAgICAgICAgICAgICAgICBlOiBmb3IgKDs7KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPj4+PSB2ID0gcCA+Pj4gMjQsIGMgLT0gdiwgMCA9PT0gKHYgPSBwID4+PiAxNiAmIDI1NSkpIFNbcisrXSA9IDY1NTM1ICYgcDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMTYgJiB2KSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT0gKDY0ICYgdikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gYlsoNjU1MzUgJiBwKSArICh1ICYgKDEgPDwgdikgLSAxKV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDMyICYgdikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEubW9kZSA9IDEyO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQubXNnID0gXFxcImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZVxcXCIsIGEubW9kZSA9IDMwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSA2NTUzNSAmIHAsICh2ICY9IDE1KSAmJiAoYyA8IHYgJiYgKHUgKz0gQltpKytdIDw8IGMsIGMgKz0gOCksIGsgKz0gdSAmICgxIDw8IHYpIC0gMSwgdSA+Pj49IHYsIGMgLT0gdiksIGMgPCAxNSAmJiAodSArPSBCW2krK10gPDwgYywgYyArPSA4LCB1ICs9IEJbaSsrXSA8PCBjLCBjICs9IDgpLCBwID0gZ1t1ICYgd107XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IGZvciAoOzspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID4+Pj0gdiA9IHAgPj4+IDI0LCBjIC09IHYsICEoMTYgJiAodiA9IHAgPj4+IDE2ICYgMjU1KSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PSAoNjQgJiB2KSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gZ1soNjU1MzUgJiBwKSArICh1ICYgKDEgPDwgdikgLSAxKV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGFcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5tc2cgPSBcXFwiaW52YWxpZCBkaXN0YW5jZSBjb2RlXFxcIiwgYS5tb2RlID0gMzA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkgPSA2NTUzNSAmIHAsIGMgPCAodiAmPSAxNSkgJiYgKHUgKz0gQltpKytdIDw8IGMsIChjICs9IDgpIDwgdiAmJiAodSArPSBCW2krK10gPDwgYywgYyArPSA4KSksIGwgPCAoeSArPSB1ICYgKDEgPDwgdikgLSAxKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQubXNnID0gXFxcImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrXFxcIiwgYS5tb2RlID0gMzA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPj4+PSB2LCBjIC09IHYsICh2ID0gciAtIHMpIDwgeSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkIDwgKHYgPSB5IC0gdikgJiYgYS5zYW5lKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQubXNnID0gXFxcImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrXFxcIiwgYS5tb2RlID0gMzA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHogPSBfLCAoeCA9IDApID09PSBmKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ICs9IGggLSB2LCB2IDwgaykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrIC09IHY7IFNbcisrXSA9IF9beCsrXSwgLS12Oyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gciAtIHksIHogPSBTXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGYgPCB2KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ICs9IGggKyBmIC0gdiwgKHYgLT0gZikgPCBrKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGsgLT0gdjsgU1tyKytdID0gX1t4KytdLCAtLXY7KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID0gMCwgZiA8IGspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGsgLT0gdiA9IGY7IFNbcisrXSA9IF9beCsrXSwgLS12Oyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHIgLSB5LCB6ID0gU1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4ICs9IGYgLSB2LCB2IDwgaykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGsgLT0gdjsgU1tyKytdID0gX1t4KytdLCAtLXY7KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHIgLSB5LCB6ID0gU1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgMiA8IGs7KSBTW3IrK10gPSB6W3grK10sIFNbcisrXSA9IHpbeCsrXSwgU1tyKytdID0gelt4KytdLCBrIC09IDM7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayAmJiAoU1tyKytdID0gelt4KytdLCAxIDwgayAmJiAoU1tyKytdID0gelt4KytdKSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh4ID0gciAtIHk7IFNbcisrXSA9IFNbeCsrXSwgU1tyKytdID0gU1t4KytdLCBTW3IrK10gPSBTW3grK10sIDIgPCAoayAtPSAzKTspO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgJiYgKFNbcisrXSA9IFNbeCsrXSwgMSA8IGsgJiYgKFNbcisrXSA9IFNbeCsrXSkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKGkgPCBuICYmIHIgPCBvKTtcXG4gICAgICAgICAgICAgICAgaSAtPSBrID0gYyA+PiAzLCB1ICY9ICgxIDw8IChjIC09IGsgPDwgMykpIC0gMSwgdC5uZXh0X2luID0gaSwgdC5uZXh0X291dCA9IHIsIHQuYXZhaWxfaW4gPSBpIDwgbiA/IG4gLSBpICsgNSA6IDUgLSAoaSAtIG4pLCB0LmF2YWlsX291dCA9IHIgPCBvID8gbyAtIHIgKyAyNTcgOiAyNTcgLSAociAtIG8pLCBhLmhvbGQgPSB1LCBhLmJpdHMgPSBjXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwge31dLFxcbiAgICAgICAgMTE6IFtmdW5jdGlvbih0LCBlLCBhKSB7XFxuICAgICAgICAgICAgXFxcInVzZSBzdHJpY3RcXFwiO1xcbiAgICAgICAgICAgIHZhciBaID0gdChcXFwiLi4vdXRpbHMvY29tbW9uXFxcIiksXFxuICAgICAgICAgICAgICAgIFIgPSB0KFxcXCIuL2FkbGVyMzJcXFwiKSxcXG4gICAgICAgICAgICAgICAgQyA9IHQoXFxcIi4vY3JjMzJcXFwiKSxcXG4gICAgICAgICAgICAgICAgTiA9IHQoXFxcIi4vaW5mZmFzdFxcXCIpLFxcbiAgICAgICAgICAgICAgICBPID0gdChcXFwiLi9pbmZ0cmVlc1xcXCIpLFxcbiAgICAgICAgICAgICAgICBEID0gMSxcXG4gICAgICAgICAgICAgICAgSSA9IDIsXFxuICAgICAgICAgICAgICAgIFUgPSAwLFxcbiAgICAgICAgICAgICAgICBUID0gLTIsXFxuICAgICAgICAgICAgICAgIEYgPSAxLFxcbiAgICAgICAgICAgICAgICBpID0gODUyLFxcbiAgICAgICAgICAgICAgICBuID0gNTkyO1xcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIEwodCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gKHQgPj4+IDI0ICYgMjU1KSArICh0ID4+PiA4ICYgNjUyODApICsgKCg2NTI4MCAmIHQpIDw8IDgpICsgKCgyNTUgJiB0KSA8PCAyNClcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gcigpIHtcXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlID0gMCwgdGhpcy5sYXN0ID0gITEsIHRoaXMud3JhcCA9IDAsIHRoaXMuaGF2ZWRpY3QgPSAhMSwgdGhpcy5mbGFncyA9IDAsIHRoaXMuZG1heCA9IDAsIHRoaXMuY2hlY2sgPSAwLCB0aGlzLnRvdGFsID0gMCwgdGhpcy5oZWFkID0gbnVsbCwgdGhpcy53Yml0cyA9IDAsIHRoaXMud3NpemUgPSAwLCB0aGlzLndoYXZlID0gMCwgdGhpcy53bmV4dCA9IDAsIHRoaXMud2luZG93ID0gbnVsbCwgdGhpcy5ob2xkID0gMCwgdGhpcy5iaXRzID0gMCwgdGhpcy5sZW5ndGggPSAwLCB0aGlzLm9mZnNldCA9IDAsIHRoaXMuZXh0cmEgPSAwLCB0aGlzLmxlbmNvZGUgPSBudWxsLCB0aGlzLmRpc3Rjb2RlID0gbnVsbCwgdGhpcy5sZW5iaXRzID0gMCwgdGhpcy5kaXN0Yml0cyA9IDAsIHRoaXMubmNvZGUgPSAwLCB0aGlzLm5sZW4gPSAwLCB0aGlzLm5kaXN0ID0gMCwgdGhpcy5oYXZlID0gMCwgdGhpcy5uZXh0ID0gbnVsbCwgdGhpcy5sZW5zID0gbmV3IFouQnVmMTYoMzIwKSwgdGhpcy53b3JrID0gbmV3IFouQnVmMTYoMjg4KSwgdGhpcy5sZW5keW4gPSBudWxsLCB0aGlzLmRpc3RkeW4gPSBudWxsLCB0aGlzLnNhbmUgPSAwLCB0aGlzLmJhY2sgPSAwLCB0aGlzLndhcyA9IDBcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gcyh0KSB7XFxuICAgICAgICAgICAgICAgIHZhciBlO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdCAmJiB0LnN0YXRlID8gKGUgPSB0LnN0YXRlLCB0LnRvdGFsX2luID0gdC50b3RhbF9vdXQgPSBlLnRvdGFsID0gMCwgdC5tc2cgPSBcXFwiXFxcIiwgZS53cmFwICYmICh0LmFkbGVyID0gMSAmIGUud3JhcCksIGUubW9kZSA9IEYsIGUubGFzdCA9IDAsIGUuaGF2ZWRpY3QgPSAwLCBlLmRtYXggPSAzMjc2OCwgZS5oZWFkID0gbnVsbCwgZS5ob2xkID0gMCwgZS5iaXRzID0gMCwgZS5sZW5jb2RlID0gZS5sZW5keW4gPSBuZXcgWi5CdWYzMihpKSwgZS5kaXN0Y29kZSA9IGUuZGlzdGR5biA9IG5ldyBaLkJ1ZjMyKG4pLCBlLnNhbmUgPSAxLCBlLmJhY2sgPSAtMSwgVSkgOiBUXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIG8odCkge1xcbiAgICAgICAgICAgICAgICB2YXIgZTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQgJiYgdC5zdGF0ZSA/ICgoZSA9IHQuc3RhdGUpLndzaXplID0gMCwgZS53aGF2ZSA9IDAsIGUud25leHQgPSAwLCBzKHQpKSA6IFRcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gbCh0LCBlKSB7XFxuICAgICAgICAgICAgICAgIHZhciBhLCBpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdCAmJiB0LnN0YXRlID8gKGkgPSB0LnN0YXRlLCBlIDwgMCA/IChhID0gMCwgZSA9IC1lKSA6IChhID0gMSArIChlID4+IDQpLCBlIDwgNDggJiYgKGUgJj0gMTUpKSwgZSAmJiAoZSA8IDggfHwgMTUgPCBlKSA/IFQgOiAobnVsbCAhPT0gaS53aW5kb3cgJiYgaS53Yml0cyAhPT0gZSAmJiAoaS53aW5kb3cgPSBudWxsKSwgaS53cmFwID0gYSwgaS53Yml0cyA9IGUsIG8odCkpKSA6IFRcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gaCh0LCBlKSB7XFxuICAgICAgICAgICAgICAgIHZhciBhLCBpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdCA/IChpID0gbmV3IHIsICh0LnN0YXRlID0gaSkud2luZG93ID0gbnVsbCwgKGEgPSBsKHQsIGUpKSAhPT0gVSAmJiAodC5zdGF0ZSA9IG51bGwpLCBhKSA6IFRcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIGQsIGYsIF8gPSAhMDtcXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBIKHQpIHtcXG4gICAgICAgICAgICAgICAgaWYgKF8pIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBlO1xcbiAgICAgICAgICAgICAgICAgICAgZm9yIChkID0gbmV3IFouQnVmMzIoNTEyKSwgZiA9IG5ldyBaLkJ1ZjMyKDMyKSwgZSA9IDA7IGUgPCAxNDQ7KSB0LmxlbnNbZSsrXSA9IDg7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZSA8IDI1NjspIHQubGVuc1tlKytdID0gOTtcXG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyBlIDwgMjgwOykgdC5sZW5zW2UrK10gPSA3O1xcbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IGUgPCAyODg7KSB0LmxlbnNbZSsrXSA9IDg7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKE8oRCwgdC5sZW5zLCAwLCAyODgsIGQsIDAsIHQud29yaywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzOiA5XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksIGUgPSAwOyBlIDwgMzI7KSB0LmxlbnNbZSsrXSA9IDU7XFxuICAgICAgICAgICAgICAgICAgICBPKEksIHQubGVucywgMCwgMzIsIGYsIDAsIHQud29yaywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpdHM6IDVcXG4gICAgICAgICAgICAgICAgICAgIH0pLCBfID0gITFcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB0LmxlbmNvZGUgPSBkLCB0LmxlbmJpdHMgPSA5LCB0LmRpc3Rjb2RlID0gZiwgdC5kaXN0Yml0cyA9IDVcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gaih0LCBlLCBhLCBpKSB7XFxuICAgICAgICAgICAgICAgIHZhciBuLCByID0gdC5zdGF0ZTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGwgPT09IHIud2luZG93ICYmIChyLndzaXplID0gMSA8PCByLndiaXRzLCByLnduZXh0ID0gMCwgci53aGF2ZSA9IDAsIHIud2luZG93ID0gbmV3IFouQnVmOChyLndzaXplKSksIGkgPj0gci53c2l6ZSA/IChaLmFycmF5U2V0KHIud2luZG93LCBlLCBhIC0gci53c2l6ZSwgci53c2l6ZSwgMCksIHIud25leHQgPSAwLCByLndoYXZlID0gci53c2l6ZSkgOiAoaSA8IChuID0gci53c2l6ZSAtIHIud25leHQpICYmIChuID0gaSksIFouYXJyYXlTZXQoci53aW5kb3csIGUsIGEgLSBpLCBuLCByLnduZXh0KSwgKGkgLT0gbikgPyAoWi5hcnJheVNldChyLndpbmRvdywgZSwgYSAtIGksIGksIDApLCByLnduZXh0ID0gaSwgci53aGF2ZSA9IHIud3NpemUpIDogKHIud25leHQgKz0gbiwgci53bmV4dCA9PT0gci53c2l6ZSAmJiAoci53bmV4dCA9IDApLCByLndoYXZlIDwgci53c2l6ZSAmJiAoci53aGF2ZSArPSBuKSkpLCAwXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGEuaW5mbGF0ZVJlc2V0ID0gbywgYS5pbmZsYXRlUmVzZXQyID0gbCwgYS5pbmZsYXRlUmVzZXRLZWVwID0gcywgYS5pbmZsYXRlSW5pdCA9IGZ1bmN0aW9uKHQpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGgodCwgMTUpXFxuICAgICAgICAgICAgfSwgYS5pbmZsYXRlSW5pdDIgPSBoLCBhLmluZmxhdGUgPSBmdW5jdGlvbih0LCBlKSB7XFxuICAgICAgICAgICAgICAgIHZhciBhLCBpLCBuLCByLCBzLCBvLCBsLCBoLCBkLCBmLCBfLCB1LCBjLCBiLCBnLCBtLCB3LCBwLCB2LCBrLCB5LCB4LCB6LCBCLCBTID0gMCxcXG4gICAgICAgICAgICAgICAgICAgIEUgPSBuZXcgWi5CdWY4KDQpLFxcbiAgICAgICAgICAgICAgICAgICAgQSA9IFsxNiwgMTcsIDE4LCAwLCA4LCA3LCA5LCA2LCAxMCwgNSwgMTEsIDQsIDEyLCAzLCAxMywgMiwgMTQsIDEsIDE1XTtcXG4gICAgICAgICAgICAgICAgaWYgKCF0IHx8ICF0LnN0YXRlIHx8ICF0Lm91dHB1dCB8fCAhdC5pbnB1dCAmJiAwICE9PSB0LmF2YWlsX2luKSByZXR1cm4gVDtcXG4gICAgICAgICAgICAgICAgMTIgPT09IChhID0gdC5zdGF0ZSkubW9kZSAmJiAoYS5tb2RlID0gMTMpLCBzID0gdC5uZXh0X291dCwgbiA9IHQub3V0cHV0LCBsID0gdC5hdmFpbF9vdXQsIHIgPSB0Lm5leHRfaW4sIGkgPSB0LmlucHV0LCBvID0gdC5hdmFpbF9pbiwgaCA9IGEuaG9sZCwgZCA9IGEuYml0cywgZiA9IG8sIF8gPSBsLCB4ID0gVTtcXG4gICAgICAgICAgICAgICAgdDogZm9yICg7Oykgc3dpdGNoIChhLm1vZGUpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgRjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gYS53cmFwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEubW9kZSA9IDEzO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZCA8IDE2Oykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gbykgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgby0tLCBoICs9IGlbcisrXSA8PCBkLCBkICs9IDhcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDIgJiBhLndyYXAgJiYgMzU2MTUgPT09IGgpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRVthLmNoZWNrID0gMF0gPSAyNTUgJiBoLCBFWzFdID0gaCA+Pj4gOCAmIDI1NSwgYS5jaGVjayA9IEMoYS5jaGVjaywgRSwgMiwgMCksIGQgPSBoID0gMCwgYS5tb2RlID0gMjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEuZmxhZ3MgPSAwLCBhLmhlYWQgJiYgKGEuaGVhZC5kb25lID0gITEpLCAhKDEgJiBhLndyYXApIHx8ICgoKDI1NSAmIGgpIDw8IDgpICsgKGggPj4gOCkpICUgMzEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5tc2cgPSBcXFwiaW5jb3JyZWN0IGhlYWRlciBjaGVja1xcXCIsIGEubW9kZSA9IDMwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoOCAhPSAoMTUgJiBoKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1zZyA9IFxcXCJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZFxcXCIsIGEubW9kZSA9IDMwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZCAtPSA0LCB5ID0gOCArICgxNSAmIChoID4+Pj0gNCkpLCAwID09PSBhLndiaXRzKSBhLndiaXRzID0geTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh5ID4gYS53Yml0cykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1zZyA9IFxcXCJpbnZhbGlkIHdpbmRvdyBzaXplXFxcIiwgYS5tb2RlID0gMzA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuZG1heCA9IDEgPDwgeSwgdC5hZGxlciA9IGEuY2hlY2sgPSAxLCBhLm1vZGUgPSA1MTIgJiBoID8gMTAgOiAxMiwgZCA9IGggPSAwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBkIDwgMTY7KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBvKSBicmVhayB0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvLS0sIGggKz0gaVtyKytdIDw8IGQsIGQgKz0gOFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYS5mbGFncyA9IGgsIDggIT0gKDI1NSAmIGEuZmxhZ3MpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQubXNnID0gXFxcInVua25vd24gY29tcHJlc3Npb24gbWV0aG9kXFxcIiwgYS5tb2RlID0gMzA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICg1NzM0NCAmIGEuZmxhZ3MpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5tc2cgPSBcXFwidW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0XFxcIiwgYS5tb2RlID0gMzA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuaGVhZCAmJiAoYS5oZWFkLnRleHQgPSBoID4+IDggJiAxKSwgNTEyICYgYS5mbGFncyAmJiAoRVswXSA9IDI1NSAmIGgsIEVbMV0gPSBoID4+PiA4ICYgMjU1LCBhLmNoZWNrID0gQyhhLmNoZWNrLCBFLCAyLCAwKSksIGQgPSBoID0gMCwgYS5tb2RlID0gMztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZCA8IDMyOykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gbykgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgby0tLCBoICs9IGlbcisrXSA8PCBkLCBkICs9IDhcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYS5oZWFkICYmIChhLmhlYWQudGltZSA9IGgpLCA1MTIgJiBhLmZsYWdzICYmIChFWzBdID0gMjU1ICYgaCwgRVsxXSA9IGggPj4+IDggJiAyNTUsIEVbMl0gPSBoID4+PiAxNiAmIDI1NSwgRVszXSA9IGggPj4+IDI0ICYgMjU1LCBhLmNoZWNrID0gQyhhLmNoZWNrLCBFLCA0LCAwKSksIGQgPSBoID0gMCwgYS5tb2RlID0gNDtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZCA8IDE2Oykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gbykgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgby0tLCBoICs9IGlbcisrXSA8PCBkLCBkICs9IDhcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYS5oZWFkICYmIChhLmhlYWQueGZsYWdzID0gMjU1ICYgaCwgYS5oZWFkLm9zID0gaCA+PiA4KSwgNTEyICYgYS5mbGFncyAmJiAoRVswXSA9IDI1NSAmIGgsIEVbMV0gPSBoID4+PiA4ICYgMjU1LCBhLmNoZWNrID0gQyhhLmNoZWNrLCBFLCAyLCAwKSksIGQgPSBoID0gMCwgYS5tb2RlID0gNTtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoMTAyNCAmIGEuZmxhZ3MpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGQgPCAxNjspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBvKSBicmVhayB0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgby0tLCBoICs9IGlbcisrXSA8PCBkLCBkICs9IDhcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLmxlbmd0aCA9IGgsIGEuaGVhZCAmJiAoYS5oZWFkLmV4dHJhX2xlbiA9IGgpLCA1MTIgJiBhLmZsYWdzICYmIChFWzBdID0gMjU1ICYgaCwgRVsxXSA9IGggPj4+IDggJiAyNTUsIGEuY2hlY2sgPSBDKGEuY2hlY2ssIEUsIDIsIDApKSwgZCA9IGggPSAwXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGEuaGVhZCAmJiAoYS5oZWFkLmV4dHJhID0gbnVsbCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYS5tb2RlID0gNjtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoMTAyNCAmIGEuZmxhZ3MgJiYgKG8gPCAodSA9IGEubGVuZ3RoKSAmJiAodSA9IG8pLCB1ICYmIChhLmhlYWQgJiYgKHkgPSBhLmhlYWQuZXh0cmFfbGVuIC0gYS5sZW5ndGgsIGEuaGVhZC5leHRyYSB8fCAoYS5oZWFkLmV4dHJhID0gbmV3IEFycmF5KGEuaGVhZC5leHRyYV9sZW4pKSwgWi5hcnJheVNldChhLmhlYWQuZXh0cmEsIGksIHIsIHUsIHkpKSwgNTEyICYgYS5mbGFncyAmJiAoYS5jaGVjayA9IEMoYS5jaGVjaywgaSwgdSwgcikpLCBvIC09IHUsIHIgKz0gdSwgYS5sZW5ndGggLT0gdSksIGEubGVuZ3RoKSkgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhLmxlbmd0aCA9IDAsIGEubW9kZSA9IDc7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDIwNDggJiBhLmZsYWdzKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBvKSBicmVhayB0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHUgPSAwOyB5ID0gaVtyICsgdSsrXSwgYS5oZWFkICYmIHkgJiYgYS5sZW5ndGggPCA2NTUzNiAmJiAoYS5oZWFkLm5hbWUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh5KSksIHkgJiYgdSA8IG87KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDUxMiAmIGEuZmxhZ3MgJiYgKGEuY2hlY2sgPSBDKGEuY2hlY2ssIGksIHUsIHIpKSwgbyAtPSB1LCByICs9IHUsIHkpIGJyZWFrIHRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgYS5oZWFkICYmIChhLmhlYWQubmFtZSA9IG51bGwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGEubGVuZ3RoID0gMCwgYS5tb2RlID0gODtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgODpcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoNDA5NiAmIGEuZmxhZ3MpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IG8pIGJyZWFrIHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodSA9IDA7IHkgPSBpW3IgKyB1KytdLCBhLmhlYWQgJiYgeSAmJiBhLmxlbmd0aCA8IDY1NTM2ICYmIChhLmhlYWQuY29tbWVudCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHkpKSwgeSAmJiB1IDwgbzspO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoNTEyICYgYS5mbGFncyAmJiAoYS5jaGVjayA9IEMoYS5jaGVjaywgaSwgdSwgcikpLCBvIC09IHUsIHIgKz0gdSwgeSkgYnJlYWsgdFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBhLmhlYWQgJiYgKGEuaGVhZC5jb21tZW50ID0gbnVsbCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYS5tb2RlID0gOTtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgOTpcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoNTEyICYgYS5mbGFncykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZCA8IDE2Oykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IG8pIGJyZWFrIHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvLS0sIGggKz0gaVtyKytdIDw8IGQsIGQgKz0gOFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoICE9PSAoNjU1MzUgJiBhLmNoZWNrKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5tc2cgPSBcXFwiaGVhZGVyIGNyYyBtaXNtYXRjaFxcXCIsIGEubW9kZSA9IDMwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gaCA9IDBcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYS5oZWFkICYmIChhLmhlYWQuaGNyYyA9IGEuZmxhZ3MgPj4gOSAmIDEsIGEuaGVhZC5kb25lID0gITApLCB0LmFkbGVyID0gYS5jaGVjayA9IDAsIGEubW9kZSA9IDEyO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDpcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZCA8IDMyOykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gbykgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgby0tLCBoICs9IGlbcisrXSA8PCBkLCBkICs9IDhcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgdC5hZGxlciA9IGEuY2hlY2sgPSBMKGgpLCBkID0gaCA9IDAsIGEubW9kZSA9IDExO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTpcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gYS5oYXZlZGljdCkgcmV0dXJuIHQubmV4dF9vdXQgPSBzLCB0LmF2YWlsX291dCA9IGwsIHQubmV4dF9pbiA9IHIsIHQuYXZhaWxfaW4gPSBvLCBhLmhvbGQgPSBoLCBhLmJpdHMgPSBkLCAyO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHQuYWRsZXIgPSBhLmNoZWNrID0gMSwgYS5tb2RlID0gMTI7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDEyOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICg1ID09PSBlIHx8IDYgPT09IGUpIGJyZWFrIHQ7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLmxhc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA+Pj49IDcgJiBkLCBkIC09IDcgJiBkLCBhLm1vZGUgPSAyNztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGQgPCAzOykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gbykgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgby0tLCBoICs9IGlbcisrXSA8PCBkLCBkICs9IDhcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhLmxhc3QgPSAxICYgaCwgZCAtPSAxLCAzICYgKGggPj4+PSAxKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLm1vZGUgPSAxNDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSChhKSwgYS5tb2RlID0gMjAsIDYgIT09IGUpIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA+Pj49IDIsIGQgLT0gMjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEubW9kZSA9IDE3O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQubXNnID0gXFxcImludmFsaWQgYmxvY2sgdHlwZVxcXCIsIGEubW9kZSA9IDMwXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGggPj4+PSAyLCBkIC09IDI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaCA+Pj49IDcgJiBkLCBkIC09IDcgJiBkOyBkIDwgMzI7KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBvKSBicmVhayB0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvLS0sIGggKz0gaVtyKytdIDw8IGQsIGQgKz0gOFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDY1NTM1ICYgaCkgIT0gKGggPj4+IDE2IF4gNjU1MzUpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQubXNnID0gXFxcImludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHNcXFwiLCBhLm1vZGUgPSAzMDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEubGVuZ3RoID0gNjU1MzUgJiBoLCBkID0gaCA9IDAsIGEubW9kZSA9IDE1LCA2ID09PSBlKSBicmVhayB0O1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxNTpcXG4gICAgICAgICAgICAgICAgICAgICAgICBhLm1vZGUgPSAxNjtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTY6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSBhLmxlbmd0aCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA8IHUgJiYgKHUgPSBvKSwgbCA8IHUgJiYgKHUgPSBsKSwgMCA9PT0gdSkgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWi5hcnJheVNldChuLCBpLCByLCB1LCBzKSwgbyAtPSB1LCByICs9IHUsIGwgLT0gdSwgcyArPSB1LCBhLmxlbmd0aCAtPSB1O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBhLm1vZGUgPSAxMjtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGQgPCAxNDspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IG8pIGJyZWFrIHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8tLSwgaCArPSBpW3IrK10gPDwgZCwgZCArPSA4XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLm5sZW4gPSAyNTcgKyAoMzEgJiBoKSwgaCA+Pj49IDUsIGQgLT0gNSwgYS5uZGlzdCA9IDEgKyAoMzEgJiBoKSwgaCA+Pj49IDUsIGQgLT0gNSwgYS5uY29kZSA9IDQgKyAoMTUgJiBoKSwgaCA+Pj49IDQsIGQgLT0gNCwgMjg2IDwgYS5ubGVuIHx8IDMwIDwgYS5uZGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1zZyA9IFxcXCJ0b28gbWFueSBsZW5ndGggb3IgZGlzdGFuY2Ugc3ltYm9sc1xcXCIsIGEubW9kZSA9IDMwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBhLmhhdmUgPSAwLCBhLm1vZGUgPSAxODtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTg6XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGEuaGF2ZSA8IGEubmNvZGU7KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBkIDwgMzspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBvKSBicmVhayB0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgby0tLCBoICs9IGlbcisrXSA8PCBkLCBkICs9IDhcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLmxlbnNbQVthLmhhdmUrK11dID0gNyAmIGgsIGggPj4+PSAzLCBkIC09IDNcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGEuaGF2ZSA8IDE5OykgYS5sZW5zW0FbYS5oYXZlKytdXSA9IDA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEubGVuY29kZSA9IGEubGVuZHluLCBhLmxlbmJpdHMgPSA3LCB6ID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0czogYS5sZW5iaXRzXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHggPSBPKDAsIGEubGVucywgMCwgMTksIGEubGVuY29kZSwgMCwgYS53b3JrLCB6KSwgYS5sZW5iaXRzID0gei5iaXRzLCB4KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQubXNnID0gXFxcImludmFsaWQgY29kZSBsZW5ndGhzIHNldFxcXCIsIGEubW9kZSA9IDMwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBhLmhhdmUgPSAwLCBhLm1vZGUgPSAxOTtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTk6XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGEuaGF2ZSA8IGEubmxlbiArIGEubmRpc3Q7KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBtID0gKFMgPSBhLmxlbmNvZGVbaCAmICgxIDw8IGEubGVuYml0cykgLSAxXSkgPj4+IDE2ICYgMjU1LCB3ID0gNjU1MzUgJiBTLCAhKChnID0gUyA+Pj4gMjQpIDw9IGQpOykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IG8pIGJyZWFrIHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvLS0sIGggKz0gaVtyKytdIDw8IGQsIGQgKz0gOFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3IDwgMTYpIGggPj4+PSBnLCBkIC09IGcsIGEubGVuc1thLmhhdmUrK10gPSB3O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgxNiA9PT0gdykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQiA9IGcgKyAyOyBkIDwgQjspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IG8pIGJyZWFrIHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8tLSwgaCArPSBpW3IrK10gPDwgZCwgZCArPSA4XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID4+Pj0gZywgZCAtPSBnLCAwID09PSBhLmhhdmUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5tc2cgPSBcXFwiaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdFxcXCIsIGEubW9kZSA9IDMwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gYS5sZW5zW2EuaGF2ZSAtIDFdLCB1ID0gMyArICgzICYgaCksIGggPj4+PSAyLCBkIC09IDJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoMTcgPT09IHcpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEIgPSBnICsgMzsgZCA8IEI7KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBvKSBicmVhayB0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvLS0sIGggKz0gaVtyKytdIDw8IGQsIGQgKz0gOFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkIC09IGcsIHkgPSAwLCB1ID0gMyArICg3ICYgKGggPj4+PSBnKSksIGggPj4+PSAzLCBkIC09IDNcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChCID0gZyArIDc7IGQgPCBCOykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gbykgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgby0tLCBoICs9IGlbcisrXSA8PCBkLCBkICs9IDhcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCAtPSBnLCB5ID0gMCwgdSA9IDExICsgKDEyNyAmIChoID4+Pj0gZykpLCBoID4+Pj0gNywgZCAtPSA3XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYS5oYXZlICsgdSA+IGEubmxlbiArIGEubmRpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1zZyA9IFxcXCJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0XFxcIiwgYS5tb2RlID0gMzA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB1LS07KSBhLmxlbnNbYS5oYXZlKytdID0geVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgzMCA9PT0gYS5tb2RlKSBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gYS5sZW5zWzI1Nl0pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5tc2cgPSBcXFwiaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrXFxcIiwgYS5tb2RlID0gMzA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLmxlbmJpdHMgPSA5LCB6ID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0czogYS5sZW5iaXRzXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHggPSBPKEQsIGEubGVucywgMCwgYS5ubGVuLCBhLmxlbmNvZGUsIDAsIGEud29yaywgeiksIGEubGVuYml0cyA9IHouYml0cywgeCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1zZyA9IFxcXCJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXRcXFwiLCBhLm1vZGUgPSAzMDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEuZGlzdGJpdHMgPSA2LCBhLmRpc3Rjb2RlID0gYS5kaXN0ZHluLCB6ID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0czogYS5kaXN0Yml0c1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB4ID0gTyhJLCBhLmxlbnMsIGEubmxlbiwgYS5uZGlzdCwgYS5kaXN0Y29kZSwgMCwgYS53b3JrLCB6KSwgYS5kaXN0Yml0cyA9IHouYml0cywgeCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1zZyA9IFxcXCJpbnZhbGlkIGRpc3RhbmNlcyBzZXRcXFwiLCBhLm1vZGUgPSAzMDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEubW9kZSA9IDIwLCA2ID09PSBlKSBicmVhayB0O1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyMDpcXG4gICAgICAgICAgICAgICAgICAgICAgICBhLm1vZGUgPSAyMTtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjE6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDYgPD0gbyAmJiAyNTggPD0gbCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm5leHRfb3V0ID0gcywgdC5hdmFpbF9vdXQgPSBsLCB0Lm5leHRfaW4gPSByLCB0LmF2YWlsX2luID0gbywgYS5ob2xkID0gaCwgYS5iaXRzID0gZCwgTih0LCBfKSwgcyA9IHQubmV4dF9vdXQsIG4gPSB0Lm91dHB1dCwgbCA9IHQuYXZhaWxfb3V0LCByID0gdC5uZXh0X2luLCBpID0gdC5pbnB1dCwgbyA9IHQuYXZhaWxfaW4sIGggPSBhLmhvbGQsIGQgPSBhLmJpdHMsIDEyID09PSBhLm1vZGUgJiYgKGEuYmFjayA9IC0xKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChhLmJhY2sgPSAwOyBtID0gKFMgPSBhLmxlbmNvZGVbaCAmICgxIDw8IGEubGVuYml0cykgLSAxXSkgPj4+IDE2ICYgMjU1LCB3ID0gNjU1MzUgJiBTLCAhKChnID0gUyA+Pj4gMjQpIDw9IGQpOykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gbykgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgby0tLCBoICs9IGlbcisrXSA8PCBkLCBkICs9IDhcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0gJiYgMCA9PSAoMjQwICYgbSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChwID0gZywgdiA9IG0sIGsgPSB3OyBtID0gKFMgPSBhLmxlbmNvZGVbayArICgoaCAmICgxIDw8IHAgKyB2KSAtIDEpID4+IHApXSkgPj4+IDE2ICYgMjU1LCB3ID0gNjU1MzUgJiBTLCAhKHAgKyAoZyA9IFMgPj4+IDI0KSA8PSBkKTspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBvKSBicmVhayB0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgby0tLCBoICs9IGlbcisrXSA8PCBkLCBkICs9IDhcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID4+Pj0gcCwgZCAtPSBwLCBhLmJhY2sgKz0gcFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA+Pj49IGcsIGQgLT0gZywgYS5iYWNrICs9IGcsIGEubGVuZ3RoID0gdywgMCA9PT0gbSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLm1vZGUgPSAyNjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDMyICYgbSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLmJhY2sgPSAtMSwgYS5tb2RlID0gMTI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICg2NCAmIG0pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5tc2cgPSBcXFwiaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlXFxcIiwgYS5tb2RlID0gMzA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuZXh0cmEgPSAxNSAmIG0sIGEubW9kZSA9IDIyO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyMjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYS5leHRyYSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEIgPSBhLmV4dHJhOyBkIDwgQjspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBvKSBicmVhayB0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgby0tLCBoICs9IGlbcisrXSA8PCBkLCBkICs9IDhcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLmxlbmd0aCArPSBoICYgKDEgPDwgYS5leHRyYSkgLSAxLCBoID4+Pj0gYS5leHRyYSwgZCAtPSBhLmV4dHJhLCBhLmJhY2sgKz0gYS5leHRyYVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBhLndhcyA9IGEubGVuZ3RoLCBhLm1vZGUgPSAyMztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjM6XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IG0gPSAoUyA9IGEuZGlzdGNvZGVbaCAmICgxIDw8IGEuZGlzdGJpdHMpIC0gMV0pID4+PiAxNiAmIDI1NSwgdyA9IDY1NTM1ICYgUywgISgoZyA9IFMgPj4+IDI0KSA8PSBkKTspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IG8pIGJyZWFrIHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8tLSwgaCArPSBpW3IrK10gPDwgZCwgZCArPSA4XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09ICgyNDAgJiBtKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHAgPSBnLCB2ID0gbSwgayA9IHc7IG0gPSAoUyA9IGEuZGlzdGNvZGVbayArICgoaCAmICgxIDw8IHAgKyB2KSAtIDEpID4+IHApXSkgPj4+IDE2ICYgMjU1LCB3ID0gNjU1MzUgJiBTLCAhKHAgKyAoZyA9IFMgPj4+IDI0KSA8PSBkKTspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBvKSBicmVhayB0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgby0tLCBoICs9IGlbcisrXSA8PCBkLCBkICs9IDhcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID4+Pj0gcCwgZCAtPSBwLCBhLmJhY2sgKz0gcFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA+Pj49IGcsIGQgLT0gZywgYS5iYWNrICs9IGcsIDY0ICYgbSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1zZyA9IFxcXCJpbnZhbGlkIGRpc3RhbmNlIGNvZGVcXFwiLCBhLm1vZGUgPSAzMDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYS5vZmZzZXQgPSB3LCBhLmV4dHJhID0gMTUgJiBtLCBhLm1vZGUgPSAyNDtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEuZXh0cmEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChCID0gYS5leHRyYTsgZCA8IEI7KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gbykgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8tLSwgaCArPSBpW3IrK10gPDwgZCwgZCArPSA4XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5vZmZzZXQgKz0gaCAmICgxIDw8IGEuZXh0cmEpIC0gMSwgaCA+Pj49IGEuZXh0cmEsIGQgLT0gYS5leHRyYSwgYS5iYWNrICs9IGEuZXh0cmFcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEub2Zmc2V0ID4gYS5kbWF4KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQubXNnID0gXFxcImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrXFxcIiwgYS5tb2RlID0gMzA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGEubW9kZSA9IDI1O1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyNTpcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gbCkgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA9IF8gLSBsLCBhLm9mZnNldCA+IHUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh1ID0gYS5vZmZzZXQgLSB1KSA+IGEud2hhdmUgJiYgYS5zYW5lKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1zZyA9IFxcXCJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFja1xcXCIsIGEubW9kZSA9IDMwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID4gYS53bmV4dCA/ICh1IC09IGEud25leHQsIGMgPSBhLndzaXplIC0gdSkgOiBjID0gYS53bmV4dCAtIHUsIHUgPiBhLmxlbmd0aCAmJiAodSA9IGEubGVuZ3RoKSwgYiA9IGEud2luZG93XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGIgPSBuLCBjID0gcyAtIGEub2Zmc2V0LCB1ID0gYS5sZW5ndGg7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsIDwgdSAmJiAodSA9IGwpLCBsIC09IHUsIGEubGVuZ3RoIC09IHU7IG5bcysrXSA9IGJbYysrXSwgLS11Oyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgMCA9PT0gYS5sZW5ndGggJiYgKGEubW9kZSA9IDIxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjY6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IGwpIGJyZWFrIHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbltzKytdID0gYS5sZW5ndGgsIGwtLSwgYS5tb2RlID0gMjE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI3OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLndyYXApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGQgPCAzMjspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBvKSBicmVhayB0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgby0tLCBoIHw9IGlbcisrXSA8PCBkLCBkICs9IDhcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXyAtPSBsLCB0LnRvdGFsX291dCArPSBfLCBhLnRvdGFsICs9IF8sIF8gJiYgKHQuYWRsZXIgPSBhLmNoZWNrID0gYS5mbGFncyA/IEMoYS5jaGVjaywgbiwgXywgcyAtIF8pIDogUihhLmNoZWNrLCBuLCBfLCBzIC0gXykpLCBfID0gbCwgKGEuZmxhZ3MgPyBoIDogTChoKSkgIT09IGEuY2hlY2spIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQubXNnID0gXFxcImluY29ycmVjdCBkYXRhIGNoZWNrXFxcIiwgYS5tb2RlID0gMzA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBoID0gMFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBhLm1vZGUgPSAyODtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjg6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEud3JhcCAmJiBhLmZsYWdzKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBkIDwgMzI7KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gbykgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8tLSwgaCArPSBpW3IrK10gPDwgZCwgZCArPSA4XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggIT09ICg0Mjk0OTY3Mjk1ICYgYS50b3RhbCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQubXNnID0gXFxcImluY29ycmVjdCBsZW5ndGggY2hlY2tcXFwiLCBhLm1vZGUgPSAzMDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IGggPSAwXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGEubW9kZSA9IDI5O1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOTpcXG4gICAgICAgICAgICAgICAgICAgICAgICB4ID0gMTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0O1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzMDpcXG4gICAgICAgICAgICAgICAgICAgICAgICB4ID0gLTM7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzE6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC00O1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzMjpcXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdC5uZXh0X291dCA9IHMsIHQuYXZhaWxfb3V0ID0gbCwgdC5uZXh0X2luID0gciwgdC5hdmFpbF9pbiA9IG8sIGEuaG9sZCA9IGgsIGEuYml0cyA9IGQsIChhLndzaXplIHx8IF8gIT09IHQuYXZhaWxfb3V0ICYmIGEubW9kZSA8IDMwICYmIChhLm1vZGUgPCAyNyB8fCA0ICE9PSBlKSkgJiYgaih0LCB0Lm91dHB1dCwgdC5uZXh0X291dCwgXyAtIHQuYXZhaWxfb3V0KSA/IChhLm1vZGUgPSAzMSwgLTQpIDogKGYgLT0gdC5hdmFpbF9pbiwgXyAtPSB0LmF2YWlsX291dCwgdC50b3RhbF9pbiArPSBmLCB0LnRvdGFsX291dCArPSBfLCBhLnRvdGFsICs9IF8sIGEud3JhcCAmJiBfICYmICh0LmFkbGVyID0gYS5jaGVjayA9IGEuZmxhZ3MgPyBDKGEuY2hlY2ssIG4sIF8sIHQubmV4dF9vdXQgLSBfKSA6IFIoYS5jaGVjaywgbiwgXywgdC5uZXh0X291dCAtIF8pKSwgdC5kYXRhX3R5cGUgPSBhLmJpdHMgKyAoYS5sYXN0ID8gNjQgOiAwKSArICgxMiA9PT0gYS5tb2RlID8gMTI4IDogMCkgKyAoMjAgPT09IGEubW9kZSB8fCAxNSA9PT0gYS5tb2RlID8gMjU2IDogMCksICgwID09PSBmICYmIDAgPT09IF8gfHwgNCA9PT0gZSkgJiYgeCA9PT0gVSAmJiAoeCA9IC01KSwgeClcXG4gICAgICAgICAgICB9LCBhLmluZmxhdGVFbmQgPSBmdW5jdGlvbih0KSB7XFxuICAgICAgICAgICAgICAgIGlmICghdCB8fCAhdC5zdGF0ZSkgcmV0dXJuIFQ7XFxuICAgICAgICAgICAgICAgIHZhciBlID0gdC5zdGF0ZTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGUud2luZG93ICYmIChlLndpbmRvdyA9IG51bGwpLCB0LnN0YXRlID0gbnVsbCwgVVxcbiAgICAgICAgICAgIH0sIGEuaW5mbGF0ZUdldEhlYWRlciA9IGZ1bmN0aW9uKHQsIGUpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGE7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0ICYmIHQuc3RhdGUgPyAwID09ICgyICYgKGEgPSB0LnN0YXRlKS53cmFwKSA/IFQgOiAoKGEuaGVhZCA9IGUpLmRvbmUgPSAhMSwgVSkgOiBUXFxuICAgICAgICAgICAgfSwgYS5pbmZsYXRlU2V0RGljdGlvbmFyeSA9IGZ1bmN0aW9uKHQsIGUpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGEsIGkgPSBlLmxlbmd0aDtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQgJiYgdC5zdGF0ZSA/IDAgIT09IChhID0gdC5zdGF0ZSkud3JhcCAmJiAxMSAhPT0gYS5tb2RlID8gVCA6IDExID09PSBhLm1vZGUgJiYgUigxLCBlLCBpLCAwKSAhPT0gYS5jaGVjayA/IC0zIDogaih0LCBlLCBpLCBpKSA/IChhLm1vZGUgPSAzMSwgLTQpIDogKGEuaGF2ZWRpY3QgPSAxLCBVKSA6IFRcXG4gICAgICAgICAgICB9LCBhLmluZmxhdGVJbmZvID0gXFxcInBha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdClcXFwiXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgXFxcIi4uL3V0aWxzL2NvbW1vblxcXCI6IDMsXFxuICAgICAgICAgICAgXFxcIi4vYWRsZXIzMlxcXCI6IDUsXFxuICAgICAgICAgICAgXFxcIi4vY3JjMzJcXFwiOiA3LFxcbiAgICAgICAgICAgIFxcXCIuL2luZmZhc3RcXFwiOiAxMCxcXG4gICAgICAgICAgICBcXFwiLi9pbmZ0cmVlc1xcXCI6IDEyXFxuICAgICAgICB9XSxcXG4gICAgICAgIDEyOiBbZnVuY3Rpb24odCwgZSwgYSkge1xcbiAgICAgICAgICAgIFxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4gICAgICAgICAgICB2YXIgRCA9IHQoXFxcIi4uL3V0aWxzL2NvbW1vblxcXCIpLFxcbiAgICAgICAgICAgICAgICBJID0gWzMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTMsIDE1LCAxNywgMTksIDIzLCAyNywgMzEsIDM1LCA0MywgNTEsIDU5LCA2NywgODMsIDk5LCAxMTUsIDEzMSwgMTYzLCAxOTUsIDIyNywgMjU4LCAwLCAwXSxcXG4gICAgICAgICAgICAgICAgVSA9IFsxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE3LCAxNywgMTcsIDE3LCAxOCwgMTgsIDE4LCAxOCwgMTksIDE5LCAxOSwgMTksIDIwLCAyMCwgMjAsIDIwLCAyMSwgMjEsIDIxLCAyMSwgMTYsIDcyLCA3OF0sXFxuICAgICAgICAgICAgICAgIFQgPSBbMSwgMiwgMywgNCwgNSwgNywgOSwgMTMsIDE3LCAyNSwgMzMsIDQ5LCA2NSwgOTcsIDEyOSwgMTkzLCAyNTcsIDM4NSwgNTEzLCA3NjksIDEwMjUsIDE1MzcsIDIwNDksIDMwNzMsIDQwOTcsIDYxNDUsIDgxOTMsIDEyMjg5LCAxNjM4NSwgMjQ1NzcsIDAsIDBdLFxcbiAgICAgICAgICAgICAgICBGID0gWzE2LCAxNiwgMTYsIDE2LCAxNywgMTcsIDE4LCAxOCwgMTksIDE5LCAyMCwgMjAsIDIxLCAyMSwgMjIsIDIyLCAyMywgMjMsIDI0LCAyNCwgMjUsIDI1LCAyNiwgMjYsIDI3LCAyNywgMjgsIDI4LCAyOSwgMjksIDY0LCA2NF07XFxuICAgICAgICAgICAgZS5leHBvcnRzID0gZnVuY3Rpb24odCwgZSwgYSwgaSwgbiwgciwgcywgbykge1xcbiAgICAgICAgICAgICAgICB2YXIgbCwgaCwgZCwgZiwgXywgdSwgYywgYiwgZywgbSA9IG8uYml0cyxcXG4gICAgICAgICAgICAgICAgICAgIHcgPSAwLFxcbiAgICAgICAgICAgICAgICAgICAgcCA9IDAsXFxuICAgICAgICAgICAgICAgICAgICB2ID0gMCxcXG4gICAgICAgICAgICAgICAgICAgIGsgPSAwLFxcbiAgICAgICAgICAgICAgICAgICAgeSA9IDAsXFxuICAgICAgICAgICAgICAgICAgICB4ID0gMCxcXG4gICAgICAgICAgICAgICAgICAgIHogPSAwLFxcbiAgICAgICAgICAgICAgICAgICAgQiA9IDAsXFxuICAgICAgICAgICAgICAgICAgICBTID0gMCxcXG4gICAgICAgICAgICAgICAgICAgIEUgPSAwLFxcbiAgICAgICAgICAgICAgICAgICAgQSA9IG51bGwsXFxuICAgICAgICAgICAgICAgICAgICBaID0gMCxcXG4gICAgICAgICAgICAgICAgICAgIFIgPSBuZXcgRC5CdWYxNigxNiksXFxuICAgICAgICAgICAgICAgICAgICBDID0gbmV3IEQuQnVmMTYoMTYpLFxcbiAgICAgICAgICAgICAgICAgICAgTiA9IG51bGwsXFxuICAgICAgICAgICAgICAgICAgICBPID0gMDtcXG4gICAgICAgICAgICAgICAgZm9yICh3ID0gMDsgdyA8PSAxNTsgdysrKSBSW3ddID0gMDtcXG4gICAgICAgICAgICAgICAgZm9yIChwID0gMDsgcCA8IGk7IHArKykgUltlW2EgKyBwXV0rKztcXG4gICAgICAgICAgICAgICAgZm9yICh5ID0gbSwgayA9IDE1OyAxIDw9IGsgJiYgMCA9PT0gUltrXTsgay0tKTtcXG4gICAgICAgICAgICAgICAgaWYgKGsgPCB5ICYmICh5ID0gayksIDAgPT09IGspIHJldHVybiBuW3IrK10gPSAyMDk3MTUyMCwgbltyKytdID0gMjA5NzE1MjAsIG8uYml0cyA9IDEsIDA7XFxuICAgICAgICAgICAgICAgIGZvciAodiA9IDE7IHYgPCBrICYmIDAgPT09IFJbdl07IHYrKyk7XFxuICAgICAgICAgICAgICAgIGZvciAoeSA8IHYgJiYgKHkgPSB2KSwgdyA9IEIgPSAxOyB3IDw9IDE1OyB3KyspXFxuICAgICAgICAgICAgICAgICAgICBpZiAoQiA8PD0gMSwgKEIgLT0gUlt3XSkgPCAwKSByZXR1cm4gLTE7XFxuICAgICAgICAgICAgICAgIGlmICgwIDwgQiAmJiAoMCA9PT0gdCB8fCAxICE9PSBrKSkgcmV0dXJuIC0xO1xcbiAgICAgICAgICAgICAgICBmb3IgKENbMV0gPSAwLCB3ID0gMTsgdyA8IDE1OyB3KyspIENbdyArIDFdID0gQ1t3XSArIFJbd107XFxuICAgICAgICAgICAgICAgIGZvciAocCA9IDA7IHAgPCBpOyBwKyspIDAgIT09IGVbYSArIHBdICYmIChzW0NbZVthICsgcF1dKytdID0gcCk7XFxuICAgICAgICAgICAgICAgIGlmICgwID09PSB0ID8gKEEgPSBOID0gcywgdSA9IDE5KSA6IDEgPT09IHQgPyAoQSA9IEksIFogLT0gMjU3LCBOID0gVSwgTyAtPSAyNTcsIHUgPSAyNTYpIDogKEEgPSBULCBOID0gRiwgdSA9IC0xKSwgdyA9IHYsIF8gPSByLCB6ID0gcCA9IEUgPSAwLCBkID0gLTEsIGYgPSAoUyA9IDEgPDwgKHggPSB5KSkgLSAxLCAxID09PSB0ICYmIDg1MiA8IFMgfHwgMiA9PT0gdCAmJiA1OTIgPCBTKSByZXR1cm4gMTtcXG4gICAgICAgICAgICAgICAgZm9yICg7Oykge1xcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjID0gdyAtIHosIHNbcF0gPCB1ID8gKGIgPSAwLCBnID0gc1twXSkgOiBzW3BdID4gdSA/IChiID0gTltPICsgc1twXV0sIGcgPSBBW1ogKyBzW3BdXSkgOiAoYiA9IDk2LCBnID0gMCksIGwgPSAxIDw8IHcgLSB6LCB2ID0gaCA9IDEgPDwgeDsgbltfICsgKEUgPj4geikgKyAoaCAtPSBsKV0gPSBjIDw8IDI0IHwgYiA8PCAxNiB8IGcgfCAwLCAwICE9PSBoOyk7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGwgPSAxIDw8IHcgLSAxOyBFICYgbDspIGwgPj49IDE7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoMCAhPT0gbCA/IChFICY9IGwgLSAxLCBFICs9IGwpIDogRSA9IDAsIHArKywgMCA9PSAtLVJbd10pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA9PT0gaykgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdyA9IGVbYSArIHNbcF1dXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBpZiAoeSA8IHcgJiYgKEUgJiBmKSAhPT0gZCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoMCA9PT0geiAmJiAoeiA9IHkpLCBfICs9IHYsIEIgPSAxIDw8ICh4ID0gdyAtIHopOyB4ICsgeiA8IGsgJiYgISgoQiAtPSBSW3ggKyB6XSkgPD0gMCk7KSB4KyssIEIgPDw9IDE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFMgKz0gMSA8PCB4LCAxID09PSB0ICYmIDg1MiA8IFMgfHwgMiA9PT0gdCAmJiA1OTIgPCBTKSByZXR1cm4gMTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBuW2QgPSBFICYgZl0gPSB5IDw8IDI0IHwgeCA8PCAxNiB8IF8gLSByIHwgMFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiAwICE9PSBFICYmIChuW18gKyBFXSA9IHcgLSB6IDw8IDI0IHwgNjQgPDwgMTYgfCAwKSwgby5iaXRzID0geSwgMFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICBcXFwiLi4vdXRpbHMvY29tbW9uXFxcIjogM1xcbiAgICAgICAgfV0sXFxuICAgICAgICAxMzogW2Z1bmN0aW9uKHQsIGUsIGEpIHtcXG4gICAgICAgICAgICBcXFwidXNlIHN0cmljdFxcXCI7XFxuICAgICAgICAgICAgZS5leHBvcnRzID0ge1xcbiAgICAgICAgICAgICAgICAyOiBcXFwibmVlZCBkaWN0aW9uYXJ5XFxcIixcXG4gICAgICAgICAgICAgICAgMTogXFxcInN0cmVhbSBlbmRcXFwiLFxcbiAgICAgICAgICAgICAgICAwOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgXFxcIi0xXFxcIjogXFxcImZpbGUgZXJyb3JcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiLTJcXFwiOiBcXFwic3RyZWFtIGVycm9yXFxcIixcXG4gICAgICAgICAgICAgICAgXFxcIi0zXFxcIjogXFxcImRhdGEgZXJyb3JcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiLTRcXFwiOiBcXFwiaW5zdWZmaWNpZW50IG1lbW9yeVxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCItNVxcXCI6IFxcXCJidWZmZXIgZXJyb3JcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiLTZcXFwiOiBcXFwiaW5jb21wYXRpYmxlIHZlcnNpb25cXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwge31dLFxcbiAgICAgICAgMTQ6IFtmdW5jdGlvbih0LCBlLCBhKSB7XFxuICAgICAgICAgICAgXFxcInVzZSBzdHJpY3RcXFwiO1xcbiAgICAgICAgICAgIHZhciBsID0gdChcXFwiLi4vdXRpbHMvY29tbW9uXFxcIiksXFxuICAgICAgICAgICAgICAgIG8gPSAwLFxcbiAgICAgICAgICAgICAgICBoID0gMTtcXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBpKHQpIHtcXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgZSA9IHQubGVuZ3RoOyAwIDw9IC0tZTspIHRbZV0gPSAwXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBkID0gMCxcXG4gICAgICAgICAgICAgICAgcyA9IDI5LFxcbiAgICAgICAgICAgICAgICBmID0gMjU2LFxcbiAgICAgICAgICAgICAgICBfID0gZiArIDEgKyBzLFxcbiAgICAgICAgICAgICAgICB1ID0gMzAsXFxuICAgICAgICAgICAgICAgIGMgPSAxOSxcXG4gICAgICAgICAgICAgICAgZyA9IDIgKiBfICsgMSxcXG4gICAgICAgICAgICAgICAgbSA9IDE1LFxcbiAgICAgICAgICAgICAgICBuID0gMTYsXFxuICAgICAgICAgICAgICAgIGIgPSA3LFxcbiAgICAgICAgICAgICAgICB3ID0gMjU2LFxcbiAgICAgICAgICAgICAgICBwID0gMTYsXFxuICAgICAgICAgICAgICAgIHYgPSAxNyxcXG4gICAgICAgICAgICAgICAgayA9IDE4LFxcbiAgICAgICAgICAgICAgICB5ID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDIsIDIsIDIsIDIsIDMsIDMsIDMsIDMsIDQsIDQsIDQsIDQsIDUsIDUsIDUsIDUsIDBdLFxcbiAgICAgICAgICAgICAgICB4ID0gWzAsIDAsIDAsIDAsIDEsIDEsIDIsIDIsIDMsIDMsIDQsIDQsIDUsIDUsIDYsIDYsIDcsIDcsIDgsIDgsIDksIDksIDEwLCAxMCwgMTEsIDExLCAxMiwgMTIsIDEzLCAxM10sXFxuICAgICAgICAgICAgICAgIHogPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMiwgMywgN10sXFxuICAgICAgICAgICAgICAgIEIgPSBbMTYsIDE3LCAxOCwgMCwgOCwgNywgOSwgNiwgMTAsIDUsIDExLCA0LCAxMiwgMywgMTMsIDIsIDE0LCAxLCAxNV0sXFxuICAgICAgICAgICAgICAgIFMgPSBuZXcgQXJyYXkoMiAqIChfICsgMikpO1xcbiAgICAgICAgICAgIGkoUyk7XFxuICAgICAgICAgICAgdmFyIEUgPSBuZXcgQXJyYXkoMiAqIHUpO1xcbiAgICAgICAgICAgIGkoRSk7XFxuICAgICAgICAgICAgdmFyIEEgPSBuZXcgQXJyYXkoNTEyKTtcXG4gICAgICAgICAgICBpKEEpO1xcbiAgICAgICAgICAgIHZhciBaID0gbmV3IEFycmF5KDI1Nik7XFxuICAgICAgICAgICAgaShaKTtcXG4gICAgICAgICAgICB2YXIgUiA9IG5ldyBBcnJheShzKTtcXG4gICAgICAgICAgICBpKFIpO1xcbiAgICAgICAgICAgIHZhciBDLCBOLCBPLCBEID0gbmV3IEFycmF5KHUpO1xcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIEkodCwgZSwgYSwgaSwgbikge1xcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRpY190cmVlID0gdCwgdGhpcy5leHRyYV9iaXRzID0gZSwgdGhpcy5leHRyYV9iYXNlID0gYSwgdGhpcy5lbGVtcyA9IGksIHRoaXMubWF4X2xlbmd0aCA9IG4sIHRoaXMuaGFzX3N0cmVlID0gdCAmJiB0Lmxlbmd0aFxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiByKHQsIGUpIHtcXG4gICAgICAgICAgICAgICAgdGhpcy5keW5fdHJlZSA9IHQsIHRoaXMubWF4X2NvZGUgPSAwLCB0aGlzLnN0YXRfZGVzYyA9IGVcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gVSh0KSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0IDwgMjU2ID8gQVt0XSA6IEFbMjU2ICsgKHQgPj4+IDcpXVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBUKHQsIGUpIHtcXG4gICAgICAgICAgICAgICAgdC5wZW5kaW5nX2J1Zlt0LnBlbmRpbmcrK10gPSAyNTUgJiBlLCB0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXSA9IGUgPj4+IDggJiAyNTVcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gRih0LCBlLCBhKSB7XFxuICAgICAgICAgICAgICAgIHQuYmlfdmFsaWQgPiBuIC0gYSA/ICh0LmJpX2J1ZiB8PSBlIDw8IHQuYmlfdmFsaWQgJiA2NTUzNSwgVCh0LCB0LmJpX2J1ZiksIHQuYmlfYnVmID0gZSA+PiBuIC0gdC5iaV92YWxpZCwgdC5iaV92YWxpZCArPSBhIC0gbikgOiAodC5iaV9idWYgfD0gZSA8PCB0LmJpX3ZhbGlkICYgNjU1MzUsIHQuYmlfdmFsaWQgKz0gYSlcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gTCh0LCBlLCBhKSB7XFxuICAgICAgICAgICAgICAgIEYodCwgYVsyICogZV0sIGFbMiAqIGUgKyAxXSlcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gSCh0LCBlKSB7XFxuICAgICAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIHw9IDEgJiB0LCB0ID4+Pj0gMSwgYSA8PD0gMSwgMCA8IC0tZTspO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gYSA+Pj4gMVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBqKHQsIGUsIGEpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGksIG4sIHIgPSBuZXcgQXJyYXkobSArIDEpLFxcbiAgICAgICAgICAgICAgICAgICAgcyA9IDA7XFxuICAgICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbTsgaSsrKSByW2ldID0gcyA9IHMgKyBhW2kgLSAxXSA8PCAxO1xcbiAgICAgICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDw9IGU7IG4rKykge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIG8gPSB0WzIgKiBuICsgMV07XFxuICAgICAgICAgICAgICAgICAgICAwICE9PSBvICYmICh0WzIgKiBuXSA9IEgocltvXSsrLCBvKSlcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBLKHQpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGU7XFxuICAgICAgICAgICAgICAgIGZvciAoZSA9IDA7IGUgPCBfOyBlKyspIHQuZHluX2x0cmVlWzIgKiBlXSA9IDA7XFxuICAgICAgICAgICAgICAgIGZvciAoZSA9IDA7IGUgPCB1OyBlKyspIHQuZHluX2R0cmVlWzIgKiBlXSA9IDA7XFxuICAgICAgICAgICAgICAgIGZvciAoZSA9IDA7IGUgPCBjOyBlKyspIHQuYmxfdHJlZVsyICogZV0gPSAwO1xcbiAgICAgICAgICAgICAgICB0LmR5bl9sdHJlZVsyICogd10gPSAxLCB0Lm9wdF9sZW4gPSB0LnN0YXRpY19sZW4gPSAwLCB0Lmxhc3RfbGl0ID0gdC5tYXRjaGVzID0gMFxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBNKHQpIHtcXG4gICAgICAgICAgICAgICAgOCA8IHQuYmlfdmFsaWQgPyBUKHQsIHQuYmlfYnVmKSA6IDAgPCB0LmJpX3ZhbGlkICYmICh0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXSA9IHQuYmlfYnVmKSwgdC5iaV9idWYgPSAwLCB0LmJpX3ZhbGlkID0gMFxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBQKHQsIGUsIGEsIGkpIHtcXG4gICAgICAgICAgICAgICAgdmFyIG4gPSAyICogZSxcXG4gICAgICAgICAgICAgICAgICAgIHIgPSAyICogYTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRbbl0gPCB0W3JdIHx8IHRbbl0gPT09IHRbcl0gJiYgaVtlXSA8PSBpW2FdXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIFkodCwgZSwgYSkge1xcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gdC5oZWFwW2FdLCBuID0gYSA8PCAxOyBuIDw9IHQuaGVhcF9sZW4gJiYgKG4gPCB0LmhlYXBfbGVuICYmIFAoZSwgdC5oZWFwW24gKyAxXSwgdC5oZWFwW25dLCB0LmRlcHRoKSAmJiBuKyssICFQKGUsIGksIHQuaGVhcFtuXSwgdC5kZXB0aCkpOykgdC5oZWFwW2FdID0gdC5oZWFwW25dLCBhID0gbiwgbiA8PD0gMTtcXG4gICAgICAgICAgICAgICAgdC5oZWFwW2FdID0gaVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBxKHQsIGUsIGEpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGksIG4sIHIsIHMsIG8gPSAwO1xcbiAgICAgICAgICAgICAgICBpZiAoMCAhPT0gdC5sYXN0X2xpdClcXG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyBpID0gdC5wZW5kaW5nX2J1Zlt0LmRfYnVmICsgMiAqIG9dIDw8IDggfCB0LnBlbmRpbmdfYnVmW3QuZF9idWYgKyAyICogbyArIDFdLCBuID0gdC5wZW5kaW5nX2J1Zlt0LmxfYnVmICsgb10sIG8rKywgMCA9PT0gaSA/IEwodCwgbiwgZSkgOiAoTCh0LCAociA9IFpbbl0pICsgZiArIDEsIGUpLCAwICE9PSAocyA9IHlbcl0pICYmIEYodCwgbiAtPSBSW3JdLCBzKSwgTCh0LCByID0gVSgtLWkpLCBhKSwgMCAhPT0gKHMgPSB4W3JdKSAmJiBGKHQsIGkgLT0gRFtyXSwgcykpLCBvIDwgdC5sYXN0X2xpdDspO1xcbiAgICAgICAgICAgICAgICBMKHQsIHcsIGUpXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIEcodCwgZSkge1xcbiAgICAgICAgICAgICAgICB2YXIgYSwgaSwgbiwgciA9IGUuZHluX3RyZWUsXFxuICAgICAgICAgICAgICAgICAgICBzID0gZS5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsXFxuICAgICAgICAgICAgICAgICAgICBvID0gZS5zdGF0X2Rlc2MuaGFzX3N0cmVlLFxcbiAgICAgICAgICAgICAgICAgICAgbCA9IGUuc3RhdF9kZXNjLmVsZW1zLFxcbiAgICAgICAgICAgICAgICAgICAgaCA9IC0xO1xcbiAgICAgICAgICAgICAgICBmb3IgKHQuaGVhcF9sZW4gPSAwLCB0LmhlYXBfbWF4ID0gZywgYSA9IDA7IGEgPCBsOyBhKyspIDAgIT09IHJbMiAqIGFdID8gKHQuaGVhcFsrK3QuaGVhcF9sZW5dID0gaCA9IGEsIHQuZGVwdGhbYV0gPSAwKSA6IHJbMiAqIGEgKyAxXSA9IDA7XFxuICAgICAgICAgICAgICAgIGZvciAoOyB0LmhlYXBfbGVuIDwgMjspIHJbMiAqIChuID0gdC5oZWFwWysrdC5oZWFwX2xlbl0gPSBoIDwgMiA/ICsraCA6IDApXSA9IDEsIHQuZGVwdGhbbl0gPSAwLCB0Lm9wdF9sZW4tLSwgbyAmJiAodC5zdGF0aWNfbGVuIC09IHNbMiAqIG4gKyAxXSk7XFxuICAgICAgICAgICAgICAgIGZvciAoZS5tYXhfY29kZSA9IGgsIGEgPSB0LmhlYXBfbGVuID4+IDE7IDEgPD0gYTsgYS0tKSBZKHQsIHIsIGEpO1xcbiAgICAgICAgICAgICAgICBmb3IgKG4gPSBsOyBhID0gdC5oZWFwWzFdLCB0LmhlYXBbMV0gPSB0LmhlYXBbdC5oZWFwX2xlbi0tXSwgWSh0LCByLCAxKSwgaSA9IHQuaGVhcFsxXSwgdC5oZWFwWy0tdC5oZWFwX21heF0gPSBhLCB0LmhlYXBbLS10LmhlYXBfbWF4XSA9IGksIHJbMiAqIG5dID0gclsyICogYV0gKyByWzIgKiBpXSwgdC5kZXB0aFtuXSA9ICh0LmRlcHRoW2FdID49IHQuZGVwdGhbaV0gPyB0LmRlcHRoW2FdIDogdC5kZXB0aFtpXSkgKyAxLCByWzIgKiBhICsgMV0gPSByWzIgKiBpICsgMV0gPSBuLCB0LmhlYXBbMV0gPSBuKyssIFkodCwgciwgMSksIDIgPD0gdC5oZWFwX2xlbjspO1xcbiAgICAgICAgICAgICAgICB0LmhlYXBbLS10LmhlYXBfbWF4XSA9IHQuaGVhcFsxXSxcXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHQsIGUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSwgaSwgbiwgciwgcywgbywgbCA9IGUuZHluX3RyZWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBlLm1heF9jb2RlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gZS5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBlLnN0YXRfZGVzYy5oYXNfc3RyZWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gPSBlLnN0YXRfZGVzYy5leHRyYV9iaXRzLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gZS5zdGF0X2Rlc2MuZXh0cmFfYmFzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGUuc3RhdF9kZXNjLm1heF9sZW5ndGgsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAociA9IDA7IHIgPD0gbTsgcisrKSB0LmJsX2NvdW50W3JdID0gMDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxbMiAqIHQuaGVhcFt0LmhlYXBfbWF4XSArIDFdID0gMCwgYSA9IHQuaGVhcF9tYXggKyAxOyBhIDwgZzsgYSsrKSBjIDwgKHIgPSBsWzIgKiBsWzIgKiAoaSA9IHQuaGVhcFthXSkgKyAxXSArIDFdICsgMSkgJiYgKHIgPSBjLCBiKyspLCBsWzIgKiBpICsgMV0gPSByLCBoIDwgaSB8fCAodC5ibF9jb3VudFtyXSsrLCBzID0gMCwgdSA8PSBpICYmIChzID0gX1tpIC0gdV0pLCBvID0gbFsyICogaV0sIHQub3B0X2xlbiArPSBvICogKHIgKyBzKSwgZiAmJiAodC5zdGF0aWNfbGVuICs9IG8gKiAoZFsyICogaSArIDFdICsgcykpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCAhPT0gYikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHIgPSBjIC0gMTsgMCA9PT0gdC5ibF9jb3VudFtyXTspIHItLTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuYmxfY291bnRbcl0tLSwgdC5ibF9jb3VudFtyICsgMV0gKz0gMiwgdC5ibF9jb3VudFtjXS0tLCBiIC09IDJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCA8IGIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHIgPSBjOyAwICE9PSByOyByLS0pXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB0LmJsX2NvdW50W3JdOyAwICE9PSBpOykgaCA8IChuID0gdC5oZWFwWy0tYV0pIHx8IChsWzIgKiBuICsgMV0gIT09IHIgJiYgKHQub3B0X2xlbiArPSAociAtIGxbMiAqIG4gKyAxXSkgKiBsWzIgKiBuXSwgbFsyICogbiArIDFdID0gciksIGktLSlcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KHQsIGUpLCBqKHIsIGgsIHQuYmxfY291bnQpXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIFgodCwgZSwgYSkge1xcbiAgICAgICAgICAgICAgICB2YXIgaSwgbiwgciA9IC0xLFxcbiAgICAgICAgICAgICAgICAgICAgcyA9IGVbMV0sXFxuICAgICAgICAgICAgICAgICAgICBvID0gMCxcXG4gICAgICAgICAgICAgICAgICAgIGwgPSA3LFxcbiAgICAgICAgICAgICAgICAgICAgaCA9IDQ7XFxuICAgICAgICAgICAgICAgIGZvciAoMCA9PT0gcyAmJiAobCA9IDEzOCwgaCA9IDMpLCBlWzIgKiAoYSArIDEpICsgMV0gPSA2NTUzNSwgaSA9IDA7IGkgPD0gYTsgaSsrKSBuID0gcywgcyA9IGVbMiAqIChpICsgMSkgKyAxXSwgKytvIDwgbCAmJiBuID09PSBzIHx8IChvIDwgaCA/IHQuYmxfdHJlZVsyICogbl0gKz0gbyA6IDAgIT09IG4gPyAobiAhPT0gciAmJiB0LmJsX3RyZWVbMiAqIG5dKyssIHQuYmxfdHJlZVsyICogcF0rKykgOiBvIDw9IDEwID8gdC5ibF90cmVlWzIgKiB2XSsrIDogdC5ibF90cmVlWzIgKiBrXSsrLCByID0gbiwgKG8gPSAwKSA9PT0gcyA/IChsID0gMTM4LCBoID0gMykgOiBuID09PSBzID8gKGwgPSA2LCBoID0gMykgOiAobCA9IDcsIGggPSA0KSlcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gVyh0LCBlLCBhKSB7XFxuICAgICAgICAgICAgICAgIHZhciBpLCBuLCByID0gLTEsXFxuICAgICAgICAgICAgICAgICAgICBzID0gZVsxXSxcXG4gICAgICAgICAgICAgICAgICAgIG8gPSAwLFxcbiAgICAgICAgICAgICAgICAgICAgbCA9IDcsXFxuICAgICAgICAgICAgICAgICAgICBoID0gNDtcXG4gICAgICAgICAgICAgICAgZm9yICgwID09PSBzICYmIChsID0gMTM4LCBoID0gMyksIGkgPSAwOyBpIDw9IGE7IGkrKylcXG4gICAgICAgICAgICAgICAgICAgIGlmIChuID0gcywgcyA9IGVbMiAqIChpICsgMSkgKyAxXSwgISgrK28gPCBsICYmIG4gPT09IHMpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPCBoKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgTCh0LCBuLCB0LmJsX3RyZWUpLCAwICE9IC0tbzspO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgMCAhPT0gbiA/IChuICE9PSByICYmIChMKHQsIG4sIHQuYmxfdHJlZSksIG8tLSksIEwodCwgcCwgdC5ibF90cmVlKSwgRih0LCBvIC0gMywgMikpIDogbyA8PSAxMCA/IChMKHQsIHYsIHQuYmxfdHJlZSksIEYodCwgbyAtIDMsIDMpKSA6IChMKHQsIGssIHQuYmxfdHJlZSksIEYodCwgbyAtIDExLCA3KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgciA9IG4sIChvID0gMCkgPT09IHMgPyAobCA9IDEzOCwgaCA9IDMpIDogbiA9PT0gcyA/IChsID0gNiwgaCA9IDMpIDogKGwgPSA3LCBoID0gNClcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaShEKTtcXG4gICAgICAgICAgICB2YXIgSiA9ICExO1xcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIFEodCwgZSwgYSwgaSkge1xcbiAgICAgICAgICAgICAgICB2YXIgbiwgciwgcywgbztcXG4gICAgICAgICAgICAgICAgRih0LCAoZCA8PCAxKSArIChpID8gMSA6IDApLCAzKSwgciA9IGUsIHMgPSBhLCBvID0gITAsIE0obiA9IHQpLCBvICYmIChUKG4sIHMpLCBUKG4sIH5zKSksIGwuYXJyYXlTZXQobi5wZW5kaW5nX2J1Ziwgbi53aW5kb3csIHIsIHMsIG4ucGVuZGluZyksIG4ucGVuZGluZyArPSBzXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGEuX3RyX2luaXQgPSBmdW5jdGlvbih0KSB7XFxuICAgICAgICAgICAgICAgIEogfHwgKGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHQsIGUsIGEsIGksIG4sIHIgPSBuZXcgQXJyYXkobSArIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gYSA9IDA7IGkgPCBzIC0gMTsgaSsrKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUltpXSA9IGEsIHQgPSAwOyB0IDwgMSA8PCB5W2ldOyB0KyspIFpbYSsrXSA9IGk7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKFpbYSAtIDFdID0gaSwgaSA9IG4gPSAwOyBpIDwgMTY7IGkrKylcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKERbaV0gPSBuLCB0ID0gMDsgdCA8IDEgPDwgeFtpXTsgdCsrKSBBW24rK10gPSBpO1xcbiAgICAgICAgICAgICAgICAgICAgZm9yIChuID4+PSA3OyBpIDwgdTsgaSsrKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoRFtpXSA9IG4gPDwgNywgdCA9IDA7IHQgPCAxIDw8IHhbaV0gLSA3OyB0KyspIEFbMjU2ICsgbisrXSA9IGk7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGUgPSAwOyBlIDw9IG07IGUrKykgcltlXSA9IDA7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKHQgPSAwOyB0IDw9IDE0MzspIFNbMiAqIHQgKyAxXSA9IDgsIHQrKywgcls4XSsrO1xcbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IHQgPD0gMjU1OykgU1syICogdCArIDFdID0gOSwgdCsrLCByWzldKys7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgdCA8PSAyNzk7KSBTWzIgKiB0ICsgMV0gPSA3LCB0KyssIHJbN10rKztcXG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyB0IDw9IDI4NzspIFNbMiAqIHQgKyAxXSA9IDgsIHQrKywgcls4XSsrO1xcbiAgICAgICAgICAgICAgICAgICAgZm9yIChqKFMsIF8gKyAxLCByKSwgdCA9IDA7IHQgPCB1OyB0KyspIEVbMiAqIHQgKyAxXSA9IDUsIEVbMiAqIHRdID0gSCh0LCA1KTtcXG4gICAgICAgICAgICAgICAgICAgIEMgPSBuZXcgSShTLCB5LCBmICsgMSwgXywgbSksIE4gPSBuZXcgSShFLCB4LCAwLCB1LCBtKSwgTyA9IG5ldyBJKG5ldyBBcnJheSgwKSwgeiwgMCwgYywgYilcXG4gICAgICAgICAgICAgICAgfSgpLCBKID0gITApLCB0LmxfZGVzYyA9IG5ldyByKHQuZHluX2x0cmVlLCBDKSwgdC5kX2Rlc2MgPSBuZXcgcih0LmR5bl9kdHJlZSwgTiksIHQuYmxfZGVzYyA9IG5ldyByKHQuYmxfdHJlZSwgTyksIHQuYmlfYnVmID0gMCwgdC5iaV92YWxpZCA9IDAsIEsodClcXG4gICAgICAgICAgICB9LCBhLl90cl9zdG9yZWRfYmxvY2sgPSBRLCBhLl90cl9mbHVzaF9ibG9jayA9IGZ1bmN0aW9uKHQsIGUsIGEsIGkpIHtcXG4gICAgICAgICAgICAgICAgdmFyIG4sIHIsIHMgPSAwO1xcbiAgICAgICAgICAgICAgICAwIDwgdC5sZXZlbCA/ICgyID09PSB0LnN0cm0uZGF0YV90eXBlICYmICh0LnN0cm0uZGF0YV90eXBlID0gZnVuY3Rpb24odCkge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGUsIGEgPSA0MDkzNjI0NDQ3O1xcbiAgICAgICAgICAgICAgICAgICAgZm9yIChlID0gMDsgZSA8PSAzMTsgZSsrLCBhID4+Pj0gMSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoMSAmIGEgJiYgMCAhPT0gdC5keW5fbHRyZWVbMiAqIGVdKSByZXR1cm4gbztcXG4gICAgICAgICAgICAgICAgICAgIGlmICgwICE9PSB0LmR5bl9sdHJlZVsxOF0gfHwgMCAhPT0gdC5keW5fbHRyZWVbMjBdIHx8IDAgIT09IHQuZHluX2x0cmVlWzI2XSkgcmV0dXJuIGg7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGUgPSAzMjsgZSA8IGY7IGUrKylcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCAhPT0gdC5keW5fbHRyZWVbMiAqIGVdKSByZXR1cm4gaDtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvXFxuICAgICAgICAgICAgICAgIH0odCkpLCBHKHQsIHQubF9kZXNjKSwgRyh0LCB0LmRfZGVzYyksIHMgPSBmdW5jdGlvbih0KSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgZTtcXG4gICAgICAgICAgICAgICAgICAgIGZvciAoWCh0LCB0LmR5bl9sdHJlZSwgdC5sX2Rlc2MubWF4X2NvZGUpLCBYKHQsIHQuZHluX2R0cmVlLCB0LmRfZGVzYy5tYXhfY29kZSksIEcodCwgdC5ibF9kZXNjKSwgZSA9IGMgLSAxOyAzIDw9IGUgJiYgMCA9PT0gdC5ibF90cmVlWzIgKiBCW2VdICsgMV07IGUtLSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdC5vcHRfbGVuICs9IDMgKiAoZSArIDEpICsgNSArIDUgKyA0LCBlXFxuICAgICAgICAgICAgICAgIH0odCksIG4gPSB0Lm9wdF9sZW4gKyAzICsgNyA+Pj4gMywgKHIgPSB0LnN0YXRpY19sZW4gKyAzICsgNyA+Pj4gMykgPD0gbiAmJiAobiA9IHIpKSA6IG4gPSByID0gYSArIDUsIGEgKyA0IDw9IG4gJiYgLTEgIT09IGUgPyBRKHQsIGUsIGEsIGkpIDogNCA9PT0gdC5zdHJhdGVneSB8fCByID09PSBuID8gKEYodCwgMiArIChpID8gMSA6IDApLCAzKSwgcSh0LCBTLCBFKSkgOiAoRih0LCA0ICsgKGkgPyAxIDogMCksIDMpLCBmdW5jdGlvbih0LCBlLCBhLCBpKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgbjtcXG4gICAgICAgICAgICAgICAgICAgIGZvciAoRih0LCBlIC0gMjU3LCA1KSwgRih0LCBhIC0gMSwgNSksIEYodCwgaSAtIDQsIDQpLCBuID0gMDsgbiA8IGk7IG4rKykgRih0LCB0LmJsX3RyZWVbMiAqIEJbbl0gKyAxXSwgMyk7XFxuICAgICAgICAgICAgICAgICAgICBXKHQsIHQuZHluX2x0cmVlLCBlIC0gMSksIFcodCwgdC5keW5fZHRyZWUsIGEgLSAxKVxcbiAgICAgICAgICAgICAgICB9KHQsIHQubF9kZXNjLm1heF9jb2RlICsgMSwgdC5kX2Rlc2MubWF4X2NvZGUgKyAxLCBzICsgMSksIHEodCwgdC5keW5fbHRyZWUsIHQuZHluX2R0cmVlKSksIEsodCksIGkgJiYgTSh0KVxcbiAgICAgICAgICAgIH0sIGEuX3RyX3RhbGx5ID0gZnVuY3Rpb24odCwgZSwgYSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdC5wZW5kaW5nX2J1Zlt0LmRfYnVmICsgMiAqIHQubGFzdF9saXRdID0gZSA+Pj4gOCAmIDI1NSwgdC5wZW5kaW5nX2J1Zlt0LmRfYnVmICsgMiAqIHQubGFzdF9saXQgKyAxXSA9IDI1NSAmIGUsIHQucGVuZGluZ19idWZbdC5sX2J1ZiArIHQubGFzdF9saXRdID0gMjU1ICYgYSwgdC5sYXN0X2xpdCsrLCAwID09PSBlID8gdC5keW5fbHRyZWVbMiAqIGFdKysgOiAodC5tYXRjaGVzKyssIGUtLSwgdC5keW5fbHRyZWVbMiAqIChaW2FdICsgZiArIDEpXSsrLCB0LmR5bl9kdHJlZVsyICogVShlKV0rKyksIHQubGFzdF9saXQgPT09IHQubGl0X2J1ZnNpemUgLSAxXFxuICAgICAgICAgICAgfSwgYS5fdHJfYWxpZ24gPSBmdW5jdGlvbih0KSB7XFxuICAgICAgICAgICAgICAgIHZhciBlO1xcbiAgICAgICAgICAgICAgICBGKHQsIDIsIDMpLCBMKHQsIHcsIFMpLCAxNiA9PT0gKGUgPSB0KS5iaV92YWxpZCA/IChUKGUsIGUuYmlfYnVmKSwgZS5iaV9idWYgPSAwLCBlLmJpX3ZhbGlkID0gMCkgOiA4IDw9IGUuYmlfdmFsaWQgJiYgKGUucGVuZGluZ19idWZbZS5wZW5kaW5nKytdID0gMjU1ICYgZS5iaV9idWYsIGUuYmlfYnVmID4+PSA4LCBlLmJpX3ZhbGlkIC09IDgpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIFxcXCIuLi91dGlscy9jb21tb25cXFwiOiAzXFxuICAgICAgICB9XSxcXG4gICAgICAgIDE1OiBbZnVuY3Rpb24odCwgZSwgYSkge1xcbiAgICAgICAgICAgIFxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4gICAgICAgICAgICBlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dCA9IG51bGwsIHRoaXMubmV4dF9pbiA9IDAsIHRoaXMuYXZhaWxfaW4gPSAwLCB0aGlzLnRvdGFsX2luID0gMCwgdGhpcy5vdXRwdXQgPSBudWxsLCB0aGlzLm5leHRfb3V0ID0gMCwgdGhpcy5hdmFpbF9vdXQgPSAwLCB0aGlzLnRvdGFsX291dCA9IDAsIHRoaXMubXNnID0gXFxcIlxcXCIsIHRoaXMuc3RhdGUgPSBudWxsLCB0aGlzLmRhdGFfdHlwZSA9IDIsIHRoaXMuYWRsZXIgPSAwXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwge31dLFxcbiAgICAgICAgXFxcIi9cXFwiOiBbZnVuY3Rpb24odCwgZSwgYSkge1xcbiAgICAgICAgICAgIFxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4gICAgICAgICAgICB2YXIgaSA9IHt9O1xcbiAgICAgICAgICAgICgwLCB0KFxcXCIuL2xpYi91dGlscy9jb21tb25cXFwiKS5hc3NpZ24pKGksIHQoXFxcIi4vbGliL2RlZmxhdGVcXFwiKSwgdChcXFwiLi9saWIvaW5mbGF0ZVxcXCIpLCB0KFxcXCIuL2xpYi96bGliL2NvbnN0YW50c1xcXCIpKSwgZS5leHBvcnRzID0gaVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIFxcXCIuL2xpYi9kZWZsYXRlXFxcIjogMSxcXG4gICAgICAgICAgICBcXFwiLi9saWIvaW5mbGF0ZVxcXCI6IDIsXFxuICAgICAgICAgICAgXFxcIi4vbGliL3V0aWxzL2NvbW1vblxcXCI6IDMsXFxuICAgICAgICAgICAgXFxcIi4vbGliL3psaWIvY29uc3RhbnRzXFxcIjogNlxcbiAgICAgICAgfV1cXG4gICAgfSwge30sIFtdKShcXFwiL1xcXCIpXFxufSk7XCJ9LHtcIm5hbWVcIjpcImxhenlcIixcInBhdGhcIjpcImxhenlcIixcInJ1bGVcIjpcImpzOlxcbmV2YWxQcml2YXRlSlMoJ25MdTUzbzJYV1lGUUpVTnZRZTNuNCt3QURBVkVkekg3ZkQ1OU04TERVcjJIaWZzb2hhak5kQ212eDNOR1crOFh4MEJiZ1ZhdVJDVDdsdXVKTEdKWVFtdXZvS2NuN0N3Rnc2WFcvYUxYYmtlTU5xbWFyc3lFQjZWYmUzVGJrTDlUUSt4Y1BNM0dnN01RTStrRHF2Q2FzLzlLL0NON2RsZVR2bUN4MXNUNDIwWll0bDJ4Ky9GZnRDcWtFaklyRjRWdmc0aG5NTW5VWGVnN09UQmhkUmJwZHN4OW1BMXlldkNKYXQ4ajBCamNzdXk0dS9uWVE4bUkweHVuMVdkSFlHVW1DMi9JR0NwYkIrZDZlNFJiS1R6WTNOQjZhenhQSzZVRDE3TzhRTHQ5K2FwejFwMy9WZVkyNmw0RzFHczUrQnZKa0JqTE5NaHkvLzJFOFRLaENMdGk3Ly9PMHBHR1dHOEk5R3hYQWNLaUJCSm5RME00ekxOYzlOczVkc0tlbVhWOFl0SkRqYnk1ZXJxZnBsSm41ajM0U0FUa3MvK2RLcnN2ZklMTDdsTng3TTVYeWZ1SFpHRWdUbWpuaWY4cU1hbzhEbzdWT1pCU01nek1zYWM4aDdDVTBGYzVtcldmdjJuVGVtSjVYQ0o1SWNpSTNIZzV1L2VtYi9ONmF3b0xZdy9ibHRhUnZzNWNBVnF1eExQTHFsSmZnb2NXZEhtNWwxUVgvcGlFbXRWdEt6akRXRlZuV1FXTlVqN0dPM1g1Nk1GNklhSEtjQngyNit2SHdOOXBTeDFCTEsvYmtrTVRaWkdZUE1lOGU1WVhoUWtOeWxCaHYrcGhCdmg2NjF0SGw0RVoyRTlGQ1dDVG9Oa1NvY0tuQW9nMTA4RVhkNzljaGhJSTVTbjJxZ0s3RXpyQTNSTHhPbVJZS0FMRGxnMytYTm16bWF4dWdKV0hQTE81MHBZWWEvUFk4Q1dqL0MydytEVFVEbjVTUVE2c0lPdlJxYUZJWHBOL2xaUUk0WHJjY1hyd3NjeVNDVEZIL0UvM1JOQ1cxdFlWMkpoKzI4RExsdldzVXh3UEZuRFVRMjd4OWVVSW41dmdJWDR6RGxMTUUyNkMrb3NNMG5tTmRJL0xvMGVCRFhNQXRoeTc3VWNhd2cyVFdiTW5BaXZ2WGd4cVR1VFcvZUVkNGFUVDA1c2FXb293Q3Z0SmVxYVNsSzU3ZHhWNDB3OGc4S1NoOFRDZjkyUDFaaWRML0p3T2wySldvUWZMSmFBbmxuQXRBRy9FdDZTQkQwR2hNTFoxUUNHeDFSRTNzYnNZS204RHB3NW1YaEI4T3hsZVF3MHkrdmY0Wjg1VXNlbUsvRmQ5NlZidXowYXJXRTF5Tm5ZcEZUS2xENTN1d2Nzb01mdnN4WlNHdy9zUTAwSFJWa0ZSN1dJaFNkMTdzWlNYQ2lLTmJyd0ZaOUJMdDVnOG1rT1dpUlNvZ1pZUGNsODdKMnZ6N0dqZWVOTnV2b3hrM0FJUGwrOUFmU1lITjlHYlFaaTBzSjZoWEJsVVNGNWk3UlRpUFZ5bys4cXpMcFlCZnJGYmoreTEwaGY5cysrRTZVeWtjWEt6Q1l0RlVZM3VoYWswaU55TUJKRDRRdVJieWw4ci9ZejY2VlBUbnZ1dXNnSS9LOXM4Uy95cTVGZjViZUY4OXJ3eVVxblU1eTlqcStHMlVLSnlic1BMYktaQlc1Z25WS25UN0lpbFZ0VWd4azhJU3R3RWVLOVBQVkZGK1ZIcDJFNlZuWUJBa1lZbkRZRm5VME9tbDJjMVZQUDJ6MzN1R043VkFYY3ZWMS8xRk5EMnMxK2tvWklIdlJ5YkhqR3p1VXRiblVnbVYwbUs5OTk3NC9kcEd5bFlweHlwRnZIbXdxbktNZE8vcmNqQU9wdmppSjg4c1YveXZNSEdCNys3N21YdkhFeWdJbEdUaVJsL0lPUGo1WG5qdUhDcFpQamNYRW0wU3lYaG1hcFJvblp6WDZrYnVOcHptZzdwS2VqYU9IeGVUOUQwb3c1TkhWZ3g1UXZwV0pwTWdwVDdZanBBZldhbFRSdU1BeUlqam5BSDlmWGM4cEVJNDdzZVRGazNuS2VFTU9COHBYcmVHMnlGTmRyWDFvTzdOTGFmYTNXbXMrS01pVVVNdGdDY0VKaWtseDB4ZWl0WnhlU1hqSlQ5TmZkaHl6ckpjNE1NcUU1dXE2THRpNVlRcDNldEFHZXUrL0E3d0xmVG5ZVDFYb3dvRGdHRXVmRldIMnIydEY3T2dMbHBVUk9SN1dwUWtnaHQzdGhnMXNnSFpXUEJiS2xnWHB6ZUdoQ0djRnlHNG9XWGNRYy9ucmdDMzY5MHY2TXNoWHZ6QkhVNnFRYW0yVy9SV2NLRWJ1bVd4UmZvdlZaYzVSVEdjemw4dGlDSVFKZjlHUUo0YmUrTDBMcVQrajVXOVpmaERkZjIzQjhzdEVEc3NCLzhTVVRmeitPdE4zLzZlYXlaYXVTT0syNnJ6RThEZ3BFQzJoY1UzdkFybTdwRnFwRnZvWExCd21kM3EyNFFsUFJBZFAwb2ZRdGR3VEJFdzBaRTNQQUJNMnBPOENyeVBFV0w4WkRJWC82K3JqbGVzUG84NzNMbHlCSzRLOVEvejdvQlpvVGxzcnZ5TThNeDQ2ZTQ2VklRVXVwdzdxOW9RSlpOUEhsL2Y0Yk00RDRLQnZISEZvWHFENmtVZGcrMG1STGUyNEEwdXpLTlEvellubDVzcGZDWWJCRU5pU3pRcDR1ekJwOVU3RVE1bzRCY0MwdVZlUDVSOC95K3VBaklNYW9sN2xPSEFWelNDdzR4ZTd4TUJqTXBVNVk5bi9rMFI3T1M1N2lnemR3a2I1OVpOU1U2eEZpbFZOZ0pzWHoybGJvSjVZRXpKNGdZQWsvV29Jb1g4cnk0SEFuUEFIMFN3VkN2akZnZnAzRGRpVnVYSlFRQUJ6VFMxdS9STEtXTlhYZENXV0FadXF6T25DcVpuUG5WM0JXby96dnlOWEU0b3BuZ21DWmdHS253a1R4ZGdVa1NsS01UdTNqVTdUL0d1bmQxYU1IRDhORTNXaDF0dU5xSVJXN0lycTE1Tk14ZFpWSlNkTFFGM2xQRTIvd2hwS3Y3WWZmSWliRjJlbUF6SFZRS2Z5ZDlsakdmUEV1N2JEc2RWZWM4VWU0MitNQjF3QlFNdUo5Mm5EeDlsd1hQNXJPR2hYVnllOFRsTmlGQ0FNNktNZ0NRTFJSYWRNc2xydkMyMjJWN1k0VEFoWlJXeW1Nd1BzMWh6NE5hTlF2WnZhd0dCU1ZIWnpISXRreG93VzZKNmVWZ1l6Rk5jbGdPTmJFYmpqOHBKV3RsdWtQazJCWFVVcFljQStCazlnVXFPQTUwOWp0U3p0MGpROUdYVklxdXFRQmt6c0ZBOG9sRi9sTVVmWmt4Kzl1QVpFWXl6aFBUaGxHdWpaS3Y5THNLN2ZXcDUza3J3QVJ3c2xWWGQzS1k4d0hJcjBMaURWVXllQndueVh6TmwwMzN0U3JOV1JjUDlWTDNUZDhIYVVPNmZTbVFITmZXSnhvKzU3NDdOSldNYklCaWFldkh0SDFUQzNabklRT0dIZWl5S003QlFQS0pSZjVURkgyWk1mdmJnR1M1cSt5czlSeWRiRlBycmVOTFNPV0FCRUxCcEpZNUswZ3dnT1RXVTZHblBRbUhPck9GU1dQV2FXaFQ5cnJCRzBVMkY4UU1IZTgvRjhZUXFKSW5tVW1PMEx3VElmeUZHQU52akVEaitRUExiSnpiV3hJbGZhdDA1RVVjSmZDUk5PMXZRV05FNlR2a3ZraTdOamhRYVNWZ1FFT2ZabjhzMTUyV3o3ajZ6elVSdGtZMzVYWlpQVTFyVm85Q3R1WXRGdEtpNDBhZ1QrQW0vQUZhbXBjYTdtcmsxeUk5OVc3V2hPTzlUallzNSswV3pwYTNtL29GcXl3Z1kwWDVrR2RIWG1LdVdER09LRFozeE9DOXZ2QmpxQ1QrdXB5Rk1yY3RLZHZGczhuVStPaXp4c1BOWno0MkhNS1ZmMjkwUSt5T0IwckFkNlVQV1dnUjZ3TElQblRVZnRGalErVFlGZFJTbGh3RDRHVDJCU280RGt0UEc5RCsxUDVSODhaRDk1STRaa2t5aWd6ZXdSRWFyeXhWL0dNdkdObitQV1dKaUp0dEcwVG1ka3dkdFhkbmtvejhab0ZDOXZnT1ppaEEwdjlnY1JSdVhFUU80TjFrc0w2U0tXNUpMSXM5c2pEUE5HRFFITUxRczl1OE1lOCt6emQ0czNkVzFIcUE3RlQ4eFF2RmRnUkNRZ0xWb1VKSkNpNWdrNjFxOU54Zkk3YXY3VEh3SDRkUWhNOFJvRklRT1QzTzFtWnBxWUJSaHV3NyszeEpYcFJKZk4wSXFteUFRN0s2OGxwdEJhMUJVNkdzbEJlR25vZ3N4TEpTSk1LUVFBZHl3ajlZbk5RK1hnTU5rSTZSd3lEZUtMRTV1VUZCbjYrSEFzbmZ3cDRORkloUFY4eHBLODJVK3NvZGcwd2hsS0pDWC84cEhjTjhQYnk2cFZzZ3dJdGZrUko4ZzNEWFdiWnVNWjIram1Jcjk0cDQ2VXMvZytpdVdIQTJzZEh1RUpscFdTcjU2Wi9PUlpEMVkwZlFOUTE4ZlRqVklUM1hDNzdvZ1hXeDBUM3ZGTDFuOW5udE50QlRBZ1FmTXc2VW0rQ010RkVxcHg3OUtkUFFVbVlwUGVad0Z6dlgrTnJFOThhb2RtOWt2Q2g0TVE1emVLaFFNakU1SFJ5OVRDa3VXRlFqT0JkbmtaUnJ4UitPVExoaGVLdTJhT3BoYmpkYW91LzM4SFAyYnpCeE9LRFNHOVdCb00xM1A1bFpudG1hZ09WWUZtcUQ3VmpNTDBrcXU5c1lhd0haTStoQzZBejQyTS85Qk9OeXIreUg3cWh1QUlvT1E0b0d1U1NNS3NML2x3R3YzOVQrVUYvY0crVVVQb1VlNnVzd1k2TlFUOGhHRU1BeUpsMDg0OUZ0bnpuVjl1YVVOWG56Nm8vOXdvUGIwNVlmYmRIbU1KN3JJODBvcVpkQk5oTHh4RFFuNTZnN1VkTkVuWHlWaWhkYlpyOVpjNVMyUUtSNmxiSFo2dXFvbFZNOUJ1WkQyWVp2OHFkV2Jtc2h2R3N6VUxGRUVzZlFZMS9IMEtyTGdWMzdQNGtIVGpmVHh2ODRyR0h1UHNBS2tUUHJZdks4c2gyem9KRnVDMmNlSzZDSThNRSswZmFFbm52bGdZM2dIRHd1MUJtOGxicWFSZjI2dzljb2hDZzZPYVdkc0tLczJzWng0UktNL3Nsd3YrcVcxQjVwR0NWbVdkZHU4K0hOMndZNjhOVDhvV0VsQnZ0Tk1XS285YzVDQXJqTTNIOXB1d1RjMDZPbW9ONCtTcVpXdmQ4TzJQMHA0MjB0RW1HdG1SeGNjamwvZGQ4dVVqa3djZXpjNDNLdlFLWmFFRXg2TUtQSjJJQjl2UzNuSTJWYnUzKzNsU0tjSkEvRjNGM09IbVpyZ0U1dlNBOXlhOWFBUUt4TitRc2hSakJ2aWNIWmlOV1VaV2dMNFBWRDFjSWhaL2gzNjZRdjBMNTA5Vi9oSUhWeWwzZFZ4VjVVRkFqSlBHdGNZV0U1YUxWQkllcUdRYWNocVF5WDFVcG0rL1AwODdDaE9rcm5odUJXSHV5bjNYMWRLY2UzckNvQjR5bHBKR1NxdkczaExra0psMVkxOHdBbEdpbE43a2hkeU13WUlLWVczQTh5bFFtSkZvRUpidlBPS2dhdzcyNis2NkNPTUVueVhJaVk4bUhBU1czbmY0M1hMdW15czF3cmNWRnNnbHNCSlp2Q1YyTDlmLytmd3d4QkwzQ1Z6Uzl5UldVQ1RqM3llWVU5ZUJHaDhOWmQ0ZnRrdmtrRHJsdDloeFp5WElSV2NqRGwzMWVKc2tzaWo5Ny9lc1JHS0JsVmtDYkxnR2RYSUpDTHhLczViZ3ZjTFljR3BXMDQ2TERUbUc5QTZDb2R1ZlU3dXpkbDBTTjZFc0FwN0JaVm1KSGJJaWlNNzB3SE5Hd3Rnd2hXam9qTm0wdzFTNzZxSnQ3aWtLaE5zTGlBOG1oSC9MRFVkcTNvTW5MTDZtSVA0OVNEd3ZxYXdUNTAzQUF4OXhLT0llcDFBaFJwTnNiWVp1Tk4vd1BlY0VDT05ldFpBMGFhYXdtOTRzUFRqNjFzVXZCK1JDRE1WSlRjaEN5SGNpRDhMcERPY0l2eDVtWjdMQlRZTzJneVFrM2cycCszRVNTUzhhc05FMDZaJylcIn0se1wibmFtZVwiOlwi6L2u5pKtXCIsXCJwYXRoXCI6XCJ4VUlcIixcInJ1bGVcIjpcIi8qMjAyNDAyMTUgdmVyIDEuMFxcbndlYjpodHRwczovL2dpdGVlLmNvbS96ZXRhbHBoYS9oaWtlcnZpZXcvcmF3L21hc3Rlci9nbG9iYWwvanMveDV1aS5qc1xcbiovXFxuXFxuLyoqXFxuICog5Yik5pat5Lik5Liq5a+56LGh5piv5ZCm55u4562JXFxuICogQHBhcmFtIHtvYmplY3R9IHggLSDlr7nosaExXFxuICogQHBhcmFtIHtvYmplY3R9IHkgIC0g5a+56LGhMlxcbiAqIEBwYXJhbSB7YXJyYXl9IGV4Y2x1ZGVLZXlzICAtIOimgeaOkumZpOeahOmUrueahOaVsOe7hFxcbiAqIEByZXR1cm4ge2Jvb2xlYW59IOi/lOWbnuS4pOS4quWvueixoeaYr+WQpuebuOetiVxcbiAqL1xcbmZ1bmN0aW9uIGlzRXF1YWwoeCwgeSwgZXhjbHVkZUtleXMpIHtcXG4gICAgZXhjbHVkZUtleXMgPSBleGNsdWRlS2V5cyAhPSB1bmRlZmluZWQgPyBleGNsdWRlS2V5cyA6IFtdO1xcbiAgICBjb25zdCBvayA9IE9iamVjdC5rZXlzO1xcbiAgICBjb25zdCB0eCA9IHR5cGVvZiB4O1xcbiAgICBjb25zdCB0eSA9IHR5cGVvZiB5O1xcbiAgICBpZiAoeCAmJiB5ICYmIHR4ID09PSBcXFwib2JqZWN0XFxcIiAmJiB0eCA9PT0gdHkpIHtcXG4gICAgICBjb25zdCBrZXlzWCA9IG9rKHgpLmZpbHRlcihrZXkgPT4gIWV4Y2x1ZGVLZXlzLmluY2x1ZGVzKGtleSkpO1xcbiAgICAgIGNvbnN0IGtleXNZID0gb2soeSkuZmlsdGVyKGtleSA9PiAhZXhjbHVkZUtleXMuaW5jbHVkZXMoa2V5KSk7XFxuICAgICAgaWYgKGtleXNYLmxlbmd0aCAhPT0ga2V5c1kubGVuZ3RoKSB7XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBrZXlzWC5ldmVyeSgoa2V5KSA9PiBpc0VxdWFsKHhba2V5XSwgeVtrZXldLCBleGNsdWRlS2V5cykpO1xcbiAgICB9XFxuICAgIHJldHVybiB4ID09PSB5O1xcbiAgfVxcbiAgXFxuICAvL+m7mOiupFxcbiAgdmFyIHNjb25maWcgPSB7XFxuICAgIG5ld1c6IGZhbHNlLCAvL+aWsOeql+WPo+aJk+W8gFxcbiAgICBtYXJrOiBcXFwiI2ltbWVyc2l2ZVRoZW1lI1xcXCIsIC8v6ZO+5o6l5qCH6K+GXFxuICAgIC8vdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3A/cnVsZT1cXFwiICsgTVlfUlVMRS50aXRsZSArIFxcXCImdXJsPXt1cmx9XFxcIiwgLy/kvb/nlKjlrZDpobXpnaIge3VybH3kvJrmm7/mjaLnm67moIfpk77mjqVcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eS8jIyZ1cmw9e3VybH1cXFwiLCAvL+S9v+eUqOS6jOe6p1xcbiAgICBsb25nYzogZmFsc2UsIC8v5ZCv55So6ZW/5oyJXFxuICAgIHg1bGM6IHRydWUsIC8v5Zu+54mH6I+c5Y2VXFxuICAgIHg1aDogJzE5MCcsIC8veDXmtY/op4jlmajpq5jluqYgIOS4uuepuum7mOiupCAz5YiX5bCB6Z2i6buY6K6kMTkwXFxuICAgIHpvb206IGZhbHNlLFxcbiAgICBjdXN0b206IHRydWUsIC8v6Ieq5a6a5LmJIOWumuS5ieS4i+aWueWGheWuuVxcbiAgICAvKmltZ2g6IDE2NCwgLy/lm77niYfpq5jluqYgIFxcbiAgICBpbWd3OiAxMjMsIC8v5Zu+54mH5a695bqmKi9cXG4gICAgc3BlZWQ6IDUsIC8v6YCf5bqmXFxuICAgIGZpdDogJ2NvdmVyJywgLy9vYmplY3QtZml0IOagt+W8j1xcbiAgICBhdXRvcGxheTogdHJ1ZSwgLy/oh6rliqjmkq3mlL5cXG4gICAgc2hvdzogMywgLy/mmL7npLrmlbDph49cXG4gICAgc2Nyb2xsOiAxLCAvL+avj+asoea7keWKqOaVsOmHjyBcXG4gIH1cXG4gIC8vdmFyIHg1ZiA9ICdmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9Eb3dubG9hZC93ZWIvU2xpZGVYLmh0bWwnOyAvL+acrOWcsGh0bWzkvY3nva5cXG4gIHZhciB4NWYgPSAnaGlrZXI6Ly9maWxlcy9ydWxlcy96ZXRhbHBoYS9TbGlkZVguaHRtbCc7XFxuICB2YXIgeDV1aSA9ICdodHRwczovL2dpdGVlLmNvbS96ZXRhbHBoYS9oaWtlcnZpZXcvcmF3L21hc3Rlci9nbG9iYWwvanMveDV1aS5qcyc7IC8v6L+c56iLanPkvY3nva5cXG4gIFxcbiAgdmFyIHg1ZGVidWcgPSBmYWxzZTtcXG4gIHZhciB4NXBsdXNSdWxlPVxcXCJlbXB0eVxcXCI7XFxuICBcXG4gICQuZXh0ZW5kKHtcXG4gICAgR29TOiB7XFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoc24sIGtleSkge1xcbiAgICAgICAgcmV0dXJuIHN0b3JhZ2UwLmdldEl0ZW0oJ3Njb25maWcnLCBzZmlnKVtrZXldO1xcbiAgICAgIH0sXFxuICAgICAgc2F2ZTogZnVuY3Rpb24gKGNvZiwga2V5LCBpbnB1dCkge1xcbiAgICAgICAgdmFyIG8gPSBzdG9yYWdlMC5nZXRJdGVtKCdzY29uZmlnJywgY29mKTtcXG4gICAgICAgIG9ba2V5XSA9IGlucHV0O1xcbiAgICAgICAgc3RvcmFnZTAuc2V0SXRlbSgnc2NvbmZpZycsIG8pO1xcbiAgICAgIH1cXG4gICAgfSxcXG4gICAgZ2V0RGlzcGxheTogZnVuY3Rpb24gKCkge1xcbiAgICAgIGxldCBjb250ZXh0O1xcbiAgICAgIGlmICh0eXBlb2YgZ2V0Q3VycmVudEFjdGl2aXR5ID09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgIGNvbnRleHQgPSBnZXRDdXJyZW50QWN0aXZpdHkoKTtcXG4gICAgICB9IGVsc2Uge1xcbiAgICAgICAgY29udGV4dCA9IGNvbS5leGFtcGxlLmhpa2Vydmlldy51aS5BcHBsaWNhdGlvbigpLmdldENvbnRleHQoKTtcXG4gICAgICB9XFxuICAgICAgdmFyIGRtID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXREaXNwbGF5TWV0cmljcygpO1xcbiAgICAgIHJldHVybiBkbTtcXG4gICAgfSxcXG4gICAgZ2VPcmllbnRhdGlvbjogZnVuY3Rpb24gKCkge1xcbiAgICAgIGxldCBjb250ZXh0O1xcbiAgICAgIGlmICh0eXBlb2YgZ2V0Q3VycmVudEFjdGl2aXR5ID09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgIGNvbnRleHQgPSBnZXRDdXJyZW50QWN0aXZpdHkoKTtcXG4gICAgICB9IGVsc2Uge1xcbiAgICAgICAgY29udGV4dCA9IGNvbS5leGFtcGxlLmhpa2Vydmlldy51aS5BcHBsaWNhdGlvbigpLmdldENvbnRleHQoKTtcXG4gICAgICB9XFxuICAgICAgdmFyIG9yaWVudGF0aW9uID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRDb25maWd1cmF0aW9uKCkub3JpZW50YXRpb247XFxuICAgICAgcmV0dXJuIG9yaWVudGF0aW9uO1xcbiAgICB9LFxcbiAgICBnZXREZW5zaXR5OiBmdW5jdGlvbiAoZG0pIHtcXG4gICAgICBpZiAoZG0gIT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICBkbSA9IHRoaXMuZ2V0RGlzcGxheSgpO1xcbiAgICAgIH1cXG4gICAgICB2YXIgeiA9IGRtLmRlbnNpdHk7XFxuICAgICAgdmFyIGRwaXggPSAxO1xcbiAgICAgIHN3aXRjaCAoeikge1xcbiAgICAgICAgY2FzZSAxLjU6XFxuICAgICAgICAgIGRwaXggPSAyO1xcbiAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgMzpcXG4gICAgICAgICAgZHBpeCA9IDE7XFxuICAgICAgICAgIGJyZWFrO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gZHBpeDtcXG4gICAgfSxcXG4gICAgZ2V0Wm9vbTogZnVuY3Rpb24gKCkge1xcbiAgICAgIHZhciBkbSA9IHRoaXMuZ2V0RGlzcGxheSgpO1xcbiAgICAgIHZhciBvID0gdGhpcy5nZU9yaWVudGF0aW9uKCk7XFxuICAgICAgdmFyIHcgPSBkbS53aWR0aFBpeGVscztcXG4gICAgICB2YXIgaCA9IGRtLmhlaWdodFBpeGVscztcXG4gICAgICB2YXIgeiA9IGRtLmRlbnNpdHk7XFxuICAgICAgdmFyIHpvb20gPSAxO1xcbiAgICAgIHZhciBkcGkgPSBkbS5kZW5zaXR5RHBpOyAvL2RwaSAvLzNcXG4gICAgICB3ID0gdyAvIHo7XFxuICAgICAgaWYgKG8gPT0gMSkge1xcbiAgICAgICAgem9vbSA9IHcgLyBkcGk7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIGxvZygn5qiq5bGPJylcXG4gICAgICAgIHpvb20gPSB3IC8gZHBpO1xcbiAgICAgIH1cXG4gICAgICBpZiAoem9vbSA8IDEpIHtcXG4gICAgICAgIHpvb20gPSAxO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gem9vbS50b0ZpeGVkKDMpO1xcbiAgICB9LFxcbiAgICBzZGF0YToge1xcbiAgICAgIHNlbGY6IHNjb25maWcsXFxuICAgICAgbmFtZTogJ3NsaWNrX3Njb25maWcuanNvbicsXFxuICAgICAgZ2V0RmlsZTogZnVuY3Rpb24gKCkge1xcbiAgICAgICAgcmV0dXJuIGdldFBhdGgoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvJyArIHRoaXMubmFtZSk7XFxuICAgICAgfSxcXG4gICAgICBvbmZpbGU6IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgIGlmICghZmlsZUV4aXN0KHRoaXMubmFtZSkgfHwgcmVhZEZpbGUodGhpcy5uYW1lLCAwKSA9PSAnJykge1xcbiAgICAgICAgICB3cml0ZUZpbGUodGhpcy5uYW1lLCBKU09OLnN0cmluZ2lmeSh7fSkpO1xcbiAgICAgICAgfVxcbiAgICAgIH0sXFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoa2V5LCBwYXRoKSB7XFxuICAgICAgICB0aGlzLm9uZmlsZSgpO1xcbiAgICAgICAgdmFyIGRhdGEgPSB7fTtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKHJlYWRGaWxlKHRoaXMuZ2V0RmlsZSgpLCAwKSk7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoa2V5ID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICByZXR1cm4gZGF0YTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIGlmIChNWV9SVUxFLnRpdGxlID09ICfogZrpmIXiiJonKSB7XFxuICAgICAgICAgICAga2V5ID0gTVlfUlVMRS50aXRsZSArICctJyArIGtleTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHBhdGggIT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgIGlmIChkYXRhW2tleV0gPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgZGF0YVtrZXldID0ge307XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgcmV0dXJuIGRhdGFba2V5XVtwYXRoXSAhPSB1bmRlZmluZWQgPyBkYXRhW2tleV1bcGF0aF0gOiB7fTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHJldHVybiBkYXRhW2tleV0gIT0gdW5kZWZpbmVkID8gZGF0YVtrZXldIDoge307XFxuICAgICAgICB9XFxuICAgICAgfSxcXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBwYXRoKSB7XFxuICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiAodGhpcy5zZWxmW3BhdGhdKTtcXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xcbiAgICAgICAgICBjYXNlIFxcXCJzdHJpbmdcXFwiOlxcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICBjYXNlIFxcXCJudW1iZXJcXFwiOlxcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICBjYXNlIFxcXCJib29sZWFuXFxcIjpcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH1cXG4gIFxcbiAgICAgICAgdGhpcy5vbmZpbGUoKTtcXG4gICAgICAgIGlmIChNWV9SVUxFLnRpdGxlID09ICfogZrpmIXiiJonKSB7XFxuICAgICAgICAgIGtleSA9IE1ZX1JVTEUudGl0bGUgKyAnLScgKyBrZXk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ2V0KCk7XFxuICAgICAgICBpZiAoZGF0YVtrZXldID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICBkYXRhW2tleV0gPSB7fTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChwYXRoICE9IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICBkYXRhW2tleV1bcGF0aF0gPSB2YWx1ZTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xcbiAgICAgICAgfVxcbiAgXFxuICAgICAgICB3cml0ZUZpbGUodGhpcy5nZXRGaWxlKCksIEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpKTtcXG4gICAgICB9LFxcbiAgICB9LFxcbiAgICBpbWdzaXplOiBmdW5jdGlvbiAobnVtLCBzbikge1xcbiAgICAgIGxldCB4NSA9IDE5MDtcXG4gICAgICBzd2l0Y2ggKG51bSkge1xcbiAgICAgICAgY2FzZSAnMSc6XFxuICAgICAgICAgIHg1ID0gMjEwO1xcbiAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJzInOlxcbiAgICAgICAgICB4NSA9IDE0MDtcXG4gICAgICAgICAgYnJlYWs7XFxuICAgICAgICBjYXNlICczJzpcXG4gICAgICAgICAgeDUgPSAxOTA7XFxuICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgIC8vIGNvZGVcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIHg1O1xcbiAgICB9LFxcbiAgfSlcXG4gIFxcbiAgJC5leHBvcnRzLnNob3cgPSBmdW5jdGlvbiAoYXJyLGRhdGEsY2ZnLCBleHRyYXMpIHtcXG4gICAgdmFyIHg1Y2xlYXIgPSBmYWxzZTtcXG4gICAgZXh0cmFzID0gIWV4dHJhcyA/IHt9IDogZXh0cmFzO1xcbiAgICBPYmplY3QuZW50cmllcyhleHRyYXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xcbiAgICAgIC8vY29uc29sZS5sb2coa2V5KVxcbiAgICAgIC8vY29uc29sZS5sb2codmFsdWUpXFxuICAgICAgaWYoa2V5PT1cXFwieDVwbHVzUnVsZVxcXCIpe1xcbiAgICAgICAgZXZhbChrZXkgKyBcXFwiID0gXFxcIiskLnN0cmluZ2lmeSh2YWx1ZSkpO1xcbiAgICAgIH1lbHNle1xcbiAgICAgICAgZXZhbChrZXkgKyBcXFwiID0gJ1xcXCIgKyB2YWx1ZSsgXFxcIidcXFwiKTtcXG4gICAgICB9XFxuICAgIH0pO1xcbiAgICAvL+WPguaVsFxcbiAgICBjZmc9Y2ZnP2NmZzp7fTtcXG4gICAgbGV0IHNjZmc9Y2ZnO1xcbiAgXFxuICAgIHZhciBzbiA9IE1ZX1JVTEUudGl0bGU7XFxuICAgIGlmIChzbiA9PSBcXFwi6IGa6ZiF4oiaXFxcIikge1xcbiAgICAgIGNmZ1sndXJsJ10gPSBcXFwi6IGa6ZiFXFxcIjtcXG4gICAgICB2YXIgaW5mbyA9IHN0b3JhZ2UwLmdldE15VmFyKCfkuIDnuqfmupDmjqXlj6Pkv6Hmga8nKTtcXG4gICAgICBzbiA9IGluZm8ubmFtZTtcXG4gICAgICBpZiAodHlwZW9mIGNmZ1snc3R5cGUnXSA9PSAndW5kZWZpbmVkJykge1xcbiAgICAgICAgY2ZnWydzdHlwZSddID0gaW5mby50eXBlO1xcbiAgICAgICAgY2ZnWydzbmFtZSddID0gaW5mby5uYW1lO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgXFxuICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJTbGlkZV9jZmdcXFwiLCBjZmcpO1xcbiAgXFxuICAgIGlmIChNWV9SVUxFLnRpdGxlID09IFxcXCLogZrpmIXiiJpcXFwiKSB7XFxuICAgICAgaWYgKHg1Y2xlYXIpIHtcXG4gICAgICAgIHJlZnJlc2hYNVdlYlZpZXcoJ2Fib3V0OmJsYW5rJyk7XFxuICAgICAgfVxcbiAgICAgIGNsZWFySXRlbShcXFwic2NvbmZpZ1xcXCIpO1xcbiAgICB9XFxuICBcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcbiAgICAgIGlmICghZmlsZUV4aXN0KHg1ZikpIHtcXG4gICAgICAgIGFyci5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c21hbGw+6L2u5pKt57uE5Lu25bCa5pyq5a+85YWl4p2X77iP54K55oiR5a+85YWlPC9zbWFsbD4nLFxcbiAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICBldmFsKHJlcXVlc3QoJ2h0dHBzOi8vZ2l0ZWUuY29tL3pldGFscGhhL2hpa2Vydmlldy9yYXcvbWFzdGVyL2dsb2JhbC9WZXIuanMnKSk7XFxuICAgICAgICAgICAgY2hlY2tJbkZpbGVzKFtcXFwiU2xpZGVYLmh0bWxcXFwiXSk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgICB9IGVsc2Uge1xcbiAgICAgICAgdmFyIHMgPSAkLnNkYXRhLmdldChzbik7XFxuICAgICAgICAvL2xvZyhzKVxcbiAgICAgICAgc2NmZz1PYmplY3QuYXNzaWduKHt9LHMsc2NmZyk7XFxuICAgICAgICAvL2xvZyhzY2ZnKVxcbiAgXFxuICAgICAgICBpZiAoT2JqZWN0LmtleXMocykubGVuZ3RoID09PSAwKSB7XFxuICAgICAgICAgIC8vbG9nKCfnqbonKVxcbiAgICAgICAgICBjZmcgPSBPYmplY3QuYXNzaWduKHt9LCBzY29uZmlnLCBjZmcpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgLy9sb2coJ+mdnuepuicpXFxuICAgICAgICAgIGNmZyA9IE9iamVjdC5hc3NpZ24oe30sIGNmZywgcyk7XFxuICAgICAgICB9XFxuICBcXG4gICAgICAgIGlmICh4NWRlYnVnKSB7XFxuICAgICAgICAgIGxvZygnXFxcXG4nICsgSlNPTi5zdHJpbmdpZnkoY2ZnKSlcXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKGNmZylcXG4gICAgICAgIFxcbiAgXFxuICAgICAgICB2YXIgeDVoID0gJzE5MCYmbGlzdCc7XFxuICAgICAgICBpZiAoISFjZmcpIHtcXG4gICAgICAgICAgeDVoID0gY2ZnLng1aCA/IGNmZy54NWggKyAnJiZsaXN0JyA6IHg1aDtcXG4gICAgICAgIH1cXG4gIFxcbiAgICAgICAgYXJyLnB1c2goe1xcbiAgICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJyxcXG4gICAgICAgICAgdXJsOiBnZXRQYXRoKHg1ZiksXFxuICAgICAgICAgIGRlc2M6IHg1aCxcXG4gICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBjbHM6XFxcImVsZWxpc3RcXFwiLFxcbiAgICAgICAgICAgIGlkOlxcXCJ4NV9kYl9wb3N0ZXJcXFwiLFxcbiAgICAgICAgICAgIGltZ0xvbmdDbGljazogY2ZnLng1bGMsXFxuICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgICAgfVxcbiAgICBcXG4gICAgICBwdXRWYXIoXFxcInNsaWRlX3J1bGVcXFwiLCBNWV9SVUxFKTtcXG4gICAgICBwdXRWYXIoXFxcInNsaWRlX2RhdGFcXFwiLCBkYXRhKTtcXG4gICAgICBpZiAoIWlzRXF1YWwoc2NmZywgY2ZnKSkge1xcbiAgICAgICAgY2ZnID0gc2NmZztcXG4gICAgICAgICQuc2RhdGEuc2V0KHNuLCBjZmcpO1xcbiAgICAgIH1cXG4gICAgICBwdXRWYXIoXFxcInNsaWRlX2NmZ1xcXCIsIGNmZyk7XFxuICAgICAgcHV0VmFyKFxcXCJzbGlkZV91aVxcXCIsIHg1dWkpO1xcbiAgICAgIHB1dE15VmFyKFxcXCJzbGlkZV94NVxcXCIsIHg1Zik7XFxuICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcIng1X3BsdXNcXFwiLCB4NXBsdXNSdWxlKTtcXG4gICAgICBwdXRWYXIoXFxcInNsaWRlX2ZpbGVcXFwiLCAkLnNkYXRhLmdldEZpbGUoKSk7XFxuICAgIH1cXG4gIH1cXG4gIFxcbiAgdmFyIG1vZGUgPSBnZXRQYXJhbSgnbW9kZScpO1xcbiAgdmFyIGQgPSBbXTtcXG4gIFxcbiAgaWYgKG1vZGUgPT0gJ3NldCcpIHtcXG4gICAgc2V0UGFnZVRpdGxlKCfova7mkq3orr7nva4nKTtcXG4gICAgdmFyIHNuID0gTVlfUlVMRS50aXRsZTtcXG4gICAgaWYgKHNuID09IFxcXCLogZrpmIXiiJpcXFwiKSB7XFxuICAgICAgc24gPSBzdG9yYWdlMC5nZXRNeVZhcign5LiA57qn5rqQ5o6l5Y+j5L+h5oGvJykubmFtZVxcbiAgICB9XFxuICBcXG4gICAgYWRkTGlzdGVuZXIoXFxcIm9uQ2xvc2VcXFwiLFxcbiAgICAgICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgY2xlYXJWYXIoJ3NsaWRlX3NldCcpO1xcbiAgICAgICAgLy9jbGVhclZhcignc2xpZGVfY2ZnJyk7XFxuICAgICAgICBjbGVhclZhcignc2xpZGVfaGVpZ2h0Jyk7XFxuICAgICAgfSlcXG4gICAgKTtcXG4gICAgeDVmID0gZ2V0TXlWYXIoXFxcInNsaWRlX3g1XFxcIiwgeDVmKTtcXG4gIFxcbiAgICBwdXRWYXIoXFxcInNsaWRlX3NldFxcXCIsIFxcXCIxXFxcIik7XFxuICAgIC8vdmFyIHNmaWcgPSBzdG9yYWdlMC5nZXRJdGVtKCdzY29uZmlnJywgc2NvbmZpZyk7XFxuICAgIHZhciBzZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgc2NvbmZpZywgJC5zZGF0YS5nZXQoc24pKTtcXG4gICAgdmFyIHB4ID0gJC5nZXREaXNwbGF5KCk7XFxuICAgIC8vbG9nKHB4KVxcbiAgICB2YXIgem9vbSA9IDE7XFxuICAgIGlmIChzZmlnWyd6b29tJ10gIT0gJ25vbmUnKSB7XFxuICAgICAgem9vbSA9IHNmaWdbJ3pvb20nXTtcXG4gICAgfVxcbiAgXFxuICAgIGlmIChnZXRWYXIoJ3NsaWRlX2hlaWdodCcpICYmICFzZmlnWydjdXN0b20nXSkge1xcbiAgICAgIHNmaWdbJ3g1aCddID0gcGFyc2VJbnQoZ2V0VmFyKCdzbGlkZV9oZWlnaHQnLCAnMTUwJykpICsgKHNmaWdbJ25vdGl0bGUnXSA/IDEwIDogNDApO1xcbiAgICAgIGNsZWFyVmFyKCdzbGlkZV9oZWlnaHQnKTtcXG4gICAgfVxcbiAgXFxuICAgIHZhciBjID0gZ2V0VmFyKFxcXCJzbGlkZV9jZmdcXFwiKSB8fCBcXFwie31cXFwiO1xcbiAgICB2YXIgc2MgPSBPYmplY3QuYXNzaWduKHt9LCBKU09OLnBhcnNlKGMpLCBzZmlnKTtcXG4gICAgcHV0VmFyKFxcXCJzbGlkZV9jZmdcXFwiLCBzYyk7XFxuICBcXG4gICAgXFxuICAgIHZhciBsYXp5ID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobywgc24sIGspID0+IHtcXG4gICAgICBvID0gJC5zZGF0YS5nZXQoc24pO1xcbiAgICAgIGxldCB0OyB0ID0gb1trXSA9PT0gZmFsc2UgPyB0cnVlIDogZmFsc2U7XFxuICAgICAgJC5zZGF0YS5zZXQoc24sIHQsIGspO1xcbiAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgfSwgc2ZpZywgc24sICdhY3Rpb24nKVxcbiAgXFxuICAgIGZ1bmN0aW9uIFRvZihrZXkpIHtcXG4gICAgICB2YXIgYiA9ICQuc2RhdGEuZ2V0KHNuKVtrZXldO1xcbiAgICAgIGlmIChiID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgJC5zZGF0YS5zZXQoc24sIGZhbHNlLCBrZXkpO1xcbiAgICAgICAgYiA9IGZhbHNlO1xcbiAgICAgIH1cXG4gICAgICBpZiAoYiA9PSB0cnVlKSB7XFxuICAgICAgICByZXR1cm4gJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvNTUuc3ZnJztcXG4gICAgICB9XFxuICAgICAgaWYgKGIgPT0gZmFsc2UpIHtcXG4gICAgICAgIHJldHVybiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS82My5zdmcnO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgXFxuICAgIGQucHVzaCh7XFxuICAgICAgdGl0bGU6ICfpooTop4jnqpflj6MnLFxcbiAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICBkZXNjOihzZmlnWydzb3J0J118fFxcXCLpobrluo9cXFwiKSsnXFxcXHQnLFxcbiAgICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8va2UvMTU2LnBuZycsXFxuICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChzbik9PntcXG4gICAgICAgIGxldCBhbGxfY29scyA9IFsn6aG65bqPJywgJ+mAhuW6jycsICfkubHluo8nXTtcXG4gICAgICAgIHJldHVybiAkKGFsbF9jb2xzLCAxLCAn5pi+56S66aG65bqPJylcXG4gICAgICAgICAgLnNlbGVjdCgoc24pID0+IHtcXG4gICAgICAgICAgICAkLnNkYXRhLnNldChzbiwgaW5wdXQsICdzb3J0Jyk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgIH0sIHNuKVxcbiAgICAgIH0sc24pLFxcbiAgICAgIGV4dHJhOntcXG4gICAgICAgIExvbmdDbGljazogW3tcXG4gICAgICAgICAgdGl0bGU6ICfosIPor5U6Jysoc2ZpZ1tcXFwiZGVidWdcXFwiXXx8ZmFsc2U/XFxcIuW8gOWQr1xcXCI6XFxcIuWFs+mXrVxcXCIpLCBqczogJC50b1N0cmluZygobywgc24sIGspID0+IHtcXG4gICAgICAgICAgICBvID0gJC5zZGF0YS5nZXQoc24pO1xcbiAgICAgICAgICAgIGxldCB0OyB0ID0gb1trXSA9PT0gZmFsc2UgPyB0cnVlIDogZmFsc2U7XFxuICAgICAgICAgICAgJC5zZGF0YS5zZXQoc24sIHQsIGspO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICB9LHNmaWcsIHNuLCAnZGVidWcnKVxcbiAgICAgICAgfV1cXG4gICAgICB9XFxuICAgIH0se1xcbiAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnLFxcbiAgICAgIHVybDogZ2V0UGF0aCh4NWYpLFxcbiAgICAgIGRlc2M6IChzZmlnLng1aCkgKyAnJiZsaXN0JyxcXG4gICAgICBleHRyYToge1xcbiAgICAgICAgaW1nTG9uZ0NsaWNrOiBzZmlnLng1bGMsXFxuICAgICAgfVxcbiAgICB9LCAvKntcXG4gICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICBleHRyYToge1xcbiAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgIGhlaWdodDogLTEsXFxuICAgICAgICBoaWdobGlnaHQ6IHRydWUsXFxuICAgICAgICB0eXBlOiAndGV4dGFyZWEnLFxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBKU09OLnN0cmluZ2lmeShzZmlnLCBudWxsKSxcXG4gICAgICB9XFxuICAgIH0qLylcXG4gICAgbGV0IHBsdXNSdWxlPXN0b3JhZ2UwLmdldE15VmFyKFxcXCJ4NV9wbHVzXFxcIix4NXBsdXNSdWxlKTtcXG4gICAgLy9sb2cocGx1c1J1bGUpXFxuICAgIGlmKHBsdXNSdWxlIT1cXFwiZW1wdHlcXFwiKXtcXG4gICAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6J+WklumDqOiHquWumuS5ieiuvue9ricsXFxuICAgICAgICBjb2xfdHlwZTondGV4dF9pY29uJyxcXG4gICAgICAgIGltZzonaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9zeXN0ZW0vNzEucG5nJyxcXG4gICAgICAgIHVybDonaGlrZXI6Ly9lbXB5dCcsXFxuICAgICAgfSlcXG4gICAgICBldmFsKHBsdXNSdWxlKVxcbiAgICB9XFxuICAgIFxcbiAgXFxuICAgIC8vc2F2ZUZpbGUoXFxcInNsaWNrX3Njb25maWcuanNvblxcXCIsSlNPTi5zdHJpbmdpZnkoc2NvbmZpZyxudWxsLDIpLDApO1xcbiAgXFxuICAgIFxcbiAgICAvLyBkLnB1c2goe1xcbiAgICAvLyAgIHRpdGxlOiAn6LCD55So5bCP56iL5bqPJyxcXG4gICAgLy8gICBkZXNjOiAn6buY6K6kI2ltbWVyc2l2ZVRoZW1lIycsXFxuICAgIC8vICAgdXJsOiAkLnRvU3RyaW5nKChzbikgPT4ge1xcbiAgICAvLyAgICAgJC5zZGF0YS5zZXQoc24sIGlucHV0LCAndGl0bGUnKTtcXG4gICAgLy8gICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgLy8gICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgIC8vICAgfSwgc24pLFxcbiAgICAvLyAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAvLyAgIGV4dHJhOiB7XFxuICAgIC8vICAgICBkZWZhdWx0VmFsdWU6IHNmaWdbJ3RpdGxlJ10sXFxuICAgIC8vICAgfVxcbiAgICAvLyB9KVxcbiAgXFxuICAgIGQucHVzaCh7XFxuICAgICAgdGl0bGU6ICfnoa7orqTkv67mlLknLFxcbiAgICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vc3lzdGVtLzg0LnBuZycsXFxuICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIGJhY2sodHJ1ZSk7XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgIH0pLFxcbiAgICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF8zJyxcXG4gICAgfSlcXG4gIFxcbiAgICBkLnB1c2goe1xcbiAgICAgIHRpdGxlOiAn5oGi5aSN6buY6K6kJyxcXG4gICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL3N5c3RlbS84My5wbmcnLFxcbiAgICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF8zJyxcXG4gICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHNjLCBzbikgPT4ge1xcbiAgICAgICAgdmFyIHNzID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcIlNsaWRlX2NmZ1xcXCIsIHNjKTtcXG4gICAgICAgIHZhciB4NWg9c3NbJ3g1aCddO1xcbiAgICAgICAgaWYoeDVoPT1udWxsKXtcXG4gICAgICAgICAgeDVoPXNjWyd4NWgnXTtcXG4gICAgICAgIH1cXG4gICAgICAgIHNzID0gT2JqZWN0LmFzc2lnbih7fSwgc2MsIHNzLCB7ICd4NWgnOng1aCAgfSk7XFxuICAgICAgICBsb2coc3MpXFxuICAgICAgICAkLnNkYXRhLnNldChzbiwgc3MpO1xcbiAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgfSwgc2NvbmZpZywgc24pXFxuICAgIH0sIHtcXG4gICAgICB0aXRsZTogJ+ajgOafpeabtOaWsCcsXFxuICAgICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9zeXN0ZW0vODkucG5nJyxcXG4gICAgICBjb2xfdHlwZTogJ2ljb25fc21hbGxfMycsXFxuICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh4NXUpID0+IHtcXG4gICAgICAgIGlmICh4NXUuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgICAgIGRlbGV0ZUNhY2hlKHg1dSk7XFxuICAgICAgICAgIGV2YWwocmVxdWVzdCgnaHR0cHM6Ly9naXRlZS5jb20vemV0YWxwaGEvaGlrZXJ2aWV3L3Jhdy9tYXN0ZXIvZ2xvYmFsL1Zlci5qcycpKTtcXG4gICAgICAgICAgVXBkYXRhKFtcXFwiU2xpZGVYLmh0bWxcXFwiXSwgdHJ1ZSk7XFxuICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICB0b2FzdCgn5b2T5YmN5piv6LCD6K+V5qih5byPJyk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgIH0sIGdldFZhcihcXFwic2xpZGVfdWlcXFwiKSlcXG4gICAgfSlcXG4gIFxcbiAgICBpZiAoTVlfUlVMRS50aXRsZSAhPSBcXFwi6IGa6ZiF4oiaXFxcIikge1xcbiAgICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+aWsOeql+WPo+aJk+W8gCcsXFxuICAgICAgICB1cmw6IGxhenkucmVwbGFjZSgnYWN0aW9uJywgJ25ld1cnKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9pY29uXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgcGljX3VybDogVG9mKCduZXdXJyksXFxuICAgICAgfSk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgJC5zZGF0YS5zZXQoc24sIGZhbHNlLCAnbmV3VycpO1xcbiAgICB9XFxuICBcXG4gIFxcbiAgICBkLnB1c2goe1xcbiAgICAgIHRpdGxlOiAn5ZCv55So6ZW/5oyJJyxcXG4gICAgICB1cmw6IGxhenkucmVwbGFjZSgnYWN0aW9uJywgJ2xvbmdjJyksXFxuICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2ljb25cXFwiLFxcbiAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgIHBpY191cmw6IFRvZignbG9uZ2MnKSxcXG4gICAgfSwge1xcbiAgICAgIHRpdGxlOiAn5Zu+54mH6I+c5Y2VJyxcXG4gICAgICB1cmw6IGxhenkucmVwbGFjZSgnYWN0aW9uJywgJ3g1bGMnKSxcXG4gICAgICBjb2xfdHlwZTogXFxcInRleHRfaWNvblxcXCIsXFxuICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgcGljX3VybDogVG9mKCd4NWxjJyksXFxuICAgIH0sIHtcXG4gICAgICB0aXRsZTogJ+a7keWKqOaMh+ekuicsXFxuICAgICAgdXJsOiBsYXp5LnJlcGxhY2UoJ2FjdGlvbicsICdkb3RzJyksXFxuICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2ljb25cXFwiLFxcbiAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgIHBpY191cmw6IFRvZignZG90cycpLFxcbiAgICB9LCB7XFxuICAgICAgdGl0bGU6ICfml6DmoIfpopgnLFxcbiAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobywgc24sIGspID0+IHtcXG4gICAgICAgIG8gPSAkLnNkYXRhLmdldChzbik7XFxuICAgICAgICBsZXQgdDtcXG4gICAgICAgIGxldCB4NTtcXG4gICAgICAgIGlmIChvW2tdID09PSBmYWxzZSkge1xcbiAgICAgICAgICB4NSA9IHBhcnNlSW50KG9bJ3g1aCddKSAtIDMwO1xcbiAgICAgICAgICB0ID0gdHJ1ZTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChvW2tdID09PSB0cnVlKSB7XFxuICAgICAgICAgIHg1ID0gcGFyc2VJbnQob1sneDVoJ10pICsgMzA7XFxuICAgICAgICAgIHQgPSBmYWxzZTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKCfmlrA6Jyt4NSk7XFxuICAgICAgICAkLnNkYXRhLnNldChzbiwgeDUsICd4NWgnKTtcXG4gICAgICAgICQuc2RhdGEuc2V0KHNuLCB0LCBrKTtcXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICB9LCBzZmlnLCBzbiwgJ25vdGl0bGUnKSxcXG4gICAgICBjb2xfdHlwZTogXFxcInRleHRfaWNvblxcXCIsXFxuICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgcGljX3VybDogVG9mKCdub3RpdGxlJyksXFxuICAgIH0sIHtcXG4gICAgICB0aXRsZTogJ+iHquWKqOe8qeaUvicsXFxuICAgICAgdXJsOiBsYXp5LnJlcGxhY2UoJ2FjdGlvbicsICd6b29tJyksXFxuICAgICAgcGljX3VybDogVG9mKCd6b29tJyksXFxuICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nLFxcbiAgICB9KTtcXG4gIFxcbiAgICBkLnB1c2goe1xcbiAgICAgIHRpdGxlOiAn6ZO+5o6l5qCH6K+GJyxcXG4gICAgICBkZXNjOiAn6buY6K6kI2ltbWVyc2l2ZVRoZW1lIycsXFxuICAgICAgdXJsOiAkLnRvU3RyaW5nKChzbikgPT4ge1xcbiAgICAgICAgbGV0IGFsbF9jb2xzID0gWycnLCAnI2Z1bGxUaGVtZSMnLCAnI2dhbWVUaGVtZSMnLCAnI2ltbWVyc2l2ZVRoZW1lIyddO1xcbiAgICAgICAgYWxsX2NvbHMudW5zaGlmdChpbnB1dCk7XFxuICAgICAgICByZXR1cm4gJChhbGxfY29scywgMSwgJ+mTvuaOpeagh+ivhicpXFxuICAgICAgICAgIC5zZWxlY3QoKHNuKSA9PiB7XFxuICAgICAgICAgICAgJC5zZGF0YS5zZXQoc24sIGlucHV0LCAnbWFyaycpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICB9LCBzbilcXG4gICAgICB9LCBzbiksXFxuICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgZXh0cmE6IHtcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogc2ZpZ1snbWFyayddLFxcbiAgICAgIH1cXG4gICAgfSlcXG4gIFxcbiAgICBkLnB1c2goe1xcbiAgICAgIHRpdGxlOiAn6ZO+5o6lJyxcXG4gICAgICB1cmw6ICQudG9TdHJpbmcoKHNuKSA9PiB7XFxuICAgICAgICBsZXQgYWxsX2NvbHMgPSBbXFxcIuiBmumYhVxcXCIsIFxcXCJoaWtlcjovL3BhZ2UvZXI/cnVsZT1cXFwiICsgTVlfUlVMRS50aXRsZSArIFxcXCImdXJsPXt1cmx9XFxcIiwgXFxcImhpa2VyOi8vZW1wdHk/JnVybD17dXJsfVxcXCIsXFxcImhpa2VyOi8vZW1wdHkjI3t1cmx9XFxcIixcXFwie3VybH1cXFwiXTtcXG4gICAgICAgIGFsbF9jb2xzLnVuc2hpZnQoaW5wdXQpXFxuICAgICAgICByZXR1cm4gJChhbGxfY29scywgMSwgJ3t1cmx95Lya5pu/5o2i55uu5qCH6ZO+5o6lJylcXG4gICAgICAgICAgLnNlbGVjdCgoc24pID0+IHtcXG4gICAgICAgICAgICAkLnNkYXRhLnNldChzbiwgaW5wdXQsICd1cmwnKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICB9LCBzbilcXG4gICAgICB9LCBzbiksXFxuICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgZXh0cmE6IHtcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogc2ZpZ1sndXJsJ10sXFxuICAgICAgICB0eXBlOiAndGV4dGFyZWEnLFxcbiAgICAgICAgaGVpZ2h0OiAtMVxcbiAgICAgIH1cXG4gICAgfSlcXG4gICAgaWYgKHNmaWcubG9uZ2MpIHtcXG4gICAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfplb/mjInpk77mjqUnLFxcbiAgICAgICAgZGVzYzogJ+m7mOiupOepuu+8jOWvueW6lOS8oOWFpeWvueixoeeahGx1cmwnLFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKChzbikgPT4ge1xcbiAgICAgICAgICBsZXQgYWxsX2NvbHMgPSBbXFxcImhpa2VyOi8vcGFnZS9lcj9ydWxlPVxcXCIgKyBNWV9SVUxFLnRpdGxlICsgXFxcIiZ1cmw9e3VybH1cXFwiLCBcXFwiaGlrZXI6Ly9lbXB0eT8mdXJsPXt1cmx9XFxcIiwgXFxcImhpa2VyOi8vZW1wdHkjI3t1cmx9XFxcIiwgXFxcInt1cmx9XFxcIl07XFxuICAgICAgICAgIGFsbF9jb2xzLnVuc2hpZnQoaW5wdXQpXFxuICAgICAgICAgIHJldHVybiAkKGFsbF9jb2xzLCAxLCAne3VybH3kvJrmm7/mjaLnm67moIfpk77mjqUnKVxcbiAgICAgICAgICAgIC5zZWxlY3QoKHNuKSA9PiB7XFxuICAgICAgICAgICAgICAkLnNkYXRhLnNldChzbiwgaW5wdXQsICdsdXJsJyk7XFxuICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSwgc24pXFxuICAgICAgICB9LCBzbiksXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogc2ZpZ1snbHVybCddLFxcbiAgICAgICAgICB0eXBlOiAndGV4dGFyZWEnLFxcbiAgICAgICAgICBoZWlnaHQ6IC0xXFxuICAgICAgICB9XFxuICAgICAgfSlcXG4gICAgfVxcbiAgXFxuICAgIGlmIChzZmlnLmN1c3RvbSkge1xcbiAgICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ3g16auY5bqmJyxcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgZGVzYzogJ+m7mOiupDE5MCcsXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKHNuLCB6b29tKSA9PiB7XFxuICAgICAgICAgIGlmICh6b29tID09ICdhdXRvJykge1xcbiAgICAgICAgICAgIHZhciBweCA9ICQuZ2V0RGlzcGxheSgpO1xcbiAgICAgICAgICAgIHpvb20gPSBweC53aWR0aFBpeGVscyAvIHB4LmRlbnNpdHkgLyAzODQ7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgbGV0IGFsbF9jb2xzID0gWzE0MCwgMTkwLCAyMTBdO1xcbiAgICAgICAgICBhbGxfY29scy51bnNoaWZ0KE51bWJlcihpbnB1dCkpO1xcbiAgICAgICAgICByZXR1cm4gJChhbGxfY29scywgMSwgJ+m7mOiupDE5MCcpXFxuICAgICAgICAgICAgLnNlbGVjdCgoc24pID0+IHtcXG4gICAgICAgICAgICAgICQuc2RhdGEuc2V0KHNuLCBpbnB1dCwgJ3g1aCcpXFxuICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSwgc24pXFxuICAgICAgICB9LCBzbiwgem9vbSksXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICBvbkNoYW5nZTogJC50b1N0cmluZygoc24pID0+IHtcXG4gICAgICAgICAgICAkLnNkYXRhLnNldChzbiwgaW5wdXQsICd4NWgnKTtcXG4gICAgICAgICAgfSwgc24pLFxcbiAgICAgICAgICBkZWZhdWx0VmFsdWU6ICQuc2RhdGEuZ2V0KHNuKVsneDVoJ10gPT0gdW5kZWZpbmVkID8gMTkwIDogc2ZpZ1tcXFwieDVoXFxcIl0sXFxuICAgICAgICAgIHR5cGU6ICdudW1iZXInXFxuICAgICAgICB9XFxuICAgICAgfSlcXG4gICAgfVxcbiAgXFxuICAgIGQucHVzaCh7XFxuICAgICAgdGl0bGU6ICfoh6rlrprkuYknLFxcbiAgICAgIHVybDogbGF6eS5yZXBsYWNlKCdhY3Rpb24nLCAnY3VzdG9tJyksXFxuICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2ljb25cXFwiLFxcbiAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgIHBpY191cmw6IFRvZignY3VzdG9tJyksXFxuICAgIH0pO1xcbiAgXFxuICAgIGlmIChzZmlnWydjdXN0b20nXSA9PSB0cnVlKSB7XFxuICAgICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn6Ieq5Yqo5pKt5pS+JyxcXG4gICAgICAgIHVybDogbGF6eS5yZXBsYWNlKCdhY3Rpb24nLCAnYXV0b3BsYXknKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9pY29uXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgcGljX3VybDogVG9mKCdhdXRvcGxheScpLFxcbiAgICAgIH0pO1xcbiAgICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ29iamVjdC1maXTmoLflvI8nLFxcbiAgICAgICAgZGVzYzogJ+m7mOiupGNvdmVyJyxcXG4gICAgICAgIHVybDogJC50b1N0cmluZygoc24pID0+IHtcXG4gICAgICAgICAgbGV0IGFsbF9jb2xzID0gW1xcXCJcXFwiLCBcXFwiZmlsbFxcXCIsIFxcXCJjb3RhaW5cXFwiLCBcXFwiY292ZXJcXFwiLCBcXFwibm9uZVxcXCIsIFxcXCJzY2FsZS1kb3duXFxcIiwgXFxcImluaXRpYWxcXFwiLCBcXFwiaW5oZXJpdFxcXCJdO1xcbiAgICAgICAgICBhbGxfY29scy51bnNoaWZ0KGlucHV0KTtcXG4gICAgICAgICAgcmV0dXJuICQoYWxsX2NvbHMsIDEsICfpu5jorqRjb3ZlcicpXFxuICAgICAgICAgICAgLnNlbGVjdCgoc24pID0+IHtcXG4gICAgICAgICAgICAgICQuc2RhdGEuc2V0KHNuLCBpbnB1dCwgJ2ZpdCcpO1xcbiAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sIHNuKVxcbiAgICAgICAgfSwgc24pLFxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICBkZWZhdWx0VmFsdWU6IHNmaWdbJ2ZpdCddLFxcbiAgICAgICAgICB0eXBlOiAndGV4dGFyZWEnLFxcbiAgICAgICAgICBoZWlnaHQ6IC0xXFxuICAgICAgICB9XFxuICAgICAgfSwge1xcbiAgICAgICAgdGl0bGU6ICfmkq3mlL7pgJ/luqYnLFxcbiAgICAgICAgZGVzYzogJ+WNleS9jeenkicsXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgIHVybDogJC50b1N0cmluZygoc24pID0+IHtcXG4gICAgICAgICAgJC5zZGF0YS5zZXQoc24sIGlucHV0LCAnc3BlZWQnKTtcXG4gICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICB9LCBzbiksXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICBvbkNoYW5nZTogJC50b1N0cmluZygoc24pID0+IHtcXG4gICAgICAgICAgICB2YXIgc3AgPSBOdW1iZXIoaW5wdXQpO1xcbiAgICAgICAgICAgIGlmIChzcCA+IDApIHtcXG4gICAgICAgICAgICAgICQuc2RhdGEuc2V0KHNuLCBzcCwgJ3NwZWVkJyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9LCBzbiksXFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogc2ZpZ1snc3BlZWQnXSxcXG4gICAgICAgICAgdHlwZTogJ251bWJlcidcXG4gICAgICAgIH1cXG4gICAgICB9KVxcbiAgXFxuICAgICAgLypkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTogJ+WbvueJh+mrmOW6picsXFxuICAgICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgICBkZXNjOiAn6buY6K6kMTY0JyxcXG4gICAgICAgICAgdXJsOiAkLnRvU3RyaW5nKChjb2YpID0+IHtcXG4gICAgICAgICAgICAgICQuR29TLnNhdmUoY29mLCAnaW1naCcsIE51bWJlcihpbnB1dCkpO1xcbiAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICB9LCBzdG9yYWdlMC5nZXRJdGVtKCdzY29uZmlnJywgc2ZpZykpLFxcbiAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiAkLkdvUy5nZXQoJ2ltZ2gnKSA9PSB1bmRlZmluZWQgPyAxNjQgOiAkLkdvUy5nZXQoJ2ltZ2gnKSxcXG4gICAgICAgICAgICAgIHR5cGU6ICdudW1iZXInXFxuICAgICAgICAgIH1cXG4gICAgICB9KSovXFxuICBcXG4gICAgICAvKmQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOiAn5Zu+54mH5a695bqmJyxcXG4gICAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICAgIGRlc2M6ICfpu5jorqQxMjMnLFxcbiAgICAgICAgICB1cmw6ICQudG9TdHJpbmcoKGNvZikgPT4ge1xcbiAgICAgICAgICAgICAgJC5Hb1Muc2F2ZShjb2YsICdpbWd3JywgTnVtYmVyKGlucHV0KSk7XFxuICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgIH0sIHN0b3JhZ2UwLmdldEl0ZW0oJ3Njb25maWcnLCBzZmlnKSksXFxuICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6ICQuR29TLmdldCgnaW1ndycpID09IHVuZGVmaW5lZCA/IDEyMyA6ICQuR29TLmdldCgnaW1ndycpLFxcbiAgICAgICAgICAgICAgdHlwZTogJ251bWJlcidcXG4gICAgICAgICAgfVxcbiAgICAgIH0pKi9cXG4gIFxcbiAgICAgIHZhciBzdyA9IHNmaWdbJ3Nob3cnXTtcXG4gICAgICBpZiAoc3cgPT0gJzAnIHx8IHN3ID09IHVuZGVmaW5lZCB8fCBzdyA9PSAwKSB7XFxuICAgICAgICBzdyA9IDE7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHN3ID0gc2ZpZ1snc2hvdyddO1xcbiAgICAgIH1cXG4gIFxcbiAgICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+aYvuekuuaVsOmHjycsXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgIGRlc2M6ICfpu5jorqQzJyxcXG4gICAgICAgIHVybDogJC50b1N0cmluZygoc24pID0+IHtcXG4gICAgICAgICAgbGV0IGFsbF9jb2xzID0gWzEsIDIsIDNdO1xcbiAgICAgICAgICBhbGxfY29scy51bnNoaWZ0KGlucHV0KTtcXG4gICAgICAgICAgcmV0dXJuICQoYWxsX2NvbHMsIDEsICfpu5jorqQzJylcXG4gICAgICAgICAgICAuc2VsZWN0KChzbikgPT4ge1xcbiAgICAgICAgICAgICAgJC5zZGF0YS5zZXQoc24sIGlucHV0LCAnc2hvdycpO1xcbiAgICAgICAgICAgICAgaWYgKE51bWJlcihpbnB1dCkgPD0gMykge1xcbiAgICAgICAgICAgICAgICAkLnNkYXRhLnNldChzbiwgaW5wdXQsICdzY3JvbGwnKTtcXG4gICAgICAgICAgICAgICAgdmFyIHMgPSAkLmltZ3NpemUoaW5wdXQsIHNuKTtcXG4gICAgICAgICAgICAgICAgbG9nKHMpO1xcbiAgICAgICAgICAgICAgICAkLnNkYXRhLnNldChzbiwgcywgJ3g1aCcpO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LCBzbilcXG4gICAgICAgIH0sIHNuKSxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKChzbikgPT4ge1xcbiAgICAgICAgICAgICQuc2RhdGEuc2V0KHNuLCBpbnB1dCwgJ3Nob3cnKTtcXG4gICAgICAgICAgfSwgc24pLFxcbiAgICAgICAgICBkZWZhdWx0VmFsdWU6IHN3LFxcbiAgICAgICAgICB0eXBlOiAnbnVtYmVyJ1xcbiAgICAgICAgfVxcbiAgICAgIH0pXFxuICBcXG4gICAgICB2YXIgc2wgPSBzZmlnWydzY3JvbGwnXTtcXG4gICAgICBpZiAoc2wgPT0gJzAnIHx8IHNsID09IHVuZGVmaW5lZCB8fCBzbCA9PSAwKSB7XFxuICAgICAgICBzbCA9IDE7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHNsID0gc2ZpZ1snc2Nyb2xsJ107XFxuICAgICAgfVxcbiAgXFxuICAgICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn5ruR5Yqo5pWw6YePJyxcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgZGVzYzogJ+m7mOiupDMnLFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKChzbikgPT4ge1xcbiAgICAgICAgICAkLnNkYXRhLnNldChzbiwgaW5wdXQsICdzY3JvbGwnKTtcXG4gICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICB9LCBzbiksXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICBkZWZhdWx0VmFsdWU6IHNsLFxcbiAgICAgICAgICB0eXBlOiAnbnVtYmVyJ1xcbiAgICAgICAgfVxcbiAgICAgIH0pXFxuICAgIH1cXG4gICAgc2V0UmVzdWx0KGQpO1xcbiAgfVxcblwifSx7XCJuYW1lXCI6XCLliIbnsbtcIixcInBhdGhcIjpcIm1vdmllU2hvd1wiLFwicnVsZVwiOlwianM6XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgY2xlYXJNeVZhcignY2F0Jyk7XFxuICAgIGNsZWFyTXlWYXIoJ2FyZWEnKTtcXG4gICAgY2xlYXJNeVZhcigneWVhcicpO1xcbiAgICBjbGVhck15VmFyKCdyYW5rJyk7XFxufSkpXFxudmFyIGQgPSBbXTtcXG4vLyBodHRwczovL3d3dy5kYW5tdWR5LmNvbS90di5odG1sP2NhdD3oqIDmg4UmYXJlYT3lhoXlnLAmeWVhcj0yMDI1JmFjdD0mcmFuaz1yYW5raG90JnBhZ2Vubz1cXG52YXIgZG9tYWluID0gSlNPTi5wYXJzZShyZXF1ZXN0KGdldE15VmFyKCdzZXR0aW5nRmlsZScpKSkuZG9tYWluO1xcbmxpbmsgPSBgJHtNWV9QQVJBTVMudXJsLnJlcGxhY2UoJz9wYWdlPWZ5cGFnZSYjZ2FtZVRoZW1lIycsICcnKX0/Y2F0PSR7Z2V0TXlWYXIoJ2NhdCcsICcnKX0mYXJlYT0ke2dldE15VmFyKCdhcmVhJywgJycpfSZ5ZWFyPSR7Z2V0TXlWYXIoJ3llYXInLCAnJyl9JmFjdD0mcmFuaz0ke2dldE15VmFyKCdyYW5rJyksJyd9JnBhZ2Vubz0ke01ZX1BBR0V9YDtcXG5sb2coJ+W9k+WJjemTvuaOpe+8micrbGluayk7XFxuaHRtbENvZGUgPSBmZXRjaChsaW5rKTtcXG5jYXRMaXN0ID0gcGRmYShodG1sQ29kZSwgJyNtb3ZpZS1jYXQmJm9wdGlvbicpLnNsaWNlKDIpO1xcbmFyZWFMaXN0ID0gcGRmYShodG1sQ29kZSwgJyNtb3ZpZS1hcmVhJiZvcHRpb24nKS5zbGljZSgyKTtcXG5yYW5rTGlzdCA9IHBkZmEoaHRtbENvZGUsICcuYW0tY29udGFpbmVyLDEmJmxpW2lkXj1yYW5rXScpO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgY2F0TGlzdC5mb3JFYWNoKHIgPT4ge1xcbiAgICAgICAgY2F0ID0gcGRmaChyLCAnb3B0aW9uJiZ2YWx1ZScpO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogY2F0ID09PSBnZXRNeVZhcignY2F0JywgJycpID8gYOKAnOKAnOKAneKAnTxzdHJvbmc+JHtjYXR9PC9zdHJvbmc+LmJpZygpYCA6IGNhdCxcXG4gICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoY2F0KSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCdjYXQnLCBjYXQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5YiH5o2i5oiQ5YqfJztcXG4gICAgICAgICAgICB9LCBjYXQpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgIH0pXFxuICAgIH0pXFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgIH0pXFxuICAgIGFyZWFMaXN0LmZvckVhY2gociA9PiB7XFxuICAgICAgICBhcmVhID0gcGRmaChyLCAnb3B0aW9uJiZ2YWx1ZScpO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogYXJlYSA9PT0gZ2V0TXlWYXIoJ2FyZWEnLCAnJykgPyBg4oCc4oCc4oCd4oCdPHN0cm9uZz4ke2FyZWF9PC9zdHJvbmc+LmJpZygpYCA6IGFyZWEsXFxuICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKGFyZWEpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2FyZWEnLCBhcmVhKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WIh+aNouaIkOWKnyc7XFxuICAgICAgICAgICAgfSwgYXJlYSksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgfSlcXG4gICAgfSlcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgfSlcXG4gICAgLy8g55Sf5oiQ5bm05Lu95pWw57uEXFxuICAgIGNvbnN0IGN1cnJlbnRZZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xcbiAgICBjb25zdCB5ZWFyQXJyYXkgPSBbXTtcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MTsgaSsrKSB7XFxuICAgICAgICBsZXQgeWVhciA9IGN1cnJlbnRZZWFyIC0gaTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHllYXIgPT09IGdldE15VmFyKCd5ZWFyJywgY3VycmVudFllYXIgKyAnJykgPyBg4oCc4oCc4oCd4oCdPHN0cm9uZz4ke3llYXJ9PC9zdHJvbmc+LmJpZygpYCA6IHllYXIgKyAnJyxcXG4gICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoeWVhcikgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcigneWVhcicsIHllYXIgKyAnJyk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/liIfmjaLmiJDlip8nO1xcbiAgICAgICAgICAgIH0sIHllYXIpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgIH0pXFxuICAgIHJhbmtMaXN0LmZvckVhY2gociA9PiB7XFxuICAgICAgICByYW5rVGV4dCA9IHBkZmgociwgJ2EmJlRleHQnKTtcXG4gICAgICAgIHJhbmsgPSBwZGZoKHIsICdsaSYmaWQnKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHJhbmsgPT09IGdldE15VmFyKCdyYW5rJywgJycpID8gYOKAnOKAnOKAneKAnTxzdHJvbmc+JHtyYW5rVGV4dH08L3N0cm9uZz4uYmlnKClgIDogcmFua1RleHQsXFxuICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKHJhbmspID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3JhbmsnLCByYW5rKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WIh+aNouaIkOWKnyc7XFxuICAgICAgICAgICAgfSwgcmFuayksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgfSlcXG4gICAgfSlcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG4gICAgfSlcXG59XFxuLy8g5pWw5o2u5bGV56S6XFxucGRmYShodG1sQ29kZSwgJy5tb3ZpZS1saXN0cyYmbGknKS5mb3JFYWNoKHIgPT4ge1xcbiAgICB0aXRsZSA9IHBkZmgociwgJy5tb3ZpZS10aXRsZSYmLm1vdmllLW5hbWUmJlRleHQnKTtcXG4gICAgZGVzYyA9IHBkZmgociwgJy5tb3ZpZS10aXRsZSYmLm1vdmllLXRhZ3MmJlRleHQnKTtcXG4gICAgaW1nID0gJ2h0dHBzOicgKyBwZGZoKHIsICdpbWcmJmRhdGEtb3JpZ2luYWwnKTtcXG4gICAgdXJsID0gcGRmaChyLCAnYSYmaHJlZicpO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgZGVzYzogZGVzYyxcXG4gICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL2Vyamk/cnVsZT3psqjpsbwuY3knLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgdXJsOiBwZGZoKHIsICdhJiZocmVmJykgKyAnI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgIH0sXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzNfbWFycXVlZSdcXG4gICAgfSk7XFxufSlcXG5zZXRSZXN1bHQoZCk7XFxuXCJ9LHtcIm5hbWVcIjpcIuWFrOeUqOWHveaVsFwiLFwicGF0aFwiOlwiZnVuc1wiLFwicnVsZVwiOlwiLy8g6ZqP5py6aHRtbOminOiJsuagt+W8j+eUn+aIkOWtl+espuS4suWMheijuVxcbiQuZXhwb3J0cy5yYW5kb21Db2xvciA9ICgpID0+IHtcXG4gICAgbGV0IGNvbG9yID0gJyMnO1xcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xcbiAgICAgICAgY29sb3IgKz0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTYpLnRvU3RyaW5nKDE2KTtcXG4gICAgfVxcbiAgICByZXR1cm4gY29sb3I7XFxufVxcbi8vIOiOt+WPlue6v+i3r+agh+etvumbhuaVsOWIl+ihqCjnvJPlrZgpXFxuJC5leHBvcnRzLmdldExpc3RzID0gKGxpbmssIHRhYklkKSA9PiB7XFxuICAgIGxpbms9bGluay5yZXBsYWNlKCcjaW1tZXJzaXZlVGhlbWUjJywnJyk7XFxuICAgIHR5cGVJbmZvPWxpbmsuc3BsaXQoJ3BsYXkvJylbMV0uc3BsaXQoJy4nKVswXS5zcGxpdCgnLycpO1xcbiAgICBtb3ZpZVR5cGU9e1xcbiAgICAgICAgbmFtZTp0eXBlSW5mb1swXSxcXG4gICAgICAgIHZhbHVlOnR5cGVJbmZvWzFdXFxuICAgIH1cXG4gICAgdGFnID0gYCR7bW92aWVUeXBlLm5hbWV9XyR7bW92aWVUeXBlLnZhbHVlfV8ke3RhYklkfWA7XFxuICAgIGxpc3Q9c3RvcmFnZTAuZ2V0TXlWYXIodGFnLCBbXSk7XFxuICAgIGlmIChsaXN0Lmxlbmd0aCA9PSAwKSB7IC8vIOe8k+WtmOagh+etvuWIl+ihqFxcbiAgICAgICAgbHMgPSBgJHtsaW5rfT8ke21vdmllVHlwZS5uYW1lfT0ke21vdmllVHlwZS52YWx1ZX0mJHttb3ZpZVR5cGUubmFtZSA9PSAndmFpZCcgPyAneWVhcicgOiAnc2l0ZSd9PSR7dGFiSWR9YDtcXG4gICAgICAgIGxvZyhscyk7XFxuICAgICAgICB2YXIgbHNodG1sID0gcmVxdWVzdChscyk7XFxuICAgICAgICB2YXIgYnV0dG9ucyA9IHBkZmEobHNodG1sLCAnYm9keSYmYnV0dG9uJyk7IC8vIOino+aekOaSreaUvuWIl+ihqFxcbiAgICAgICAgZGF0YSA9IGJ1dHRvbnMubWFwKHIgPT4ge1xcbiAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKHIsICdidXR0b24mJmRhdGEtbmFtZScpLFxcbiAgICAgICAgICAgICAgICB1cmw6IHBkZmgociwgJ2J1dHRvbiYmZGF0YS11cmwnKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcih0YWcsZGF0YSk7XFxuICAgICAgICByZXR1cm4gZGF0YTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGxvZygn5L2/55So57yT5a2Y5pWw5o2uJyk7XFxuICAgICAgICByZXR1cm4gbGlzdDtcXG4gICAgfVxcbn1cXG5cIn1dIiwiaWNvbiI6Imh0dHBzOi8vY2RuMi5pY29uZmluZGVyLmNvbS9kYXRhL2ljb25zL2JlYWNoLXN1bW1lci81MDAvc2hhcmstMTI4LnBuZyIsInByb3h5IjoiIn0=
Add Comment
Please, Sign In to add comment